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

1.1     ! root        1:       subroutine ovtpvt
        !             2:       implicit double precision (a-h,o-z)
        !             3: c
        !             4: c
        !             5: c     this routine generates the requested tabular listings of analysis
        !             6: c results.  it calls plot to generate line-printer plots.
        !             7: c
        !             8:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !             9:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !            10:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !            11:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !            12:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !            13:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !            14:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !            15:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !            16:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !            17:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !            18:      2   itemno,nosolv,ipostp,iscrch
        !            19:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !            20:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !            21:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !            22:      1  defas,rstats(50),iwidth,lwidth,nopage
        !            23:       common /dc/ tcstar(2),tcstop(2),tcincr(2),icvflg,itcelm(2),kssop,
        !            24:      1   kinel,kidin,kovar,kidout
        !            25:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !            26:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !            27:       common /tran/ tstep,tstop,tstart,delmax,tdmax,forfre,jtrflg
        !            28:       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
        !            29:      1   ilogy(8),npoint,numout,kntr,numdgt
        !            30:       common /blank/ value(1000)
        !            31:       integer nodplc(64)
        !            32:       complex*16 cvalue(32)
        !            33:       equivalence (value(1),nodplc(1),cvalue(1))
        !            34: c
        !            35:       complex*16 cval
        !            36:       dimension prform(3)
        !            37:       dimension subtit(4,3)
        !            38:       data subtit / 8hdc trans, 8hfer curv, 8hes      , 8h        ,
        !            39:      1              8htransien, 8ht analys, 8his      , 8h        ,
        !            40:      2              8hac analy, 8hsis     , 8h        , 8h         /
        !            41:       data prform / 8h(1pe11.3, 8h,2x,8e00, 8h.00)     /
        !            42:       data aper,rprn / 1h., 1h) /
        !            43: c
        !            44:       call second(t1)
        !            45:       if (icalc.le.0) go to 1000
        !            46:       call crunch
        !            47:       if (nogo.lt.0) go to 1000
        !            48: c
        !            49: c  construct format statement to be used for printing the outputs
        !            50: c
        !            51:       ifract=max0(numdgt-1,0)
        !            52:       ifwdth=ifract+9
        !            53:       ipos=15
        !            54:       call alfnum(ifwdth,prform,ipos)
        !            55:       call move(prform,ipos,aper,1,1)
        !            56:       ipos=ipos+1
        !            57:       call alfnum(ifract,prform,ipos)
        !            58:       call move(prform,ipos,rprn,1,1)
        !            59: c
        !            60:       noprln=min0(8,(lwidth-12)/ifwdth)
        !            61:       if (mode-2) 50,60,300
        !            62:    50 numout=jelcnt(41)+1
        !            63:       go to 70
        !            64:    60 numout=jelcnt(42)+1
        !            65: c
        !            66: c  dc and transient analysis printing
        !            67: c
        !            68:    70 loc=locate(30+mode)
        !            69:    80 if (loc.eq.0) go to 200
        !            70:       kntr=min0(noprln,nodplc(loc+3))
        !            71:       if (kntr.le.0) go to 120
        !            72:       call title(1,lwidth,1,subtit(1,mode))
        !            73:       call setprn(loc)
        !            74: c
        !            75: c  get buffer space
        !            76: c
        !            77:       call getm8(locx,npoint)
        !            78:       call getm8(locy,kntr*npoint)
        !            79: c
        !            80: c  interpolate outputs
        !            81: c
        !            82:       call ntrpl8(locx,locy,numpnt)
        !            83: c
        !            84: c  print outputs
        !            85: c
        !            86:       do 100 i=1,numpnt
        !            87:       xvar=value(locx+i)
        !            88:       locyt=locy
        !            89:       do 90 k=1,kntr
        !            90:       yvar(k)=value(locyt+i)
        !            91:       locyt=locyt+npoint
        !            92:    90 continue
        !            93:       write (6,prform) xvar,(yvar(k),k=1,kntr)
        !            94:   100 continue
        !            95:       write (6,111)
        !            96:   111 format(1hy)
        !            97:       call clrmem(locx)
        !            98:       call clrmem(locy)
        !            99:   120 loc=nodplc(loc)
        !           100:       go to 80
        !           101: c
        !           102: c  dc and transient analysis plotting
        !           103: c
        !           104:   200 loc=locate(35+mode)
        !           105:   210 if (loc.eq.0) go to 250
        !           106:       kntr=nodplc(loc+3)
        !           107:       if (kntr.le.0) go to 220
        !           108:       locv=nodplc(loc+1)
        !           109:       call title(1,lwidth,1,subtit(1,mode))
        !           110:       call setplt(loc)
        !           111: c
        !           112: c     get buffer space
        !           113: c
        !           114:       call getm8(locx,npoint)
        !           115:       call getm8(locy,kntr*npoint)
        !           116: c
        !           117: c  interpolate outputs and load plot buffers
        !           118: c
        !           119:       call ntrpl8(locx,locy,numpnt)
        !           120:       call plot(numpnt,locx,locy,locv)
        !           121:       call clrmem(locx)
        !           122:       call clrmem(locy)
        !           123:   220 loc=nodplc(loc)
        !           124:       go to 210
        !           125: c
        !           126: c  fourier analysis
        !           127: c
        !           128:   250 if (mode.eq.1) go to 1000
        !           129:       if (nfour.eq.0) go to 1000
        !           130:       if (nogo.ne.0) go to 1000
        !           131:       call fouran
        !           132:       go to 1000
        !           133: c
        !           134: c  ac analysis printing
        !           135: c
        !           136:   300 numout=jelcnt(43)+jelcnt(44)+jelcnt(45)+1
        !           137:       do 599 id=33,35
        !           138:       loc=locate(id)
        !           139:   320 if (loc.eq.0) go to 599
        !           140:       kntr=min0(noprln,nodplc(loc+3))
        !           141:       if (kntr.le.0) go to 595
        !           142:       call title(1,lwidth,1,subtit(1,mode))
        !           143:       call setprn(loc)
        !           144: c
        !           145: c  print ac outputs
        !           146: c
        !           147:       lout=loutpt
        !           148:       do 590 i=1,icalc
        !           149:       xvar=dreal(cvalue(lout+1))
        !           150:       do 500 k=1,kntr
        !           151:       iseq=itab(k)
        !           152:       iseq=nodplc(iseq+4)
        !           153:       cval=cvalue(lout+iseq)
        !           154:       ktype=itype(k)
        !           155:       go to (450,450,430,440,450,450), ktype
        !           156:   430 yvar(k)=dreal(cval)
        !           157:       go to 500
        !           158:   440 yvar(k)=dimag(cval)
        !           159:       go to 500
        !           160:   450 call magphs(cval,xmag,xphs)
        !           161:       go to (460,460,430,440,470,465), ktype
        !           162:   460 yvar(k)=xmag
        !           163:       go to 500
        !           164:   465 yvar(k)=20.0d0*dlog10(xmag)
        !           165:       go to 500
        !           166:   470 yvar(k)=xphs
        !           167:   500 continue
        !           168:       lout=lout+numout
        !           169:   580 write (6,prform) xvar,(yvar(k),k=1,kntr)
        !           170:   590 continue
        !           171:       write (6,111)
        !           172:   595 loc=nodplc(loc)
        !           173:       go to 320
        !           174:   599 continue
        !           175: c
        !           176: c  ac analysis plotting
        !           177: c
        !           178:       do 760 id=38,40
        !           179:       loc=locate(id)
        !           180:   610 if (loc.eq.0) go to 760
        !           181:       kntr=nodplc(loc+3)
        !           182:       if (kntr.le.0) go to 750
        !           183:       locv=nodplc(loc+1)
        !           184:       call title(1,lwidth,1,subtit(1,mode))
        !           185:       call setplt(loc)
        !           186: c
        !           187:       call getm8(locx,icalc)
        !           188:       call getm8(locy,kntr*icalc)
        !           189: c
        !           190: c     load plot buffers
        !           191: c
        !           192:       lout=loutpt
        !           193:       do 710 i=1,icalc
        !           194:       xvar=dreal(cvalue(lout+1))
        !           195:       locyt=locy
        !           196:       do 700 k=1,kntr
        !           197:       iseq=itab(k)
        !           198:       iseq=nodplc(iseq+4)
        !           199:       cval=cvalue(lout+iseq)
        !           200:       ktype=itype(k)
        !           201:       go to (670,670,650,660,670,670), ktype
        !           202:   650 yvr=dreal(cval)
        !           203:       go to 695
        !           204:   660 yvr=dimag(cval)
        !           205:       go to 695
        !           206:   670 call magphs(cval,xmag,xphs)
        !           207:       go to (680,680,650,660,690,685), ktype
        !           208:   680 yvr=dlog10(xmag)
        !           209:       go to 695
        !           210:   685 yvr=20.0d0*dlog10(xmag)
        !           211:       go to 695
        !           212:   690 yvr=xphs
        !           213:   695 value(locyt+i)=yvr
        !           214:       locyt=locyt+icalc
        !           215:   700 continue
        !           216:       value(locx+i)=xvar
        !           217:       lout=lout+numout
        !           218:   710 continue
        !           219:       call plot(icalc,locx,locy,locv)
        !           220:       call clrmem(locx)
        !           221:       call clrmem(locy)
        !           222:   750 loc=nodplc(loc)
        !           223:       go to 610
        !           224:   760 continue
        !           225: c
        !           226: c  finished
        !           227: c
        !           228:  1000 call clrmem(loutpt)
        !           229:       call second(t2)
        !           230:       rstats(11)=rstats(11)+t2-t1
        !           231:       return
        !           232:       end
        !           233:       subroutine ntrpl8(locx,locy,numpnt)
        !           234:       implicit double precision (a-h,o-z)
        !           235: c
        !           236: c     this routine interpolates the analysis data to obtain the values
        !           237: c printed and/or plotted, using linear interpolation.
        !           238: c
        !           239:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           240:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           241:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           242:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           243:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           244:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           245:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !           246:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !           247:      2   itemno,nosolv,ipostp,iscrch
        !           248:       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
        !           249:      1   ilogy(8),npoint,numout,kntr,numdgt
        !           250:       common /blank/ value(1000)
        !           251:       integer nodplc(64)
        !           252:       complex*16 cvalue(32)
        !           253:       equivalence (value(1),nodplc(1),cvalue(1))
        !           254:       if(mode.ne.1) go to 4
        !           255:       numpnt=icalc
        !           256:       loco=loutpt
        !           257:       do 3 i=1,numpnt
        !           258:       locyt=locy
        !           259:       value(locx+i)=value(loco+1)
        !           260:       do 2 k=1,kntr
        !           261:       iseq=itab(k)
        !           262:       iseq=nodplc(iseq+4)
        !           263:       value(locyt+i)=value(loco+iseq)
        !           264:       locyt=locyt+npoint
        !           265:     2 continue
        !           266:       loco=loco+numout
        !           267:     3 continue
        !           268:       return
        !           269:     4 continue
        !           270:       xvar=xstart
        !           271:       xvtol=xincr*1.0d-5
        !           272:       ippnt=0
        !           273:       icpnt=2
        !           274:       loco1=loutpt
        !           275:       loco2=loco1+numout
        !           276:       if (icalc.lt.2) go to 50
        !           277:    10 x1=value(loco1+1)
        !           278:       x2=value(loco2+1)
        !           279:       dx1x2=x1-x2
        !           280:    20 if (xincr.lt.0.0d0) go to 24
        !           281:       if (xvar.le.(x2+xvtol)) go to 30
        !           282:       go to 28
        !           283:    24 if (xvar.ge.(x2+xvtol)) go to 30
        !           284:    28 if (icpnt.ge.icalc) go to 100
        !           285:       icpnt=icpnt+1
        !           286:       loco1=loco2
        !           287:       loco2=loco1+numout
        !           288:       go to 10
        !           289:    30 ippnt=ippnt+1
        !           290:       value(locx+ippnt)=xvar
        !           291:       dxx1=xvar-x1
        !           292:       locyt=locy
        !           293:       do 40 i=1,kntr
        !           294:       iseq=itab(i)
        !           295:       iseq=nodplc(iseq+4)
        !           296:       v1=value(loco1+iseq)
        !           297:       v2=value(loco2+iseq)
        !           298:       yvr=v1+(v1-v2)*dxx1/dx1x2
        !           299:       tol=dmin1(dabs(v1),dabs(v2))*1.0d-10
        !           300:       if (dabs(yvr).le.tol) yvr=0.0d0
        !           301:       value(locyt+ippnt)=yvr
        !           302:       locyt=locyt+npoint
        !           303:    40 continue
        !           304:       if (ippnt.ge.npoint) go to 100
        !           305:       xvar=xstart+dfloat(ippnt)*xincr
        !           306:       if (dabs(xvar).ge.dabs(xvtol)) go to 20
        !           307:       xvar=0.0d0
        !           308:       go to 20
        !           309: c
        !           310: c  special handling if icalc = 1
        !           311: c
        !           312: c...  icalc=1;  just copy over the single point and return
        !           313:    50 ippnt=1
        !           314:       value(locx+ippnt)=xvar
        !           315:       locyt=locy
        !           316:       do 60 i=1,kntr
        !           317:       iseq=itab(i)
        !           318:       iseq=nodplc(iseq+4)
        !           319:       value(locyt+ippnt)=value(loco1+iseq)
        !           320:       locyt=locyt+npoint
        !           321:    60 continue
        !           322:       go to 100
        !           323: c
        !           324: c  return
        !           325: c
        !           326:   100 numpnt=ippnt
        !           327:       return
        !           328:       end
        !           329:       subroutine setprn(loc)
        !           330:       implicit double precision (a-h,o-z)
        !           331: c
        !           332: c     this routine formats the column headers for tabular listings of
        !           333: c output variables.
        !           334: c
        !           335:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           336:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           337:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           338:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           339:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           340:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           341:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !           342:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !           343:      2   itemno,nosolv,ipostp,iscrch
        !           344:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !           345:      1  defas,rstats(50),iwidth,lwidth,nopage
        !           346:       common /dc/ tcstar(2),tcstop(2),tcincr(2),icvflg,itcelm(2),kssop,
        !           347:      1   kinel,kidin,kovar,kidout
        !           348:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !           349:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !           350:       common /tran/ tstep,tstop,tstart,delmax,tdmax,forfre,jtrflg
        !           351:       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
        !           352:      1   ilogy(8),npoint,numout,kntr,numdgt
        !           353:       common /blank/ value(1000)
        !           354:       integer nodplc(64)
        !           355:       complex*16 cvalue(32)
        !           356:       equivalence (value(1),nodplc(1),cvalue(1))
        !           357: c
        !           358:       data ablnk, atimex, afreq / 1h , 6h  time, 6h  freq /
        !           359: c
        !           360: c  set limits depending upon the analysis mode
        !           361: c
        !           362:       if (mode-2) 10,20,30
        !           363:    10 xstart=tcstar(1)
        !           364:       xincr=tcincr(1)
        !           365:       npoint=icvflg
        !           366:       itemp=itcelm(1)
        !           367:       loce=nodplc(itemp+1)
        !           368:       asweep=value(loce)
        !           369:       go to 40
        !           370:    20 xstart=tstart
        !           371:       xincr=tstep
        !           372:       npoint=jtrflg
        !           373:       asweep=atimex
        !           374:       go to 40
        !           375:    30 xstart=fstart
        !           376:       xincr=fincr
        !           377:       npoint=icalc
        !           378:       asweep=afreq
        !           379: c
        !           380: c  construct and print the output variable names
        !           381: c
        !           382:    40 loct=loc+2
        !           383:       ipos=1
        !           384:       npos=ipos+numdgt+8
        !           385:       do 90 i=1,kntr
        !           386:       loct=loct+2
        !           387:       itab(i)=nodplc(loct)
        !           388:       itype(i)=nodplc(loct+1)
        !           389:       call outnam(itab(i),itype(i),string,ipos)
        !           390:       if (ipos.ge.npos) go to 70
        !           391:       do 60 j=ipos,npos
        !           392:       call move(string,j,ablnk,1,1)
        !           393:    60 continue
        !           394:       ipos=npos
        !           395:       go to 80
        !           396:    70 call move(string,ipos,ablnk,1,1)
        !           397:       ipos=ipos+1
        !           398:    80 npos=npos+numdgt+8
        !           399:    90 continue
        !           400:       call move(string,ipos,ablnk,1,7)
        !           401:       jstop=(ipos+6)/8
        !           402:       write (6,91) asweep,(string(j),j=1,jstop)
        !           403:    91 format(/3x,a8,5x,14a8,a4)
        !           404:       write (6,101)
        !           405:   101 format(1hx/1h )
        !           406:       return
        !           407:       end
        !           408:       subroutine setplt(loc)
        !           409:       implicit double precision (a-h,o-z)
        !           410: c
        !           411: c     this routine generates the 'legend' subheading used to identify
        !           412: c individual traces on multi-trace line-printer plots.
        !           413: c
        !           414:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           415:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           416:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           417:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           418:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           419:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           420:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !           421:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !           422:      2   itemno,nosolv,ipostp,iscrch
        !           423:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !           424:      1  defas,rstats(50),iwidth,lwidth,nopage
        !           425:       common /dc/ tcstar(2),tcstop(2),tcincr(2),icvflg,itcelm(2),kssop,
        !           426:      1   kinel,kidin,kovar,kidout
        !           427:       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
        !           428:      1   inoise,nosprt,nosout,nosin,idist,idprt
        !           429:       common /tran/ tstep,tstop,tstart,delmax,tdmax,forfre,jtrflg
        !           430:       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
        !           431:      1   ilogy(8),npoint,numout,kntr,numdgt
        !           432:       common /blank/ value(1000)
        !           433:       integer nodplc(64)
        !           434:       complex*16 cvalue(32)
        !           435:       equivalence (value(1),nodplc(1),cvalue(1))
        !           436: c
        !           437:       dimension logopt(6)
        !           438:       data logopt / 2, 2, 1, 1, 1, 1 /
        !           439:       data ablnk, atimex, afreq / 1h , 6h  time, 6h  freq /
        !           440:       data pltsym / 8h*+=$0<>? /
        !           441: c
        !           442: c  set limits depending upon the analysis mode
        !           443: c
        !           444:       if (mode-2) 10,20,30
        !           445:    10 xstart=tcstar(1)
        !           446:       xincr=tcincr(1)
        !           447:       npoint=icvflg
        !           448:       itemp=itcelm(1)
        !           449:       loce=nodplc(itemp+1)
        !           450:       asweep=value(loce)
        !           451:       go to 40
        !           452:    20 xstart=tstart
        !           453:       xincr=tstep
        !           454:       npoint=jtrflg
        !           455:       asweep=atimex
        !           456:       go to 40
        !           457:    30 xstart=fstart
        !           458:       xincr=fincr
        !           459:       npoint=jacflg
        !           460:       asweep=afreq
        !           461: c
        !           462: c  construct and print the output variables with corresponding plot
        !           463: c    symbols
        !           464: c
        !           465:    40 loct=loc+2
        !           466:       if (kntr.eq.1) go to 80
        !           467:       write (6,41)
        !           468:    41 format('0legend:'/)
        !           469:       do 70 i=1,kntr
        !           470:       loct=loct+2
        !           471:       itab(i)=nodplc(loct)
        !           472:       ioutyp=nodplc(loct+1)
        !           473:       itype(i)=ioutyp
        !           474:       ilogy(i)=1
        !           475:       if (mode.le.2) go to 50
        !           476:       ilogy(i)=logopt(ioutyp)
        !           477:    50 ipos=1
        !           478:       call outnam(itab(i),itype(i),string,ipos)
        !           479:       call move(string,ipos,ablnk,1,7)
        !           480:       jstop=(ipos+6)/8
        !           481:       call move(achar,1,pltsym,i,1)
        !           482:       write (6,61) achar,(string(j),j=1,jstop)
        !           483:    61 format(1x,a1,2h: ,5a8)
        !           484:    70 continue
        !           485:    80 if (kntr.ge.2) go to 90
        !           486:       itab(1)=nodplc(loc+4)
        !           487:       ioutyp=nodplc(loc+5)
        !           488:       itype(1)=ioutyp
        !           489:       ilogy(1)=1
        !           490:       if (mode.le.2) go to 90
        !           491:       ilogy(1)=logopt(ioutyp)
        !           492:    90 ipos=1
        !           493:       call outnam(itab(1),itype(1),string,ipos)
        !           494:       call move(string,ipos,ablnk,1,7)
        !           495:       jstop=(ipos+6)/8
        !           496:       write (6,101) asweep,(string(j),j=1,jstop)
        !           497:   101 format(1hx/3x,a8,4x,5a8)
        !           498:       return
        !           499:       end
        !           500:       subroutine plot(numpnt,locx,locy,locv)
        !           501:       implicit double precision (a-h,o-z)
        !           502: c
        !           503: c     this routine generates the line-printer plots.
        !           504: c
        !           505:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !           506:      1  defas,rstats(50),iwidth,lwidth,nopage
        !           507:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !           508:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !           509:      2   itemno,nosolv,ipostp,iscrch
        !           510:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !           511:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !           512:       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
        !           513:      1   ilogy(8),npoint,numout,kntr,numdgt
        !           514:       common /blank/ value(1000)
        !           515:       integer nodplc(64)
        !           516:       complex*16 cvalue(32)
        !           517:       equivalence (value(1),nodplc(1),cvalue(1))
        !           518: c
        !           519: c
        !           520:       integer xxor
        !           521:       dimension ycoor(5,8),icoor(8),delplt(8)
        !           522:       dimension agraph(13),aplot(13)
        !           523:       dimension asym(2),pmin(8),jcoor(8)
        !           524:       data ablnk, aletx, aper / 1h , 1hx, 1h. /
        !           525:       data asym1, asym2, arprn / 8h(-------, 8h--------, 1h) /
        !           526:       data pltsym / 8h*+=$0<>? /
        !           527: c
        !           528: c
        !           529:       iwide=1
        !           530:       nwide=101
        !           531:       nwide4=25
        !           532:       if(lwidth.gt.80) go to 3
        !           533:       iwide=0
        !           534:       nwide=57
        !           535:       nwide4=14
        !           536:     3 if (numpnt.le.0) go to 400
        !           537:       do 5 i=1,13
        !           538:       agraph(i)=ablnk
        !           539:     5 continue
        !           540:       do 7 i=1,5
        !           541:       ispot=1+nwide4*(i-1)
        !           542:       call move(agraph,ispot,aper,1,1)
        !           543:     7 continue
        !           544:       locyt=locy
        !           545:       lspot=locv-1
        !           546:       mltscl=0
        !           547:       if (value(locv).eq.0.0d0) mltscl=1
        !           548:       do 235 k=1,kntr
        !           549:       lspot=lspot+2
        !           550:       ymin=value(lspot)
        !           551:       ymax=value(lspot+1)
        !           552:       if (ymin.ne.0.0d0) go to 10
        !           553:       if (ymax.ne.0.0d0) go to 10
        !           554:       go to 100
        !           555:    10 ymin1=dmin1(ymin,ymax)
        !           556:       ymax1=dmax1(ymin,ymax)
        !           557:    30 if (ilogy(k).eq.1) go to 40
        !           558:       ymin1=dlog10(dmax1(ymin1,1.0d-20))
        !           559:       ymax1=dlog10(dmax1(ymax1,1.0d-20))
        !           560:       del=dmax1(ymax1-ymin1,0.0001d0)/4.0d0
        !           561:       go to 50
        !           562:    40 del=dmax1(ymax1-ymin1,1.0d-20)/4.0d0
        !           563:    50 ymin=ymin1
        !           564:       ymax=ymax1
        !           565:       go to 200
        !           566: c
        !           567: c  determine max and min values
        !           568: c
        !           569:   100 ymax1=value(locyt+1)
        !           570:       ymin1=ymax1
        !           571:       if (numpnt.eq.1) go to 150
        !           572:       do 110 i=2,numpnt
        !           573:       ymin1=dmin1(ymin1,value(locyt+i))
        !           574:       ymax1=dmax1(ymax1,value(locyt+i))
        !           575:   110 continue
        !           576: c
        !           577: c  scaling
        !           578: c
        !           579:   150 call scale(ymin1,ymax1,4,ymin,ymax,del)
        !           580: c
        !           581: c  determine coordinates
        !           582: c
        !           583:   200 ycoor(1,k)=ymin
        !           584:       pmin(k)=ymin
        !           585:       small=del*1.0d-4
        !           586:       if (dabs(ycoor(1,k)).le.small) ycoor(1,k)=0.0d0
        !           587:       do 210 i=1,4
        !           588:       ycoor(i+1,k)=ycoor(i,k)+del
        !           589:       if (dabs(ycoor(i+1,k)).le.small) ycoor(i+1,k)=0.0d0
        !           590:   210 continue
        !           591:       if (ilogy(k).eq.1) go to 230
        !           592:       do 220 i=1,5
        !           593:   220 ycoor(i,k)=dexp(xlog10*ycoor(i,k))
        !           594:   230 delplt(k)=del/dfloat(nwide4)
        !           595:       locyt=locyt+npoint
        !           596:   235 continue
        !           597: c
        !           598: c  count distinct coordinates
        !           599: c
        !           600:       icoor(1)=1
        !           601:       jcoor(1)=1
        !           602:       numcor=1
        !           603:       if (kntr.eq.1) go to 290
        !           604:       do 250 i=2,kntr
        !           605:       do 245 j=1,numcor
        !           606:       l=jcoor(j)
        !           607: c...  coordinates are *equal* if the most significant 24 bits agree
        !           608:       do 240 k=1,5
        !           609:       y1=ycoor(k,i)
        !           610:       y2=ycoor(k,l)
        !           611:       if(y1.eq.0.0d0.and.y2.eq.0.0d0) go to 240
        !           612:       if(dabs((y1-y2)/dmax1(dabs(y1),dabs(y2))).ge.1.0d-7) go to 245
        !           613:   240 continue
        !           614:       icoor(i)=l
        !           615:       go to 250
        !           616:   245 continue
        !           617:       icoor(i)=i
        !           618:       numcor=numcor+1
        !           619:       jcoor(numcor)=i
        !           620:   250 continue
        !           621: c
        !           622: c  print coordinates
        !           623: c
        !           624:   260 do 280 i=1,numcor
        !           625:       asym(1)=asym1
        !           626:       asym(2)=asym2
        !           627:       ipos=2
        !           628:       do 270 j=1,kntr
        !           629:       if (icoor(j).ne.jcoor(i)) go to 270
        !           630:       call move(asym,ipos,pltsym,j,1)
        !           631:       ipos=ipos+1
        !           632:   270 continue
        !           633:       call move(asym,ipos,arprn,1,1)
        !           634:       k=jcoor(i)
        !           635:       if(iwide.ne.0) write(6,271) asym,(ycoor(j,k),j=1,5)
        !           636:   271 format(/1hx,2a8,4h----,1pd12.3,4(15x,d10.3)/26x,51(2h -))
        !           637:       if(iwide.eq.0) write(6,273) asym,(ycoor(j,k),j=1,5)
        !           638:   273 format(/1hx,2a8,1pd10.3,3(4x,d10.3),1x,d10.3/22x,29(2h -))
        !           639:   280 continue
        !           640:       go to 300
        !           641:   290 if(iwide.ne.0) write(6,291) (ycoor(j,1),j=1,5)
        !           642:   291 format(/1hx,20x,1pd12.3,4(15x,d10.3)/26x,51(2h -))
        !           643:       if(iwide.eq.0) write(6,293) (ycoor(j,1),j=1,5)
        !           644:   293 format(/1hx,14x,1pd12.3,3(4x,d10.3),1x,d10.3/22x,29(2h -))
        !           645: c
        !           646: c  plotting
        !           647: c
        !           648:   300 aspot=ablnk
        !           649:       do 320 i=1,numpnt
        !           650:       xvar=value(locx+i)
        !           651:       locyt=locy
        !           652:       call copy8(agraph,aplot,13)
        !           653:       do 310 k=1,kntr
        !           654:       yvr=value(locyt+i)
        !           655:       ktmp=icoor(k)
        !           656:       ymin1=pmin(ktmp)
        !           657:       jpoint=idint((yvr-ymin1)/delplt(k)+0.5d0)+1
        !           658:       if (jpoint.le.0) go to 306
        !           659:       if (jpoint.gt.nwide) go to 306
        !           660:       call move(aspot,1,aplot,jpoint,1)
        !           661:       if (aspot.eq.ablnk) go to 303
        !           662:       if (aspot.eq.aper) go to 303
        !           663:       call move(aplot,jpoint,aletx,1,1)
        !           664:       go to 306
        !           665:   303 call move(aplot,jpoint,pltsym,k,1)
        !           666:   306 locyt=locyt+npoint
        !           667:   310 continue
        !           668:       yvr=value(locy+i)
        !           669:       if (ilogy(1).eq.1) go to 315
        !           670:       yvr=dexp(xlog10*yvr)
        !           671:   315 if(iwide.ne.0) write(6,316) xvar,yvr,aplot
        !           672:   316 format(1x,1pd10.3,2x,d10.3,2x,13a8)
        !           673:       if(iwide.eq.0) write(6,317) xvar,yvr,(aplot(k),k=1,8)
        !           674:   317 format(1x,1pd10.3,1x,d10.3,7a8,a1)
        !           675:   320 continue
        !           676: c
        !           677: c  finished
        !           678: c
        !           679:       if(iwide.ne.0) write(6,331)
        !           680:   331 format(26x,51(2h -)//)
        !           681:       if(iwide.eq.0) write(6,332)
        !           682:   332 format(21x,29(2h -)//)
        !           683:       go to 500
        !           684: c
        !           685: c  too few points
        !           686: c
        !           687:   400 write (6,401)
        !           688:   401 format('0warning:  too few points for plotting'/)
        !           689:   500 write (6,501)
        !           690:   501 format(1hy)
        !           691:       return
        !           692:       end
        !           693:       subroutine scale(xmin,xmax,n,xminp,xmaxp,del)
        !           694:       implicit double precision (a-h,o-z)
        !           695: c
        !           696: c     this routine determines the 'optimal' scale to use for the plot of
        !           697: c some output variable.
        !           698: c
        !           699: c
        !           700: c  adapted from algorithm 463 of 'collected algorithms of the cacm'
        !           701: c
        !           702:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !           703:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !           704:       integer xxor
        !           705:       dimension vint(5)
        !           706:       data vint / 1.0d0,2.0d0,5.0d0,10.0d0,20.0d0 /
        !           707:       data eps / 1.0d-12 /
        !           708: c
        !           709: c
        !           710: c...  trap too-small data spread
        !           711:       if(xmin.eq.0.0d0.and.xmax.eq.0.0d0) go to 4
        !           712:       if(dabs((xmax-xmin)/dmax1(dabs(xmin),dabs(xmax))).ge.1.0d-4)
        !           713:      1  go to 10
        !           714:     4 continue
        !           715:       if (xmin.ge.0.0d0) go to 5
        !           716:       xmax=0.5d0*xmin+eps
        !           717:       xmin=1.5d0*xmin-eps
        !           718:       go to 10
        !           719:     5 xmax=1.5d0*xmin+eps
        !           720:       xmin=0.5d0*xmin-eps
        !           721: c...  find approximate interval size, normalized to [1,10]
        !           722:    10 a=(xmax-xmin)/dfloat(n)
        !           723:       nal=idint(dlog10(a))
        !           724:       if (a.lt.1.0d0) nal=nal-1
        !           725:       xfact=dexp(xlog10*dfloat(nal))
        !           726:       b=a/xfact
        !           727: c...  find closest permissible interval size
        !           728:       do 20 i=1,3
        !           729:       if (b.lt.(vint(i)+eps)) go to 30
        !           730:    20 continue
        !           731:       i=4
        !           732: c...  compute interval size
        !           733:    30 del=vint(i)*xfact
        !           734:       fm1=xmin/del
        !           735:       m1=fm1
        !           736:       if (fm1.lt.0.0d0) m1=m1-1
        !           737:       if (dabs(dfloat(m1)+1.0d0-fm1).lt.eps) m1=m1+1
        !           738: c...  compute new maximum and minimum limits
        !           739:       xminp=del*dfloat(m1)
        !           740:       fm2=xmax/del
        !           741:       m2=fm2+1.0d0
        !           742:       if (fm2.lt.(-1.0d0)) m2=m2-1
        !           743:       if (dabs(fm2+1.0d0-dfloat(m2)).lt.eps) m2=m2-1
        !           744:       xmaxp=del*dfloat(m2)
        !           745:       np=m2-m1
        !           746: c...  check whether another loop required
        !           747:       if (np.le.n) go to 40
        !           748:       i=i+1
        !           749:       go to 30
        !           750: c...  do final adjustments and correct for roundoff error(s)
        !           751:    40 nx=(n-np)/2
        !           752:       xminp=dmin1(xmin,xminp-dfloat(nx)*del)
        !           753:       xmaxp=dmax1(xmax,xminp+dfloat(n)*del)
        !           754:       return
        !           755:       end
        !           756:       subroutine fouran
        !           757:       implicit double precision (a-h,o-z)
        !           758: c
        !           759: c     this routine determines the fourier coefficients of a transient
        !           760: c analysis waveform.
        !           761: c
        !           762:       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
        !           763:      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
        !           764:      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
        !           765:      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
        !           766:      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
        !           767:      5   imynl,imvn,lcvn,loutpt,nsnod,nsmat,nsval,icnod,icmat,icval
        !           768:       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
        !           769:      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs
        !           770:       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
        !           771:      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,igoof,nogo,keof
        !           772:       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
        !           773:      1  defas,rstats(50),iwidth,lwidth,nopage
        !           774:       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
        !           775:      1   xmu,mode,modedc,icalc,initf,method,iord,maxord,noncon,iterno,
        !           776:      2   itemno,nosolv,ipostp,iscrch
        !           777:       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
        !           778:      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox
        !           779:       common /tran/ tstep,tstop,tstart,delmax,tdmax,forfre,jtrflg
        !           780:       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
        !           781:      1   ilogy(8),npoint,numout,kntr,numdgt
        !           782:       common /blank/ value(1000)
        !           783:       integer nodplc(64)
        !           784:       complex*16 cvalue(32)
        !           785:       equivalence (value(1),nodplc(1),cvalue(1))
        !           786: c
        !           787: c
        !           788:       dimension sinco(9),cosco(9)
        !           789:       dimension fortit(4)
        !           790:       data fortit / 8hfourier , 8hanalysis, 8h        , 8h         /
        !           791:       data ablnk / 1h  /
        !           792: c
        !           793: c
        !           794:       forprd=1.0d0/forfre
        !           795:       xstart=tstop-forprd
        !           796:       kntr=1
        !           797:       xn=101.0d0
        !           798:       xincr=forprd/xn
        !           799:       npoint=xn
        !           800:       call getm8(locx,npoint)
        !           801:       call getm8(locy,npoint)
        !           802:       do 105 nknt=1,nfour
        !           803:       itab(1)=nodplc(ifour+nknt)
        !           804:       kfrout=itab(1)
        !           805:       call ntrpl8(locx,locy,numpnt)
        !           806:       dcco=0.0d0
        !           807:       call zero8(sinco,9)
        !           808:       call zero8(cosco,9)
        !           809:       loct=locy+1
        !           810:       ipnt=0
        !           811:    10 yvr=value(loct+ipnt)
        !           812:       dcco=dcco+yvr
        !           813:       forfac=dfloat(ipnt)*twopi/xn
        !           814:       arg=0.0d0
        !           815:       do 20 k=1,9
        !           816:       arg=arg+forfac
        !           817:       sinco(k)=sinco(k)+yvr*dsin(arg)
        !           818:       cosco(k)=cosco(k)+yvr*dcos(arg)
        !           819:    20 continue
        !           820:       ipnt=ipnt+1
        !           821:       if (ipnt.ne.npoint) go to 10
        !           822:       dcco=dcco/xn
        !           823:       forfac=2.0d0/xn
        !           824:       do 30 k=1,9
        !           825:       sinco(k)=sinco(k)*forfac
        !           826:       cosco(k)=cosco(k)*forfac
        !           827:    30 continue
        !           828:       call title(0,72,1,fortit)
        !           829:       ipos=1
        !           830:       call outnam(kfrout,1,string,ipos)
        !           831:       call move(string,ipos,ablnk,1,7)
        !           832:       jstop=(ipos+6)/8
        !           833:       write (6,61) (string(j),j=1,jstop)
        !           834:    61 format(' fourier components of transient response ',5a8///)
        !           835:       write (6,71) dcco
        !           836:    71 format('0dc component =',1pd12.3/,
        !           837:      1   '0harmonic   frequency    fourier    normalized    phase     no
        !           838:      2rmalized'/,
        !           839:      3   '    no         (hz)     component    component    (deg)    pha
        !           840:      4se (deg)'//)
        !           841:       iknt=1
        !           842:       freq1=forfre
        !           843:       xnharm=1.0d0
        !           844:       call magphs(dcmplx(sinco(1),cosco(1)),xnorm,pnorm)
        !           845:       phasen=0.0d0
        !           846:       write (6,81) iknt,freq1,xnorm,xnharm,pnorm,phasen
        !           847:    81 format(i6,1pd15.3,d12.3,0pf13.6,f10.3,f12.3/)
        !           848:       thd=0.0d0
        !           849:       do 90 iknt=2,9
        !           850:       freq1=dfloat(iknt)*forfre
        !           851:       call magphs(dcmplx(sinco(iknt),cosco(iknt)),
        !           852:      1   harm,phase)
        !           853:       xnharm=harm/xnorm
        !           854:       phasen=phase-pnorm
        !           855:       thd=thd+xnharm*xnharm
        !           856:       write (6,81) iknt,freq1,harm,xnharm,phase,phasen
        !           857:    90 continue
        !           858:       thd=100.0d0*dsqrt(thd)
        !           859:       write (6,101) thd
        !           860:   101 format (//5x,'total harmonic distortion =  ',f12.6,'  percent')
        !           861:   105 continue
        !           862:       call clrmem(locx)
        !           863:       call clrmem(locy)
        !           864:   110 return
        !           865:       end

unix.superglobalmegacorp.com

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