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

1.1     ! root        1:       subroutine setup
        !             2:       implicit double precision (a-h,o-z)
        !             3: c
        !             4: c
        !             5: c     this routine drives the sparse matrix setup used by spice.
        !             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 /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !            14:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !            15:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !            16:      1  defas,rstats(50),iwidth,lwidth,nopage
        !            17:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !            18:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !            19:       common /dc/ tcstar(2),tcstop(2),tcincr(2),icvflg,itcelm(2),kssop,
        !            20:      1   kinel,kidin,kovar,kidout
        !            21:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !            22:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !            23:       common /blank/ value(1000)
        !            24:       integer nodplc(64)
        !            25:       complex*16 cvalue(32)
        !            26:       equivalence (value(1),nodplc(1),cvalue(1))
        !            27: c
        !            28: c
        !            29:       call second(t1)
        !            30:       nstop=numnod+jelcnt(3)+jelcnt(6)+jelcnt(8)+jelcnt(9)+2*jelcnt(17)
        !            31: c
        !            32: c  reserve matrix locations for each element
        !            33: c
        !            34:       call matptr
        !            35:       if (nogo.ne.0) go to 1000
        !            36: c
        !            37: c  reorder matrix pointers for minimal fill-in
        !            38: c
        !            39:       nttbr=0
        !            40:       do 120 i=2,nstop
        !            41:       loc=isr+i
        !            42:   110 if (nodplc(loc).eq.0) go to 120
        !            43:       loc=nodplc(loc)
        !            44:       nttbr=nttbr+1
        !            45:       go to 110
        !            46:   120 continue
        !            47: c...  add ground
        !            48:       nttbr=nttbr+1
        !            49:       call reordr
        !            50:       if (nogo.ne.0) go to 1000
        !            51:       nttar=nodplc(iur+nstop+1)-1+nodplc(ilc+nstop+1)-1+nstop
        !            52:       ifill=nttar-nttbr
        !            53:       perspa=100.0d0*(1.0d0-dfloat(nttar)/
        !            54:      1  (dfloat(nstop)*dfloat(nstop)))
        !            55:       iops=0
        !            56:       do 130 i=2,nstop
        !            57:       noffr=nodplc(iur+i+1)-nodplc(iur+i)
        !            58:       noffc=nodplc(ilc+i+1)-nodplc(ilc+i)
        !            59:       iops=iops+noffr+noffc*(noffr+2)+1
        !            60:   130 continue
        !            61:       rstats(20)=nstop
        !            62:       rstats(21)=nttbr
        !            63:       rstats(22)=nttar
        !            64:       rstats(23)=ifill
        !            65:       rstats(24)=0.0d0
        !            66:       rstats(25)=nttar
        !            67:       rstats(26)=iops
        !            68:       rstats(27)=perspa
        !            69: c
        !            70: c  store matrix locations
        !            71: c
        !            72:       call matloc
        !            73:       call clrmem(isr)
        !            74:       call clrmem(iseq)
        !            75:       call clrmem(iseq1)
        !            76:       call clrmem(neqn)
        !            77:       call clrmem(nodevs)
        !            78:       call clrmem(ndiag)
        !            79:       call clrmem(nmoffc)
        !            80:       call clrmem(numoff)
        !            81:       call clrmem(iequa)
        !            82:       call clrmem(jmnode)
        !            83: c
        !            84: c  generate machine code
        !            85: c
        !            86:  1000 call second(t2)
        !            87:       rstats(2)=rstats(2)+t2-t1
        !            88:       return
        !            89:       end
        !            90:       subroutine matptr
        !            91:       implicit double precision (a-h,o-z)
        !            92: c
        !            93: c     this routine (by calls to the routine reserve) establishes the
        !            94: c nonzero-element structure of the circuit equation coefficient matrix.
        !            95: c
        !            96:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !            97:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !            98:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !            99:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           100:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           101:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           102:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           103:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           104:       common /blank/ value(1000)
        !           105:       integer nodplc(64)
        !           106:       complex*16 cvalue(32)
        !           107:       equivalence (value(1),nodplc(1),cvalue(1))
        !           108: c
        !           109: c  allocate and initialize storage
        !           110: c
        !           111:       call getm4(isr,nstop+1)
        !           112:       numvs=jelcnt(3)+jelcnt(6)+jelcnt(8)+jelcnt(9)+2*jelcnt(17)
        !           113:       call getm4(iseq,numvs)
        !           114:       call getm4(iseq1,numvs)
        !           115:       call getm4(neqn,numvs)
        !           116:       call getm4(nodevs,numnod)
        !           117:       call getm4(ndiag,nstop)
        !           118:       call getm4(nmoffc,nstop)
        !           119:       call getm4(numoff,nstop)
        !           120:       call crunch
        !           121: c
        !           122:       call zero4(nodplc(isr+1),nstop+1)
        !           123:       call zero4(nodplc(iseq1+1),numvs)
        !           124:       call zero4(nodplc(nodevs+1),numnod)
        !           125:       call zero4(nodplc(ndiag+1),nstop)
        !           126:       call zero4(nodplc(nmoffc+1),nstop)
        !           127:       call zero4(nodplc(numoff+1),nstop)
        !           128: c
        !           129:       numvs=0
        !           130:       nxtrm=0
        !           131:       ndist=0
        !           132:       ntlin=1
        !           133:       ibr=numnod
        !           134: c
        !           135: c  resistors
        !           136: c
        !           137:       loc=locate(1)
        !           138:   110 if (loc.eq.0) go to 120
        !           139:       node1=nodplc(loc+2)
        !           140:       node2=nodplc(loc+3)
        !           141:       call reserv(node1,node1)
        !           142:       call reserv(node1,node2)
        !           143:       call reserv(node2,node1)
        !           144:       call reserv(node2,node2)
        !           145:       loc=nodplc(loc)
        !           146:       go to 110
        !           147: c
        !           148: c  capacitors
        !           149: c
        !           150:   120 loc=locate(2)
        !           151:   130 if (loc.eq.0) go to 400
        !           152:       node1=nodplc(loc+2)
        !           153:       node2=nodplc(loc+3)
        !           154:       call reserv(node1,node2)
        !           155:       call reserv(node2,node1)
        !           156:       ntemp=nodplc(ndiag+node1)
        !           157:       call reserv(node1,node1)
        !           158:       nodplc(ndiag+node1)=ntemp
        !           159:       ntemp=nodplc(ndiag+node2)
        !           160:       call reserv(node2,node2)
        !           161:       nodplc(ndiag+node2)=ntemp
        !           162:       nodplc(loc+8)=nxtrm+1
        !           163:       nxtrm=nxtrm+2
        !           164:       loc=nodplc(loc)
        !           165:       go to 130
        !           166: c
        !           167: c  inductors
        !           168: c
        !           169:   400 loc=locate(3)
        !           170:   430 if (loc.eq.0) go to 440
        !           171:       node1=nodplc(loc+2)
        !           172:       node2=nodplc(loc+3)
        !           173:       ibr=ibr+1
        !           174:       nodplc(loc+5)=ibr
        !           175:       call reserv(node1,ibr)
        !           176:       call reserv(node2,ibr)
        !           177:       call reserv(ibr,node1)
        !           178:       call reserv(ibr,node2)
        !           179:       ntemp=nodplc(ndiag+ibr)
        !           180:       call reserv(ibr,ibr)
        !           181:       nodplc(ndiag+ibr)=ntemp
        !           182:       numvs=numvs+1
        !           183:       nodplc(iseq+numvs)=loc
        !           184:       nodplc(neqn+numvs)=ibr
        !           185:       nodplc(nodevs+node1)=nodplc(nodevs+node1)+1
        !           186:       nodplc(nodevs+node2)=nodplc(nodevs+node2)+1
        !           187:       nodplc(loc+11)=nxtrm+1
        !           188:       nxtrm=nxtrm+2
        !           189:       loc=nodplc(loc)
        !           190:       go to 430
        !           191: c
        !           192: c  mutual inductors
        !           193: c
        !           194:   440 loc=locate(4)
        !           195:   450 if (loc.eq.0) go to 460
        !           196:       nl1=nodplc(loc+2)
        !           197:       nl2=nodplc(loc+3)
        !           198:       nl1=nodplc(nl1+5)
        !           199:       nl2=nodplc(nl2+5)
        !           200:       call reserv(nl1,nl2)
        !           201:       call reserv(nl2,nl1)
        !           202:       loc=nodplc(loc)
        !           203:       go to 450
        !           204: c
        !           205: c  nonlinear voltage-controlled current sources
        !           206: c
        !           207:   460 loc=locate(5)
        !           208:   462 if (loc.eq.0) go to 464
        !           209:       node1=nodplc(loc+2)
        !           210:       node2=nodplc(loc+3)
        !           211:       ndim=nodplc(loc+4)
        !           212:       ndim2=ndim+ndim
        !           213:       locn=nodplc(loc+6)
        !           214:       do 463 i=1,ndim2
        !           215:       node=nodplc(locn+i)
        !           216:       call reserv(node1,node)
        !           217:       call reserv(node2,node)
        !           218:   463 continue
        !           219:       nodplc(loc+12)=nxtrm+1
        !           220:       nxtrm=nxtrm+1+ndim2
        !           221:       loc=nodplc(loc)
        !           222:       go to 462
        !           223: c
        !           224: c  nonlinear voltage controlled voltage sources
        !           225: c
        !           226:   464 loc=locate(6)
        !           227:   466 if (loc.eq.0) go to 468
        !           228:       node1=nodplc(loc+2)
        !           229:       node2=nodplc(loc+3)
        !           230:       ibr=ibr+1
        !           231:       nodplc(loc+6)=ibr
        !           232:       call reserv(node1,ibr)
        !           233:       call reserv(node2,ibr)
        !           234:       call reserv(ibr,node1)
        !           235:       call reserv(ibr,node2)
        !           236:       numvs=numvs+1
        !           237:       nodplc(iseq+numvs)=loc
        !           238:       nodplc(neqn+numvs)=ibr
        !           239:       nodplc(nodevs+node1)=nodplc(nodevs+node1)+1
        !           240:       nodplc(nodevs+node2)=nodplc(nodevs+node2)+1
        !           241:       ndim=nodplc(loc+4)
        !           242:       ndim2=ndim+ndim
        !           243:       locn=nodplc(loc+7)
        !           244:       do 467 i=1,ndim2
        !           245:       node=nodplc(locn+i)
        !           246:       call reserv(ibr,node)
        !           247:   467 continue
        !           248:       nodplc(loc+13)=nxtrm+1
        !           249:       nxtrm=nxtrm+2+ndim2
        !           250:       loc=nodplc(loc)
        !           251:       go to 466
        !           252: c
        !           253: c  voltage sources
        !           254: c
        !           255:   468 loc=locate(9)
        !           256:   470 if (loc.eq.0) go to 472
        !           257:       node1=nodplc(loc+2)
        !           258:       node2=nodplc(loc+3)
        !           259:       ibr=ibr+1
        !           260:       nodplc(loc+6)=ibr
        !           261:       call reserv(node1,ibr)
        !           262:       call reserv(node2,ibr)
        !           263:       call reserv(ibr,node1)
        !           264:       call reserv(ibr,node2)
        !           265:       numvs=numvs+1
        !           266:       nodplc(iseq+numvs)=loc
        !           267:       nodplc(neqn+numvs)=ibr
        !           268:       nodplc(nodevs+node1)=nodplc(nodevs+node1)+1
        !           269:       nodplc(nodevs+node2)=nodplc(nodevs+node2)+1
        !           270:       loc=nodplc(loc)
        !           271:       go to 470
        !           272: c
        !           273: c  nonlinear current controlled current sources
        !           274: c
        !           275:   472 loc=locate(7)
        !           276:   474 if (loc.eq.0) go to 476
        !           277:       node1=nodplc(loc+2)
        !           278:       node2=nodplc(loc+3)
        !           279:       ndim=nodplc(loc+4)
        !           280:       locvs=nodplc(loc+6)
        !           281:       do 475 i=1,ndim
        !           282:       locvst=nodplc(locvs+i)
        !           283:       kbr=nodplc(locvst+6)
        !           284:       call reserv(node1,kbr)
        !           285:       call reserv(node2,kbr)
        !           286:   475 continue
        !           287:       nodplc(loc+12)=nxtrm+1
        !           288:       nxtrm=nxtrm+1+ndim+ndim
        !           289:       loc=nodplc(loc)
        !           290:       go to 474
        !           291: c
        !           292: c  nonlinear current controlled voltage sources
        !           293: c
        !           294:   476 loc=locate(8)
        !           295:   478 if (loc.eq.0) go to 500
        !           296:       node1=nodplc(loc+2)
        !           297:       node2=nodplc(loc+3)
        !           298:       ibr=ibr+1
        !           299:       nodplc(loc+6)=ibr
        !           300:       call reserv(node1,ibr)
        !           301:       call reserv(node2,ibr)
        !           302:       call reserv(ibr,node1)
        !           303:       call reserv(ibr,node2)
        !           304:       numvs=numvs+1
        !           305:       nodplc(iseq+numvs)=loc
        !           306:       nodplc(neqn+numvs)=ibr
        !           307:       nodplc(nodevs+node1)=nodplc(nodevs+node1)+1
        !           308:       nodplc(nodevs+node2)=nodplc(nodevs+node2)+1
        !           309:       ndim=nodplc(loc+4)
        !           310:       locvs=nodplc(loc+7)
        !           311:       do 479 i=1,ndim
        !           312:       locvst=nodplc(locvs+i)
        !           313:       kbr=nodplc(locvst+6)
        !           314:       call reserv(ibr,kbr)
        !           315:   479 continue
        !           316:       nodplc(loc+13)=nxtrm+1
        !           317:       nxtrm=nxtrm+2+ndim+ndim
        !           318:       loc=nodplc(loc)
        !           319:       go to 478
        !           320: c
        !           321: c  diodes
        !           322: c
        !           323:   500 loc=locate(11)
        !           324:   510 if (loc.eq.0) go to 520
        !           325:       node1=nodplc(loc+2)
        !           326:       node2=nodplc(loc+3)
        !           327:       node3=nodplc(loc+4)
        !           328:       call reserv(node1,node1)
        !           329:       call reserv(node2,node2)
        !           330:       call reserv(node3,node3)
        !           331:       call reserv(node1,node3)
        !           332:       call reserv(node2,node3)
        !           333:       call reserv(node3,node1)
        !           334:       call reserv(node3,node2)
        !           335:       nodplc(loc+11)=nxtrm+1
        !           336:       nxtrm=nxtrm+5
        !           337:       nodplc(loc+12)=ndist+1
        !           338:       ndist=ndist+7
        !           339:       loc=nodplc(loc)
        !           340:       go to 510
        !           341: c
        !           342: c  transistors
        !           343: c
        !           344:   520 loc=locate(12)
        !           345:   530 if (loc.eq.0) go to 540
        !           346:       node1=nodplc(loc+2)
        !           347:       node2=nodplc(loc+3)
        !           348:       node3=nodplc(loc+4)
        !           349:       node4=nodplc(loc+5)
        !           350:       node5=nodplc(loc+6)
        !           351:       node6=nodplc(loc+7)
        !           352:       node7=nodplc(loc+30)
        !           353:       call reserv(node1,node1)
        !           354:       call reserv(node2,node2)
        !           355:       call reserv(node3,node3)
        !           356:       call reserv(node4,node4)
        !           357:       call reserv(node5,node5)
        !           358:       call reserv(node6,node6)
        !           359:       call reserv(node1,node4)
        !           360:       call reserv(node2,node5)
        !           361:       call reserv(node3,node6)
        !           362:       call reserv(node4,node5)
        !           363:       call reserv(node4,node6)
        !           364:       call reserv(node5,node6)
        !           365:       call reserv(node4,node1)
        !           366:       call reserv(node5,node2)
        !           367:       call reserv(node6,node3)
        !           368:       call reserv(node5,node4)
        !           369:       call reserv(node6,node4)
        !           370:       call reserv(node6,node5)
        !           371:       call reserv(node7,node7)
        !           372:       call reserv(node4,node7)
        !           373:       call reserv(node7,node4)
        !           374:       call reserv(node2,node4)
        !           375:       call reserv(node4,node2)
        !           376:       nodplc(loc+22)=nxtrm+1
        !           377:       nxtrm=nxtrm+18
        !           378:       nodplc(loc+23)=ndist+1
        !           379:       ndist=ndist+21
        !           380:       loc=nodplc(loc)
        !           381:       go to 530
        !           382: c
        !           383: c  jfets
        !           384: c
        !           385:   540 loc=locate(13)
        !           386:   550 if (loc.eq.0) go to 560
        !           387:       node1=nodplc(loc+2)
        !           388:       node2=nodplc(loc+3)
        !           389:       node3=nodplc(loc+4)
        !           390:       node4=nodplc(loc+5)
        !           391:       node5=nodplc(loc+6)
        !           392:       call reserv(node1,node1)
        !           393:       call reserv(node2,node2)
        !           394:       call reserv(node3,node3)
        !           395:       call reserv(node4,node4)
        !           396:       call reserv(node5,node5)
        !           397:       call reserv(node1,node4)
        !           398:       call reserv(node2,node4)
        !           399:       call reserv(node2,node5)
        !           400:       call reserv(node3,node5)
        !           401:       call reserv(node4,node5)
        !           402:       call reserv(node4,node1)
        !           403:       call reserv(node4,node2)
        !           404:       call reserv(node5,node2)
        !           405:       call reserv(node5,node3)
        !           406:       call reserv(node5,node4)
        !           407:       nodplc(loc+19)=nxtrm+1
        !           408:       nxtrm=nxtrm+13
        !           409:       loc=nodplc(loc)
        !           410:       go to 550
        !           411: c
        !           412: c  mosfets
        !           413: c
        !           414:   560 loc=locate(14)
        !           415:   570 if (loc.eq.0) go to 600
        !           416:       node1=nodplc(loc+2)
        !           417:       node2=nodplc(loc+3)
        !           418:       node3=nodplc(loc+4)
        !           419:       node4=nodplc(loc+5)
        !           420:       node5=nodplc(loc+6)
        !           421:       node6=nodplc(loc+7)
        !           422:       call reserv(node1,node1)
        !           423:       call reserv(node2,node2)
        !           424:       call reserv(node3,node3)
        !           425:       call reserv(node4,node4)
        !           426:       call reserv(node5,node5)
        !           427:       call reserv(node6,node6)
        !           428:       call reserv(node1,node5)
        !           429:       call reserv(node2,node4)
        !           430:       call reserv(node2,node5)
        !           431:       call reserv(node2,node6)
        !           432:       call reserv(node3,node6)
        !           433:       call reserv(node4,node5)
        !           434:       call reserv(node4,node6)
        !           435:       call reserv(node5,node6)
        !           436:       call reserv(node5,node1)
        !           437:       call reserv(node4,node2)
        !           438:       call reserv(node5,node2)
        !           439:       call reserv(node6,node2)
        !           440:       call reserv(node6,node3)
        !           441:       call reserv(node5,node4)
        !           442:       call reserv(node6,node4)
        !           443:       call reserv(node6,node5)
        !           444:       nodplc(loc+26)=nxtrm+1
        !           445:       nxtrm=nxtrm+18
        !           446:       loc=nodplc(loc)
        !           447:       go to 570
        !           448: c
        !           449: c  transmission lines
        !           450: c
        !           451:   600 loc=locate(17)
        !           452:   610 if (loc.eq.0) go to 1000
        !           453:       node1=nodplc(loc+2)
        !           454:       node2=nodplc(loc+3)
        !           455:       node3=nodplc(loc+4)
        !           456:       node4=nodplc(loc+5)
        !           457:       ni1=nodplc(loc+6)
        !           458:       ni2=nodplc(loc+7)
        !           459:       ibr1=ibr+1
        !           460:       ibr2=ibr+2
        !           461:       ibr=ibr+2
        !           462:       nodplc(loc+8)=ibr1
        !           463:       nodplc(loc+9)=ibr2
        !           464:       call reserv(node1,node1)
        !           465:       call reserv(node1,ni1)
        !           466:       call reserv(node2,ibr1)
        !           467:       call reserv(node3,node3)
        !           468:       call reserv(node4,ibr2)
        !           469:       call reserv(ni1,node1)
        !           470:       call reserv(ni1,ni1)
        !           471:       call reserv(ni1,ibr1)
        !           472:       call reserv(ni2,ni2)
        !           473:       call reserv(ni2,ibr2)
        !           474:       call reserv(ibr1,node2)
        !           475:       call reserv(ibr1,node3)
        !           476:       call reserv(ibr1,node4)
        !           477:       call reserv(ibr1,ni1)
        !           478:       call reserv(ibr1,ibr2)
        !           479:       call reserv(ibr2,node1)
        !           480:       call reserv(ibr2,node2)
        !           481:       call reserv(ibr2,node4)
        !           482:       call reserv(ibr2,ni2)
        !           483:       call reserv(ibr2,ibr1)
        !           484:       call reserv(node3,ni2)
        !           485:       call reserv(ni2,node3)
        !           486:       numvs=numvs+1
        !           487:       nodplc(iseq+numvs)=loc
        !           488:       nodplc(iseq1+numvs)=1
        !           489:       nodplc(neqn+numvs)=ibr1
        !           490:       nodplc(nodevs+ni1)=nodplc(nodevs+ni1)+1
        !           491:       nodplc(nodevs+node2)=nodplc(nodevs+node2)+1
        !           492:       numvs=numvs+1
        !           493:       nodplc(iseq+numvs)=loc
        !           494:       nodplc(iseq1+numvs)=2
        !           495:       nodplc(neqn+numvs)=ibr2
        !           496:       nodplc(nodevs+ni2)=nodplc(nodevs+ni2)+1
        !           497:       nodplc(nodevs+node4)=nodplc(nodevs+node4)+1
        !           498:       nodplc(loc+30)=ntlin+1
        !           499:       ntlin=ntlin+2
        !           500:       loc=nodplc(loc)
        !           501:       go to 610
        !           502: c
        !           503: c  finished
        !           504: c
        !           505:  1000 return
        !           506:       end
        !           507:       subroutine reserv (node1,node2)
        !           508:       implicit double precision (a-h,o-z)
        !           509: c
        !           510: c     this routine records the fact that the (node1, node2) element of
        !           511: c the circuit equation coefficient matrix is nonzero.
        !           512: c
        !           513:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           514:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           515:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           516:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           517:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           518:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           519:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !           520:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !           521:       common /blank/ value(1000)
        !           522:       integer nodplc(64)
        !           523:       complex*16 cvalue(32)
        !           524:       equivalence (value(1),nodplc(1),cvalue(1))
        !           525: c
        !           526: c
        !           527:       if (nogo.ne.0) go to 300
        !           528: c...  test for ground
        !           529:       if (node1.eq.1) go to 300
        !           530:       if (node2.eq.1) go to 300
        !           531: c
        !           532: c  test for (node1,node2) matrix element
        !           533: c
        !           534:       loc=isr+node1
        !           535:   100 if (nodplc(loc).eq.0) go to 110
        !           536:       loc=nodplc(loc)
        !           537:       if (nodplc(loc+1).eq.node2) go to 300
        !           538:       go to 100
        !           539: c
        !           540: c  reserve (node1,node2) matrix element
        !           541: c
        !           542:   110 nodplc(numoff+node1)=nodplc(numoff+node1)+1
        !           543:       nodplc(nmoffc+node2)=nodplc(nmoffc+node2)+1
        !           544:       call sizmem(numoff,isize)
        !           545:       newloc=numoff+isize+1
        !           546:       nodplc(loc)=newloc
        !           547:       call extmem(numoff,2)
        !           548:       nodplc(newloc)=0
        !           549:       nodplc(newloc+1)=node2
        !           550: c
        !           551: c  mark diagonal
        !           552: c
        !           553:       if (node1.ne.node2) go to 300
        !           554:       nodplc(ndiag+node1)=1
        !           555: c
        !           556: c  finished
        !           557: c
        !           558:   300 return
        !           559:       end
        !           560:       subroutine reordr
        !           561:       implicit double precision (a-h,o-z)
        !           562: c
        !           563: c     this routine swaps rows in the coefficient matrix to eliminate
        !           564: c singularity problems which can be recognized by examining the circuit
        !           565: c topology.  it then reorders the unknowns to minimize fillin terms
        !           566: c which occur during lu factorization. (to maximize sparsity).
        !           567: c
        !           568:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           569:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           570:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           571:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           572:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           573:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           574:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           575:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           576:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !           577:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !           578:       common /blank/ value(1000)
        !           579:       integer nodplc(64)
        !           580:       complex*16 cvalue(32)
        !           581:       equivalence (value(1),nodplc(1),cvalue(1))
        !           582: c
        !           583: c  allocate and initialize storage
        !           584: c
        !           585:       call getm4(iswap,nstop)
        !           586:       call getm4(iequa,nstop)
        !           587:       call getm4(iorder,nstop)
        !           588:       call getm4(jmnode,nstop)
        !           589:       call getm4(iur,nstop+1)
        !           590:       call getm4(ilc,nstop+1)
        !           591:       call getm4(iuc,0)
        !           592:       call getm4(ilr,0)
        !           593: c
        !           594:       do 10 i=1,nstop
        !           595:       nodplc(iswap+i)=i
        !           596:    10 continue
        !           597:       call copy4(nodplc(iswap+1),nodplc(iequa+1),nstop)
        !           598:       call copy4(nodplc(iswap+1),nodplc(iorder+1),nstop)
        !           599:       call copy4(nodplc(iswap+1),nodplc(jmnode+1),nstop)
        !           600: c
        !           601: c  swap current equations into admittance part of equation matrix
        !           602: c
        !           603:       nextv=1
        !           604: c
        !           605: c  find suitable voltage source
        !           606: c
        !           607:   100 if (nextv.gt.numvs) go to 150
        !           608:       ix=0
        !           609:       do 130 i=nextv,numvs
        !           610:       loc=nodplc(iseq+i)
        !           611:       node=nodplc(loc+2)
        !           612:       nflag=nodplc(iseq1+i)
        !           613:       if (nflag.eq.1) node=nodplc(loc+6)
        !           614:       if (nflag.eq.2) node=nodplc(loc+7)
        !           615:       if (node.eq.1) go to 110
        !           616:       if (nodplc(nodevs+node).ge.2) go to 110
        !           617:       if (nodplc(ndiag+node).eq.0) go to 140
        !           618:       ix=i
        !           619:       locx=loc
        !           620:       nodex=node
        !           621:   110 node=nodplc(loc+3)
        !           622:       if (nflag.eq.2) node=nodplc(loc+5)
        !           623:       if (node.eq.1) go to 130
        !           624:       if (nodplc(nodevs+node).ge.2) go to 130
        !           625:   120 if (nodplc(ndiag+node).eq.0) go to 140
        !           626:       ix=i
        !           627:       locx=loc
        !           628:       nodex=node
        !           629:   130 continue
        !           630:       if (ix.eq.0) go to 590
        !           631:       i=ix
        !           632:       loc=locx
        !           633:       node=nodex
        !           634: c
        !           635: c  resequence voltage sources
        !           636: c
        !           637:   140 nodplc(iseq+i)=nodplc(iseq+nextv)
        !           638:       nodplc(iseq+nextv)=loc
        !           639:       ltemp=nodplc(iseq1+i)
        !           640:       nodplc(iseq1+i)=nodplc(iseq1+nextv)
        !           641:       nodplc(iseq1+nextv)=ltemp
        !           642:       ibr=nodplc(neqn+i)
        !           643:       nodplc(neqn+i)=nodplc(neqn+nextv)
        !           644:       nodplc(neqn+nextv)=ibr
        !           645:       node1=nodplc(loc+2)
        !           646:       if (ltemp.eq.1) node1=nodplc(loc+6)
        !           647:       if (ltemp.eq.2) node1=nodplc(loc+7)
        !           648:       node2=nodplc(loc+3)
        !           649:       if (ltemp.eq.1) node2=nodplc(loc+3)
        !           650:       if (ltemp.eq.2) node2=nodplc(loc+5)
        !           651:       nodplc(nodevs+node1)=nodplc(nodevs+node1)-1
        !           652:       nodplc(nodevs+node2)=nodplc(nodevs+node2)-1
        !           653: c
        !           654: c  set row swap indicators
        !           655: c
        !           656:       l=nodplc(iswap+ibr)
        !           657:       j=nodplc(iequa+node)
        !           658:       nodplc(iswap+j)=l
        !           659:       nodplc(iequa+l)=j
        !           660:       nodplc(iswap+ibr)=node
        !           661:       nodplc(iequa+node)=ibr
        !           662:       nextv=nextv+1
        !           663:       go to 100
        !           664: c
        !           665: c  initialize matrix pointers
        !           666: c
        !           667:   150 nexnod=2
        !           668:       nut=0
        !           669:       nlt=0
        !           670:   160 nodplc(iur+nexnod)=nut+1
        !           671:       nodplc(ilc+nexnod)=nlt+1
        !           672:       if (nexnod.ge.nstop) go to 500
        !           673: c
        !           674: c  select row for reordering
        !           675: c
        !           676:       load=nodplc(iorder+nexnod)
        !           677:       ir=nodplc(iswap+load)
        !           678:       imin=nodplc(numoff+ir)*nodplc(nmoffc+load)
        !           679:       nstart=nexnod+1
        !           680:       do 200 i=nstart,nstop
        !           681:       lc=nodplc(iorder+i)
        !           682:       ir=nodplc(iswap+lc)
        !           683:       nrc=nodplc(numoff+ir)*nodplc(nmoffc+lc)
        !           684:       if (nrc.ge.imin) go to 200
        !           685:       imin=nrc
        !           686:       load=lc
        !           687:   200 continue
        !           688: c
        !           689: c  set reorder indicators
        !           690: c
        !           691:       ir=nodplc(iswap+load)
        !           692:       nodplc(numoff+ir)=nodplc(numoff+ir)-1
        !           693:       nodplc(nmoffc+load)=nodplc(nmoffc+load)-1
        !           694:       lc=nodplc(iorder+nexnod)
        !           695:       jr=nodplc(jmnode+load)
        !           696:       nodplc(iorder+jr)=lc
        !           697:       nodplc(jmnode+lc)=jr
        !           698:       nodplc(iorder+nexnod)=load
        !           699:       nodplc(jmnode+load)=nexnod
        !           700: c
        !           701: c  set pointers for upper triangle
        !           702: c
        !           703:       loc=isr+ir
        !           704:   330 if (nodplc(loc).eq.0) go to 340
        !           705:       loc=nodplc(loc)
        !           706:       ic=nodplc(loc+1)
        !           707:       jc=nodplc(jmnode+ic)
        !           708:       if (jc.le.nexnod) go to 330
        !           709:       nodplc(nmoffc+ic)=nodplc(nmoffc+ic)-1
        !           710:       call extmem(iuc,1)
        !           711:       nodplc(iuc+nut+1)=ic
        !           712:       nut=nut+1
        !           713:       go to 330
        !           714: c
        !           715: c  set pointers for lower triangle
        !           716: c
        !           717:   340 do 390 jr=nstart,nstop
        !           718:       lc=nodplc(iorder+jr)
        !           719:       ir=nodplc(iswap+lc)
        !           720:       loc=isr+ir
        !           721:   350 if (nodplc(loc).eq.0) go to 390
        !           722:       loc=nodplc(loc)
        !           723:       if (nodplc(loc+1).ne.load) go to 350
        !           724:       nodplc(numoff+ir)=nodplc(numoff+ir)-1
        !           725:       call extmem(ilr,1)
        !           726:       nodplc(ilr+nlt+1)=lc
        !           727:       nlt=nlt+1
        !           728: c
        !           729: c  check for fill-in terms
        !           730: c
        !           731:       nct=nodplc(iur+nexnod)
        !           732:   360 if (nct.ge.(nut+1)) go to 390
        !           733:       ic=nodplc(iuc+nct)
        !           734:       call reserv(ir,ic)
        !           735:       nct=nct+1
        !           736:       go to 360
        !           737:   390 continue
        !           738: c
        !           739: c
        !           740:       nexnod=nexnod+1
        !           741:       go to 160
        !           742: c
        !           743: c  reordering finished
        !           744: c
        !           745:   500 nodplc(iur+nstop+1)=nut+1
        !           746:       nodplc(ilc+nstop+1)=nlt+1
        !           747:       if (nut.eq.0) go to 515
        !           748:       do 510 i=1,nut
        !           749:       j=nodplc(iuc+i)
        !           750:       nodplc(iuc+i)=nodplc(jmnode+j)
        !           751:   510 continue
        !           752:   515 if (nlt.eq.0) go to 600
        !           753:       do 520 i=1,nlt
        !           754:       j=nodplc(ilr+i)
        !           755:       nodplc(ilr+i)=nodplc(jmnode+j)
        !           756:   520 continue
        !           757:       go to 600
        !           758: c
        !           759: c  error - voltage-source/inductor/transmission-line loop detected ...
        !           760: c
        !           761:   590 nogo=1
        !           762:       write (6,591)
        !           763: c...  loop should have been detected in topchk
        !           764:   591 format('0*abort*:  spice internal error in reordr'/)
        !           765: c
        !           766: c  finished
        !           767: c
        !           768:   600 return
        !           769:       end
        !           770:       subroutine matloc
        !           771:       implicit double precision (a-h,o-z)
        !           772: c
        !           773: c     this routine stores the locations of the various matrix terms to
        !           774: c which the different circuit elements contribute.
        !           775: c
        !           776:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           777:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           778:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           779:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           780:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           781:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           782:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           783:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           784:       common /blank/ value(1000)
        !           785:       integer nodplc(64)
        !           786:       complex*16 cvalue(32)
        !           787:       equivalence (value(1),nodplc(1),cvalue(1))
        !           788: c
        !           789: c  resistors
        !           790: c
        !           791:       loc=locate(1)
        !           792:   690 if (loc.eq.0) go to 700
        !           793:       node1=nodplc(loc+2)
        !           794:       node2=nodplc(loc+3)
        !           795:       nodplc(loc+4)=indxx(node1,node2)
        !           796:       nodplc(loc+5)=indxx(node2,node1)
        !           797:       nodplc(loc+6)=indxx(node1,node1)
        !           798:       nodplc(loc+7)=indxx(node2,node2)
        !           799:       loc=nodplc(loc)
        !           800:       go to 690
        !           801: c
        !           802: c  capacitors
        !           803: c
        !           804:   700 loc=locate(2)
        !           805:   710 if (loc.eq.0) go to 720
        !           806:       node1=nodplc(loc+2)
        !           807:       node2=nodplc(loc+3)
        !           808:       nodplc(loc+5)=indxx(node1,node2)
        !           809:       nodplc(loc+6)=indxx(node2,node1)
        !           810:       nodplc(loc+10)=indxx(node1,node1)
        !           811:       nodplc(loc+11)=indxx(node2,node2)
        !           812:       loc=nodplc(loc)
        !           813:       go to 710
        !           814: c
        !           815: c  inductors
        !           816: c
        !           817:   720 loc=locate(3)
        !           818:   730 if (loc.eq.0) go to 740
        !           819:       node1=nodplc(loc+2)
        !           820:       node2=nodplc(loc+3)
        !           821:       ibr=nodplc(loc+5)
        !           822:       nodplc(loc+6)=indxx(node1,ibr)
        !           823:       nodplc(loc+7)=indxx(node2,ibr)
        !           824:       nodplc(loc+8)=indxx(ibr,node1)
        !           825:       nodplc(loc+9)=indxx(ibr,node2)
        !           826:       nodplc(loc+13)=indxx(ibr,ibr)
        !           827:       loc=nodplc(loc)
        !           828:       go to 730
        !           829: c
        !           830: c  mutual inductances
        !           831: c
        !           832:   740 loc=locate(4)
        !           833:   750 if (loc.eq.0) go to 760
        !           834:       nl1=nodplc(loc+2)
        !           835:       nl2=nodplc(loc+3)
        !           836:       ibr1=nodplc(nl1+5)
        !           837:       ibr2=nodplc(nl2+5)
        !           838:       nodplc(loc+4)=indxx(ibr1,ibr2)
        !           839:       nodplc(loc+5)=indxx(ibr2,ibr1)
        !           840:       loc=nodplc(loc)
        !           841:       go to 750
        !           842: c
        !           843: c  nonlinear voltage controlled current sources
        !           844: c
        !           845:   760 loc=locate(5)
        !           846:   762 if (loc.eq.0) go to 764
        !           847:       node1=nodplc(loc+2)
        !           848:       node2=nodplc(loc+3)
        !           849:       ndim=nodplc(loc+4)
        !           850:       lnod=nodplc(loc+6)
        !           851:       lmat=nodplc(loc+7)
        !           852:       do 763 i=1,ndim
        !           853:       node3=nodplc(lnod+1)
        !           854:       node4=nodplc(lnod+2)
        !           855:       lnod=lnod+2
        !           856:       nodplc(lmat+1)=indxx(node1,node3)
        !           857:       nodplc(lmat+2)=indxx(node1,node4)
        !           858:       nodplc(lmat+3)=indxx(node2,node3)
        !           859:       nodplc(lmat+4)=indxx(node2,node4)
        !           860:       lmat=lmat+4
        !           861:   763 continue
        !           862:       loc=nodplc(loc)
        !           863:       go to 762
        !           864: c
        !           865: c  nonlinear voltage controlled voltage sources
        !           866: c
        !           867:   764 loc=locate(6)
        !           868:   766 if (loc.eq.0) go to 768
        !           869:       node1=nodplc(loc+2)
        !           870:       node2=nodplc(loc+3)
        !           871:       ndim=nodplc(loc+4)
        !           872:       ibr=nodplc(loc+6)
        !           873:       lnod=nodplc(loc+7)
        !           874:       lmat=nodplc(loc+8)
        !           875:       nodplc(lmat+1)=indxx(node1,ibr)
        !           876:       nodplc(lmat+2)=indxx(node2,ibr)
        !           877:       nodplc(lmat+3)=indxx(ibr,node1)
        !           878:       nodplc(lmat+4)=indxx(ibr,node2)
        !           879:       lmat=lmat+4
        !           880:       do 767 i=1,ndim
        !           881:       node3=nodplc(lnod+1)
        !           882:       node4=nodplc(lnod+2)
        !           883:       lnod=lnod+2
        !           884:       nodplc(lmat+1)=indxx(ibr,node3)
        !           885:       nodplc(lmat+2)=indxx(ibr,node4)
        !           886:       lmat=lmat+2
        !           887:   767 continue
        !           888:       loc=nodplc(loc)
        !           889:       go to 766
        !           890: c
        !           891: c  nonlinear current controlled current sources
        !           892: c
        !           893:   768 loc=locate(7)
        !           894:   770 if (loc.eq.0) go to 772
        !           895:       node1=nodplc(loc+2)
        !           896:       node2=nodplc(loc+3)
        !           897:       ndim=nodplc(loc+4)
        !           898:       locvs=nodplc(loc+6)
        !           899:       lmat=nodplc(loc+7)
        !           900:       do 771 i=1,ndim
        !           901:       locvst=nodplc(locvs+i)
        !           902:       ibr=nodplc(locvst+6)
        !           903:       nodplc(lmat+1)=indxx(node1,ibr)
        !           904:       nodplc(lmat+2)=indxx(node2,ibr)
        !           905:       lmat=lmat+2
        !           906:   771 continue
        !           907:       loc=nodplc(loc)
        !           908:       go to 770
        !           909: c
        !           910: c  nonlinear current controlled voltage sources
        !           911: c
        !           912:   772 loc=locate(8)
        !           913:   774 if (loc.eq.0) go to 780
        !           914:       node1=nodplc(loc+2)
        !           915:       node2=nodplc(loc+3)
        !           916:       ndim=nodplc(loc+4)
        !           917:       ibr=nodplc(loc+6)
        !           918:       locvs=nodplc(loc+7)
        !           919:       lmat=nodplc(loc+8)
        !           920:       nodplc(lmat+1)=indxx(node1,ibr)
        !           921:       nodplc(lmat+2)=indxx(node2,ibr)
        !           922:       nodplc(lmat+3)=indxx(ibr,node1)
        !           923:       nodplc(lmat+4)=indxx(ibr,node2)
        !           924:       lmat=lmat+4
        !           925:       do 775 i=1,ndim
        !           926:       locvst=nodplc(locvs+i)
        !           927:       kbr=nodplc(locvst+6)
        !           928:       nodplc(lmat+i)=indxx(ibr,kbr)
        !           929:   775 continue
        !           930:       loc=nodplc(loc)
        !           931:       go to 774
        !           932: c
        !           933: c  voltage sources
        !           934: c
        !           935:   780 loc=locate(9)
        !           936:   790 if (loc.eq.0) go to 800
        !           937:       node1=nodplc(loc+2)
        !           938:       node2=nodplc(loc+3)
        !           939:       iptr=nodplc(loc+6)
        !           940:       nodplc(loc+7)=indxx(node1,iptr)
        !           941:       nodplc(loc+8)=indxx(node2,iptr)
        !           942:       nodplc(loc+9)=indxx(iptr,node1)
        !           943:       nodplc(loc+10)=indxx(iptr,node2)
        !           944:       loc=nodplc(loc)
        !           945:       go to 790
        !           946: c
        !           947: c  diodes
        !           948: c
        !           949:   800 loc=locate(11)
        !           950:   810 if (loc.eq.0) go to 820
        !           951:       node1=nodplc(loc+2)
        !           952:       node2=nodplc(loc+3)
        !           953:       node3=nodplc(loc+4)
        !           954:       nodplc(loc+7)=indxx(node1,node3)
        !           955:       nodplc(loc+8)=indxx(node2,node3)
        !           956:       nodplc(loc+9)=indxx(node3,node1)
        !           957:       nodplc(loc+10)=indxx(node3,node2)
        !           958:       nodplc(loc+13)=indxx(node1,node1)
        !           959:       nodplc(loc+14)=indxx(node2,node2)
        !           960:       nodplc(loc+15)=indxx(node3,node3)
        !           961:       loc=nodplc(loc)
        !           962:       go to 810
        !           963: c
        !           964: c  transistors
        !           965: c
        !           966:   820 loc=locate(12)
        !           967:   830 if (loc.eq.0) go to 840
        !           968:       node1=nodplc(loc+2)
        !           969:       node2=nodplc(loc+3)
        !           970:       node3=nodplc(loc+4)
        !           971:       node4=nodplc(loc+5)
        !           972:       node5=nodplc(loc+6)
        !           973:       node6=nodplc(loc+7)
        !           974:       node7=nodplc(loc+30)
        !           975:       nodplc(loc+10)=indxx(node1,node4)
        !           976:       nodplc(loc+11)=indxx(node2,node5)
        !           977:       nodplc(loc+12)=indxx(node3,node6)
        !           978:       nodplc(loc+13)=indxx(node4,node1)
        !           979:       nodplc(loc+14)=indxx(node4,node5)
        !           980:       nodplc(loc+15)=indxx(node4,node6)
        !           981:       nodplc(loc+16)=indxx(node5,node2)
        !           982:       nodplc(loc+17)=indxx(node5,node4)
        !           983:       nodplc(loc+18)=indxx(node5,node6)
        !           984:       nodplc(loc+19)=indxx(node6,node3)
        !           985:       nodplc(loc+20)=indxx(node6,node4)
        !           986:       nodplc(loc+21)=indxx(node6,node5)
        !           987:       nodplc(loc+24)=indxx(node1,node1)
        !           988:       nodplc(loc+25)=indxx(node2,node2)
        !           989:       nodplc(loc+26)=indxx(node3,node3)
        !           990:       nodplc(loc+27)=indxx(node4,node4)
        !           991:       nodplc(loc+28)=indxx(node5,node5)
        !           992:       nodplc(loc+29)=indxx(node6,node6)
        !           993:       nodplc(loc+31)=indxx(node7,node7)
        !           994:       nodplc(loc+32)=indxx(node4,node7)
        !           995:       nodplc(loc+33)=indxx(node7,node4)
        !           996:       nodplc(loc+34)=indxx(node2,node4)
        !           997:       nodplc(loc+35)=indxx(node4,node2)
        !           998:       loc=nodplc(loc)
        !           999:       go to 830
        !          1000: c
        !          1001: c  jfets
        !          1002: c
        !          1003:   840 loc=locate(13)
        !          1004:   850 if (loc.eq.0) go to 860
        !          1005:       node1=nodplc(loc+2)
        !          1006:       node2=nodplc(loc+3)
        !          1007:       node3=nodplc(loc+4)
        !          1008:       node4=nodplc(loc+5)
        !          1009:       node5=nodplc(loc+6)
        !          1010:       nodplc(loc+9)=indxx(node1,node4)
        !          1011:       nodplc(loc+10)=indxx(node2,node4)
        !          1012:       nodplc(loc+11)=indxx(node2,node5)
        !          1013:       nodplc(loc+12)=indxx(node3,node5)
        !          1014:       nodplc(loc+13)=indxx(node4,node1)
        !          1015:       nodplc(loc+14)=indxx(node4,node2)
        !          1016:       nodplc(loc+15)=indxx(node4,node5)
        !          1017:       nodplc(loc+16)=indxx(node5,node2)
        !          1018:       nodplc(loc+17)=indxx(node5,node3)
        !          1019:       nodplc(loc+18)=indxx(node5,node4)
        !          1020:       nodplc(loc+20)=indxx(node1,node1)
        !          1021:       nodplc(loc+21)=indxx(node2,node2)
        !          1022:       nodplc(loc+22)=indxx(node3,node3)
        !          1023:       nodplc(loc+23)=indxx(node4,node4)
        !          1024:       nodplc(loc+24)=indxx(node5,node5)
        !          1025:       loc=nodplc(loc)
        !          1026:       go to 850
        !          1027: c
        !          1028: c  mosfets
        !          1029: c
        !          1030:   860 loc=locate(14)
        !          1031:   870 if (loc.eq.0) go to 900
        !          1032:       node1=nodplc(loc+2)
        !          1033:       node2=nodplc(loc+3)
        !          1034:       node3=nodplc(loc+4)
        !          1035:       node4=nodplc(loc+5)
        !          1036:       node5=nodplc(loc+6)
        !          1037:       node6=nodplc(loc+7)
        !          1038:       nodplc(loc+10)=indxx(node1,node5)
        !          1039:       nodplc(loc+11)=indxx(node2,node4)
        !          1040:       nodplc(loc+12)=indxx(node2,node5)
        !          1041:       nodplc(loc+13)=indxx(node2,node6)
        !          1042:       nodplc(loc+14)=indxx(node3,node6)
        !          1043:       nodplc(loc+15)=indxx(node4,node2)
        !          1044:       nodplc(loc+16)=indxx(node4,node5)
        !          1045:       nodplc(loc+17)=indxx(node4,node6)
        !          1046:       nodplc(loc+18)=indxx(node5,node1)
        !          1047:       nodplc(loc+19)=indxx(node5,node2)
        !          1048:       nodplc(loc+20)=indxx(node5,node4)
        !          1049:       nodplc(loc+21)=indxx(node5,node6)
        !          1050:       nodplc(loc+22)=indxx(node6,node2)
        !          1051:       nodplc(loc+23)=indxx(node6,node3)
        !          1052:       nodplc(loc+24)=indxx(node6,node4)
        !          1053:       nodplc(loc+25)=indxx(node6,node5)
        !          1054:       nodplc(loc+27)=indxx(node1,node1)
        !          1055:       nodplc(loc+28)=indxx(node2,node2)
        !          1056:       nodplc(loc+29)=indxx(node3,node3)
        !          1057:       nodplc(loc+30)=indxx(node4,node4)
        !          1058:       nodplc(loc+31)=indxx(node5,node5)
        !          1059:       nodplc(loc+32)=indxx(node6,node6)
        !          1060:       loc=nodplc(loc)
        !          1061:       go to 870
        !          1062: c
        !          1063: c  transmission lines
        !          1064: c
        !          1065:   900 loc=locate(17)
        !          1066:   910 if (loc.eq.0) go to 1000
        !          1067:       node1=nodplc(loc+2)
        !          1068:       node2=nodplc(loc+3)
        !          1069:       node3=nodplc(loc+4)
        !          1070:       node4=nodplc(loc+5)
        !          1071:       ni1=nodplc(loc+6)
        !          1072:       ni2=nodplc(loc+7)
        !          1073:       ibr1=nodplc(loc+8)
        !          1074:       ibr2=nodplc(loc+9)
        !          1075:       nodplc(loc+10)=indxx(node1,node1)
        !          1076:       nodplc(loc+11)=indxx(node1,ni1)
        !          1077:       nodplc(loc+12)=indxx(node2,ibr1)
        !          1078:       nodplc(loc+13)=indxx(node3,node3)
        !          1079:       nodplc(loc+14)=indxx(node4,ibr2)
        !          1080:       nodplc(loc+15)=indxx(ni1,node1)
        !          1081:       nodplc(loc+16)=indxx(ni1,ni1)
        !          1082:       nodplc(loc+17)=indxx(ni1,ibr1)
        !          1083:       nodplc(loc+18)=indxx(ni2,ni2)
        !          1084:       nodplc(loc+19)=indxx(ni2,ibr2)
        !          1085:       nodplc(loc+20)=indxx(ibr1,node2)
        !          1086:       nodplc(loc+21)=indxx(ibr1,node3)
        !          1087:       nodplc(loc+22)=indxx(ibr1,node4)
        !          1088:       nodplc(loc+23)=indxx(ibr1,ni1)
        !          1089:       nodplc(loc+24)=indxx(ibr1,ibr2)
        !          1090:       nodplc(loc+25)=indxx(ibr2,node1)
        !          1091:       nodplc(loc+26)=indxx(ibr2,node2)
        !          1092:       nodplc(loc+27)=indxx(ibr2,node4)
        !          1093:       nodplc(loc+28)=indxx(ibr2,ni2)
        !          1094:       nodplc(loc+29)=indxx(ibr2,ibr1)
        !          1095:       nodplc(loc+31)=indxx(node3,ni2)
        !          1096:       nodplc(loc+32)=indxx(ni2,node3)
        !          1097:       loc=nodplc(loc)
        !          1098:       go to 910
        !          1099: c
        !          1100: c  .nodeset
        !          1101: c
        !          1102:  1000 call sizmem(nsnod,nic)
        !          1103:       if(nic.eq.0) go to 1020
        !          1104:       call getm4(nsmat,nic)
        !          1105:       do 1010 i=1,nic
        !          1106:       node=nodplc(nsnod+i)
        !          1107:       nodplc(nsmat+i)=indxx(node,node)
        !          1108:  1010 continue
        !          1109: c
        !          1110: c  transient initial conditions
        !          1111: c
        !          1112:  1020 call sizmem(icnod,nic)
        !          1113:       if(nic.eq.0) go to 1100
        !          1114:       call getm4(icmat,nic)
        !          1115:       do 1030 i=1,nic
        !          1116:       node=nodplc(icnod+i)
        !          1117:       nodplc(icmat+i)=indxx(node,node)
        !          1118:  1030 continue
        !          1119: c
        !          1120: c  finished
        !          1121: c
        !          1122:  1100 return
        !          1123:       end
        !          1124:       integer function indxx(node1,node2)
        !          1125:       implicit double precision (a-h,o-z)
        !          1126: c
        !          1127: c     this routine maps a (row, column) matrix term specification into
        !          1128: c the offset from the origin of the matrix storage at which the term is
        !          1129: c actually located.
        !          1130: c
        !          1131:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !          1132:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !          1133:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !          1134:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !          1135:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !          1136:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !          1137:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !          1138:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !          1139:       common /blank/ value(1000)
        !          1140:       integer nodplc(64)
        !          1141:       complex*16 cvalue(32)
        !          1142:       equivalence (value(1),nodplc(1),cvalue(1))
        !          1143: c
        !          1144: c  check for ground
        !          1145: c
        !          1146:       if (node1.eq.1) go to 400
        !          1147:       if (node2.eq.1) go to 400
        !          1148: c
        !          1149:       n1=nodplc(iequa+node1)
        !          1150:       n1=nodplc(jmnode+n1)
        !          1151:       n2=nodplc(jmnode+node2)
        !          1152: c
        !          1153: c
        !          1154:       if (n1-n2) 100,200,300
        !          1155: c
        !          1156: c  upper triangle
        !          1157: c
        !          1158:   100 ns=nodplc(iur+n1)
        !          1159:       ne=nodplc(iur+n1+1)
        !          1160:   110 if (ns.ge.ne) go to 400
        !          1161:       if (nodplc(iuc+ns).eq.n2) go to 120
        !          1162:       ns=ns+1
        !          1163:       go to 110
        !          1164:   120 indxx=nstop+ns
        !          1165:       go to 500
        !          1166: c
        !          1167: c  diagonal
        !          1168: c
        !          1169:   200 indxx=node2
        !          1170:       go to 500
        !          1171: c
        !          1172: c  lower triangle
        !          1173: c
        !          1174:   300 ns=nodplc(ilc+n2)
        !          1175:       ne=nodplc(ilc+n2+1)
        !          1176:   310 if (ns.ge.ne) go to 400
        !          1177:       if (nodplc(ilr+ns).eq.n1) go to 320
        !          1178:       ns=ns+1
        !          1179:       go to 310
        !          1180:   320 indxx=nstop+nut+ns
        !          1181:       go to 500
        !          1182: c
        !          1183: c  unused location
        !          1184: c
        !          1185:   400 indxx=1
        !          1186: c
        !          1187: c  finished
        !          1188: c
        !          1189:   500 return
        !          1190:       end
        !          1191:       subroutine codgen
        !          1192:       implicit double precision (a-h,o-z)
        !          1193: c
        !          1194: c     this routine generates machine instructions (for the cdc 6400) to
        !          1195: c lu-factor and solve the set of circuit equations.
        !          1196: c
        !          1197:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !          1198:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !          1199:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !          1200:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !          1201:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !          1202:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !          1203:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !          1204:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !          1205:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !          1206:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !          1207:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !          1208:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !          1209:       common /blank/ value(1000)
        !          1210:       integer nodplc(64)
        !          1211:       complex*16 cvalue(32)
        !          1212:       equivalence (value(1),nodplc(1),cvalue(1))
        !          1213:       return
        !          1214:       end

unix.superglobalmegacorp.com

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