45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from Simulation import Simulation
|
|
|
|
def build_trace_with_split(sim: 'Simulation',
|
|
N=20,
|
|
Rseg=0.05,
|
|
Lseg=8e-9,
|
|
Csh0=1e-12,
|
|
Cshi=1e-14,
|
|
Rsrc=10.0,
|
|
Rs_gnd=120.0,
|
|
Rload=1e5,
|
|
Rsplit=0.3,
|
|
Lsplit=50e-9,
|
|
Cgap=100e-12,
|
|
Rsplit_parallel=0.1):
|
|
|
|
# Nodes. Vs, V0..V{N}, GNDL, GNDR
|
|
sim.add_node("Vs")
|
|
for k in range(N+1):
|
|
sim.add_node(f"V{k}")
|
|
sim.add_node("GNDL"); sim.add_node("GNDR")
|
|
|
|
# Source
|
|
sim.add_branch("Vs","V0", R=Rsrc)
|
|
sim.add_branch("Vs","GNDL", R=Rs_gnd)
|
|
|
|
# series ladder
|
|
for k in range(N):
|
|
Lk = Lseg if (k==0 or k==N-1) else (Lseg*(N/(N-1)))
|
|
sim.add_branch(f"V{k}", f"V{k+1}", R=Rseg, L=Lk)
|
|
|
|
# Shunt caps to local grounds
|
|
sim.add_shunt_C("V0","GNDL", Csh0)
|
|
for k in range(1, N):
|
|
g = "GNDL" if k <= N//2 else "GNDR"
|
|
sim.add_shunt_C(f"V{k}", g, Cshi)
|
|
sim.add_shunt_C(f"V{N}", "GNDR", Csh0)
|
|
|
|
# Load
|
|
sim.add_branch(f"V{N}", "GNDR", R=Rload)
|
|
|
|
sim.add_branch("GNDL","GNDR", R=Rsplit, L=Lsplit)
|
|
sim.add_shunt_C("GNDL","GNDR", Cgap)
|
|
|
|
sim.add_branch("GNDL","GNDR", R=Rsplit_parallel) |