*spice script
*#save  @vsv:xgft[dc] @vsi:xgft[dc] @vsn:xgft[dc]
*#save v(iy:xgft) v(ix:xgft) v(yw:xgft) v(xw:xgft)
*#save v(ui:xgft)  v(uo:xgft) @vsg:xgft[dc]
#simulation
#mprint
constants.Hok = isdef(v(ui:xgft))
if isdef(v(yw:xgft))
newplot result default
* initial state is 0 0 0, null vx ac1
result.Ti_ix2 =  v(iy:xgft) / v(ix:xgft) 
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc]  = 0
alter @vsn:xgft[dc]  = 0
* null iy2 ac2
#simulation
#mprint
result.Ti_iy2 =  v(iy:xgft) / v(ix:xgft) 
alter @vsv:xgft[dc] = 0
alter @vsi:xgft[dc]  = 1
alter @vsn:xgft[dc]  = 0
* null ix ac3
#simulation
#mprint
result.Ti2_ix = -v(yw:xgft) / v(xw:xgft)
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc]  = 1
alter @vsn:xgft[dc]  = 0
* null iy ac4
#simulation
#mprint
result.Ti2_iy = -v(yw:xgft) / v(xw:xgft)
setplot result
tii2 = Ti_ix2 *  Ti2_iy
ti2i = Ti_iy2 * Ti2_ix
t = 1/(1/Ti_iy2 + 1/Ti2_iy + 1/tii2)
if constants.Hok
**** now the output null stuff
alter @vsv:xgft[dc] = 0
alter @vsi:xgft[dc] = 0
alter @vsn:xgft[dc] = 1
alter @vsg:xgft[dc] = 0
* null ix2, uo ac5
#simulation
#mprint
result.Tni_ix2 =  v(iy:xgft) / v(ix:xgft) 
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc] = 0
alter @vsn:xgft[dc] = 1
alter @vsg:xgft[dc] = 0
* null iy2, uo ac6
#simulation
#mprint
result.Tni_iy2 =  v(iy:xgft) / v(ix:xgft) 
alter @vsv:xgft[dc] = 0
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 1
alter @vsg:xgft[dc] = 0
* null ix, uo ac7
#simulation
#mprint
result.Tni2_ix = -v(yw:xgft) / v(xw:xgft)
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 1
alter @vsg:xgft[dc] = 0
*null iy, uo ac8
#simulation
#mprint
result.Tni2_iy = -v(yw:xgft) / v(xw:xgft)
setplot result
tnii2 = Tni_ix2 *  Tni2_iy
tni2i = Tni_iy2 * Tni2_ix
tn = 1/(1/Tni_iy2 + 1/Tni2_iy + 1/tnii2)
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 0
alter @vsg:xgft[dc] = 1
* null iy and iy2 ac9
#simulation
#mprint
result.hiyiy2 = v(uo:xgft) / v(ui:xgft)
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 0
alter @vsg:xgft[dc] = 1
alter @vny:xgft[dc] = 0
* null iy and ix2 ac10
#simulation
#mprint
result.hiyix2 = v(uo:xgft) / v(ui:xgft)
alter @vsv:xgft[dc] = 0
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 0
alter @vsg:xgft[dc] = 1
alter @vny:xgft[dc] = 1
* null ix and iy2 ac11
#simulation
#mprint
result.hiy2ix = v(uo:xgft) / v(ui:xgft)
alter @vsv:xgft[dc] = 0
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 0
alter @vsg:xgft[dc] = 1
alter @vny:xgft[dc] = 0
* null ix and ix2 ac12
#simulation
#mprint
result.hixix2 = v(uo:xgft) / v(ui:xgft)
alter @v3:xgft[dc] = 0
alter @vsi:xgft[dc] = 0
alter @vsn:xgft[dc] = 0
alter @vsg:xgft[dc] = 0
alter @vny:xgft[dc] = 0
alter @vy:xgft[acmag] = 0
alter @v17:xgft[acmag] = 0
alter @vin:xgft[acmag] = 1
* no null input ac 1 ac13
#simulation
#mprint
result.h = v(uo:xgft) / v(ui:xgft)
setplot result 
hinf = hiyiy2
hzero = hiyix2*t/Ti2_iy + hiy2ix*t/Ti_iy2+hixix2*t/tii2
hzeroc = hinf*t/tn
d=t/(1+t)
do=1/(1+t)
hinfd=hinf*d
hzerodo=hzero*do
dn=1+1/tn
h1=hinfd*dn
h2=hinfd+hzerodo
tp=t*dn/(1-t/tn)
dp=tp/(1+tp)
h3=hinf*dp
end
else
printstatus -t "  You need to name the GFT subcircuit Xgft "
printstatus -t
end


