Coupler

using CircuitSim

circ = Circuit()

port1 = ACPowerSource("P1", port_num=1, impedance=50.0)
port2 = ACPowerSource("P2", port_num=2, impedance=50.0)
port3 = ACPowerSource("P3", port_num=3, impedance=50.0)
port4 = ACPowerSource("P4", port_num=4, impedance=50.0)
add_component!(circ, port1)
add_component!(circ, port2)
add_component!(circ, port3)
add_component!(circ, port4)

CPL = Coupler("CPL1", coupling=3.0)
add_component!(circ, CPL)

gnd = Ground("GND")
add_component!(circ, gnd)

@connect circ port1.nplus CPL.n1
@connect circ port2.nplus CPL.n2
@connect circ port3.nplus CPL.n3
@connect circ port4.nplus CPL.n4
@connect circ port1.nminus gnd
@connect circ port2.nminus gnd
@connect circ port3.nminus gnd
@connect circ port4.nminus gnd

sparam = SParameterAnalysis(start=1e9, stop=10e9, points=101,
    sweep_type="linear",
    z0=50.0
)

result = simulate_qucsator(circ, sparam)
SParameterResult([1.0e9, 1.09e9, 1.18e9, 1.27e9, 1.36e9, 1.45e9, 1.54e9, 1.63e9, 1.72e9, 1.81e9  …  9.19e9, 9.28e9, 9.37e9, 9.46e9, 9.55e9, 9.64e9, 9.73e9, 9.82e9, 9.91e9, 1.0e10], 4, Dict{Tuple{Int64, Int64}, Vector{ComplexF64}}((1, 2) => [0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im  …  0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im], (3, 1) => [0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im  …  0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im], (1, 3) => [0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im  …  0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im], (1, 4) => [0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im  …  0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im], (3, 2) => [0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im  …  0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im], (3, 3) => [0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im  …  0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im], (4, 1) => [0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im  …  0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im, 0.0 + 0.0im], (2, 1) => [0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im  …  0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im], (3, 4) => [0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im  …  0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im, 0.7062667813034447 + 0.0im], (4, 2) => [0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im  …  0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im, 0.7079457843841379 + 0.0im]…), 50.0, nothing, nothing, nothing, nothing)