Annotation of 3BSD/cmd/spice/acans.f, revision 1.1

1.1     ! root        1:       subroutine acan
        !             2:       implicit double precision (a-h,o-z)
        !             3: c
        !             4: c
        !             5: c     this routine drives the small-signal analyses.
        !             6: c
        !             7:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !             8:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !             9:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !            10:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !            11:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !            12:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !            13:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !            14:      1  defas,rstats(50),iwidth,lwidth,nopage
        !            15:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !            16:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !            17:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !            18:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !            19:      2   itemno,nosolv,ipostp,iscrch
        !            20:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !            21:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !            22:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !            23:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !            24:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !            25:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !            26:       common /cje/ maxtim,itime,icost
        !            27:       common /blank/ value(1000)
        !            28:       integer nodplc(64)
        !            29:       complex*16 cvalue(32)
        !            30:       equivalence (value(1),nodplc(1),cvalue(1))
        !            31:        data aendor /9.87654321d0/
        !            32:       call second(t1)
        !            33: c.. post-processor initialization
        !            34:       if(ipostp.eq.0) go to 1
        !            35:       numcur=jelcnt(9)
        !            36:       numpos=nunods+numcur
        !            37:       call getm16(ibuff,numpos)
        !            38:       numpos=numpos*4
        !            39:       if(numcur.eq.0) go to 1
        !            40:       loc=locate(9)
        !            41:       loccur=nodplc(loc+6)-1
        !            42: c
        !            43: c  allocate storage
        !            44: c
        !            45:     1 call getm8(ndiag,2*nstop)
        !            46:       call getm8(lvn,nstop)
        !            47:       call getm8(imvn,nstop)
        !            48:       call getm16(lcvn,nstop)
        !            49:       call getm8(lynl,nstop+nut+nlt)
        !            50:       call getm8(imynl,nstop+nut+nlt)
        !            51:       if (idist.ne.0) call dinit
        !            52:       nandd=0
        !            53:       if (inoise.eq.0) go to 10
        !            54:       if (idist.eq.0) go to 10
        !            55:       nandd=1
        !            56:       call getm16(lvnctc,nstop)
        !            57:    10 call getm16(loutpt,0)
        !            58:       call crunch
        !            59:       lyu=lynl+nstop
        !            60:       lyl=lyu+nut
        !            61:       numout=jelcnt(43)+jelcnt(44)+jelcnt(45)+1
        !            62: c      if(ipostp.ne.0) call pheadr(atitle)
        !            63:       icalc=0
        !            64:       freq=fstart
        !            65: c
        !            66: c  load y matrix and c vector, solve for v vector
        !            67: c
        !            68:   100 call getcje
        !            69:       if ((maxtim-itime).le.limtim) go to 900
        !            70:       omega=twopi*freq
        !            71:       call acload
        !            72:       call acdcmp
        !            73:       call acsol
        !            74:       if (igoof.eq.0) go to 200
        !            75:       write (6,121) igoof,freq
        !            76:   121 format('0warning:  underflow ',i4,' time(s) in ac analysis at freq
        !            77:      1 = ',1pd9.3,' hz')
        !            78:       igoof=0
        !            79: c
        !            80: c  store outputs
        !            81: c
        !            82:   200 call extmem(loutpt,numout)
        !            83:       loco=loutpt+icalc*numout
        !            84:       icalc=icalc+1
        !            85:       cvalue(loco+1)=dcmplx(freq,omega)
        !            86:       loc=locate(43)
        !            87:   310 if (loc.eq.0) go to 350
        !            88:       if (nodplc(loc+5).ne.0) go to 320
        !            89:       node1=nodplc(loc+2)
        !            90:       node2=nodplc(loc+3)
        !            91:       iseq=nodplc(loc+4)
        !            92:       cvalue(loco+iseq)=cvalue(lcvn+node1)-cvalue(lcvn+node2)
        !            93:       loc=nodplc(loc)
        !            94:       go to 310
        !            95:   320 iptr=nodplc(loc+2)
        !            96:       iptr=nodplc(iptr+6)
        !            97:       iseq=nodplc(loc+4)
        !            98:       cvalue(loco+iseq)=cvalue(lcvn+iptr)
        !            99:       loc=nodplc(loc)
        !           100:       go to 310
        !           101:   350 if(ipostp.eq.0) go to 400
        !           102:       cvalue(ibuff+1)=dcmplx(freq,0.0d0)
        !           103:       call copy16(cvalue(lcvn+2),cvalue(ibuff+2),nunods-1)
        !           104:       if(numcur.ne.0) call copy16(cvalue(lcvn+loccur+1),
        !           105:      1  cvalue(ibuff+nunods+1),numcur)
        !           106:       call dblsgl(cvalue(ibuff+1),numpos)
        !           107: c      call fwrite(cvalue(ibuff+1),numpos)
        !           108: c
        !           109: c  noise and distortion analyses
        !           110: c
        !           111:   400 if (nandd.eq.0) go to 410
        !           112:       call copy16(cvalue(lcvn+1),cvalue(lvnctc+1),nstop)
        !           113:   410 if (inoise.ne.0) call noise(loco)
        !           114:       if (nandd.eq.0) go to 420
        !           115:       call copy16(cvalue(lvnctc+1),cvalue(lcvn+1),nstop)
        !           116:   420 if (idist.ne.0) call disto(loco)
        !           117: c
        !           118: c  increment frequency
        !           119: c
        !           120:       if (icalc.ge.jacflg) go to 1000
        !           121:       if (idfreq.ge.3) go to 510
        !           122:       freq=freq*fincr
        !           123:       go to 100
        !           124:   510 freq=freq+fincr
        !           125:       go to 100
        !           126: c
        !           127: c  finished
        !           128: c
        !           129:   900 write (6,901)
        !           130:   901 format('0*error*:  cpu time limit exceeded ... analysis stopped'/)
        !           131:       nogo=1
        !           132:  1000 if(ipostp.eq.0) go to 1010
        !           133:       cvalue(ibuff+1)=aendor
        !           134: c      call fwrite(cvalue(ibuff+1),numpos)
        !           135:       if(ipostp.ne.0) call clrmem(ibuff)
        !           136:  1010 call clrmem(lvnim1)
        !           137:       call clrmem(lx0)
        !           138:       call clrmem(lvn)
        !           139:       call clrmem(imvn)
        !           140:       call clrmem(lcvn)
        !           141:       call clrmem(imynl)
        !           142:       call clrmem(lynl)
        !           143:       call clrmem(ndiag)
        !           144:       if (idist.eq.0) go to 1020
        !           145:       call clrmem(ld0)
        !           146:       call clrmem(ld1)
        !           147:  1020 if (nandd.eq.0) go to 1040
        !           148:       call clrmem(lvnctc)
        !           149:  1040 call second(t2)
        !           150:       rstats(7)=rstats(7)+t2-t1
        !           151:       rstats(8)=rstats(8)+icalc
        !           152:       return
        !           153:       end
        !           154:       subroutine cdiv(xr,xi,yr,yi,cr,ci)
        !           155: c.. ok if cr and ci are really xr and xi or yr and yi
        !           156:       implicit double precision (a-h,o-z)
        !           157:       xrtemp=xr
        !           158:       xitemp=xi
        !           159:       yrtemp=yr
        !           160:       yitemp=yi
        !           161:       amag2=yrtemp*yrtemp+yitemp*yitemp
        !           162:       cr=(xrtemp*yrtemp+xitemp*yitemp)/amag2
        !           163:       ci=(xitemp*yrtemp-xrtemp*yitemp)/amag2
        !           164:       return
        !           165:       end
        !           166:       subroutine cmult(xr,xi,yr,yi,cr,ci)
        !           167: c.. ok if cr and ci are really xr and xi or yr and yi
        !           168:       implicit double precision (a-h,o-z)
        !           169:       xrtemp=xr
        !           170:       xitemp=xi
        !           171:       yrtemp=yr
        !           172:       yitemp=yi
        !           173:       cr=xrtemp*yrtemp-xitemp*yitemp
        !           174:       ci=xitemp*yrtemp+xrtemp*yitemp
        !           175:       return
        !           176:       end
        !           177:       subroutine dblsgl(carray,nwds)
        !           178: c.. note that carray really contains complex*16
        !           179:       complex*8 carray(1)
        !           180:       complex*8 ctemp8(2),ctemp3
        !           181:       complex*16 ctemp
        !           182:       equivalence (ctemp,ctemp8(1))
        !           183: c
        !           184: c.. gather up numpos 16-bit words from dbl-complex to
        !           185: c.. make up sgl-complex
        !           186: c
        !           187:       num=nwds/4
        !           188:       do 10 i=1,num
        !           189:       ndex=2*i-1
        !           190:       ctemp8(1)=carray(ndex)
        !           191:       ctemp8(2)=carray(ndex+1)
        !           192:       ctemp3=ctemp
        !           193:       carray(i)=ctemp3
        !           194:    10 continue
        !           195:       return
        !           196:       end
        !           197:       subroutine acdcmp
        !           198:       implicit double precision (a-h,o-z)
        !           199: c
        !           200: c     this routine performs an lu factorization of the circuit equation
        !           201: c coefficient matrix.
        !           202: c
        !           203:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           204:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           205:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           206:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           207:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           208:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           209:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           210:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           211:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !           212:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !           213:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !           214:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !           215:       common /blank/ value(1000)
        !           216:       integer nodplc(64)
        !           217:       complex*16 cvalue(32)
        !           218:       equivalence (value(1),nodplc(1),cvalue(1))
        !           219: c
        !           220: c
        !           221:       do 100 i=2,nstop
        !           222:       io=nodplc(iorder+i)
        !           223:       gdiag=dabs(value(lynl+io))+dabs(value(imynl+io))
        !           224:       if (gdiag.ge.gmin) go to 10
        !           225:       value(lynl+io)=gmin
        !           226:       value(imynl+io)=0.0d0
        !           227:       igoof=igoof+1
        !           228:    10 jstart=nodplc(ilc+i)
        !           229:       jstop=nodplc(ilc+i+1)-1
        !           230:       if (jstart.gt.jstop) go to 100
        !           231:       do 90 j=jstart,jstop
        !           232:       call cdiv(value(lyl+j),value(imynl+nstop+nut+j),value(lynl+io),
        !           233:      1  value(imynl+io),value(lyl+j),value(imynl+nstop+nut+j))
        !           234:       icol=nodplc(ilr+j)
        !           235:       kstart=nodplc(iur+i)
        !           236:       kstop=nodplc(iur+i+1)-1
        !           237:       if (kstart.gt.kstop) go to 90
        !           238:       do 80 k=kstart,kstop
        !           239:       irow=nodplc(iuc+k)
        !           240:       if (icol-irow) 20,60,40
        !           241: c
        !           242: c  find (icol,irow) matrix term (upper triangle)
        !           243: c
        !           244:    20 l=nodplc(iur+icol+1)
        !           245:    30 l=l-1
        !           246:       if (nodplc(iuc+l).ne.irow) go to 30
        !           247:       ispot=lyu+l
        !           248:       ispot2=imynl+nstop+l
        !           249:       go to 70
        !           250: c
        !           251: c  find (icol,irow) matrix term (lower triangle)
        !           252: c
        !           253:    40 l=nodplc(ilc+irow+1)
        !           254:    50 l=l-1
        !           255:       if (nodplc(ilr+l).ne.icol) go to 50
        !           256:       ispot=lyl+l
        !           257:       ispot2=imynl+nstop+nut+l
        !           258:       go to 70
        !           259: c
        !           260: c  find (icol,irow) matrix term (diagonal)
        !           261: c
        !           262:    60 ispot=lynl+nodplc(iorder+irow)
        !           263:       ispot2=imynl+nodplc(iorder+irow)
        !           264: c
        !           265:    70 call cmult(value(lyl+j),value(imynl+nstop+nut+j),
        !           266:      1  value(lyu+k),value(imynl+nstop+k),xreal,ximag)
        !           267:       value(ispot)=value(ispot)-xreal
        !           268:       value(ispot2)=value(ispot2)-ximag
        !           269:    80 continue
        !           270:    90 continue
        !           271:   100 continue
        !           272:       return
        !           273:       end
        !           274:       subroutine acsol
        !           275:       implicit double precision (a-h,o-z)
        !           276: c
        !           277: c     this routine solves the circuit equations by performing a forward
        !           278: c and backward substitution using the previously-computed lu factors.
        !           279: c
        !           280:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           281:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           282:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           283:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           284:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           285:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           286:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           287:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           288:       common /blank/ value(1000)
        !           289:       integer nodplc(64)
        !           290:       complex*16 cvalue(32)
        !           291:       equivalence (value(1),nodplc(1),cvalue(1))
        !           292: c
        !           293: c  forward substitution
        !           294: c
        !           295:       do 20 i=2,nstop
        !           296:       jstart=nodplc(ilc+i)
        !           297:       jstop=nodplc(ilc+i+1)-1
        !           298:       if (jstart.gt.jstop) go to 20
        !           299:       io=nodplc(iorder+i)
        !           300:       if (value(lvn+io).ne.0.0d0) go to 5
        !           301:       if (value(imvn+io).eq.0.0d0) go to 20
        !           302:     5 do 10 j=jstart,jstop
        !           303:       jo=nodplc(ilr+j)
        !           304:       jo=nodplc(iorder+jo)
        !           305:       call cmult(value(lyl+j),value(imynl+nstop+nut+j),value(lvn+io),
        !           306:      1  value(imvn+io),xreal,ximag)
        !           307:       value(lvn+jo)=value(lvn+jo)-xreal
        !           308:       value(imvn+jo)=value(imvn+jo)-ximag
        !           309:    10 continue
        !           310:    20 continue
        !           311: c
        !           312: c  back substitution
        !           313: c
        !           314:       k=nstop+1
        !           315:       do 50 i=2,nstop
        !           316:       k=k-1
        !           317:       io=nodplc(iorder+k)
        !           318:       jstart=nodplc(iur+k)
        !           319:       jstop=nodplc(iur+k+1)-1
        !           320:       if (jstart.gt.jstop) go to 40
        !           321:       do 30 j=jstart,jstop
        !           322:       jo=nodplc(iuc+j)
        !           323:       jo=nodplc(iorder+jo)
        !           324:       call cmult(value(lyu+j),value(imynl+nstop+j),value(lvn+jo),
        !           325:      1  value(imvn+jo),xreal,ximag)
        !           326:       value(lvn+io)=value(lvn+io)-xreal
        !           327:       value(imvn+io)=value(imvn+io)-ximag
        !           328:    30 continue
        !           329:    40 call cdiv(value(lvn+io),value(imvn+io),value(lynl+io),
        !           330:      1  value(imynl+io),value(lvn+io),value(imvn+io))
        !           331:    50 continue
        !           332:       do 100 i=2,nstop
        !           333:       cvalue(lcvn+i)=dcmplx(value(lvn+i),value(imvn+i))
        !           334:   100 continue
        !           335:       cvalue(lcvn+1)=dcmplx(0.0d0,0.0d0)
        !           336:       return
        !           337:       end
        !           338:       subroutine acload
        !           339:       implicit double precision (a-h,o-z)
        !           340: c
        !           341: c     this routine zeroes-out and then loads the complex coefficient
        !           342: c matrix.
        !           343: c
        !           344:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           345:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           346:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           347:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           348:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           349:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           350:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           351:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           352:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !           353:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !           354:      2   itemno,nosolv,ipostp,iscrch
        !           355:       common /blank/ value(1000)
        !           356:       integer nodplc(64)
        !           357:       complex*16 cvalue(32)
        !           358:       equivalence (value(1),nodplc(1),cvalue(1))
        !           359: c
        !           360: c
        !           361:       complex*16 cval
        !           362: c
        !           363: c  zero y matrix and current vector
        !           364: c
        !           365:       call zero8(value(lvn+1),nstop)
        !           366:       call zero8(value(imvn+1),nstop)
        !           367:       call zero8(value(lynl+1),nstop+nut+nlt)
        !           368:       call zero8(value(imynl+1),nstop+nut+nlt)
        !           369: c
        !           370: c  resistors
        !           371: c
        !           372:       loc=locate(1)
        !           373:    20 if (loc.eq.0) go to 30
        !           374:       locv=nodplc(loc+1)
        !           375:       val=value(locv+1)
        !           376:       locy=lynl+nodplc(loc+6)
        !           377:       value(locy)=value(locy)+val
        !           378:       locy=lynl+nodplc(loc+7)
        !           379:       value(locy)=value(locy)+val
        !           380:       locy=lynl+nodplc(loc+4)
        !           381:       value(locy)=value(locy)-val
        !           382:       locy=lynl+nodplc(loc+5)
        !           383:       value(locy)=value(locy)-val
        !           384:       loc=nodplc(loc)
        !           385:       go to 20
        !           386: c
        !           387: c  capacitors
        !           388: c
        !           389:    30 loc=locate(2)
        !           390:    40 if (loc.eq.0) go to 50
        !           391:       locv=nodplc(loc+1)
        !           392:       val=omega*value(locv+1)
        !           393:       locyi=imynl+nodplc(loc+10)
        !           394:       value(locyi)=value(locyi)+val
        !           395:       locyi=imynl+nodplc(loc+11)
        !           396:       value(locyi)=value(locyi)+val
        !           397:       locyi=imynl+nodplc(loc+5)
        !           398:       value(locyi)=value(locyi)-val
        !           399:       locyi=imynl+nodplc(loc+6)
        !           400:       value(locyi)=value(locyi)-val
        !           401:       loc=nodplc(loc)
        !           402:       go to 40
        !           403: c
        !           404: c  inductors
        !           405: c
        !           406:    50 loc=locate(3)
        !           407:    60 if (loc.eq.0) go to 70
        !           408:       locv=nodplc(loc+1)
        !           409:       val=omega*value(locv+1)
        !           410:       locyi=imynl+nodplc(loc+13)
        !           411:       locy=lynl+nodplc(loc+13)
        !           412:       value(locy)=0.0d0
        !           413:       value(locyi)=-val
        !           414:       locy=lynl+nodplc(loc+6)
        !           415:       locyi=imynl+nodplc(loc+6)
        !           416:       value(locy)=1.0d0
        !           417:       value(locyi)=0.0d0
        !           418:       locy=lynl+nodplc(loc+7)
        !           419:       locyi=imynl+nodplc(loc+7)
        !           420:       value(locy)=-1.0d0
        !           421:       value(locyi)=0.0d0
        !           422:       locy=lynl+nodplc(loc+8)
        !           423:       locyi=imynl+nodplc(loc+8)
        !           424:       value(locy)=1.0d0
        !           425:       value(locyi)=0.0d0
        !           426:       locy=lynl+nodplc(loc+9)
        !           427:       locyi=imynl+nodplc(loc+9)
        !           428:       value(locy)=-1.0d0
        !           429:       value(locyi)=0.0d0
        !           430:       loc=nodplc(loc)
        !           431:       go to 60
        !           432: c
        !           433: c  mutual inductors
        !           434: c
        !           435:    70 loc=locate(4)
        !           436:    80 if (loc.eq.0) go to 90
        !           437:       locv=nodplc(loc+1)
        !           438:       val=omega*value(locv+1)
        !           439:       locy=lynl+nodplc(loc+4)
        !           440:       locyi=imynl+nodplc(loc+4)
        !           441:       value(locy)=0.0d0
        !           442:       value(locyi)=-val
        !           443:       locy=lynl+nodplc(loc+5)
        !           444:       locyi=imynl+nodplc(loc+5)
        !           445:       value(locy)=0.0d0
        !           446:       value(locyi)=-val
        !           447:       loc=nodplc(loc)
        !           448:       go to 80
        !           449: c
        !           450: c  nonlinear voltage controlled current sources
        !           451: c
        !           452:    90 loc=locate(5)
        !           453:    95 if (loc.eq.0) go to 100
        !           454:       ndim=nodplc(loc+4)
        !           455:       lmat=nodplc(loc+7)
        !           456:       loct=lx0+nodplc(loc+12)+2
        !           457:       do 97 i=1,ndim
        !           458:       val=value(loct)
        !           459:       loct=loct+2
        !           460:       locy=lynl+nodplc(lmat+1)
        !           461:       value(locy)=value(locy)+val
        !           462:       locy=lynl+nodplc(lmat+2)
        !           463:       value(locy)=value(locy)-val
        !           464:       locy=lynl+nodplc(lmat+3)
        !           465:       value(locy)=value(locy)-val
        !           466:       locy=lynl+nodplc(lmat+4)
        !           467:       value(locy)=value(locy)+val
        !           468:       lmat=lmat+4
        !           469:    97 continue
        !           470:       loc=nodplc(loc)
        !           471:       go to 95
        !           472: c
        !           473: c  nonlinear voltage controlled voltage sources
        !           474: c
        !           475:   100 loc=locate(6)
        !           476:   105 if (loc.eq.0) go to 110
        !           477:       ndim=nodplc(loc+4)
        !           478:       lmat=nodplc(loc+8)
        !           479:       loct=lx0+nodplc(loc+13)+3
        !           480:       locy=lynl+nodplc(lmat+1)
        !           481:       locyi=imynl+nodplc(lmat+1)
        !           482:       value(locy)=+1.0d0
        !           483:       value(locyi)=0.0d0
        !           484:       locy=lynl+nodplc(lmat+2)
        !           485:       locyi=imynl+nodplc(lmat+2)
        !           486:       value(locy)=-1.0d0
        !           487:       value(locyi)=0.0d0
        !           488:       locy=lynl+nodplc(lmat+3)
        !           489:       locyi=imynl+nodplc(lmat+3)
        !           490:       value(locy)=+1.0d0
        !           491:       value(locyi)=0.0d0
        !           492:       locy=lynl+nodplc(lmat+4)
        !           493:       locyi=imynl+nodplc(lmat+4)
        !           494:       value(locy)=-1.0d0
        !           495:       value(locyi)=0.0d0
        !           496:       lmat=lmat+4
        !           497:       do 107 i=1,ndim
        !           498:       val=value(loct)
        !           499:       loct=loct+2
        !           500:       locy=lynl+nodplc(lmat+1)
        !           501:       value(locy)=value(locy)-val
        !           502:       locy=lynl+nodplc(lmat+2)
        !           503:       value(locy)=value(locy)+val
        !           504:       lmat=lmat+2
        !           505:   107 continue
        !           506:       loc=nodplc(loc)
        !           507:       go to 105
        !           508: c
        !           509: c  nonlinear current controlled current sources
        !           510: c
        !           511:   110 loc=locate(7)
        !           512:   115 if (loc.eq.0) go to 120
        !           513:       ndim=nodplc(loc+4)
        !           514:       lmat=nodplc(loc+7)
        !           515:       loct=lx0+nodplc(loc+12)+2
        !           516:       do 117 i=1,ndim
        !           517:       val=value(loct)
        !           518:       loct=loct+2
        !           519:       locy=lynl+nodplc(lmat+1)
        !           520:       locyi=imynl+nodplc(lmat+1)
        !           521:       value(locy)=+val
        !           522:       value(locyi)=0.0d0
        !           523:       locy=lynl+nodplc(lmat+2)
        !           524:       locyi=imynl+nodplc(lmat+2)
        !           525:       value(locy)=-val
        !           526:       value(locyi)=0.0d0
        !           527:       lmat=lmat+2
        !           528:   117 continue
        !           529:       loc=nodplc(loc)
        !           530:       go to 115
        !           531: c
        !           532: c  nonlinear current controlled voltage sources
        !           533: c
        !           534:   120 loc=locate(8)
        !           535:   125 if (loc.eq.0) go to 140
        !           536:       ndim=nodplc(loc+4)
        !           537:       lmat=nodplc(loc+8)
        !           538:       loct=lx0+nodplc(loc+13)+3
        !           539:       locy=lynl+nodplc(lmat+1)
        !           540:       locyi=imynl+nodplc(lmat+1)
        !           541:       value(locy)=+1.0d0
        !           542:       value(locyi)=0.0d0
        !           543:       locy=lynl+nodplc(lmat+2)
        !           544:       locyi=imynl+nodplc(lmat+2)
        !           545:       value(locy)=-1.0d0
        !           546:       value(locyi)=0.0d0
        !           547:       locy=lynl+nodplc(lmat+3)
        !           548:       locyi=imynl+nodplc(lmat+3)
        !           549:       value(locy)=+1.0d0
        !           550:       value(locyi)=0.0d0
        !           551:       locy=lynl+nodplc(lmat+4)
        !           552:       locyi=imynl+nodplc(lmat+4)
        !           553:       value(locy)=-1.0d0
        !           554:       value(locyi)=0.0d0
        !           555:       lmat=lmat+4
        !           556:       do 127 i=1,ndim
        !           557:       val=value(loct)
        !           558:       loct=loct+2
        !           559:       locy=lynl+nodplc(lmat+i)
        !           560:       value(locy)=value(locy)-val
        !           561:   127 continue
        !           562:       loc=nodplc(loc)
        !           563:       go to 125
        !           564: c
        !           565: c  voltage sources
        !           566: c
        !           567:   140 loc=locate(9)
        !           568:   150 if (loc.eq.0) go to 160
        !           569:       locv=nodplc(loc+1)
        !           570:       iptr=nodplc(loc+6)
        !           571:       value(lvn+iptr)=value(locv+2)
        !           572:       value(imvn+iptr)=value(locv+3)
        !           573:       locy=lynl+nodplc(loc+7)
        !           574:       value(locy)=value(locy)+1.0d0
        !           575:       locy=lynl+nodplc(loc+8)
        !           576:       value(locy)=value(locy)-1.0d0
        !           577:       locy=lynl+nodplc(loc+9)
        !           578:       value(locy)=value(locy)+1.0d0
        !           579:       locy=lynl+nodplc(loc+10)
        !           580:       value(locy)=value(locy)-1.0d0
        !           581:       loc=nodplc(loc)
        !           582:       go to 150
        !           583: c
        !           584: c  current sources
        !           585: c
        !           586:   160 loc=locate(10)
        !           587:   170 if (loc.eq.0) go to 200
        !           588:       locv=nodplc(loc+1)
        !           589:       node1=nodplc(loc+2)
        !           590:       node2=nodplc(loc+3)
        !           591:       value(lvn+node1)=value(lvn+node1)-value(locv+2)
        !           592:       value(imvn+node1)=value(imvn+node1)-value(locv+3)
        !           593:       value(lvn+node2)=value(lvn+node2)+value(locv+2)
        !           594:       value(imvn+node2)=value(imvn+node2)+value(locv+3)
        !           595:       loc=nodplc(loc)
        !           596:       go to 170
        !           597: c
        !           598: c  diodes
        !           599: c
        !           600:   200 loc=locate(11)
        !           601:   210 if (loc.eq.0) go to 250
        !           602:       locv=nodplc(loc+1)
        !           603:       area=value(locv+1)
        !           604:       locm=nodplc(loc+5)
        !           605:       locm=nodplc(locm+1)
        !           606:       loct=lx0+nodplc(loc+11)
        !           607:       gspr=value(locm+2)*area
        !           608:       geq=value(loct+2)
        !           609:       xceq=value(loct+4)*omega
        !           610:       locy=lynl+nodplc(loc+13)
        !           611:       value(locy)=value(locy)+gspr
        !           612:       locy=lynl+nodplc(loc+14)
        !           613:       locyi=imynl+nodplc(loc+14)
        !           614:       value(locy)=value(locy)+geq
        !           615:       value(locyi)=value(locyi)+xceq
        !           616:       locy=lynl+nodplc(loc+15)
        !           617:       locyi=imynl+nodplc(loc+15)
        !           618:       value(locy)=value(locy)+geq+gspr
        !           619:       value(locyi)=value(locyi)+xceq
        !           620:       locy=lynl+nodplc(loc+7)
        !           621:       value(locy)=value(locy)-gspr
        !           622:       locy=lynl+nodplc(loc+8)
        !           623:       locyi=imynl+nodplc(loc+8)
        !           624:       value(locy)=value(locy)-geq
        !           625:       value(locyi)=value(locyi)-xceq
        !           626:       locy=lynl+nodplc(loc+9)
        !           627:       value(locy)=value(locy)-gspr
        !           628:       locy=lynl+nodplc(loc+10)
        !           629:       locyi=imynl+nodplc(loc+10)
        !           630:       value(locy)=value(locy)-geq
        !           631:       value(locyi)=value(locyi)-xceq
        !           632:       loc=nodplc(loc)
        !           633:       go to 210
        !           634: c
        !           635: c  bjts
        !           636: c
        !           637:   250 loc=locate(12)
        !           638:   260 if (loc.eq.0) go to 300
        !           639:       locv=nodplc(loc+1)
        !           640:       area=value(locv+1)
        !           641:       locm=nodplc(loc+8)
        !           642:       locm=nodplc(locm+1)
        !           643:       loct=lx0+nodplc(loc+22)
        !           644:       gcpr=value(locm+20)*area
        !           645:       gepr=value(locm+19)*area
        !           646:       gpi=value(loct+4)
        !           647:       gmu=value(loct+5)
        !           648:       gm=value(loct+6)
        !           649:       go=value(loct+7)
        !           650:       xgm=0.0d0
        !           651:       td=value(locm+28)
        !           652:       if(td.eq.0.0d0) go to 270
        !           653:       arg=td*omega
        !           654:       gm=gm+go
        !           655:       xgm=-gm*dsin(arg)
        !           656:       gm=gm*dcos(arg)-go
        !           657:   270 gx=value(loct+16)
        !           658:       xcpi=value(loct+9)*omega
        !           659:       xcmu=value(loct+11)*omega
        !           660:       xcbx=value(loct+15)*omega
        !           661:       xccs=value(loct+13)*omega
        !           662:       xcmcb=value(loct+17)*omega
        !           663:       locy=lynl+nodplc(loc+24)
        !           664:       value(locy)=value(locy)+gcpr
        !           665:       locy=lynl+nodplc(loc+25)
        !           666:       locyi=imynl+nodplc(loc+25)
        !           667:       value(locy)=value(locy)+gx
        !           668:       value(locyi)=value(locyi)+xcbx
        !           669:       locy=lynl+nodplc(loc+26)
        !           670:       value(locy)=value(locy)+gepr
        !           671:       locy=lynl+nodplc(loc+27)
        !           672:       locyi=imynl+nodplc(loc+27)
        !           673:       value(locy)=value(locy)+gmu+go+gcpr
        !           674:       value(locyi)=value(locyi)+xcmu+xccs+xcbx
        !           675:       locy=lynl+nodplc(loc+28)
        !           676:       locyi=imynl+nodplc(loc+28)
        !           677:       value(locy)=value(locy)+gx+gpi+gmu
        !           678:       value(locyi)=value(locyi)+xcpi+xcmu+xcmcb
        !           679:       locy=lynl+nodplc(loc+29)
        !           680:       locyi=imynl+nodplc(loc+29)
        !           681:       value(locy)=value(locy)+gpi+gepr+gm+go
        !           682:       value(locyi)=value(locyi)+xcpi+xgm
        !           683:       locy=lynl+nodplc(loc+10)
        !           684:       value(locy)=value(locy)-gcpr
        !           685:       locy=lynl+nodplc(loc+11)
        !           686:       value(locy)=value(locy)-gx
        !           687:       locy=lynl+nodplc(loc+12)
        !           688:       value(locy)=value(locy)-gepr
        !           689:       locy=lynl+nodplc(loc+13)
        !           690:       value(locy)=value(locy)-gcpr
        !           691:       locy=lynl+nodplc(loc+14)
        !           692:       locyi=imynl+nodplc(loc+14)
        !           693:       value(locy)=value(locy)-gmu+gm
        !           694:       value(locyi)=value(locyi)-xcmu+xgm
        !           695:       locy=lynl+nodplc(loc+15)
        !           696:       locyi=imynl+nodplc(loc+15)
        !           697:       value(locy)=value(locy)-gm-go
        !           698:       value(locyi)=value(locyi)-xgm
        !           699:       locy=lynl+nodplc(loc+16)
        !           700:       value(locy)=value(locy)-gx
        !           701:       locy=lynl+nodplc(loc+17)
        !           702:       locyi=imynl+nodplc(loc+17)
        !           703:       value(locy)=value(locy)-gmu
        !           704:       value(locyi)=value(locyi)-xcmu-xcmcb
        !           705:       locy=lynl+nodplc(loc+18)
        !           706:       locyi=imynl+nodplc(loc+18)
        !           707:       value(locy)=value(locy)-gpi
        !           708:       value(locyi)=value(locyi)-xcpi
        !           709:       locy=lynl+nodplc(loc+19)
        !           710:       value(locy)=value(locy)-gepr
        !           711:       locy=lynl+nodplc(loc+20)
        !           712:       locyi=imynl+nodplc(loc+20)
        !           713:       value(locy)=value(locy)-go
        !           714:       value(locyi)=value(locyi)+xcmcb
        !           715:       locy=lynl+nodplc(loc+21)
        !           716:       locyi=imynl+nodplc(loc+21)
        !           717:       value(locy)=value(locy)-gpi-gm
        !           718:       value(locyi)=value(locyi)-xcpi-xgm-xcmcb
        !           719:       locyi=imynl+nodplc(loc+31)
        !           720:       value(locyi)=value(locyi)+xccs
        !           721:       locyi=imynl+nodplc(loc+32)
        !           722:       value(locyi)=value(locyi)-xccs
        !           723:       locyi=imynl+nodplc(loc+33)
        !           724:       value(locyi)=value(locyi)-xccs
        !           725:       locyi=imynl+nodplc(loc+34)
        !           726:       value(locyi)=value(locyi)-xcbx
        !           727:       locyi=imynl+nodplc(loc+35)
        !           728:       value(locyi)=value(locyi)-xcbx
        !           729:       loc=nodplc(loc)
        !           730:       go to 260
        !           731: c
        !           732: c  jfets
        !           733: c
        !           734:   300 loc=locate(13)
        !           735:   310 if (loc.eq.0) go to 350
        !           736:       locv=nodplc(loc+1)
        !           737:       area=value(locv+1)
        !           738:       locm=nodplc(loc+7)
        !           739:       locm=nodplc(locm+1)
        !           740:       loct=lx0+nodplc(loc+19)
        !           741:       gdpr=value(locm+4)*area
        !           742:       gspr=value(locm+5)*area
        !           743:       gm=value(loct+5)
        !           744:       gds=value(loct+6)
        !           745:       ggs=value(loct+7)
        !           746:       xgs=value(loct+9)*omega
        !           747:       ggd=value(loct+8)
        !           748:       xgd=value(loct+11)*omega
        !           749:       locy=lynl+nodplc(loc+20)
        !           750:       value(locy)=value(locy)+gdpr
        !           751:       locy=lynl+nodplc(loc+21)
        !           752:       locyi=imynl+nodplc(loc+21)
        !           753:       value(locy)=value(locy)+ggd+ggs
        !           754:       value(locyi)=value(locyi)+xgd+xgs
        !           755:       locy=lynl+nodplc(loc+22)
        !           756:       value(locy)=value(locy)+gspr
        !           757:       locy=lynl+nodplc(loc+23)
        !           758:       locyi=imynl+nodplc(loc+23)
        !           759:       value(locy)=value(locy)+gdpr+gds+ggd
        !           760:       value(locyi)=value(locyi)+xgd
        !           761:       locy=lynl+nodplc(loc+24)
        !           762:       locyi=imynl+nodplc(loc+24)
        !           763:       value(locy)=value(locy)+gspr+gds+gm+ggs
        !           764:       value(locyi)=value(locyi)+xgs
        !           765:       locy=lynl+nodplc(loc+9)
        !           766:       value(locy)=value(locy)-gdpr
        !           767:       locy=lynl+nodplc(loc+10)
        !           768:       locyi=imynl+nodplc(loc+10)
        !           769:       value(locy)=value(locy)-ggd
        !           770:       value(locyi)=value(locyi)-xgd
        !           771:       locy=lynl+nodplc(loc+11)
        !           772:       locyi=imynl+nodplc(loc+11)
        !           773:       value(locy)=value(locy)-ggs
        !           774:       value(locyi)=value(locyi)-xgs
        !           775:       locy=lynl+nodplc(loc+12)
        !           776:       value(locy)=value(locy)-gspr
        !           777:       locy=lynl+nodplc(loc+13)
        !           778:       value(locy)=value(locy)-gdpr
        !           779:       locy=lynl+nodplc(loc+14)
        !           780:       locyi=imynl+nodplc(loc+14)
        !           781:       value(locy)=value(locy)-ggd+gm
        !           782:       value(locyi)=value(locyi)-xgd
        !           783:       locy=lynl+nodplc(loc+15)
        !           784:       value(locy)=value(locy)-gds-gm
        !           785:       locy=lynl+nodplc(loc+16)
        !           786:       locyi=imynl+nodplc(loc+16)
        !           787:       value(locy)=value(locy)-ggs-gm
        !           788:       value(locyi)=value(locyi)-xgs
        !           789:       locy=lynl+nodplc(loc+17)
        !           790:       value(locy)=value(locy)-gspr
        !           791:       locy=lynl+nodplc(loc+18)
        !           792:       value(locy)=value(locy)-gds
        !           793:       loc=nodplc(loc)
        !           794:       go to 310
        !           795: c
        !           796: c  mosfets
        !           797: c
        !           798:   350 loc=locate(14)
        !           799:   360 if (loc.eq.0) go to 400
        !           800:       locv=nodplc(loc+1)
        !           801:       locm=nodplc(loc+8)
        !           802:       itype=nodplc(locm+2)
        !           803:       locm=nodplc(locm+1)
        !           804:       loct=lx0+nodplc(loc+26)
        !           805:       gdpr=value(locv+11)
        !           806:       gspr=value(locv+12)
        !           807:       if(itype.eq.0) go to 380
        !           808:       xl=value(locv+1)-2.0d0*value(locm+20)
        !           809:       xw=value(locv+2)-2.0d0*value(locm+36)
        !           810:       covlgs=value(locm+8)*xw
        !           811:       covlgd=value(locm+9)*xw
        !           812:       covlgb=value(locm+10)*xl
        !           813:       didvg=value(loct)
        !           814:       didvd=value(loct+1)
        !           815:       didvs=value(loct+2)
        !           816:       geqbd=value(loct+3)
        !           817:       geqbs=value(loct+5)
        !           818:       ccgg=value(loct+8)
        !           819:       ccgd=value(loct+9)
        !           820:       ccgs=value(loct+10)
        !           821:       ccbg=value(loct+11)
        !           822:       ccbd=value(loct+12)
        !           823:       ccbs=value(loct+13)
        !           824:       capbd=value(loct+14)
        !           825:       capbs=value(loct+15)
        !           826:       xccg2=-0.5d0*(ccgg+ccbg)*omega
        !           827:       xccd2=-0.5d0*(ccgd+ccbd)*omega
        !           828:       xccs2=-0.5d0*(ccgs+ccbs)*omega
        !           829:       xccdg=xccg2-covlgd*omega
        !           830:       xccdd=xccd2+(capbd+covlgd)*omega
        !           831:       xccds=xccs2
        !           832:       xccsg=xccg2-covlgs*omega
        !           833:       xccsd=xccd2
        !           834:       xccss=xccs2+(capbs+covlgs)*omega
        !           835:       xccgg=(ccgg+covlgd+covlgs+covlgb)*omega
        !           836:       xccgd=(ccgd-covlgd)*omega
        !           837:       xccgs=(ccgs-covlgs)*omega
        !           838:       xccbg=(ccbg-covlgb)*omega
        !           839:       xccbd=xccbd+(ccbd-capbd)*omega
        !           840:       xccbs=xccbs+(ccbs-capbs)*omega
        !           841:       gccdg=didvg
        !           842:       gccdd=geqbd+didvd
        !           843:       gccds=didvs
        !           844:       gccsg=-didvg
        !           845:       gccsd=-didvd
        !           846:       gccss=geqbs-didvs
        !           847:       gccbd=-geqbd
        !           848:       gccbs=-geqbs
        !           849:       locyi=imynl+nodplc(loc+28)
        !           850:       value(locyi)=value(locyi)+xccgg
        !           851:       locyi=imynl+nodplc(loc+30)
        !           852:       value(locyi)=value(locyi)-xccbg-xccbd-xccbs
        !           853:       locyi=imynl+nodplc(loc+31)
        !           854:       value(locyi)=value(locyi)+xccdd
        !           855:       locyi=imynl+nodplc(loc+32)
        !           856:       value(locyi)=value(locyi)+xccss
        !           857:       locyi=imynl+nodplc(loc+11)
        !           858:       value(locyi)=value(locyi)-xccgg-xccgd-xccgs
        !           859:       locyi=imynl+nodplc(loc+12)
        !           860:       value(locyi)=value(locyi)+xccgd
        !           861:       locyi=imynl+nodplc(loc+13)
        !           862:       value(locyi)=value(locyi)+xccgs
        !           863:       locyi=imynl+nodplc(loc+15)
        !           864:       value(locyi)=value(locyi)+xccbg
        !           865:       locyi=imynl+nodplc(loc+16)
        !           866:       value(locyi)=value(locyi)+xccbd
        !           867:       locyi=imynl+nodplc(loc+17)
        !           868:       value(locyi)=value(locyi)+xccbs
        !           869:       locyi=imynl+nodplc(loc+19)
        !           870:       value(locyi)=value(locyi)+xccdg
        !           871:       locyi=imynl+nodplc(loc+20)
        !           872:       value(locyi)=value(locyi)-xccdg-xccdd-xccds
        !           873:       locyi=imynl+nodplc(loc+21)
        !           874:       value(locyi)=value(locyi)+xccds
        !           875:       locyi=imynl+nodplc(loc+22)
        !           876:       value(locyi)=value(locyi)+xccsg
        !           877:       locyi=imynl+nodplc(loc+24)
        !           878:       value(locyi)=value(locyi)-xccsg-xccsd-xccss
        !           879:       locyi=imynl+nodplc(loc+25)
        !           880:       value(locyi)=value(locyi)+xccsd
        !           881:       locy=lynl+nodplc(loc+27)
        !           882:       value(locy)=value(locy)+gdpr
        !           883:       locy=lynl+nodplc(loc+29)
        !           884:       value(locy)=value(locy)+gspr
        !           885:       locy=lynl+nodplc(loc+30)
        !           886:       value(locy)=value(locy)-gccbd-gccbs
        !           887:       locy=lynl+nodplc(loc+31)
        !           888:       value(locy)=value(locy)+gdpr+gccdd
        !           889:       locy=lynl+nodplc(loc+32)
        !           890:       value(locy)=value(locy)+gspr+gccss
        !           891:       locy=lynl+nodplc(loc+10)
        !           892:       value(locy)=value(locy)-gdpr
        !           893:       locy=lynl+nodplc(loc+14)
        !           894:       value(locy)=value(locy)-gspr
        !           895:       locy=lynl+nodplc(loc+16)
        !           896:       value(locy)=value(locy)+gccbd
        !           897:       locy=lynl+nodplc(loc+17)
        !           898:       value(locy)=value(locy)+gccbs
        !           899:       locy=lynl+nodplc(loc+18)
        !           900:       value(locy)=value(locy)-gdpr
        !           901:       locy=lynl+nodplc(loc+19)
        !           902:       value(locy)=value(locy)+gccdg
        !           903:       locy=lynl+nodplc(loc+20)
        !           904:       value(locy)=value(locy)-gccdg-gccdd-gccds
        !           905:       locy=lynl+nodplc(loc+21)
        !           906:       value(locy)=value(locy)+gccds
        !           907:       locy=lynl+nodplc(loc+22)
        !           908:       value(locy)=value(locy)+gccsg
        !           909:       locy=lynl+nodplc(loc+23)
        !           910:       value(locy)=value(locy)-gspr
        !           911:       locy=lynl+nodplc(loc+24)
        !           912:       value(locy)=value(locy)-gccsg-gccsd-gccss
        !           913:       locy=lynl+nodplc(loc+25)
        !           914:       value(locy)=value(locy)+gccsd
        !           915:       loc=nodplc(loc)
        !           916:       go to 360
        !           917: c... ga-as fets
        !           918:   380 continue
        !           919:       devmod=value(locv+8)
        !           920:       ggd=value(loct+6)
        !           921:       gm=0.0d0
        !           922:       gds=0.0d0
        !           923:       gmj1=value(loct+7)
        !           924:       gdb=value(loct+8)
        !           925:       ggs=value(loct+9)
        !           926:       xcds=value(loct+10)*omega
        !           927:       gsb=value(loct+11)
        !           928:       xcgs=value(loct+12)*omega
        !           929:       gmj2=value(loct+13)
        !           930:       xcgd=value(loct+14)*omega
        !           931:       xcgb=value(loct+16)*omega
        !           932: c     write(6,1001) ggd,gm,gds,gmj1,gdb,ggs,gsb,gmj2
        !           933:  1001 format(' ggd gm gds gmj1 gdb ggs gsb gmj2'/,1x,1p8e9.1)
        !           934:       if(devmod.gt.0.0d0) go to 385
        !           935:       gmrev=gm
        !           936:       gmnrm=0.0d0
        !           937:       gm=0.0d0
        !           938:       gmj1r=gmj1
        !           939:       gmj1=0.0d0
        !           940:       gmj1n=0.0d0
        !           941:       gmj2n=0.0d0
        !           942:       gmj2r=0.0d0
        !           943:       go to 390
        !           944:   385 gmnrm=gm
        !           945:       gmrev=0.0d0
        !           946:       gm=0.0d0
        !           947:       gmj2n=gmj2
        !           948:       gmj2r=0.0d0
        !           949:       gmj2=0.0d0
        !           950:       gmj1r=0.0d0
        !           951:       gmj1n=0.0d0
        !           952:   390 locy=lynl+nodplc(loc+27)
        !           953:       value(locy)=value(locy)+gdpr
        !           954:       locy=lynl+nodplc(loc+28)
        !           955:       locyi=imynl+nodplc(loc+28)
        !           956:       value(locy)=value(locy)+ggd+ggs
        !           957:       value(locyi)=value(locyi)+xcgd+xcgs+xcgb
        !           958:       locy=lynl+nodplc(loc+29)
        !           959:       value(locy)=value(locy)+gspr
        !           960:       locy=lynl+nodplc(loc+30)
        !           961:       locyi=imynl+nodplc(loc+30)
        !           962:       value(locy)=value(locy)+gdb+gsb+gmj1+gmj2
        !           963:       value(locyi)=value(locyi)+xcgb
        !           964:       locy=lynl+nodplc(loc+31)
        !           965:       locyi=imynl+nodplc(loc+31)
        !           966:       value(locy)=value(locy)+gdpr+gds+gdb+ggd-gmrev-gmj1r
        !           967:       value(locyi)=value(locyi)+xcds+xcgd
        !           968:       locy=lynl+nodplc(loc+32)
        !           969:       locyi=imynl+nodplc(loc+32)
        !           970:       value(locy)=value(locy)+gspr+gds+gsb+ggs+gmnrm-gmj2n
        !           971:       value(locyi)=value(locyi)+xcds+xcgs
        !           972:       locy=lynl+nodplc(loc+10)
        !           973:       value(locy)=value(locy)-gdpr
        !           974:       locyi=imynl+nodplc(loc+11)
        !           975:       value(locyi)=value(locyi)-xcgb
        !           976:       locy=lynl+nodplc(loc+12)
        !           977:       locyi=imynl+nodplc(loc+12)
        !           978:       value(locy)=value(locy)-ggd
        !           979:       value(locyi)=value(locyi)-xcgd
        !           980:       locy=lynl+nodplc(loc+13)
        !           981:       locyi=imynl+nodplc(loc+13)
        !           982:       value(locy)=value(locy)-ggs
        !           983:       value(locyi)=value(locyi)-xcgs
        !           984:       locy=lynl+nodplc(loc+14)
        !           985:       value(locy)=value(locy)-gspr
        !           986:       locy=lynl+nodplc(loc+15)
        !           987:       locyi=imynl+nodplc(loc+15)
        !           988:       value(locy)=value(locy)-gmj2n-gmj1n-gmj1r-gmj2r-gmj1-gmj2
        !           989:       value(locyi)=value(locyi)-xcgb
        !           990:       locy=lynl+nodplc(loc+16)
        !           991:       value(locy)=value(locy)-gdb+gmj2r+gmj1r
        !           992:       locy=lynl+nodplc(loc+17)
        !           993:       value(locy)=value(locy)-gsb+gmj1n+gmj2n
        !           994:       locy=lynl+nodplc(loc+18)
        !           995:       value(locy)=value(locy)-gdpr
        !           996:       locy=lynl+nodplc(loc+19)
        !           997:       locyi=imynl+nodplc(loc+19)
        !           998:       value(locy)=value(locy)-ggd+gmnrm+gmrev+gmj1r+gmj1n+gmj1+gm
        !           999:       value(locyi)=value(locyi)-xcgd
        !          1000:       locy=lynl+nodplc(loc+20)
        !          1001:       value(locy)=value(locy)-gdb-gmj1-gm
        !          1002:       locy=lynl+nodplc(loc+21)
        !          1003:       locyi=imynl+nodplc(loc+21)
        !          1004:       value(locy)=value(locy)-gds-gmnrm-gmj1n
        !          1005:       value(locyi)=value(locyi)-xcds
        !          1006:       locy=lynl+nodplc(loc+22)
        !          1007:       locyi=imynl+nodplc(loc+22)
        !          1008:       value(locy)=value(locy)-ggs-gmnrm-gmrev+gmj2r+gmj2n+gmj2-gm
        !          1009:       value(locyi)=value(locyi)-xcgs
        !          1010:       locy=lynl+nodplc(loc+23)
        !          1011:       value(locy)=value(locy)-gspr
        !          1012:       locy=lynl+nodplc(loc+24)
        !          1013:       value(locy)=value(locy)-gsb-gmj2+gm
        !          1014:       locy=lynl+nodplc(loc+25)
        !          1015:       locyi=imynl+nodplc(loc+25)
        !          1016:       value(locy)=value(locy)-gds+gmrev-gmj2r
        !          1017:       value(locyi)=value(locyi)-xcds
        !          1018:       loc=nodplc(loc)
        !          1019:       go to 360
        !          1020: c
        !          1021: c  transmission lines
        !          1022: c
        !          1023:   400 loc=locate(17)
        !          1024:   410 if (loc.eq.0) go to 1000
        !          1025:       locv=nodplc(loc+1)
        !          1026:       z0=value(locv+1)
        !          1027:       y0=1.0d0/z0
        !          1028:       td=value(locv+2)
        !          1029:       arg=-omega*td
        !          1030:       rval=dcos(arg)
        !          1031:       xval=dsin(arg)
        !          1032:       locy=lynl+nodplc(loc+10)
        !          1033:       value(locy)=value(locy)+y0
        !          1034:       locy=lynl+nodplc(loc+11)
        !          1035:       locyi=imynl+nodplc(loc+11)
        !          1036:       value(locy)=-y0
        !          1037:       value(locyi)=0.0d0
        !          1038:       locy=lynl+nodplc(loc+12)
        !          1039:       locyi=imynl+nodplc(loc+12)
        !          1040:       value(locy)=-1.0d0
        !          1041:       value(locyi)=0.0d0
        !          1042:       locy=lynl+nodplc(loc+13)
        !          1043:       value(locy)=value(locy)+y0
        !          1044:       locy=lynl+nodplc(loc+14)
        !          1045:       locyi=imynl+nodplc(loc+14)
        !          1046:       value(locy)=-1.0d0
        !          1047:       value(locyi)=0.0d0
        !          1048:       locy=lynl+nodplc(loc+15)
        !          1049:       locyi=imynl+nodplc(loc+15)
        !          1050:       value(locy)=-y0
        !          1051:       value(locyi)=0.0d0
        !          1052:       locy=lynl+nodplc(loc+16)
        !          1053:       locyi=imynl+nodplc(loc+16)
        !          1054:       value(locy)=+y0
        !          1055:       value(locyi)=0.0d0
        !          1056:       locy=lynl+nodplc(loc+17)
        !          1057:       locyi=imynl+nodplc(loc+17)
        !          1058:       value(locy)=+1.0d0
        !          1059:       value(locyi)=0.0d0
        !          1060:       locy=lynl+nodplc(loc+18)
        !          1061:       locyi=imynl+nodplc(loc+18)
        !          1062:       value(locy)=+y0
        !          1063:       value(locyi)=0.0d0
        !          1064:       locy=lynl+nodplc(loc+19)
        !          1065:       locyi=imynl+nodplc(loc+19)
        !          1066:       value(locy)=+1.0d0
        !          1067:       value(locyi)=0.0d0
        !          1068:       locy=lynl+nodplc(loc+20)
        !          1069:       locyi=imynl+nodplc(loc+20)
        !          1070:       value(locy)=-1.0d0
        !          1071:       value(locyi)=0.0d0
        !          1072:       locy=lynl+nodplc(loc+21)
        !          1073:       locyi=imynl+nodplc(loc+21)
        !          1074:       value(locy)=-rval
        !          1075:       value(locyi)=-xval
        !          1076:       locy=lynl+nodplc(loc+22)
        !          1077:       locyi=imynl+nodplc(loc+22)
        !          1078:       value(locy)=+rval
        !          1079:       value(locyi)=+xval
        !          1080:       locy=lynl+nodplc(loc+23)
        !          1081:       locyi=imynl+nodplc(loc+23)
        !          1082:       value(locy)=+1.0d0
        !          1083:       value(locyi)=0.0d0
        !          1084:       locy=lynl+nodplc(loc+24)
        !          1085:       locyi=imynl+nodplc(loc+24)
        !          1086:       value(locy)=-rval*z0
        !          1087:       value(locyi)=-xval*z0
        !          1088:       locy=lynl+nodplc(loc+25)
        !          1089:       locyi=imynl+nodplc(loc+25)
        !          1090:       value(locy)=-rval
        !          1091:       value(locyi)=-xval
        !          1092:       locy=lynl+nodplc(loc+26)
        !          1093:       locyi=imynl+nodplc(loc+26)
        !          1094:       value(locy)=+rval
        !          1095:       value(locyi)=+xval
        !          1096:       locy=lynl+nodplc(loc+27)
        !          1097:       locyi=imynl+nodplc(loc+27)
        !          1098:       value(locy)=-1.0d0
        !          1099:       value(locyi)=0.0d0
        !          1100:       locy=lynl+nodplc(loc+28)
        !          1101:       locyi=imynl+nodplc(loc+28)
        !          1102:       value(locy)=+1.0d0
        !          1103:       value(locyi)=0.0d0
        !          1104:       locy=lynl+nodplc(loc+29)
        !          1105:       locyi=imynl+nodplc(loc+29)
        !          1106:       value(locy)=-rval*z0
        !          1107:       value(locyi)=-xval*z0
        !          1108:       locy=lynl+nodplc(loc+31)
        !          1109:       locyi=imynl+nodplc(loc+31)
        !          1110:       value(locy)=-y0
        !          1111:       value(locyi)=0.0d0
        !          1112:       locy=lynl+nodplc(loc+32)
        !          1113:       locyi=imynl+nodplc(loc+32)
        !          1114:       value(locy)=-y0
        !          1115:       value(locyi)=0.0d0
        !          1116:       loc=nodplc(loc)
        !          1117:       go to 410
        !          1118: c
        !          1119: c  reorder right-hand side
        !          1120: c
        !          1121:  1000 do 1010 i=2,nstop
        !          1122:       j=nodplc(iswap+i)
        !          1123:       value(ndiag+i)=value(lvn+j)
        !          1124:       value(ndiag+i+nstop)=value(imvn+j)
        !          1125:  1010 continue
        !          1126:       call copy8(value(ndiag+1),value(lvn+1),nstop)
        !          1127:       call copy8(value(ndiag+nstop+1),value(imvn+1),nstop)
        !          1128: c
        !          1129: c  finished
        !          1130: c
        !          1131:       return
        !          1132:       end
        !          1133:       subroutine noise(loco)
        !          1134:       implicit double precision (a-h,o-z)
        !          1135: c
        !          1136: c     this routine computes the noise due to various circuit elements.
        !          1137: c
        !          1138:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !          1139:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !          1140:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !          1141:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !          1142:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !          1143:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !          1144:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !          1145:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !          1146:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !          1147:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !          1148:      2   itemno,nosolv,ipostp,iscrch
        !          1149:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !          1150:      1  defas,rstats(50),iwidth,lwidth,nopage
        !          1151:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !          1152:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !          1153:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !          1154:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !          1155:       common /blank/ value(1000)
        !          1156:       integer nodplc(64)
        !          1157:       complex*16 cvalue(32)
        !          1158:       equivalence (value(1),nodplc(1),cvalue(1))
        !          1159: c
        !          1160: c
        !          1161:       dimension vno1(12),vno2(12),vno3(12),vno4(12),vno5(12),vno6(12)
        !          1162:       dimension vntot(12),anam(12),string(5)
        !          1163:       dimension titln(4),v(2)
        !          1164:       dimension afmt1(3),afmt2(3)
        !          1165:       complex*16 cval,c(1)
        !          1166:       equivalence (c(1),v(1),cval)
        !          1167:       equivalence (v(1),vreal),(v(2),vimag)
        !          1168:       data titln / 8hnoise an, 8halysis  , 8h        , 8h         /
        !          1169:       data alsrb,alsrc,alsre,alsrs,alsrd / 2hrb,2hrc,2hre,2hrs,2hrd /
        !          1170:       data alsib,alsic,alsid,alsfn / 2hib,2hic,2hid,2hfn /
        !          1171:       data alstot / 5htotal /
        !          1172:       data aslash,ablnk / 1h/, 1h  /
        !          1173:       data afmt1 /8h(////,11,8hx,  (2x,,8ha8))    /
        !          1174:       data afmt2 /8h(1h0,a8,,8h1p  d10.,8h3)      /
        !          1175:       kntr=12
        !          1176:       if(lwidth.le.80) kntr=7
        !          1177:       ipos=11
        !          1178:       call move(afmt1,ipos,ablnk,1,2)
        !          1179:       call alfnum(kntr,afmt1,ipos)
        !          1180:       ipos=11
        !          1181:       call move(afmt2,ipos,ablnk,1,2)
        !          1182:       call alfnum(kntr,afmt2,ipos)
        !          1183:       nprnt=0
        !          1184:       freq=omega/twopi
        !          1185:       if (icalc.ge.2) go to 10
        !          1186:       fourkt=4.0d0*charge*vt
        !          1187:       twoq=2.0d0*charge
        !          1188:       noposo=nodplc(nosout+2)
        !          1189:       nonego=nodplc(nosout+3)
        !          1190:       kntlim=lwidth/11
        !          1191:       nkntr=1
        !          1192:    10 if (nosprt.eq.0) go to 30
        !          1193:       if (nkntr.gt.icalc) go to 30
        !          1194:       nprnt=1
        !          1195:       nkntr=nkntr+nosprt
        !          1196:       call title(0,lwidth,1,titln)
        !          1197:       write (6,16) freq
        !          1198:    16 format('0    frequency = ',1pd10.3,' hz'/)
        !          1199: c
        !          1200: c  obtain adjoint circuit solution
        !          1201: c
        !          1202:    30 vnrms=0.0d0
        !          1203:       cval=cvalue(lcvn+noposo)-cvalue(lcvn+nonego)
        !          1204:       vout=dsqrt(vreal*vreal+vimag*vimag)
        !          1205:       vout=dmax1(vout,1.0d-20)
        !          1206:       call zero8(value(lvn+1),nstop)
        !          1207:       call zero8(value(imvn+1),nstop)
        !          1208:       value(lvn+noposo)=-1.0d0
        !          1209:       value(lvn+nonego)=+1.0d0
        !          1210:       call acasol
        !          1211: c
        !          1212: c  resistors
        !          1213: c
        !          1214:       if (jelcnt(1).eq.0) go to 200
        !          1215:       ititle=0
        !          1216:    91 format(//'0**** resistor squared noise voltages (sq v/hz)')
        !          1217:   100 loc=locate(1)
        !          1218:       kntr=0
        !          1219:   110 if (loc.eq.0) go to 130
        !          1220:       kntr=kntr+1
        !          1221:       locv=nodplc(loc+1)
        !          1222:       anam(kntr)=value(locv)
        !          1223:       node1=nodplc(loc+2)
        !          1224:       node2=nodplc(loc+3)
        !          1225:       cval=cvalue(lcvn+node1)-cvalue(lcvn+node2)
        !          1226:       vntot(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locv+1)
        !          1227:       vnrms=vnrms+vntot(kntr)
        !          1228:       if (kntr.ge.kntlim) go to 140
        !          1229:   120 loc=nodplc(loc)
        !          1230:       go to 110
        !          1231:   130 if (kntr.eq.0) go to 200
        !          1232:   140 if (nprnt.eq.0) go to 160
        !          1233:       if (ititle.eq.0) write (6,91)
        !          1234:       ititle=1
        !          1235:       write (6,afmt1) (anam(i),i=1,kntr)
        !          1236:       write (6,afmt2) alstot,(vntot(i),i=1,kntr)
        !          1237:   160 kntr=0
        !          1238:       if (loc.ne.0) go to 120
        !          1239: c
        !          1240: c  diodes
        !          1241: c
        !          1242:   200 if (jelcnt(11).eq.0) go to 300
        !          1243:       ititle=0
        !          1244:   201 format(//'0**** diode squared noise voltages (sq v/hz)')
        !          1245:   210 loc=locate(11)
        !          1246:       kntr=0
        !          1247:   220 if (loc.eq.0) go to 240
        !          1248:       kntr=kntr+1
        !          1249:       locv=nodplc(loc+1)
        !          1250:       anam(kntr)=value(locv)
        !          1251:       node1=nodplc(loc+2)
        !          1252:       node2=nodplc(loc+3)
        !          1253:       node3=nodplc(loc+4)
        !          1254:       locm=nodplc(loc+5)
        !          1255:       locm=nodplc(locm+1)
        !          1256:       loct=nodplc(loc+11)
        !          1257:       area=value(locv+1)
        !          1258:       fnk=value(locm+10)
        !          1259:       fna=value(locm+11)
        !          1260: c
        !          1261: c  ohmic resistance
        !          1262: c
        !          1263:       cval=cvalue(lcvn+node1)-cvalue(lcvn+node3)
        !          1264:       vno1(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locm+2)*area
        !          1265: c
        !          1266: c  junction shot noise and flicker noise
        !          1267: c
        !          1268:       cval=cvalue(lcvn+node3)-cvalue(lcvn+node2)
        !          1269:       vtemp=vreal*vreal+vimag*vimag
        !          1270:       arg=dmax1(dabs(value(lx0+loct+1)),1.0d-20)
        !          1271:       vno2(kntr)=vtemp*twoq*arg
        !          1272:       vno3(kntr)=vtemp*fnk*dexp(fna*dlog(arg))/freq
        !          1273:       vntot(kntr)=vno1(kntr)+vno2(kntr)+vno3(kntr)
        !          1274:       vnrms=vnrms+vntot(kntr)
        !          1275:       if (kntr.ge.kntlim) go to 250
        !          1276:   230 loc=nodplc(loc)
        !          1277:       go to 220
        !          1278:   240 if (kntr.eq.0) go to 300
        !          1279:   250 if (nprnt.eq.0) go to 260
        !          1280:       if (ititle.eq.0) write (6,201)
        !          1281:       ititle=1
        !          1282:       write (6,afmt1) (anam(i),i=1,kntr)
        !          1283:       write (6,afmt2) alsrs,(vno1(i),i=1,kntr)
        !          1284:       write (6,afmt2) alsid,(vno2(i),i=1,kntr)
        !          1285:       write (6,afmt2) alsfn,(vno3(i),i=1,kntr)
        !          1286:       write (6,afmt2) alstot,(vntot(i),i=1,kntr)
        !          1287:   260 kntr=0
        !          1288:       if (loc.ne.0) go to 230
        !          1289: c
        !          1290: c  bipolar junction transistors
        !          1291: c
        !          1292:   300 if (jelcnt(12).eq.0) go to 400
        !          1293:       ititle=0
        !          1294:   301 format(//'0**** transistor squared noise voltages (sq v/hz)')
        !          1295:   310 loc=locate(12)
        !          1296:       kntr=0
        !          1297:   320 if (loc.eq.0) go to 340
        !          1298:       kntr=kntr+1
        !          1299:       locv=nodplc(loc+1)
        !          1300:       anam(kntr)=value(locv)
        !          1301:       node1=nodplc(loc+2)
        !          1302:       node2=nodplc(loc+3)
        !          1303:       node3=nodplc(loc+4)
        !          1304:       node4=nodplc(loc+5)
        !          1305:       node5=nodplc(loc+6)
        !          1306:       node6=nodplc(loc+7)
        !          1307:       locm=nodplc(loc+8)
        !          1308:       locm=nodplc(locm+1)
        !          1309:       loct=nodplc(loc+22)
        !          1310:       area=value(locv+1)
        !          1311:       fnk=value(locm+44)
        !          1312:       fna=value(locm+45)
        !          1313: c
        !          1314: c  extrinsic resistances
        !          1315: c
        !          1316: c...  base resistance
        !          1317:       cval=cvalue(lcvn+node2)-cvalue(lcvn+node5)
        !          1318:       vno1(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(lx0+loct+16)
        !          1319:      1  *area
        !          1320: c...  collector resistance
        !          1321:       cval=cvalue(lcvn+node1)-cvalue(lcvn+node4)
        !          1322:       vno2(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locm+20)*area
        !          1323: c...  emitter resistance
        !          1324:       cval=cvalue(lcvn+node3)-cvalue(lcvn+node6)
        !          1325:       vno3(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locm+19)*area
        !          1326: c
        !          1327: c  base current shot noise and flicker noise
        !          1328: c
        !          1329:       cval=cvalue(lcvn+node5)-cvalue(lcvn+node6)
        !          1330:       vtemp=vreal*vreal+vimag*vimag
        !          1331:       arg=dmax1(dabs(value(lx0+loct+3)),1.0d-20)
        !          1332:       vno4(kntr)=vtemp*twoq*arg
        !          1333:       vno5(kntr)=vtemp*fnk*dexp(fna*dlog(arg))/freq
        !          1334: c
        !          1335: c  collector current shot noise
        !          1336: c
        !          1337:       cval=cvalue(lcvn+node4)-cvalue(lcvn+node6)
        !          1338:       vno6(kntr)=(vreal*vreal+vimag*vimag)*twoq*dabs(value(lx0+loct+2))
        !          1339:       vntot(kntr)=vno1(kntr)+vno2(kntr)+vno3(kntr)+vno4(kntr)+vno5(kntr)
        !          1340:      1   +vno6(kntr)
        !          1341:       vnrms=vnrms+vntot(kntr)
        !          1342:       if (kntr.ge.kntlim) go to 350
        !          1343:   330 loc=nodplc(loc)
        !          1344:       go to 320
        !          1345:   340 if (kntr.eq.0) go to 400
        !          1346:   350 if (nprnt.eq.0) go to 360
        !          1347:       if (ititle.eq.0) write (6,301)
        !          1348:       ititle=1
        !          1349:       write (6,afmt1) (anam(i),i=1,kntr)
        !          1350:       write (6,afmt2) alsrb,(vno1(i),i=1,kntr)
        !          1351:       write (6,afmt2) alsrc,(vno2(i),i=1,kntr)
        !          1352:       write (6,afmt2) alsre,(vno3(i),i=1,kntr)
        !          1353:       write (6,afmt2) alsib,(vno4(i),i=1,kntr)
        !          1354:       write (6,afmt2) alsic,(vno6(i),i=1,kntr)
        !          1355:       write (6,afmt2) alsfn,(vno5(i),i=1,kntr)
        !          1356:       write (6,afmt2) alstot,(vntot(i),i=1,kntr)
        !          1357:   360 kntr=0
        !          1358:       if (loc.ne.0) go to 330
        !          1359: c
        !          1360: c  jfets
        !          1361: c
        !          1362:   400 if (jelcnt(13).eq.0) go to 500
        !          1363:       ititle=0
        !          1364:   401 format(//'0**** jfet squared noise voltages (sq v/hz)')
        !          1365:   410 loc=locate(13)
        !          1366:       kntr=0
        !          1367:   420 if (loc.eq.0) go to 440
        !          1368:       kntr=kntr+1
        !          1369:       locv=nodplc(loc+1)
        !          1370:       anam(kntr)=value(locv)
        !          1371:       node1=nodplc(loc+2)
        !          1372:       node2=nodplc(loc+3)
        !          1373:       node3=nodplc(loc+4)
        !          1374:       node4=nodplc(loc+5)
        !          1375:       node5=nodplc(loc+6)
        !          1376:       locm=nodplc(loc+7)
        !          1377:       locm=nodplc(locm+1)
        !          1378:       loct=nodplc(loc+19)
        !          1379:       area=value(locv+1)
        !          1380:       fnk=value(locm+10)
        !          1381:       fna=value(locm+11)
        !          1382: c
        !          1383: c  extrinsic resistances
        !          1384: c
        !          1385: c...  drain resistance
        !          1386:       cval=cvalue(lcvn+node1)-cvalue(lcvn+node4)
        !          1387:       vno1(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locm+4)*area
        !          1388: c...  source resistance
        !          1389:       cval=cvalue(lcvn+node3)-cvalue(lcvn+node5)
        !          1390:       vno2(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locm+5)*area
        !          1391: c
        !          1392: c  drain current shot noise and flicker noise
        !          1393: c
        !          1394:       cval=cvalue(lcvn+node4)-cvalue(lcvn+node5)
        !          1395:       vtemp=vreal*vreal+vimag*vimag
        !          1396:       vno3(kntr)=vtemp*fourkt*2.0d0*dabs(value(lx0+loct+5))/3.0d0
        !          1397:       arg=dmax1(dabs(value(lx0+loct+3)),1.0d-20)
        !          1398:       vno4(kntr)=vtemp*fnk*dexp(fna*dlog(arg))/freq
        !          1399:       vntot(kntr)=vno1(kntr)+vno2(kntr)+vno3(kntr)+vno4(kntr)
        !          1400:       vnrms=vnrms+vntot(kntr)
        !          1401:       if (kntr.ge.kntlim) go to 450
        !          1402:   430 loc=nodplc(loc)
        !          1403:       go to 420
        !          1404:   440 if (kntr.eq.0) go to 500
        !          1405:   450 if (nprnt.eq.0) go to 460
        !          1406:       if (ititle.eq.0) write (6,401)
        !          1407:       ititle=1
        !          1408:       write (6,afmt1) (anam(i),i=1,kntr)
        !          1409:       write (6,afmt2) alsrd,(vno1(i),i=1,kntr)
        !          1410:       write (6,afmt2) alsrs,(vno2(i),i=1,kntr)
        !          1411:       write (6,afmt2) alsid,(vno3(i),i=1,kntr)
        !          1412:       write (6,afmt2) alsfn,(vno4(i),i=1,kntr)
        !          1413:       write (6,afmt2) alstot,(vntot(i),i=1,kntr)
        !          1414:   460 kntr=0
        !          1415:       if (loc.ne.0) go to 430
        !          1416: c
        !          1417: c  mosfets
        !          1418: c
        !          1419:   500 if (jelcnt(14).eq.0) go to 600
        !          1420:       ititle=0
        !          1421:   501 format(//'0**** mosfet squared noise voltages (sq v/hz)')
        !          1422:   510 loc=locate(14)
        !          1423:       kntr=0
        !          1424:   520 if (loc.eq.0) go to 540
        !          1425:       kntr=kntr+1
        !          1426:       locv=nodplc(loc+1)
        !          1427:       anam(kntr)=value(locv)
        !          1428:       node1=nodplc(loc+2)
        !          1429:       node2=nodplc(loc+3)
        !          1430:       node3=nodplc(loc+4)
        !          1431:       node4=nodplc(loc+5)
        !          1432:       node5=nodplc(loc+6)
        !          1433:       node6=nodplc(loc+7)
        !          1434:       locm=nodplc(loc+8)
        !          1435:       itype=nodplc(locm+2)
        !          1436:       loct=nodplc(loc+26)
        !          1437:       locm=nodplc(locm+1)
        !          1438:       if(itype.eq.0) go to 522
        !          1439:       xl=value(locv+1)-2.0d0*value(locm+20)
        !          1440:       xw=value(locm+2)-2.0d0*value(locm+36)
        !          1441:       cox=value(locm+13)*xl*xw
        !          1442:       fnk=value(locm+27)
        !          1443:       fna=value(locm+28)
        !          1444: c
        !          1445: c  extrinsic resistances
        !          1446: c
        !          1447: c...  drain resistance
        !          1448:   522 cval=cvalue(lcvn+node1)-cvalue(lcvn+node5)
        !          1449:       vno1(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locv+11)
        !          1450: c...  source resistance
        !          1451:       cval=cvalue(lcvn+node3)-cvalue(lcvn+node6)
        !          1452:       vno2(kntr)=(vreal*vreal+vimag*vimag)*fourkt*value(locv+12)
        !          1453: c
        !          1454: c  drain current shot noise and flicker noise
        !          1455: c
        !          1456:       cval=cvalue(lcvn+node5)-cvalue(lcvn+node6)
        !          1457:       vtemp=vreal*vreal+vimag*vimag
        !          1458:       gm=value(lx0+loct+7)
        !          1459:       arg=dmax1(dabs(value(lx0+loct+4)),1.0d-20)
        !          1460:       if(itype.ne.0) go to 524
        !          1461:       modeop=value(locv+8)
        !          1462:       if(modeop.le.0) gm=value(lx0+loct+13)
        !          1463:       if(value(locm+10).ne.0.0d0) gm=value(locm+10)
        !          1464:       xnexp=value(locm+11)
        !          1465:       fnk=value(locm+12)
        !          1466:       fna=value(locm+13)
        !          1467:       vno4(kntr)=vtemp*fnk*dexp(fna*dlog(arg))/(freq**xnexp)
        !          1468:   524 vno3(kntr)=vtemp*fourkt*dabs(gm)/1.5d0
        !          1469:       if(itype.eq.0) go to 525
        !          1470:       vno4(kntr)=vtemp*fnk*dexp(fna*dlog(arg))/(freq*cox)
        !          1471:   525 vntot(kntr)=vno1(kntr)+vno2(kntr)+vno3(kntr)+vno4(kntr)
        !          1472:       vnrms=vnrms+vntot(kntr)
        !          1473:       if (kntr.ge.kntlim) go to 550
        !          1474:   530 loc=nodplc(loc)
        !          1475:       go to 520
        !          1476:   540 if (kntr.eq.0) go to 600
        !          1477:   550 if (nprnt.eq.0) go to 560
        !          1478:       if (ititle.eq.0) write (6,501)
        !          1479:       ititle=1
        !          1480:       write (6,afmt1) (anam(i),i=1,kntr)
        !          1481:       write (6,afmt2) alsrd,(vno1(i),i=1,kntr)
        !          1482:       write (6,afmt2) alsrs,(vno2(i),i=1,kntr)
        !          1483:       write (6,afmt2) alsid,(vno3(i),i=1,kntr)
        !          1484:       write (6,afmt2) alsfn,(vno4(i),i=1,kntr)
        !          1485:       write (6,afmt2) alstot,(vntot(i),i=1,kntr)
        !          1486:   560 kntr=0
        !          1487:       if (loc.ne.0) go to 530
        !          1488: c
        !          1489: c  compute equivalent input noise voltage
        !          1490: c
        !          1491:   600 vnout=dsqrt(vnrms)
        !          1492:       vnin=vnout/vout
        !          1493:       if (nprnt.eq.0) go to 620
        !          1494:       do 610 i=1,5
        !          1495:       string(i)=ablnk
        !          1496:   610 continue
        !          1497:       ioutyp=1
        !          1498:       ipos=1
        !          1499:       call outnam(nosout,ioutyp,string,ipos)
        !          1500:       call move(string,ipos,aslash,1,1)
        !          1501:       ipos=ipos+1
        !          1502:       locv=nodplc(nosin+1)
        !          1503:       anam1=value(locv)
        !          1504:       call move(string,ipos,anam1,1,8)
        !          1505:       write (6,611) vnrms,vnout,string,vout,anam1,vnin
        !          1506:   611 format(////,
        !          1507:      1   '0**** total output noise voltage',9x,'= ',1pd10.3,' sq v/hz'/,
        !          1508:      2   1h0,40x,'= ',d10.3,' v/rt hz'/,
        !          1509:      3   '0     transfer function value:',
        !          1510:      4   1h0,7x,4a8,a1,'= ',d10.3,/,
        !          1511:      5   '0     equivalent input noise at ',a8,' = ',d10.3,' /rt hz')
        !          1512: c
        !          1513: c  save noise outputs
        !          1514: c
        !          1515:   620 loc=locate(44)
        !          1516:   630 if (loc.eq.0) go to 1000
        !          1517:       iseq=nodplc(loc+4)
        !          1518:       if (nodplc(loc+5).ne.2) go to 640
        !          1519:       cvalue(loco+iseq)=vnout
        !          1520:       go to 650
        !          1521:   640 cvalue(loco+iseq)=vnin
        !          1522:   650 loc=nodplc(loc)
        !          1523:       go to 630
        !          1524: c
        !          1525: c  finished
        !          1526: c
        !          1527:  1000 return
        !          1528:       end
        !          1529:       subroutine acasol
        !          1530:       implicit double precision (a-h,o-z)
        !          1531: c
        !          1532: c     this routine evaluates the response of the adjoint circuit by
        !          1533: c doing a forward/backward substitution step using the transpose of the
        !          1534: c circuit equation coefficient matrix.
        !          1535: c
        !          1536:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !          1537:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !          1538:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !          1539:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !          1540:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !          1541:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !          1542:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !          1543:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !          1544:       common /blank/ value(1000)
        !          1545:       integer nodplc(64)
        !          1546:       complex*16 cvalue(32)
        !          1547:       equivalence (value(1),nodplc(1),cvalue(1))
        !          1548: c
        !          1549: c  evaluates adjoint response by doing forward/backward substitution on
        !          1550: c  the transpose of the y matrix
        !          1551: c
        !          1552: c
        !          1553: c  forward substitution
        !          1554: c
        !          1555:       do 20 i=2,nstop
        !          1556:       io=nodplc(iorder+i)
        !          1557:       call cdiv(value(lvn+io),value(imvn+io),value(lynl+io),
        !          1558:      1  value(imynl+io),value(lvn+io),value(imvn+io))
        !          1559:       jstart=nodplc(iur+i)
        !          1560:       jstop=nodplc(iur+i+1)-1
        !          1561:       if (jstart.gt.jstop) go to 20
        !          1562:       if (value(lvn+io).ne.0.0d0) go to 5
        !          1563:       if (value(imvn+io).eq.0.0d0) go to 20
        !          1564:     5 do 10 j=jstart,jstop
        !          1565:       jo=nodplc(iuc+j)
        !          1566:       jo=nodplc(iorder+jo)
        !          1567:       call cmult(value(lyu+j),value(imynl+nstop+j),value(lvn+io),
        !          1568:      1  value(imvn+io),xreal,ximag)
        !          1569:       value(lvn+jo)=value(lvn+jo)-xreal
        !          1570:       value(imvn+jo)=value(imvn+jo)-ximag
        !          1571:    10 continue
        !          1572:    20 continue
        !          1573: c
        !          1574: c  backward substitution
        !          1575: c
        !          1576:       k=nstop+1
        !          1577:       do 40 i=2,nstop
        !          1578:       k=k-1
        !          1579:       io=nodplc(iorder+k)
        !          1580:       jstart=nodplc(ilc+k)
        !          1581:       jstop=nodplc(ilc+k+1)-1
        !          1582:       if (jstart.gt.jstop) go to 40
        !          1583:       do 30 j=jstart,jstop
        !          1584:       jo=nodplc(ilr+j)
        !          1585:       jo=nodplc(iorder+jo)
        !          1586:       call cmult(value(lyl+j),value(imynl+nstop+nut+j),value(lvn+jo),
        !          1587:      1  value(imvn+jo),xreal,ximag)
        !          1588:       value(lvn+io)=value(lvn+io)-xreal
        !          1589:       value(imvn+io)=value(imvn+io)-ximag
        !          1590:    30 continue
        !          1591:    40 continue
        !          1592: c
        !          1593: c  reorder right-hand side
        !          1594: c
        !          1595:       do 50 i=2,nstop
        !          1596:       j=nodplc(iswap+i)
        !          1597:       value(ndiag+i)=value(lvn+j)
        !          1598:       value(ndiag+i+nstop)=value(imvn+j)
        !          1599:    50 continue
        !          1600:       call copy8(value(ndiag+1),value(lvn+1),nstop)
        !          1601:       call copy8(value(ndiag+nstop+1),value(imvn+1),nstop)
        !          1602:       do 120 i=2,nstop
        !          1603:       cvalue(lcvn+i)=dcmplx(value(lvn+i),value(imvn+i))
        !          1604:   120 continue
        !          1605:       cvalue(lcvn+1)=dcmplx(0.0d0,0.0d0)
        !          1606: c
        !          1607: c  finished
        !          1608: c
        !          1609:       return
        !          1610:       end
        !          1611:       subroutine dinit
        !          1612:       implicit double precision (a-h,o-z)
        !          1613: c
        !          1614: c     this routine performs storage-allocation and one-time computation
        !          1615: c needed to do the small-signal distortion analysis.
        !          1616: c
        !          1617:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !          1618:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !          1619:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !          1620:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !          1621:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !          1622:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !          1623:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !          1624:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !          1625:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !          1626:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !          1627:      2   itemno,nosolv,ipostp,iscrch
        !          1628:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !          1629:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !          1630:       common /blank/ value(1000)
        !          1631:       integer nodplc(64)
        !          1632:       complex*16 cvalue(32)
        !          1633:       equivalence (value(1),nodplc(1),cvalue(1))
        !          1634: c
        !          1635: c
        !          1636:       call getm8(ld0,ndist)
        !          1637:       call getm16(ld1,5*nstop)
        !          1638: c
        !          1639: c  bipolar junction transistors
        !          1640: c
        !          1641:       loc=locate(12)
        !          1642:   100 if (loc.eq.0) go to 200
        !          1643:       locv=nodplc(loc+1)
        !          1644:       area=value(locv+1)
        !          1645:       locm=nodplc(loc+8)
        !          1646:       locm=nodplc(locm+1)
        !          1647:       loct=lx0+nodplc(loc+22)
        !          1648:       locd=ld0+nodplc(loc+23)
        !          1649:       csat=value(locm+1)*area
        !          1650:       ova=value(locm+4)
        !          1651:       tf=value(locm+24)
        !          1652:       tr=value(locm+33)
        !          1653:       czbe=value(locm+21)*area
        !          1654:       czbc=value(locm+29)*area
        !          1655:       pe=value(locm+22)
        !          1656:       xme=value(locm+23)
        !          1657:       pc=value(locm+30)
        !          1658:       xmc=value(locm+31)
        !          1659:       fcpe=value(locm+46)
        !          1660:       fcpc=value(locm+50)
        !          1661:       vbe=value(loct)
        !          1662:       vbc=value(loct+1)
        !          1663:       gpi=value(loct+4)
        !          1664:       go=value(loct+7)
        !          1665:       gm=value(loct+6)
        !          1666:       gmu=value(loct+5)
        !          1667:       if (vbe.gt.0.0d0) go to 110
        !          1668:       evbe=1.0d0
        !          1669:       cbe=csat*vbe/vt
        !          1670:       go to 120
        !          1671:   110 evbe=dexp(vbe/vt)
        !          1672:       cbe=csat*(evbe-1.0d0)
        !          1673:   120 if (vbc.gt.0.0d0) go to 130
        !          1674:       evbc=1.0d0
        !          1675:       cbc=csat*vbc/vt
        !          1676:       arg=1.0d0-vbc/pc
        !          1677:       go to 140
        !          1678:   130 evbc=dexp(vbc/vt)
        !          1679:       cbc=csat*(evbc-1.0d0)
        !          1680:   140 if (vbe.ge.fcpe) go to 150
        !          1681:       arg=1.0d0-vbe/pe
        !          1682:       sarg=dexp(xme*dlog(arg))
        !          1683:       cjeo=czbe/sarg
        !          1684:       argbe=pe-vbe
        !          1685:       cje1=xme*cjeo/argbe
        !          1686:       cje2=xme*(1.0d0+xme)*cje1/argbe
        !          1687:       go to 160
        !          1688:   150 denom=dexp((1.0d0+xme)*dlog(1.0d0-fcpe))
        !          1689:       cjeo=czbe*(1.0d0-fcpe*(1.0d0+xme)+xme*vbe/pe)/denom
        !          1690:       cje1=czbe*xme/(denom*pe)
        !          1691:       cje2=0.0d0
        !          1692:   160 if (vbc.ge.fcpc) go to 170
        !          1693:       arg=1.0d0-vbc/pc
        !          1694:       sarg=dexp(xmc*dlog(arg))
        !          1695:       cjco=czbc/sarg
        !          1696:       argbc=pc-vbc
        !          1697:       cjc1=xmc*cjco/argbc
        !          1698:       cjc2=xmc*(1.0d0+xmc)*cjc1/argbc
        !          1699:       go to 180
        !          1700:   170 denom=dexp((1.0d0+xmc)*dlog(1.0d0-fcpc))
        !          1701:       cjco=czbc*(1.0d0-fcpc*(1.0d0+xmc)+xmc*vbc/pc)/denom
        !          1702:       cjc1=czbc*xmc/(denom*pc)
        !          1703:       cjc2=0.0d0
        !          1704:   180 twovt=vt+vt
        !          1705:       go2=(-go+csat*(evbe+evbc)*ova)/twovt
        !          1706:       gmo2=(cbe+csat)*ova/vt-2.0d0*go2
        !          1707:       gm2=(gm+go)/twovt-gmo2-go2
        !          1708:       gmu2=gmu/twovt
        !          1709:       if (vbc.le.0.0d0) gmu2=0.0d0
        !          1710:       gpi2=gpi/twovt
        !          1711:       if (vbe.le.0.0d0) gpi2=0.0d0
        !          1712:       cbo=tf*csat*evbe/vt
        !          1713:       cbor=tr*csat*evbc/vt
        !          1714:       cb1=cbo/vt
        !          1715:       cb1r=cbor/vt
        !          1716:       trivt=3.0d0*vt
        !          1717:       go3=-(go2+(cbc+csat)*ova/twovt)/trivt
        !          1718:       gmo23=-3.0d0*go3
        !          1719:       gm2o3=-gmo23+(cbe+csat)*ova/(vt*twovt)
        !          1720:       gm3=(gm2-(cbe-cbc)*ova/twovt)/trivt
        !          1721:       gmu3=gmu2/trivt
        !          1722:       gpi3=gpi2/trivt
        !          1723:       cb2=cb1/twovt
        !          1724:       cb2r=cb1r/twovt
        !          1725:       value(locd)=cje1
        !          1726:       value(locd+1)=cje2
        !          1727:       value(locd+2)=cjc1
        !          1728:       value(locd+3)=cjc2
        !          1729:       value(locd+4)=go2
        !          1730:       value(locd+5)=gmo2
        !          1731:       value(locd+6)=gm2
        !          1732:       value(locd+7)=gmu2
        !          1733:       value(locd+8)=gpi2
        !          1734:       value(locd+9)=cbo
        !          1735:       value(locd+10)=cbor
        !          1736:       value(locd+11)=cb1
        !          1737:       value(locd+12)=cb1r
        !          1738:       value(locd+13)=go3
        !          1739:       value(locd+14)=gmo23
        !          1740:       value(locd+15)=gm2o3
        !          1741:       value(locd+16)=gm3
        !          1742:       value(locd+17)=gmu3
        !          1743:       value(locd+18)=gpi3
        !          1744:       value(locd+19)=cb2
        !          1745:       value(locd+20)=cb2r
        !          1746:       loc=nodplc(loc)
        !          1747:       go to 100
        !          1748: c
        !          1749: c  diodes
        !          1750: c
        !          1751:   200 loc=locate(11)
        !          1752:   210 if (loc.eq.0) go to 300
        !          1753:       locv=nodplc(loc+1)
        !          1754:       area=value(locv+1)
        !          1755:       locm=nodplc(loc+5)
        !          1756:       locm=nodplc(locm+1)
        !          1757:       loct=lx0+nodplc(loc+11)
        !          1758:       locd=ld0+nodplc(loc+12)
        !          1759:       csat=value(locm+1)*area
        !          1760:       vte=value(locm+3)*vt
        !          1761:       tau=value(locm+4)
        !          1762:       czero=value(locm+5)*area
        !          1763:       phib=value(locm+6)
        !          1764:       xm=value(locm+7)
        !          1765:       fcpb=value(locm+12)
        !          1766:       vd=value(loct)
        !          1767:       geq=value(loct+2)
        !          1768:       evd=1.0d0
        !          1769:       if (vd.ge.0.0d0) evd=dexp(vd/vte)
        !          1770:       if (vd.ge.fcpb) go to 220
        !          1771:       arg=1.0d0-vd/phib
        !          1772:       sarg=dexp(xm*dlog(arg))
        !          1773:       cdjo=czero/sarg
        !          1774:       argd=phib-vd
        !          1775:       cdj1=xm*czero/argd
        !          1776:       cdj2=xm*(1.0d0+xm)*cdj1/argd
        !          1777:       go to 230
        !          1778:   220 denom=dexp((1.0d0+xm)*dlog(1.0d0-fcpb))
        !          1779:       cdjo=czero*(1.0d0-fcpb*(1.0d0+xm)+xm*vd/phib)/denom
        !          1780:       cdj1=czero*xm/(denom*phib)
        !          1781:       cdj2=0.0d0
        !          1782:       cdj2=0.0d0
        !          1783:   230 cdbo=tau*csat*evd/vte
        !          1784:       cdb1=cdbo/vte
        !          1785:       twovte=2.0d0*vte
        !          1786:       geq2=geq/twovte
        !          1787:       if (vd.le.0.0d0) geq2=0.0d0
        !          1788:       trivte=3.0d0*vte
        !          1789:       geq3=geq2/trivte
        !          1790:       cdb2=cdb1/twovte
        !          1791:       value(locd)=cdj1
        !          1792:       value(locd+1)=cdj2
        !          1793:       value(locd+2)=cdbo
        !          1794:       value(locd+3)=cdb1
        !          1795:       value(locd+4)=geq2
        !          1796:       value(locd+5)=geq3
        !          1797:       value(locd+6)=cdb2
        !          1798:       loc=nodplc(loc)
        !          1799:       go to 210
        !          1800: c
        !          1801: c  finished
        !          1802: c
        !          1803:   300 return
        !          1804:       end
        !          1805:       subroutine disto(loco)
        !          1806:       implicit double precision (a-h,o-z)
        !          1807: c
        !          1808: c     this routine performs the small-signal distortion analysis.
        !          1809: c
        !          1810:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !          1811:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !          1812:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !          1813:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !          1814:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !          1815:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !          1816:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !          1817:      1  defas,rstats(50),iwidth,lwidth,nopage
        !          1818:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !          1819:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !          1820:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !          1821:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !          1822:      2   itemno,nosolv,ipostp,iscrch
        !          1823:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !          1824:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !          1825:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !          1826:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !          1827:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !          1828:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !          1829:       common /blank/ value(1000)
        !          1830:       integer nodplc(64)
        !          1831:       complex*16 cvalue(32)
        !          1832:       equivalence (value(1),nodplc(1),cvalue(1))
        !          1833: c
        !          1834: c
        !          1835:       complex*16 difvn1,difvn2,difvn3,difvi1,difvi2,difvi3,dsgo2,dsgm2,
        !          1836:      1   dsgmu2,dsgpi2,dscb1,dscb1r,dscje1,dscjc1,disto1,disto2,disto3,
        !          1837:      2   dsgmo2,dgm2o3,dgmo23,bew,cew,bcw,be2w,ce2w,bc2w,bew2,cew2,
        !          1838:      3   bcw2,bew12,cew12,bcw12,dscdb1,dscdj1,dsg2,cvabe,cvabc,cvace,
        !          1839:      4   cvout,cvdist
        !          1840:       dimension distit(4)
        !          1841:       dimension vdo(2,12)
        !          1842:       complex*16 cvdo(12)
        !          1843:       equivalence (cvdo(1),vdo(1,1))
        !          1844:       data distit / 8hdistorti, 8hon analy, 8hsis     , 8h         /
        !          1845:       icvw1=ld1
        !          1846:       icv2w1=icvw1+nstop
        !          1847:       icvw2=icv2w1+nstop
        !          1848:       icvw12=icvw2+nstop
        !          1849:       icvadj=icvw12+nstop
        !          1850:       iprnt=0
        !          1851:       if (icalc.ge.2) go to 10
        !          1852:       idnp=nodplc(idist+2)
        !          1853:       idnn=nodplc(idist+3)
        !          1854:       locv=nodplc(idist+1)
        !          1855:       rload=1.0d0/value(locv+1)
        !          1856:       kntr=1
        !          1857:    10 if (idprt.eq.0) go to 30
        !          1858:       if (kntr.gt.icalc) go to 30
        !          1859:       iprnt=1
        !          1860:       kntr=kntr+idprt
        !          1861:       call title(0,lwidth,1,distit)
        !          1862:    30 freq1=dreal(cvalue(loco+1))
        !          1863:       freq2=skw2*freq1
        !          1864:       call copy16(cvalue(lcvn+1),cvalue(icvw1+1),nstop)
        !          1865:       cvout=cvalue(icvw1+idnp)-cvalue(icvw1+idnn)
        !          1866:       call magphs(cvout,omag,ophase)
        !          1867: c
        !          1868: c  begin the distortion analysis
        !          1869: c
        !          1870:       do 1000 kdisto=1,7
        !          1871:       cvdist=dcmplx(0.0d0,0.0d0)
        !          1872:       go to (1000,110,120,130,140,160,170),kdisto
        !          1873:   110 freqd=2.0d0*freq1
        !          1874:       arg=dsqrt(2.0d0*rload*refprl)/(omag*omag)
        !          1875:       if (iprnt.eq.0) go to 200
        !          1876:       write (6,111) freq1,freqd,omag,ophase
        !          1877:   111 format (///5x,'2nd harmonic distortion',30x,'freq1 = ',1pd9.2,
        !          1878:      1   '  hz'//5x,'distortion frequency  ',d9.2,'  hz',16x,
        !          1879:      2   'mag ',d9.3,3x,'phs ',0pf7.2)
        !          1880:       go to 200
        !          1881:   120 freqd=3.0d0*freq1
        !          1882:       arg=2.0d0*rload*refprl/(omag*omag*omag)
        !          1883:       if (iprnt.eq.0) go to 200
        !          1884:       write (6,121) freq1,freqd,omag,ophase
        !          1885:   121 format (1h1,4x,'3rd harmonic distortion',30x,'freq1 = ',1pd9.2,
        !          1886:      1   '  hz'//5x,'distortion frequency  ',d9.2,'  hz',16x,
        !          1887:      2   'mag ',d9.3,3x,'phs ',0pf7.2)
        !          1888:       go to 200
        !          1889:   130 freqd=freq2
        !          1890:       go to 200
        !          1891:   140 freqd=freq1-freq2
        !          1892:       arg=dsqrt(2.0d0*rload*refprl)*spw2/(omag*omag)
        !          1893:       if (iprnt.eq.0) go to 200
        !          1894:       write (6,151) freq1,freq2,freqd,omag,ophase,ow2mag,ow2phs
        !          1895:   151 format (1h1,4x,'2nd order intermodulation difference component',
        !          1896:      1   7x,'freq1 = ',1pd9.2,'  hz',15x,'freq2 = ',d9.2,'  hz'//
        !          1897:      2   5x,'distortion frequency  ',d9.2,'  hz',16x,'mag ',
        !          1898:      3   d9.3,3x,'phs ',0pf7.2,9x,'mag ',1pd9.3,3x,'phs ',0pf7.2)
        !          1899:       go to 200
        !          1900:   160 freqd=freq1+freq2
        !          1901:       arg=dsqrt(2.0d0*rload*refprl)*spw2/(omag*omag)
        !          1902:       if (iprnt.eq.0) go to 200
        !          1903:       write (6,161) freq1,freq2,freqd,omag,ophase,ow2mag,ow2phs
        !          1904:   161 format (1h1,4x,'2nd order intermodulation sum component',
        !          1905:      1   14x,'freq1 = ',1pd9.2,'  hz',15x,'freq2 = ',d9.2,'  hz'//
        !          1906:      2   5x,'distortion frequency  ',d9.2,'  hz',16x,'mag ',
        !          1907:      3   d9.3,3x,'phs ',0pf7.2,9x,'mag ',1pd9.3,3x,'phs ',0pf7.2)
        !          1908:       go to 200
        !          1909:   170 freqd=2.0d0*freq1-freq2
        !          1910:       arg=2.0d0*rload*refprl*spw2/(omag*omag*omag)
        !          1911:       if (iprnt.eq.0) go to 200
        !          1912:       write (6,171) freq1,freq2,freqd,omag,ophase,ow2mag,ow2phs
        !          1913:   171 format (1h1,4x,'3rd order intermodulation difference component',
        !          1914:      1   7x,'freq1 = ',1pd9.2,'  hz',15x,'freq2 = ',d9.2,'  hz'//
        !          1915:      2   5x,'distortion frequency  ',d9.2,'  hz',16x,'mag ',
        !          1916:      3   d9.3,3x,'phs ',0pf7.2,9x,'mag ',1pd9.3,3x,'phs ',0pf7.2)
        !          1917: c
        !          1918: c  load and decompose y matrix
        !          1919: c
        !          1920:   200 omega=twopi*freqd
        !          1921:       igoof=0
        !          1922:       call acload
        !          1923:       call acdcmp
        !          1924:       if (igoof.eq.0) go to 220
        !          1925:       write (6,211) igoof,freqd
        !          1926:   211 format('0warning:  underflow ',i4,' time(s) in distortion analysis
        !          1927:      1 at freq = ',1pd9.3,' hz')
        !          1928:       igoof=0
        !          1929:   220 if (kdisto.eq.4) go to 710
        !          1930: c
        !          1931: c  obtain adjoint solution
        !          1932: c
        !          1933:       call zero8(value(lvn+1),nstop)
        !          1934:       call zero8(value(imvn+1),nstop)
        !          1935:       value(lvn+idnp)=-1.0d0
        !          1936:       value(lvn+idnn)=+1.0d0
        !          1937:       call acasol
        !          1938:       call copy16(cvalue(lcvn+1),cvalue(icvadj+1),nstop)
        !          1939:       call zero8(value(lvn+1),nstop)
        !          1940:       call zero8(value(imvn+1),nstop)
        !          1941: c
        !          1942: c  bjts
        !          1943: c
        !          1944:       if (jelcnt(12).eq.0) go to 500
        !          1945:       ititle=0
        !          1946:   301 format (////1x,'bjt distortion components'//1x,'name',11x,'gm',
        !          1947:      1   8x,'gpi',7x,'go',8x,'gmu',6x,'gmo2',7x,'cb',8x,'cbr',7x,'cje',
        !          1948:      2   7x,'cjc',6x,'total')
        !          1949:   311 format (////1x,'bjt distortion components'//1x,'name',11x,'gm',
        !          1950:      1   8x,'gpi',7x,'go',8x,'gmu',6x,'gmo2',7x,'cb',8x,'cbr',7x,'cje',
        !          1951:      2   7x,'cjc',6x,'gm203',5x,'gmo23',5x,'total')
        !          1952:   320 loc=locate(12)
        !          1953:   330 if (loc.eq.0) go to 500
        !          1954:       locv=nodplc(loc+1)
        !          1955:       loct=lx0+nodplc(loc+22)
        !          1956:       locd=ld0+nodplc(loc+23)
        !          1957:       node1=nodplc(loc+5)
        !          1958:       node2=nodplc(loc+6)
        !          1959:       node3=nodplc(loc+7)
        !          1960:       cje1=value(locd)
        !          1961:       cje2=value(locd+1)
        !          1962:       cjc1=value(locd+2)
        !          1963:       cjc2=value(locd+3)
        !          1964:       go2=value(locd+4)
        !          1965:       gmo2=value(locd+5)
        !          1966:       gm2=value(locd+6)
        !          1967:       gmu2=value(locd+7)
        !          1968:       gpi2=value(locd+8)
        !          1969:       cb1=value(locd+11)
        !          1970:       cb1r=value(locd+12)
        !          1971:       go3=value(locd+13)
        !          1972:       gmo23=value(locd+14)
        !          1973:       gm2o3=value(locd+15)
        !          1974:       gm3=value(locd+16)
        !          1975:       gmu3=value(locd+17)
        !          1976:       gpi3=value(locd+18)
        !          1977:       cb2=value(locd+19)
        !          1978:       cb2r=value(locd+20)
        !          1979:       bew=cvalue(icvw1+node2)-cvalue(icvw1+node3)
        !          1980:       cew=cvalue(icvw1+node1)-cvalue(icvw1+node3)
        !          1981:       bcw=cvalue(icvw1+node2)-cvalue(icvw1+node1)
        !          1982:       if (kdisto.eq.2) go to 370
        !          1983:       be2w=cvalue(icv2w1+node2)-cvalue(icv2w1+node3)
        !          1984:       ce2w=cvalue(icv2w1+node1)-cvalue(icv2w1+node3)
        !          1985:       bc2w=cvalue(icv2w1+node2)-cvalue(icv2w1+node1)
        !          1986:       if (kdisto.eq.3) go to 380
        !          1987:       bew2=cvalue(icvw2+node2)-cvalue(icvw2+node3)
        !          1988:       cew2=cvalue(icvw2+node1)-cvalue(icvw2+node3)
        !          1989:       bcw2=cvalue(icvw2+node2)-cvalue(icvw2+node1)
        !          1990:       if (kdisto.eq.5) go to 390
        !          1991:       if (kdisto.eq.6) go to 400
        !          1992:       bew12=cvalue(icvw12+node2)-cvalue(icvw12+node3)
        !          1993:       cew12=cvalue(icvw12+node1)-cvalue(icvw12+node3)
        !          1994:       bcw12=cvalue(icvw12+node2)-cvalue(icvw12+node1)
        !          1995:       go to 410
        !          1996: c
        !          1997: c  calculate hd2 current generators
        !          1998: c
        !          1999:   370 difvn1=0.5d0*cew*cew
        !          2000:       difvn2=0.5d0*bew*bew
        !          2001:       difvn3=0.5d0*bcw*bcw
        !          2002:       dsgmo2=gmo2*0.5d0*bew*cew
        !          2003:       go to 420
        !          2004: c
        !          2005: c  calculate hd3 current generators
        !          2006: c
        !          2007:   380 difvi1=0.50d0*cew*ce2w
        !          2008:       difvn1=0.25d0*cew*cew*cew
        !          2009:       difvi2=0.50d0*bew*be2w
        !          2010:       difvn2=0.25d0*bew*bew*bew
        !          2011:       difvi3=0.50d0*bcw*bc2w
        !          2012:       difvn3=0.25d0*bcw*bcw*bcw
        !          2013:       dsgmo2=gmo2*(bew*ce2w+be2w*cew)*0.5d0
        !          2014:       go to 430
        !          2015: c
        !          2016: c  calculate im2d current generators
        !          2017: c
        !          2018:   390 difvn1=cew*dconjg(cew2)
        !          2019:       difvn2=bew*dconjg(bew2)
        !          2020:       difvn3=bcw*dconjg(bcw2)
        !          2021:       dsgmo2=gmo2*0.5d0*(bew*dconjg(cew2)+cew*dconjg(bew2))
        !          2022:       go to 420
        !          2023: c
        !          2024: c  calculate im2s current generators
        !          2025: c
        !          2026:   400 difvn1=cew*cew2
        !          2027:       difvn2=bew*bew2
        !          2028:       difvn3=bcw*bcw2
        !          2029:       dsgmo2=gmo2*0.5d0*(bew*cew2+bew2*cew)
        !          2030:       go to 420
        !          2031: c
        !          2032: c  calculate im3 current generators
        !          2033: c
        !          2034:   410 difvi1=0.5d0*(ce2w*dconjg(cew2)+cew*cew12)
        !          2035:       difvi2=0.5d0*(be2w*dconjg(bew2)+bew*bew12)
        !          2036:       difvi3=0.5d0*(bc2w*dconjg(bcw2)+bcw*bcw12)
        !          2037:       difvn1=cew*cew*dconjg(cew2)*0.75d0
        !          2038:       difvn2=bew*bew*dconjg(bew2)*0.75d0
        !          2039:       difvn3=bcw*bcw*dconjg(bcw2)*0.75d0
        !          2040:       dsgmo2=gmo2*0.5d0*(dconjg(bew2)*ce2w+bew*cew12+dconjg(cew2)*be2w+
        !          2041:      1   cew*bew12)
        !          2042:       go to 430
        !          2043: c
        !          2044:   420 dsgo2=go2*difvn1
        !          2045:       dsgm2=gm2*difvn2
        !          2046:       dsgmu2=gmu2*difvn3
        !          2047:       dsgpi2=gpi2*difvn2
        !          2048:       dscb1=0.5d0*cb1*omega*dcmplx(-dimag(difvn2),dreal(difvn2))
        !          2049:       dscb1r=0.5d0*cb1r*omega*dcmplx(-dimag(difvn3),dreal(difvn3))
        !          2050:       dscje1=0.5d0*cje1*omega*dcmplx(-dimag(difvn2),dreal(difvn2))
        !          2051:       dscjc1=0.5d0*cjc1*omega*dcmplx(-dimag(difvn3),dreal(difvn3))
        !          2052:       go to 440
        !          2053: c
        !          2054:   430 dsgo2=2.0d0*go2*difvi1+go3*difvn1
        !          2055:       dsgm2=2.0d0*gm2*difvi2+gm3*difvn2
        !          2056:       dsgmu2=2.0d0*gmu2*difvi3+gmu3*difvn3
        !          2057:       dsgpi2=2.0d0*gpi2*difvi2+gpi3*difvn2
        !          2058:       dscb1=omega*(cb1*difvi2+cb2*difvn2/3.0d0)
        !          2059:       dscb1=dcmplx(-dimag(dscb1),dreal(dscb1))
        !          2060:       dscb1r=omega*(cb1r*difvi3+cb2r*difvn3/3.0d0)
        !          2061:       dscb1r=dcmplx(-dimag(dscb1r),dreal(dscb1r))
        !          2062:       dscje1=omega*(cje1*difvi2+cje2*difvn2/3.0d0)
        !          2063:       dscje1=dcmplx(-dimag(dscje1),dreal(dscje1))
        !          2064:       dscjc1=omega*(cjc1*difvi3+cjc2*difvn3/3.0d0)
        !          2065:       dscjc1=dcmplx(-dimag(dscjc1),dreal(dscjc1))
        !          2066: c
        !          2067: c  determine contribution of each distortion source
        !          2068: c
        !          2069:   440 cvabe=cvalue(icvadj+node2)-cvalue(icvadj+node3)
        !          2070:       cvabc=cvalue(icvadj+node2)-cvalue(icvadj+node1)
        !          2071:       cvace=cvalue(icvadj+node1)-cvalue(icvadj+node3)
        !          2072:       disto1=dsgm2+dsgo2+dsgmo2
        !          2073:       disto2=dsgpi2+dscb1+dscje1
        !          2074:       disto3=dsgmu2+dscb1r+dscjc1
        !          2075:       cvdo(1)=dsgm2*cvace*arg
        !          2076:       cvdo(2)=dsgpi2*cvabe*arg
        !          2077:       cvdo(3)=dsgo2*cvace*arg
        !          2078:       cvdo(4)=dsgmu2*cvabc*arg
        !          2079:       cvdo(5)=dsgmo2*cvace*arg
        !          2080:       cvdo(6)=dscb1*cvabe*arg
        !          2081:       cvdo(7)=dscb1r*cvabc*arg
        !          2082:       cvdo(8)=dscje1*cvabe*arg
        !          2083:       cvdo(9)=dscjc1*cvabc*arg
        !          2084:       if (kdisto.eq.3) go to 450
        !          2085:       if (kdisto.eq.7) go to 460
        !          2086:       cvdo(10)=cvdo(1)+cvdo(2)+cvdo(3)+cvdo(4)+cvdo(5)+cvdo(6)+cvdo(7)+
        !          2087:      1   cvdo(8)+cvdo(9)
        !          2088:       cvdist=cvdist+cvdo(10)
        !          2089:       if (iprnt.eq.0) go to 480
        !          2090:       do 445 j=1,10
        !          2091:       call magphs(cvdo(j),xmag,xphs)
        !          2092:       cvdo(j)=dcmplx(xmag,xphs)
        !          2093:   445 continue
        !          2094:       if (ititle.eq.0) write (6,301)
        !          2095:       ititle=1
        !          2096:       write (6,446) value(locv),(vdo(1,j),j=1,10)
        !          2097:   446 format(1h0,a8,'mag',1p12d10.3)
        !          2098:       write (6,447) (vdo(2,j),j=1,10)
        !          2099:   447 format(9x,'phs',12(1x,f7.2,2x))
        !          2100:       go to 480
        !          2101:   450 dgm2o3=gm2o3*cew*bew*bew*0.25d0
        !          2102:       dgmo23=gmo23*bew*cew*cew*0.25d0
        !          2103:       go to 470
        !          2104:   460 dgm2o3=gm2o3*(0.5d0*bew*dconjg(bew2)*cew+0.25d0*bew*bew*
        !          2105:      1  dconjg(cew2))
        !          2106:       dgmo23=gmo23*(0.5d0*cew*dconjg(cew2)*bew+0.25d0*cew*cew*
        !          2107:      1  dconjg(bew2))
        !          2108:   470 disto1=disto1+dgm2o3+dgmo23
        !          2109:       cvdo(10)=dgm2o3*cvace*arg
        !          2110:       cvdo(11)=dgmo23*cvace*arg
        !          2111:       cvdo(12)=cvdo(1)+cvdo(2)+cvdo(3)+cvdo(4)+cvdo(5)+cvdo(6)+cvdo(7)+
        !          2112:      1   cvdo(8)+cvdo(9)+cvdo(10)+cvdo(11)
        !          2113:       cvdist=cvdist+cvdo(12)
        !          2114:       if (iprnt.eq.0) go to 480
        !          2115:       do 475 j=1,12
        !          2116:       call magphs(cvdo(j),xmag,xphs)
        !          2117:       cvdo(j)=dcmplx(xmag,xphs)
        !          2118:   475 continue
        !          2119:       if (ititle.eq.0) write (6,311)
        !          2120:       ititle=1
        !          2121:       write (6,446) value(locv),(vdo(1,j),j=1,12)
        !          2122:       write (6,447) (vdo(2,j),j=1,12)
        !          2123:   480 value(lvn+node1)=value(lvn+node1)
        !          2124:      1  -dreal(disto1-disto3)
        !          2125:       value(lvn+node2)=value(lvn+node2)
        !          2126:      1  -dreal(disto2+disto3)
        !          2127:       value(lvn+node3)=value(lvn+node3)
        !          2128:      1  +dreal(disto1+disto2)
        !          2129:       value(imvn+node1)=value(imvn+node1)
        !          2130:      1  -dimag(disto1-disto3)
        !          2131:       value(imvn+node2)=value(imvn+node2)
        !          2132:      1  -dimag(disto2+disto3)
        !          2133:       value(imvn+node3)=value(imvn+node3)
        !          2134:      1  +dimag(disto1+disto2)
        !          2135:       loc=nodplc(loc)
        !          2136:       go to 330
        !          2137: c
        !          2138: c   junction diodes
        !          2139: c
        !          2140:   500 if (jelcnt(11).eq.0) go to 700
        !          2141:       ititle=0
        !          2142:   501 format (////1x,'diode distortion components'//1x,'name',
        !          2143:      1   11x,'geq',7x,'cb',8x,'cj',7x,'total')
        !          2144:   510 loc=locate(11)
        !          2145:   520 if (loc.eq.0) go to 700
        !          2146:       locv=nodplc(loc+1)
        !          2147:       node1=nodplc(loc+2)
        !          2148:       node2=nodplc(loc+3)
        !          2149:       node3=nodplc(loc+4)
        !          2150:       locm=nodplc(loc+5)
        !          2151:       locm=nodplc(locm+1)
        !          2152:       loct=lx0+nodplc(loc+11)
        !          2153:       locd=ld0+nodplc(loc+12)
        !          2154:       cdj1=value(locd)
        !          2155:       cdj2=value(locd+1)
        !          2156:       cdb1=value(locd+3)
        !          2157:       geq2=value(locd+4)
        !          2158:       geq3=value(locd+5)
        !          2159:       cdb2=value(locd+6)
        !          2160:       bew=cvalue(icvw1+node3)-cvalue(icvw1+node2)
        !          2161:       if (kdisto.eq.2) go to 540
        !          2162:       be2w=cvalue(icv2w1+node3)-cvalue(icv2w1+node2)
        !          2163:       if (kdisto.eq.3) go to 550
        !          2164:       bew2=cvalue(icvw2+node3)-cvalue(icvw2+node2)
        !          2165:       if (kdisto.eq.5) go to 560
        !          2166:       if (kdisto.eq.6) go to 570
        !          2167:       bew12=cvalue(icvw12+node3)-cvalue(icvw12+node2)
        !          2168:       go to 580
        !          2169: c
        !          2170: c    calculate hd2 current generators
        !          2171: c
        !          2172:   540 difvn1=0.5d0*bew*bew
        !          2173:       go to 590
        !          2174: c
        !          2175: c    calculate hd3 current generators
        !          2176: c
        !          2177:   550 difvi1=0.5d0*bew*be2w
        !          2178:       difvn1=0.25d0*bew*bew*bew
        !          2179:       go to 600
        !          2180: c
        !          2181: c    calculate im2d current generators
        !          2182: c
        !          2183:   560 difvn1=bew*dconjg(bew2)
        !          2184:       go to 590
        !          2185: c
        !          2186: c    calculate im2s current generators
        !          2187: c
        !          2188:   570 difvn1=bew*bew2
        !          2189:       go to 590
        !          2190: c
        !          2191: c    calculate im3 current generators
        !          2192: c
        !          2193:   580 difvi1=0.5d0*(be2w*dconjg(bew2)+bew*bew12)
        !          2194:       difvn1=bew*bew*dconjg(bew2)*0.75d0
        !          2195:       go to 600
        !          2196:   590 dsg2=geq2*difvn1
        !          2197:       dscdb1=0.5d0*cdb1*omega*dcmplx(-dimag(difvn1),dreal(difvn1))
        !          2198:       dscdj1=0.5d0*cdj1*omega*dcmplx(-dimag(difvn1),dreal(difvn1))
        !          2199:       go to 610
        !          2200: c
        !          2201:   600 dsg2=2.0d0*geq2*difvi1+geq3*difvn1
        !          2202:       dscdb1=omega*(cdb1*difvi1+cdb2*difvn1/3.0d0)
        !          2203:       dscdb1=dcmplx(-dimag(dscdb1),dreal(dscdb1))
        !          2204:       dscdj1=omega*(cdj1*difvi1+cdj2*difvn1/3.0d0)
        !          2205:       dscdj1=dcmplx(-dimag(dscdj1),dreal(dscdj1))
        !          2206: c
        !          2207: c  determine contribution of each distortion source
        !          2208: c
        !          2209:   610 cvabe=cvalue(icvadj+node3)-cvalue(icvadj+node2)
        !          2210:       disto1=dsg2+dscdb1+dscdj1
        !          2211:       cvdo(1)=dsg2*cvabe*arg
        !          2212:       cvdo(2)=dscdb1*cvabe*arg
        !          2213:       cvdo(3)=dscdj1*cvabe*arg
        !          2214:       cvdo(4)=cvdo(1)+cvdo(2)+cvdo(3)
        !          2215:       cvdist=cvdist+cvdo(4)
        !          2216:       if (iprnt.eq.0) go to 680
        !          2217:       do 670 j=1,4
        !          2218:       call magphs(cvdo(j),xmag,xphs)
        !          2219:       cvdo(j)=dcmplx(xmag,xphs)
        !          2220:   670 continue
        !          2221:       if (ititle.eq.0) write (6,501)
        !          2222:       ititle=1
        !          2223:       write (6,446) value(locv),(vdo(1,j),j=1,4)
        !          2224:       write (6,447) (vdo(2,j),j=1,4)
        !          2225:   680 value(lvn+node2)=value(lvn+node2)+dreal(disto1)
        !          2226:       value(lvn+node3)=value(lvn+node3)-dreal(disto1)
        !          2227:       value(imvn+node2)=value(imvn+node2)+dimag(disto1)
        !          2228:       value(imvn+node3)=value(imvn+node3)-dimag(disto1)
        !          2229:       loc=nodplc(loc)
        !          2230:       go to 520
        !          2231: c
        !          2232: c  obtain total distortion solution if necessary
        !          2233: c
        !          2234:   700 go to (1000,710,790,710,710,840,860),kdisto
        !          2235:   710 call acsol
        !          2236: c
        !          2237: c  store solution, print and store answers
        !          2238: c
        !          2239:   760 go to (1000,770,790,800,820,840,860),kdisto
        !          2240:   770 call copy16(cvalue(lcvn+1),cvalue(icv2w1+1),nstop)
        !          2241:       call magphs(cvdist,o2mag,o2phs)
        !          2242:       if (iprnt.eq.0) go to 900
        !          2243:       o2log=20.0d0*dlog10(o2mag)
        !          2244:       write (6,781) o2mag,o2phs,o2log
        !          2245:   781 format (///5x,'hd2     magnitude  ',1pd10.3,5x,'phase  ',0pf7.2,
        !          2246:      1   5x,'=  ',f7.2,'  db')
        !          2247:       go to 900
        !          2248:   790 call magphs(cvdist,o3mag,o3phs)
        !          2249:       if (iprnt.eq.0) go to 900
        !          2250:       o3log=20.0d0*dlog10(o3mag)
        !          2251:       write (6,791) o3mag,o3phs,o3log
        !          2252:   791 format (///5x,'hd3     magnitude  ',1pd10.3,5x,'phase  ',0pf7.2,
        !          2253:      1   5x,'=  ',f7.2,'  db')
        !          2254:       go to 900
        !          2255:   800 call copy16(cvalue(lcvn+1),cvalue(icvw2+1),nstop)
        !          2256:       cvout=cvalue(icvw2+idnp)-cvalue(icvw2+idnn)
        !          2257:       call magphs(cvout,ow2mag,ow2phs)
        !          2258:       go to 1000
        !          2259:   820 call copy16(cvalue(lcvn+1),cvalue(icvw12+1),nstop)
        !          2260:   840 call magphs(cvdist,o12mag,o12phs)
        !          2261:       if (iprnt.eq.0) go to 900
        !          2262:       o12log=20.0d0*dlog10(o12mag)
        !          2263:       if (kdisto.eq.6) go to 850
        !          2264:       write (6,841) o12mag,o12phs,o12log
        !          2265:   841 format (///5x,'im2d    magnitude  ',1pd10.3,5x,'phase  ',0pf7.2,
        !          2266:      1   5x,'=  ',f7.2,'  db')
        !          2267:       go to 900
        !          2268:   850 write (6,851) o12mag,o12phs,o12log
        !          2269:   851 format (///5x,'im2s    magnitude  ',1pd10.3,5x,'phase  ',0pf7.2,
        !          2270:      1   5x,'=  ',f7.2,'  db')
        !          2271:       go to 900
        !          2272:   860 call magphs(cvdist,o21mag,o21phs)
        !          2273:       if (iprnt.eq.0) go to 900
        !          2274:       o21log=20.0d0*dlog10(o21mag)
        !          2275:       write (6,861) o21mag,o21phs,o21log
        !          2276:   861 format (///5x,'im3     magnitude  ',1pd10.3,5x,'phase  ',0pf7.2,
        !          2277:      1   5x,'=  ',f7.2,'  db')
        !          2278:       cma=dabs(4.0d0*o21mag*dcos((o21phs-ophase)/rad))
        !          2279:       cma=dmax1(cma,1.0d-20)
        !          2280:       cmp=dabs(4.0d0*o21mag*dsin((o21phs-ophase)/rad))
        !          2281:       cmp=dmax1(cmp,1.0d-20)
        !          2282:       cmalog=20.0d0*dlog10(cma)
        !          2283:       cmplog=20.0d0*dlog10(cmp)
        !          2284:       write (6,866)
        !          2285:   866 format (////5x,'approximate cross modulation components')
        !          2286:       write (6,871) cma,cmalog
        !          2287:   871 format (/5x,'cma     magnitude  ',1pd10.3,24x,'=  ',0pf7.2,'  db')
        !          2288:       write (6,881) cmp,cmplog
        !          2289:   881 format (/5x,'cmp     magnitude  ',1pd10.3,24x,'=  ',0pf7.2,'  db')
        !          2290: c
        !          2291: c  save distortion outputs
        !          2292: c
        !          2293:   900 iflag=kdisto+2
        !          2294:       if (iflag.ge.7) iflag=iflag-1
        !          2295:       loc=locate(45)
        !          2296:   910 if (loc.eq.0) go to 1000
        !          2297:       if (nodplc(loc+5).ne.iflag) go to 920
        !          2298:       iseq=nodplc(loc+4)
        !          2299:       cvalue(loco+iseq)=cvdist
        !          2300:   920 loc=nodplc(loc)
        !          2301:       go to 910
        !          2302:  1000 continue
        !          2303: c
        !          2304: c  finished
        !          2305: c
        !          2306:  2000 return
        !          2307:       end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.