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