xref: /phasta/phSolver/compressible/timedata.f90 (revision 1016729149754f57cd03fe576ba6fd0f1723ab31)
1*10167291SKenneth E. Jansen      !--------------------------------------------------------
2*10167291SKenneth E. Jansen      ! Initialize the Probe Point Arrays and write the Header
3*10167291SKenneth E. Jansen      ! -------------------------------------------------------
4*10167291SKenneth E. Jansen      subroutine initProbePoints()
5*10167291SKenneth E. Jansen        !Tests if the probe point file xyzts.dat exists, loads probe
6*10167291SKenneth E. Jansen        !point locations, initializes a number of arrays used by
7*10167291SKenneth E. Jansen        !timedata, and writes the initial header for the output file.
8*10167291SKenneth E. Jansen        !
9*10167291SKenneth E. Jansen        ! Rewritten by:             Nicholas Mati  2014-04-18
10*10167291SKenneth E. Jansen        ! Revision history:
11*10167291SKenneth E. Jansen        !  2014-04-18   Code moved from itrdrv to here
12*10167291SKenneth E. Jansen
13*10167291SKenneth E. Jansen        use timedata
14*10167291SKenneth E. Jansen        include "common.h"
15*10167291SKenneth E. Jansen        include "mpif.h"
16*10167291SKenneth E. Jansen
17*10167291SKenneth E. Jansen        logical :: exVarts
18*10167291SKenneth E. Jansen
19*10167291SKenneth E. Jansen        !Test if xyzts.dat exists and broadcast the result.
20*10167291SKenneth E. Jansen        if(myrank.eq.master) inquire(file='xyzts.dat',exist=exts)
21*10167291SKenneth E. Jansen        if(numpe .gt. 1) then
22*10167291SKenneth E. Jansen          call MPI_BARRIER(MPI_COMM_WORLD, ierr)
23*10167291SKenneth E. Jansen          call MPI_BCAST(exts,1,MPI_INTEGER,master,MPI_COMM_WORLD,ierr)
24*10167291SKenneth E. Jansen        endif
25*10167291SKenneth E. Jansen
26*10167291SKenneth E. Jansen        if(.not. exts) return
27*10167291SKenneth E. Jansen        call readProbePoints
28*10167291SKenneth E. Jansen
29*10167291SKenneth E. Jansen        allocate (statptts(ntspts,2))
30*10167291SKenneth E. Jansen        allocate (parptts( ntspts,nsd))
31*10167291SKenneth E. Jansen        allocate (varts(   ntspts,ndof))
32*10167291SKenneth E. Jansen
33*10167291SKenneth E. Jansen        statptts(:,:) = 0
34*10167291SKenneth E. Jansen        parptts(:,:) = zero
35*10167291SKenneth E. Jansen        varts(:,:) = zero
36*10167291SKenneth E. Jansen        ivartsbuff = 0
37*10167291SKenneth E. Jansen        vartsResetbuffer = .false.
38*10167291SKenneth E. Jansen
39*10167291SKenneth E. Jansen        allocate (ivarts(    ntspts*ndof))
40*10167291SKenneth E. Jansen        allocate (ivartsg(   ntspts*ndof))
41*10167291SKenneth E. Jansen        allocate (vartssoln( ntspts*ndof))
42*10167291SKenneth E. Jansen        allocate (vartssolng(ntspts*ndof))
43*10167291SKenneth E. Jansen        allocate (vartsbuff( ntspts,ndof,nbuff))
44*10167291SKenneth E. Jansen        allocate (vartsbuffstep(nbuff))
45*10167291SKenneth E. Jansen
46*10167291SKenneth E. Jansen        !test if the varts folder exists. If it doesn't create it.
47*10167291SKenneth E. Jansen        if(myrank .eq. master) then
48*10167291SKenneth E. Jansen          inquire(file="./varts/.", exist=exVarts)
49*10167291SKenneth E. Jansen          if(.not. exVarts) then
50*10167291SKenneth E. Jansen            call system("mkdir varts")    !Only works on *nix, but we
51*10167291SKenneth E. Jansen                                          !never really run on Windows
52*10167291SKenneth E. Jansen                                          !anymore so...
53*10167291SKenneth E. Jansen          endif
54*10167291SKenneth E. Jansen        endif
55*10167291SKenneth E. Jansen
56*10167291SKenneth E. Jansen!       initProbePoints = exts
57*10167291SKenneth E. Jansen!     end function
58*10167291SKenneth E. Jansen      end subroutine
59*10167291SKenneth E. Jansen
60*10167291SKenneth E. Jansen
61*10167291SKenneth E. Jansen      !------------------------
62*10167291SKenneth E. Jansen      ! Read Probe Point Input
63*10167291SKenneth E. Jansen      !------------------------
64*10167291SKenneth E. Jansen      subroutine readProbePoints
65*10167291SKenneth E. Jansen        ! Original Code written by: ??             ????-??-??
66*10167291SKenneth E. Jansen        ! Rewritten by:             Nicholas Mati  2014-04-18
67*10167291SKenneth E. Jansen        ! Revision history:
68*10167291SKenneth E. Jansen        !  2014-04-18   Rewritten code moved from itrdrv to here.
69*10167291SKenneth E. Jansen        !
70*10167291SKenneth E. Jansen        !Reads the file xyzts.dat for probe point locations, write
71*10167291SKenneth E. Jansen        !frequency, tolerance, ... The file is expected to have the
72*10167291SKenneth E. Jansen        !form:
73*10167291SKenneth E. Jansen        ! ntspts freq tolpt iterat nbuff
74*10167291SKenneth E. Jansen        ! x1 y1 z1
75*10167291SKenneth E. Jansen        ! x2 y2 z2
76*10167291SKenneth E. Jansen        ! ...
77*10167291SKenneth E. Jansen        ! xN yN zN
78*10167291SKenneth E. Jansen        !
79*10167291SKenneth E. Jansen        ! ... where ntspts is the number of probe points and freq is the
80*10167291SKenneth E. Jansen        ! number of steps to take before flushing data. If nbuff is
81*10167291SKenneth E. Jansen        ! zero, the number of time steps between restarts, ntout, is
82*10167291SKenneth E. Jansen        ! used.
83*10167291SKenneth E. Jansen
84*10167291SKenneth E. Jansen        use timedata
85*10167291SKenneth E. Jansen        include "common.h"
86*10167291SKenneth E. Jansen        include "mpif.h"
87*10167291SKenneth E. Jansen
88*10167291SKenneth E. Jansen        if(myrank.eq.master) then
89*10167291SKenneth E. Jansen          open(unit=626,file='xyzts.dat',status='old')
90*10167291SKenneth E. Jansen          read(626,*) ntspts, freq, tolpt, iterat, nbuff
91*10167291SKenneth E. Jansen        endif
92*10167291SKenneth E. Jansen
93*10167291SKenneth E. Jansen        !Broadcase out the header of xyzts.dat. These should probably
94*10167291SKenneth E. Jansen        !be combined into two calls, but this is quick and dirty.
95*10167291SKenneth E. Jansen        if(numpe .gt. 1) then
96*10167291SKenneth E. Jansen          call MPI_BARRIER(MPI_COMM_WORLD, ierr)
97*10167291SKenneth E. Jansen          call MPI_Bcast(ntspts, 1, MPI_INTEGER,          master,
98*10167291SKenneth E. Jansen     &                              MPI_COMM_WORLD,       ierr)
99*10167291SKenneth E. Jansen          call MPI_Bcast(freq,   1, MPI_INTEGER,          master,
100*10167291SKenneth E. Jansen     &                              MPI_COMM_WORLD,       ierr)
101*10167291SKenneth E. Jansen          call MPI_Bcast(tolpt,  1, MPI_DOUBLE_PRECISION, master,
102*10167291SKenneth E. Jansen     &                              MPI_COMM_WORLD,       ierr)
103*10167291SKenneth E. Jansen          call MPI_Bcast(iterat, 1, MPI_INTEGER,          master,
104*10167291SKenneth E. Jansen     &                              MPI_COMM_WORLD,       ierr)
105*10167291SKenneth E. Jansen          call MPI_Bcast(nbuff,  1, MPI_INTEGER,          master,
106*10167291SKenneth E. Jansen     &                              MPI_COMM_WORLD,       ierr)
107*10167291SKenneth E. Jansen        endif
108*10167291SKenneth E. Jansen
109*10167291SKenneth E. Jansen        allocate (ptts(    ntspts,nsd))
110*10167291SKenneth E. Jansen
111*10167291SKenneth E. Jansen        !Read probe point coordinates and broadcast to the rest of the
112*10167291SKenneth E. Jansen        !processors
113*10167291SKenneth E. Jansen        if(myrank .eq. master) then
114*10167291SKenneth E. Jansen          do jj=1,ntspts        ! read coordinate data where solution desired
115*10167291SKenneth E. Jansen             read(626,*) ptts(jj,1), ptts(jj,2), ptts(jj,3)
116*10167291SKenneth E. Jansen           enddo
117*10167291SKenneth E. Jansen         close(626)
118*10167291SKenneth E. Jansen        endif
119*10167291SKenneth E. Jansen
120*10167291SKenneth E. Jansen        if(numpe .gt. 1) then
121*10167291SKenneth E. Jansen          call MPI_BARRIER(MPI_COMM_WORLD, ierr)
122*10167291SKenneth E. Jansen          call MPI_Bcast(ptts, ntspts*nsd, MPI_DOUBLE_PRECISION,
123*10167291SKenneth E. Jansen     &                          master,     MPI_COMM_WORLD,       ierr)
124*10167291SKenneth E. Jansen        endif
125*10167291SKenneth E. Jansen
126*10167291SKenneth E. Jansen        if (nbuff .eq. 0)
127*10167291SKenneth E. Jansen     &    nbuff=ntout
128*10167291SKenneth E. Jansen      end subroutine
129*10167291SKenneth E. Jansen
130*10167291SKenneth E. Jansen
131*10167291SKenneth E. Jansen      !-----------------------------
132*10167291SKenneth E. Jansen      ! Write the Header varts file
133*10167291SKenneth E. Jansen      !-----------------------------
134*10167291SKenneth E. Jansen      subroutine TD_writeHeader(fvarts)
135*10167291SKenneth E. Jansen        !Creates the file fvarts and writes the data header.
136*10167291SKenneth E. Jansen        !fvarts:    Name The file to create
137*10167291SKenneth E. Jansen
138*10167291SKenneth E. Jansen        use timedata
139*10167291SKenneth E. Jansen        include "common.h"
140*10167291SKenneth E. Jansen
141*10167291SKenneth E. Jansen        character(len=*) fvarts
142*10167291SKenneth E. Jansen
143*10167291SKenneth E. Jansen        !Open the output varts file and write the header
144*10167291SKenneth E. Jansen         if (myrank .eq. master) then
145*10167291SKenneth E. Jansen
146*10167291SKenneth E. Jansen           !fvarts='varts/varts'
147*10167291SKenneth E. Jansen           !fvarts=trim(fvarts)//trim(cname2(lstep))
148*10167291SKenneth E. Jansen           !fvarts=trim(fvarts)//'.dat'
149*10167291SKenneth E. Jansen           open(unit=1001, file=fvarts, status='unknown')
150*10167291SKenneth E. Jansen
151*10167291SKenneth E. Jansen           !Write the time step
152*10167291SKenneth E. Jansen           write(1001, *) "Time Step: ", Delt(1)
153*10167291SKenneth E. Jansen           write(1001, *)
154*10167291SKenneth E. Jansen
155*10167291SKenneth E. Jansen           !Write the probe locations to varts.ts.dat so that post
156*10167291SKenneth E. Jansen           !processing tools actually know what point goes where.
157*10167291SKenneth E. Jansen           !From experience, it's difficult to keep this straight.
158*10167291SKenneth E. Jansen           write(1001, *)
159*10167291SKenneth E. Jansen     &                 "Probe ID   x              y              z"
160*10167291SKenneth E. Jansen           do jj = 1, ntspts
161*10167291SKenneth E. Jansen             write(1001, "(I5, T12, 3(F16.12))") jj, ptts(jj,1:3)
162*10167291SKenneth E. Jansen           enddo
163*10167291SKenneth E. Jansen           write(1001, *)
164*10167291SKenneth E. Jansen
165*10167291SKenneth E. Jansen           !write the output format string. This can't be hard
166*10167291SKenneth E. Jansen           !coded because ntspts is not known in advance.
167*10167291SKenneth E. Jansen           write(vartsIOFrmtStr, '("(I8, ", I4, "(E15.7e2))")')
168*10167291SKenneth E. Jansen     &           ndof*ntspts
169*10167291SKenneth E. Jansen
170*10167291SKenneth E. Jansen           !Header to delinieate the probe locations with the data.
171*10167291SKenneth E. Jansen           write(1001, *) "Probe Data:"
172*10167291SKenneth E. Jansen           close(unit=1001)
173*10167291SKenneth E. Jansen         endif  ! if(myrank .eq. master)
174*10167291SKenneth E. Jansen      end subroutine
175*10167291SKenneth E. Jansen
176*10167291SKenneth E. Jansen
177*10167291SKenneth E. Jansen
178*10167291SKenneth E. Jansen      !------------------------
179*10167291SKenneth E. Jansen      ! Accumulate Probe Data
180*10167291SKenneth E. Jansen      !------------------------
181*10167291SKenneth E. Jansen      subroutine TD_bufferData()
182*10167291SKenneth E. Jansen
183*10167291SKenneth E. Jansen        use timedata
184*10167291SKenneth E. Jansen        include "common.h"
185*10167291SKenneth E. Jansen        include "mpif.h"
186*10167291SKenneth E. Jansen
187*10167291SKenneth E. Jansen        integer :: icheck, istp, nstp
188*10167291SKenneth E. Jansen
189*10167291SKenneth E. Jansen        if (mod(lstep,freq).eq.0) then
190*10167291SKenneth E. Jansen          if(vartsResetBuffer) then
191*10167291SKenneth E. Jansen            ivartsBuff = 0
192*10167291SKenneth E. Jansen            vartsResetBuffer = .false.
193*10167291SKenneth E. Jansen          endif
194*10167291SKenneth E. Jansen
195*10167291SKenneth E. Jansen          !------------------------
196*10167291SKenneth E. Jansen          !Merge Data across parts
197*10167291SKenneth E. Jansen          !------------------------
198*10167291SKenneth E. Jansen          if (numpe > 1) then
199*10167291SKenneth E. Jansen            !load the contents of varts into vartssoln
200*10167291SKenneth E. Jansen            do jj = 1, ntspts
201*10167291SKenneth E. Jansen               vartssoln((jj-1)*ndof+1:jj*ndof)=varts(jj,:)
202*10167291SKenneth E. Jansen               ivarts=zero
203*10167291SKenneth E. Jansen            enddo
204*10167291SKenneth E. Jansen
205*10167291SKenneth E. Jansen            !mark which points have been computed on this processor
206*10167291SKenneth E. Jansen            do k=1,ndof*ntspts
207*10167291SKenneth E. Jansen               if(vartssoln(k).ne.zero) ivarts(k)=1
208*10167291SKenneth E. Jansen            enddo
209*10167291SKenneth E. Jansen
210*10167291SKenneth E. Jansen            !merge the solution
211*10167291SKenneth E. Jansen            call MPI_REDUCE(vartssoln, vartssolng, ndof*ntspts,
212*10167291SKenneth E. Jansen     &           MPI_DOUBLE_PRECISION, MPI_SUM, master,
213*10167291SKenneth E. Jansen     &           MPI_COMM_WORLD, ierr)
214*10167291SKenneth E. Jansen
215*10167291SKenneth E. Jansen            call MPI_REDUCE(ivarts, ivartsg, ndof*ntspts,
216*10167291SKenneth E. Jansen     &           MPI_INTEGER, MPI_SUM, master,
217*10167291SKenneth E. Jansen     &           MPI_COMM_WORLD, ierr)
218*10167291SKenneth E. Jansen
219*10167291SKenneth E. Jansen             !if the probe point happened to span multiple partitions,
220*10167291SKenneth E. Jansen             !divide the sum by the number of contributing partitions.
221*10167291SKenneth E. Jansen             if (myrank.eq.master) then
222*10167291SKenneth E. Jansen               do jj = 1, ntspts
223*10167291SKenneth E. Jansen                 indxvarts = (jj-1)*ndof
224*10167291SKenneth E. Jansen                 do k=1,ndof
225*10167291SKenneth E. Jansen                   if(ivartsg(indxvarts+k).ne.0) then ! none of the vartssoln(parts) were non zero
226*10167291SKenneth E. Jansen                      varts(jj,k) =
227*10167291SKenneth E. Jansen     &                    vartssolng(indxvarts+k) / ivartsg(indxvarts+k)
228*10167291SKenneth E. Jansen                   endif
229*10167291SKenneth E. Jansen                 enddo !loop over states / DoF
230*10167291SKenneth E. Jansen               enddo !loop over probe points
231*10167291SKenneth E. Jansen             endif !only on master
232*10167291SKenneth E. Jansen          endif !only if numpe > 1
233*10167291SKenneth E. Jansen
234*10167291SKenneth E. Jansen          ivartsBuff = ivartsBuff + 1
235*10167291SKenneth E. Jansen          if (myrank.eq.master) then
236*10167291SKenneth E. Jansen            if(ivartsBuff .gt. nbuff) then
237*10167291SKenneth E. Jansen              write(*,*) "WARNING: vartsbuff has overflowed"
238*10167291SKenneth E. Jansen              ivartsBuff = nbuff
239*10167291SKenneth E. Jansen            endif
240*10167291SKenneth E. Jansen
241*10167291SKenneth E. Jansen            vartsBuffStep(ivartsBuff) = lstep
242*10167291SKenneth E. Jansen            do jj = 1, ntspts
243*10167291SKenneth E. Jansen              vartsbuff(jj,1:ndof, ivartsBuff) = varts(jj,1:ndof)
244*10167291SKenneth E. Jansen            enddo
245*10167291SKenneth E. Jansen          endif
246*10167291SKenneth E. Jansen        endif
247*10167291SKenneth E. Jansen
248*10167291SKenneth E. Jansen        varts(:,:) = zero
249*10167291SKenneth E. Jansen
250*10167291SKenneth E. Jansen      end subroutine
251*10167291SKenneth E. Jansen
252*10167291SKenneth E. Jansen
253*10167291SKenneth E. Jansen      !------------
254*10167291SKenneth E. Jansen      ! Write Data
255*10167291SKenneth E. Jansen      !------------
256*10167291SKenneth E. Jansen      subroutine TD_writeData(fvarts, forceFlush)
257*10167291SKenneth E. Jansen        !writes the probe point data accumulated durring calls to
258*10167291SKenneth E. Jansen        !TD_bufferData(). Note that actual file IO only occurs when the
259*10167291SKenneth E. Jansen        !buffer is full or when DT_writeData is called with forceFlush
260*10167291SKenneth E. Jansen        !set to true. Also note that TD_writeHeader must be called prior
261*10167291SKenneth E. Jansen        !to calling DT_writeData.
262*10167291SKenneth E. Jansen        use timedata
263*10167291SKenneth E. Jansen        include "common.h"
264*10167291SKenneth E. Jansen
265*10167291SKenneth E. Jansen        character(len=*) :: fvarts
266*10167291SKenneth E. Jansen        logical :: forceFlush
267*10167291SKenneth E. Jansen!        logical, optional :: forceflush
268*10167291SKenneth E. Jansen        logical :: flush
269*10167291SKenneth E. Jansen        integer :: k, ibuf
270*10167291SKenneth E. Jansen
271*10167291SKenneth E. Jansen        if (myrank.eq.master) then
272*10167291SKenneth E. Jansen
273*10167291SKenneth E. Jansen          !if provided, use the default value passed in to determine
274*10167291SKenneth E. Jansen          !wheather to flush the buffer
275*10167291SKenneth E. Jansen!          if(present(forceFlush)) then   !optional version breaks the
276*10167291SKenneth E. Jansen            flush = forceFlush            !compiler on Bluegene?
277*10167291SKenneth E. Jansen!          else
278*10167291SKenneth E. Jansen!            flush = .false.    !set the default value
279*10167291SKenneth E. Jansen!          endif
280*10167291SKenneth E. Jansen
281*10167291SKenneth E. Jansen          !make sure incomplete buffers get purged at the end of a run
282*10167291SKenneth E. Jansen          !regardless of the default.
283*10167291SKenneth E. Jansen!         if(ivartsBuff .eq. nbuff) flush = .true.
284*10167291SKenneth E. Jansen          if(mod(lstep, nbuff) .eq. 0) flush = .true.
285*10167291SKenneth E. Jansen          if(vartsResetBuffer) flush = .false.  !Prevent repeated calls without updating
286*10167291SKenneth E. Jansen                                                          !the buffer from writting multiple times.
287*10167291SKenneth E. Jansen
288*10167291SKenneth E. Jansen          if(flush) then   !flush the buffer to disc
289*10167291SKenneth E. Jansen            open(unit=1001, file      = fvarts,   status = "old",
290*10167291SKenneth E. Jansen     &                  position = "append", action = "write")
291*10167291SKenneth E. Jansen            do ibuf = 1,ivartsBuff
292*10167291SKenneth E. Jansen              write(1001, vartsIOFrmtStr)
293*10167291SKenneth E. Jansen     &                    vartsBuffStep(ibuf),                  !write the time step in the first column.
294*10167291SKenneth E. Jansen     &                   ((vartsbuff(jj,k,ibuf),  k=1, ndof)   !loop over the variables that you actually want to output.
295*10167291SKenneth E. Jansen     &                                         , jj=1, ntspts) !loop over probe points
296*10167291SKenneth E. Jansen            enddo
297*10167291SKenneth E. Jansen
298*10167291SKenneth E. Jansen            close(1001)
299*10167291SKenneth E. Jansen
300*10167291SKenneth E. Jansen            vartsResetBuffer = .true.
301*10167291SKenneth E. Jansen!            ivartsBuff = 0      !need to reset ivartsBuff because
302*10167291SKenneth E. Jansen!                                !writeDate can be called consecutively
303*10167291SKenneth E. Jansen          endif !only dump when buffer full
304*10167291SKenneth E. Jansen        endif !only on master
305*10167291SKenneth E. Jansen
306*10167291SKenneth E. Jansen!              call flush(1001)
307*10167291SKenneth E. Jansen!              call fsync(1001)
308*10167291SKenneth E. Jansen
309*10167291SKenneth E. Jansen               !Code for writting one file per probe point
310*10167291SKenneth E. Jansen!              do jj = 1, ntspts !loop through probe points
311*10167291SKenneth E. Jansen!                ifile = 1000+jj
312*10167291SKenneth E. Jansen!                do ibuf=1,nbuff
313*10167291SKenneth E. Jansen!                  write(ifile,555) lstep-1 -nbuff+ibuf,
314*10167291SKenneth E. Jansen!     &               (vartsbuff(jj,k,ibuf) , k=1, ndof)
315*10167291SKenneth E. Jansen!!     &              vartsbuff(jj,:,ibuf)
316*10167291SKenneth E. Jansen!
317*10167291SKenneth E. Jansen!                enddo ! buff empty
318*10167291SKenneth E. Jansen!
319*10167291SKenneth E. Jansen!                call flush(ifile)
320*10167291SKenneth E. Jansen!              enddo ! jj ntspts
321*10167291SKenneth E. Jansen
322*10167291SKenneth E. Jansen
323*10167291SKenneth E. Jansen!         varts(:,:) = zero ! reset the array for next step   !MOVED FOR Mach Control
324*10167291SKenneth E. Jansen! 555     format(i6,6(2x,E12.5e2))
325*10167291SKenneth E. Jansen
326*10167291SKenneth E. Jansen      end subroutine
327*10167291SKenneth E. Jansen
328*10167291SKenneth E. Jansen
329*10167291SKenneth E. Jansen      subroutine TD_finalize()
330*10167291SKenneth E. Jansen       use timedata
331*10167291SKenneth E. Jansen
332*10167291SKenneth E. Jansen        deallocate(ivarts)
333*10167291SKenneth E. Jansen        deallocate(ivartsg)
334*10167291SKenneth E. Jansen        deallocate(vartssoln)
335*10167291SKenneth E. Jansen        deallocate(vartssolng)
336*10167291SKenneth E. Jansen        deallocate(vartsbuff)
337*10167291SKenneth E. Jansen        deallocate(vartsbuffstep)
338*10167291SKenneth E. Jansen
339*10167291SKenneth E. Jansen        deallocate(ptts)
340*10167291SKenneth E. Jansen        deallocate(varts)
341*10167291SKenneth E. Jansen      end subroutine
342*10167291SKenneth E. Jansen
343*10167291SKenneth E. Jansen
344*10167291SKenneth E. Jansen      !---------------------
345*10167291SKenneth E. Jansen      ! allocate the arrays
346*10167291SKenneth E. Jansen      !---------------------
347*10167291SKenneth E. Jansen      subroutine sTD
348*10167291SKenneth E. Jansen        !Allocates the arrays statptts, ptts, parptts, and varts for use
349*10167291SKenneth E. Jansen        !in itrdrv and ??
350*10167291SKenneth E. Jansen        !Subroutine is Depricated.
351*10167291SKenneth E. Jansen
352*10167291SKenneth E. Jansen       use timedata
353*10167291SKenneth E. Jansen        include "common.h"
354*10167291SKenneth E. Jansen
355*10167291SKenneth E. Jansen        allocate (statptts(ntspts,2))
356*10167291SKenneth E. Jansen        allocate (ptts(ntspts,nsd))
357*10167291SKenneth E. Jansen        allocate (parptts(ntspts,nsd))
358*10167291SKenneth E. Jansen        allocate (varts(ntspts,ndof))
359*10167291SKenneth E. Jansen
360*10167291SKenneth E. Jansen        return
361*10167291SKenneth E. Jansen      end
362*10167291SKenneth E. Jansen
363*10167291SKenneth E. Jansen      !-------------------
364*10167291SKenneth E. Jansen      ! delete the arrays
365*10167291SKenneth E. Jansen      !-------------------
366*10167291SKenneth E. Jansen      subroutine dTD
367*10167291SKenneth E. Jansen        !Deallocates ptts and varts
368*10167291SKenneth E. Jansen       use timedata
369*10167291SKenneth E. Jansen
370*10167291SKenneth E. Jansen        deallocate (ptts)
371*10167291SKenneth E. Jansen        deallocate (varts)
372*10167291SKenneth E. Jansen
373*10167291SKenneth E. Jansen        return
374*10167291SKenneth E. Jansen      end
375