------- Additional Comments From dir at lanl dot gov  2005-08-11 19:54 -------
   Here is the slightly revised version that I tried on 9 compilers on four
different system - "gfortran -O" on linux is the only place that it failed.

      program main
      implicit real*8 (a-h,o-z)
      save
      common /prcon/ idatwr,ipric,npb,idc,ivc,iac,ipc,ipnode(3,15)
      common /sol/ numnp,neq,nwk,nwm,nwc,numest,midest,maxest,nste,ma
      common/const/ dt,dta,acoef(21),dtod,iope
      common a(1000)
      n1=1        
      dt=0.1d0
      dta=0.1d0
      nste=10
      itwo=2
      idatwr=0 
                     
      read (5,1010) ntfn,nptm
      write (6,2250) ntfn,nptm
c
      if (ntfn.eq.0) go to 15
      m2=n1 + ntfn
      m3=m2 + ntfn*nptm*itwo
      m4=m3 + ntfn*nptm*itwo
      m5=m4 + ntfn*nste*itwo
      m6=m5 + ntfn*itwo - 1
c
      call timfun (a(m5),a(n1),a(m2),a(m3),a(m4),ntfn,nptm)
   15 continue      
      stop
      
 1010 format (16i5)
 2250 format (1h1,35ht i m e   f u n c t i o n   d a t a   /4x,
     148h number of time functions               (ntfn) =,i5/4x,
     248h max number of points in time functions (nptm) =,i5)
      end
                
                     
      subroutine timfun (rgst,ipnt,timv,rv,rg,ntfn,nptm)
c
c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
c .                                                                   .
c .   subroutine to calculate time function values at all time points .
c .   the time function values are stored in rg                       .
c .                                                                   .
c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
c
      implicit real*8 (a-h,o-z)
      save
c
      common /isubst/ isub,nsubst,nsub,ntuse,negls,negnls,numnps,
     1                nodcon,nodret,idofs(6),ndofs,neqs,nwks,maxes,
     2                mas,nstape,iloa(9),krsizm,neqc
      common /sol/ numnp,neq,nwk,nwm,nwc,numest,midest,maxest,nste,ma
      common /var/ ng,modex,iupdt,kstep,itemax,ieqref,ite,kpri,
     1             iref,iequit,ipri,kplotn,kplote
      common/const/ dt,dta,acoef(21),dtod,iope
      common /adinai/ opvar(7),tstart,irint,istote
      common /prcon/ idatwr,ipric,npb,idc,ivc,iac,ipc,ipnode(3,15)
c
      dimension rg(ntfn,1),timv(nptm,1),rv(nptm,1),ipnt(1),rgst(1)
c
c     write(6,*)tstart,dt,dta,nptm,ntfn,nste
      do 100 l=1,ntfn
      read (5,1000) ll,npts
      if (ll - l) 80,90,80
   80 write (6,2000)
      stop
c
   90 if (idatwr.le.1) write (6,2002) l,npts
      ipnt(ll)=npts
      read  (5,1020) (timv(i,ll),rv(i,ll),i=1,npts)
      if (idatwr.gt.1) go to 95
      write (6,2004) (timv(i,ll),rv(i,ll),i=1,npts)
   95 if (npts.le.nptm) go to 100
      write (6,2100) l,npts,nptm
      stop
  100 continue
c
      nt=13
      rewind nt
      do 200 l=1,ntfn
      rgst(l)=rv(1,l)
      npts=ipnt(l)
      time=tstart + dt
      timep=tstart + dta
      i=0
      k=1
  120 i=i + 1
      if (i-npts) 190,130,130
  130 write (6,2010)
      write(6,*)i,npts,ntfn,l,time,timep
      stop
c
  190 ddr=rv(i+1,l) - rv(i,l)
      ddt=timv(i+1,l) - timv(i,l)
      if (ddt) 110,120,150
  110 write (6,2020)
      stop
  150 slope=ddr/ddt
  180 if (timv(i+1,l)-time) 120,140,140
  140 rg(l,k)=rv(i,l) + slope*(timep-timv(i,l))
      timep=time + dta
      time=time + dt
      k=k + 1
      if (nste-k) 195,180,180
  195 write (nt) rgst(l),(rg(l,k),k=1,nste),npts,
     1           (rv(j,l),timv(j,l),j=1,npts)
  200 continue
c
      return
c
 1000 format (2i5)
 1020 format (8f10.0)
 2000 format (43h ""  error   time functions out of order   )
 2002 format (/25h time function number   =,i5/
     1           25h number of time points  =,i5/4x,
     2           25h time value      function)
 2004 format (3x,f12.5,2x,e15.7)
 2010 format (53h ""  error   time is larger than in the time function)
 2020 format (42h ""  error   time points are out of order  )
 2100 format (///28h *** i n p u t   e r r o r -//
     1        30h detected by subroutine timfun/
     2        30h while reading time functions //
     3     5x,23h time function number =,i5/
     4     5x,36h number of points in this function =,i5,
     5        17h  is greater than/
     6     5x,36h the max number of points requested=,i5,
     7        49h  as specified on the time function control card. //
     4        12h *** s t o p)
c
      end
    
        
        

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23318

Reply via email to