! ! This file is part of SACAMOS, State of the Art CAble MOdels in Spice. ! It was developed by the University of Nottingham and the Netherlands Aerospace ! Centre (NLR) for ESA under contract number 4000112765/14/NL/HK. ! ! Copyright (C) 2016-2017 University of Nottingham ! ! SACAMOS is free software: you can redistribute it and/or modify it under the ! terms of the GNU General Public License as published by the Free Software ! Foundation, either version 3 of the License, or (at your option) any later ! version. ! ! SACAMOS is distributed in the hope that it will be useful, but ! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. ! ! A copy of the GNU General Public License version 3 can be found in the ! file GNU_GPL_v3 in the root or at . ! ! SACAMOS uses the EISPACK library (in /SRC/EISPACK). EISPACK is subject to ! the GNU Lesser General Public License. A copy of the GNU Lesser General Public ! License version can be found in the file GNU_LGPL in the root of EISPACK ! (/SRC/EISPACK ) or at . ! ! The University of Nottingham can be contacted at: ggiemr@nottingham.ac.uk ! ! ! Description ! This is a fortran fragment which is included in network_synthesis.F90 ! It is used for testing that the equivalent circuit model reproduces the ! required transfer function. ! ! Comments: ! Note that this doesn't include the Brune sub-circuit. ! ! History ! ! 16/11/2017 CJS Include network synthesis process to replace s-domain transfer functions ! ! ! evaluate the frequency response of the continued fraction function open(unit=30,file='Continued_fraction.fout') wstep=(wmax-wmin)/(nw-1) do i=1,nw s=(0d0,1d0)*(wmin+wstep*(i-1)) last_CF_term=(0d0,0d0) last_type=CFtype(n_branches) do loop=n_branches,1,-1 ! note evaluate the continued fraction from the bottom up R=CFterm(loop,1) L=CFterm(loop,2) C=CFterm(loop,3) type=CFtype(loop) if (type.EQ.series_RLC) then CF_term=s*L/(s*s*L*C+s*L/R+1D0) else if (type.EQ.series_LC) then CF_term=s*L/(s*s*L*C+1d0) else if (type.EQ.series_RC) then CF_term=R/(s*C*R+1d0) else if (type.EQ.series_RL) then CF_term=s*L/(s*L/R+1D0) else if (type.EQ.series_C) then CF_term=1d0/(s*C) else if (type.EQ.series_L) then CF_term=s*L else if (type.EQ.series_R) then CF_term=R ! admittance terms else if (type.EQ.shunt_RLC) then CF_term=s*C/(s*s*L*C+s*R*C+1D0) else if (type.EQ.shunt_LC) then CF_term=s*C/(s*s*L*C+1D0) else if (type.EQ.shunt_RC) then CF_term=s*C/(s*C*R+1D0) else if (type.EQ.shunt_RL) then CF_term=1d0/(s*L+R) else if (type.EQ.shunt_C) then CF_term=(s*C) else if (type.EQ.shunt_L) then CF_term=1d0/(s*L) else if (type.EQ.shunt_R) then CF_term=1d0/R end if if (loop.NE.max_order) then if (last_type*type.LT.0) then ! we switch from impedance to admittance or vice versa in the network CF_term=CF_term+1d0/last_CF_term else CF_term=CF_term+last_CF_term end if end if last_CF_term=CF_term last_type=type end do if (last_type.GT.0d0) then H_CF=last_CF_term else H_CF=1d0/last_CF_term end if write(30,8030)(wmin+wstep*(i-1))/6.28318530718,real(H_CF),aimag(H_CF) 8030 format(3ES16.6) end do close(unit=30)