Annotation of 3BSD/cmd/spice/acans.f, revision 1.1.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.