|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.