*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.Tv2_vx =  v(iy:xgft) / v(ix:xgft) 
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc]  = 0
alter @vsn:xgft[dc]  = 0
* null vy ac2
#simulation
#mprint
result.Tv2_vy =  v(iy:xgft) / v(ix:xgft) 
alter @vsv:xgft[dc] = 0
alter @vsi:xgft[dc]  = 1
alter @vsn:xgft[dc]  = 0
* null vx2 ac3
#simulation
#mprint
result.Tv_vx2 = -v(yw:xgft) / v(xw:xgft)
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc]  = 1
alter @vsn:xgft[dc]  = 0
* null vy2 ac4
#simulation
#mprint
result.Tv_vy2 = -v(yw:xgft) / v(xw:xgft)
setplot result
tv2v =   Tv2_vx *  Tv_vy2
tvv2 = Tv2_vy * Tv_vx2
t = 1/(1/Tv2_vy + 1/Tv_vy2 + 1/tv2v)
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 vx, uo ac5
#simulation
#mprint
result.Tnv2_vx =  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 vy, uo ac6
#simulation
#mprint
result.Tnv2_vy =  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 vx2, uo ac7
#simulation
#mprint
result.Tnv_vx2 = -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 vy2, uo ac8
#simulation
#mprint
result.Tnv_vy2 = -v(yw:xgft) / v(xw:xgft)
setplot result
tnv2v =   Tnv2_vx *  Tnv_vy2
tnvv2 = Tnv2_vy * Tnv_vx2
tn = 1/(1/Tnv2_vy + 1/Tnv_vy2 + 1/tnv2v)
alter @vsv:xgft[dc] = 1
alter @vsi:xgft[dc] = 1
alter @vsn:xgft[dc] = 0
alter @vsg:xgft[dc] = 1
* null vy2 and vy ac9
#simulation
#mprint
result.hvy2vy = 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 vy2 and vx ac10
#simulation
#mprint
result.hvy2vx = 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 vx2 and vy ac11
#simulation
#mprint
result.hvyvx2 = 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 vx2 and vx ac12
#simulation
#mprint
result.hvx2vx = 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 = hvy2vy
hzero = hvy2vx*t/Tv_vy2 + hvyvx2*t/Tv2_vy+hvx2vx*t/tv2v
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


