xref: /phasta/phSolver/common/readnblk.f (revision ade0e30f85bbeef856b58b9c2c94a3f41a6e36ac)
159599516SKenneth E. Jansenc  readnblk.f (pronounce "Reed and Block Dot Eff") contains:
259599516SKenneth E. Jansenc
359599516SKenneth E. Jansenc    module readarrays ("Red Arrays") -- contains the arrays that
459599516SKenneth E. Jansenc     are read in from binary files but not immediately blocked
559599516SKenneth E. Jansenc     through pointers.
659599516SKenneth E. Jansenc
759599516SKenneth E. Jansenc    subroutine readnblk ("Reed and Block") -- allocates space for
859599516SKenneth E. Jansenc     and reads data to be contained in module readarrays.  Reads
959599516SKenneth E. Jansenc     all remaining data and blocks them with pointers.
1059599516SKenneth E. Jansenc
1159599516SKenneth E. Jansen
1259599516SKenneth E. Jansen
1359599516SKenneth E. Jansen      module readarrays
1459599516SKenneth E. Jansen
1559599516SKenneth E. Jansen      real*8, allocatable :: point2x(:,:)
1659599516SKenneth E. Jansen      real*8, allocatable :: qold(:,:)
1759599516SKenneth E. Jansen      real*8, allocatable :: uold(:,:)
1859599516SKenneth E. Jansen      real*8, allocatable :: acold(:,:)
1959599516SKenneth E. Jansen      integer, allocatable :: iBCtmp(:)
2059599516SKenneth E. Jansen      real*8, allocatable :: BCinp(:,:)
2159599516SKenneth E. Jansen
2259599516SKenneth E. Jansen      integer, allocatable :: point2ilwork(:)
2359599516SKenneth E. Jansen      integer, allocatable :: nBC(:)
2459599516SKenneth E. Jansen      integer, allocatable :: point2iper(:)
2559599516SKenneth E. Jansen      integer, allocatable :: point2ifath(:)
2659599516SKenneth E. Jansen      integer, allocatable :: point2nsons(:)
2759599516SKenneth E. Jansen
2859599516SKenneth E. Jansen      end module
2959599516SKenneth E. Jansen
3059599516SKenneth E. Jansen
3159599516SKenneth E. Jansen
3259599516SKenneth E. Jansen      subroutine readnblk
3359599516SKenneth E. Jansenc
3459599516SKenneth E. Jansen      use readarrays
3559599516SKenneth E. Jansen      include "common.h"
3659599516SKenneth E. Jansenc
3759599516SKenneth E. Jansen      real*8, allocatable :: xread(:,:), qread(:,:), acread(:,:)
3859599516SKenneth E. Jansen      real*8, allocatable :: uread(:,:)
3959599516SKenneth E. Jansen      real*8, allocatable :: BCinpread(:,:)
4059599516SKenneth E. Jansen      integer, allocatable :: iperread(:), iBCtmpread(:)
4159599516SKenneth E. Jansen      integer, allocatable :: ilworkread(:), nBCread(:)
4259599516SKenneth E. Jansen      character*10 cname2
4359599516SKenneth E. Jansen      character*8 mach2
4459599516SKenneth E. Jansen!MR CHANGE
4559599516SKenneth E. Jansen!      character*20 fmt1
4659599516SKenneth E. Jansen      character*30 fmt1
4759599516SKenneth E. Jansen!MR CHANGE END
4859599516SKenneth E. Jansen      character*255 fname1,fnamer,fnamelr
4959599516SKenneth E. Jansen      character*255 warning
5059599516SKenneth E. Jansen      integer igeomBAK, ibndc, irstin, ierr
5159599516SKenneth E. Jansen      integer intfromfile(50) ! integers read from headers
5259599516SKenneth E. Jansen
5359599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
5459599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccc New PhastaIO Definition Part ccccccccccccccccccccccccccccccccccccccccc
5559599516SKenneth E. Jansen
5659599516SKenneth E. Jansen      integer :: descriptor, descriptorG, GPID, color, nfiles, nfields
5759599516SKenneth E. Jansen      integer ::  numparts, nppf
5859599516SKenneth E. Jansen      integer :: ierr_io, numprocs, itmp, itmp2
59*ade0e30fSCameron Smith      integer :: ignored
6059599516SKenneth E. Jansen      character*255 fname2, temp2
6159599516SKenneth E. Jansen      character*64 temp1
6259599516SKenneth E. Jansen
6359599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
6459599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
6559599516SKenneth E. Jansen
6659599516SKenneth E. Jansen
6759599516SKenneth E. Jansenc
6859599516SKenneth E. Jansenc.... determine the step number to start with
6959599516SKenneth E. Jansenc
7059599516SKenneth E. Jansen      open(unit=72,file='numstart.dat',status='old')
7159599516SKenneth E. Jansen      read(72,*) irstart
7259599516SKenneth E. Jansen      close(72)
7359599516SKenneth E. Jansen      lstep=irstart ! in case restart files have no fields
7459599516SKenneth E. Jansen
7559599516SKenneth E. Jansenc
7659599516SKenneth E. Jansen      fname1='geombc.dat'
7759599516SKenneth E. Jansen      fname1= trim(fname1)  // cname2(myrank+1)
7859599516SKenneth E. Jansenc      fnamelr='restart.latest'
7959599516SKenneth E. Jansen
8059599516SKenneth E. Jansen      itmp=1
8159599516SKenneth E. Jansen      if (irstart .gt. 0) itmp = int(log10(float(irstart)))+1
8259599516SKenneth E. Jansen      write (fmt1,"('(''restart.'',i',i1,',1x)')") itmp
8359599516SKenneth E. Jansen      write (fnamer,fmt1) irstart
8459599516SKenneth E. Jansen      fnamer = trim(fnamer) // cname2(myrank+1)
8559599516SKenneth E. Jansenc      fnamelr = trim(fnamelr) // cname2(myrank+1)
8659599516SKenneth E. Jansen
8759599516SKenneth E. Jansenc
8859599516SKenneth E. Jansenc.... open input files
8959599516SKenneth E. Jansenc
9059599516SKenneth E. Jansen
9159599516SKenneth E. Jansen
9259599516SKenneth E. Jansenc      call openfile(  fname1,  'read?', igeomBAK );
9359599516SKenneth E. Jansen
9459599516SKenneth E. Jansen
9559599516SKenneth E. Jansenc
9659599516SKenneth E. Jansenc.... try opening restart.latest.proc before trying restart.stepno.proc
9759599516SKenneth E. Jansenc
9859599516SKenneth E. Jansenc      call openfile(  fnamelr,  'read?', irstin );
9959599516SKenneth E. Jansenc      if ( irstin .eq. 0 )
10059599516SKenneth E. Jansen
10159599516SKenneth E. Jansen!MR CHANGE
10259599516SKenneth E. Jansen!       call openfile( fnamer, 'read?', irstin );
10359599516SKenneth E. Jansen!MR CHANGE END
10459599516SKenneth E. Jansen
10559599516SKenneth E. Jansen! either one will work
10659599516SKenneth E. Jansenc
10759599516SKenneth E. Jansenc.... input the geometry parameters
10859599516SKenneth E. Jansenc
10959599516SKenneth E. Jansen
11059599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
11159599516SKenneth E. Jansen!MR CHANGE
11259599516SKenneth E. Jansen
11359599516SKenneth E. Jansen!      nfiles = 2
11459599516SKenneth E. Jansen!      nfields = 31
11559599516SKenneth E. Jansen!      numparts = 8
11659599516SKenneth E. Jansen!      nppp = numparts/numpe
11759599516SKenneth E. Jansen!      nppf = numparts/nfiles
11859599516SKenneth E. Jansen
11959599516SKenneth E. Jansen      nfiles = nsynciofiles
12059599516SKenneth E. Jansen!      nfields = nsynciofieldsreadgeombc
12159599516SKenneth E. Jansen      numparts = numpe !This is the common settings. Beware if you try to compute several parts per process
12259599516SKenneth E. Jansen
12359599516SKenneth E. Jansen!      nppp = numparts/numpe
12459599516SKenneth E. Jansen!      nppf = numparts/nfiles
12559599516SKenneth E. Jansen!MR CHANGE END
12659599516SKenneth E. Jansen
12759599516SKenneth E. Jansen      itwo=2
12859599516SKenneth E. Jansen      ione=1
12959599516SKenneth E. Jansen      ieleven=11
13059599516SKenneth E. Jansen      itmp = int(log10(float(myrank+1)))+1
13159599516SKenneth E. Jansen
13282f286aaSCameron Smith      call phio_openfile('geombc-dat.' // char(0), 'read' // char(0),
133*ade0e30fSCameron Smith     & nfiles, ignored, ignored, igeom);
13459599516SKenneth E. Jansen
135d1293ce9SCameron Smith      call phio_readheader(igeom,'number of nodes' // char(0),numnp,ione,
13659599516SKenneth E. Jansen     & 'integer' // char(0), iotype)
13759599516SKenneth E. Jansen
138d1293ce9SCameron Smith      call phio_readheader(igeom,'number of modes' // char(0),nshg,ione,
13959599516SKenneth E. Jansen     & 'integer' // char(0), iotype)
14059599516SKenneth E. Jansen
141d1293ce9SCameron Smith      call phio_readheader(igeom,'number of interior elements' // char(0),
14262803c32SCameron Smith     &  numel,ione,'integer' // char(0), iotype)
14359599516SKenneth E. Jansen
144d1293ce9SCameron Smith      call phio_readheader(igeom,'number of boundary elements' // char(0),
14562803c32SCameron Smith     & numelb,ione,'integer' // char(0),iotype)
14659599516SKenneth E. Jansen
147d1293ce9SCameron Smith      call phio_readheader(igeom,'maximum number of element nodes' // char(0),
14862803c32SCameron Smith     & nen,ione,'integer' // char(0),iotype)
14959599516SKenneth E. Jansen
150d1293ce9SCameron Smith      call phio_readheader(igeom,'number of interior tpblocks' // char(0),
15162803c32SCameron Smith     & nelblk,ione,'integer' // char(0) ,iotype)
15259599516SKenneth E. Jansen
153d1293ce9SCameron Smith      call phio_readheader(igeom,'number of boundary tpblocks' // char(0),
15462803c32SCameron Smith     & nelblb,ione,'integer' // char(0), iotype)
15559599516SKenneth E. Jansen
156d1293ce9SCameron Smith      call phio_readheader(igeom,
157d1293ce9SCameron Smith     & 'number of nodes with Dirichlet BCs' // char(0),
15862803c32SCameron Smith     & numpbc,ione,'integer' // char(0),iotype)
15959599516SKenneth E. Jansen
160d1293ce9SCameron Smith      call phio_readheader(igeom,'number of shape functions' // char(0),
16162803c32SCameron Smith     & ntopsh,ione,'integer' // char(0),iotype)
16259599516SKenneth E. Jansen
16359599516SKenneth E. Jansenc      call closefile( igeom, "read" )
16459599516SKenneth E. Jansenc      call finalizephmpiio( igeom )
16559599516SKenneth E. Jansen
16659599516SKenneth E. Jansen!       if(myrank==0) then
16759599516SKenneth E. Jansen!          print *, "Reading Finished, ********* : ", trim(fname2)
16859599516SKenneth E. Jansen!       endif
16959599516SKenneth E. Jansen
17059599516SKenneth E. Jansen
17159599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
17259599516SKenneth E. Jansen
17359599516SKenneth E. Jansenc      ieleven=11
17459599516SKenneth E. Jansenc      ione=1
17559599516SKenneth E. Jansenc      fname1='number of nodes?'
17659599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,numnp,ione,'integer', iotype)
17759599516SKenneth E. Jansenc      fname1='number of modes?'
17859599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,nshg,ione,'integer', iotype)
17959599516SKenneth E. Jansencc      fname1='number of global modes?'
18059599516SKenneth E. Jansencc      call readheader(igeomBAK,fname1,nshgt,ione,'integer', iotype)
18159599516SKenneth E. Jansenc      fname1='number of interior elements?'
18259599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,numel,ione,'integer', iotype)
18359599516SKenneth E. Jansenc      fname1='number of boundary elements?'
18459599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,numelb,ione,'integer', iotype)
18559599516SKenneth E. Jansenc      fname1='maximum number of element nodes?'
18659599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,nen,ione,'integer', iotype)
18759599516SKenneth E. Jansenc      fname1='number of interior tpblocks?'
18859599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,nelblk,ione,'integer', iotype)
18959599516SKenneth E. Jansenc      fname1='number of boundary tpblocks?'
19059599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,nelblb,ione,'integer', iotype)
19159599516SKenneth E. Jansenc      fname1='number of nodes with Dirichlet BCs?'
19259599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,numpbc,ione,'integer', iotype)
19359599516SKenneth E. Jansenc      fname1='number of shape functions?'
19459599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,ntopsh,ione,'integer', iotype)
19559599516SKenneth E. Jansen
19659599516SKenneth E. Jansenc
19759599516SKenneth E. Jansenc.... calculate the maximum number of boundary element nodes
19859599516SKenneth E. Jansenc
19959599516SKenneth E. Jansen      nenb = 0
20059599516SKenneth E. Jansen      do i = 1, melCat
20159599516SKenneth E. Jansen         if (nen .eq. nenCat(i,nsd)) nenb = max(nenCat(i,nsd-1), nenb)
20259599516SKenneth E. Jansen      enddo
20359599516SKenneth E. Jansenc
20459599516SKenneth E. Jansen      if (myrank == master) then
20559599516SKenneth E. Jansen         if (nenb .eq. 0) call error ('input   ','nen     ',nen)
20659599516SKenneth E. Jansen      endif
20759599516SKenneth E. Jansenc
20859599516SKenneth E. Jansenc.... setup some useful constants
20959599516SKenneth E. Jansenc
21059599516SKenneth E. Jansen      I3nsd  = nsd / 3          ! nsd=3 integer flag
21159599516SKenneth E. Jansen      E3nsd  = float(I3nsd)     ! nsd=3 real    flag
21259599516SKenneth E. Jansenc
21359599516SKenneth E. Jansen      if(matflg(1,1).lt.0) then
21459599516SKenneth E. Jansen         nflow = nsd + 1
21559599516SKenneth E. Jansen      else
21659599516SKenneth E. Jansen         nflow = nsd + 2
21759599516SKenneth E. Jansen      endif
21859599516SKenneth E. Jansen      ndof   = nsd + 2
21959599516SKenneth E. Jansen      nsclr=impl(1)/100
22059599516SKenneth E. Jansen      ndof=ndof+nsclr           ! number of sclr transport equations to solve
22159599516SKenneth E. Jansen
22259599516SKenneth E. Jansen      ndofBC = ndof + I3nsd     ! dimension of BC array
22359599516SKenneth E. Jansen      ndiBCB = 2                ! dimension of iBCB array
22459599516SKenneth E. Jansen      ndBCB  = ndof + 1         ! dimension of BCB array
22559599516SKenneth E. Jansenc
22659599516SKenneth E. Jansen      nsymdf = (ndof*(ndof + 1)) / 2 ! symm. d.o.f.'s
22759599516SKenneth E. Jansenc
22859599516SKenneth E. Jansenc.... ----------------------> Communication tasks <--------------------
22959599516SKenneth E. Jansenc
23059599516SKenneth E. Jansen
23159599516SKenneth E. Jansencc still read in new
23259599516SKenneth E. Jansen
23359599516SKenneth E. Jansen      if(numpe > 1) then
23459599516SKenneth E. Jansen
23559599516SKenneth E. Jansencc MR CHANGE
236d1293ce9SCameron Smith         call phio_readheader(igeom,'size of ilwork array' // char(0),
2373c6dc7b4SCameron Smith     &    nlwork,ione,'integer' // char(0) ,iotype)
23859599516SKenneth E. Jansen
239d1293ce9SCameron Smith         call phio_readheader(igeom,'ilwork' //char(0) ,nlwork,ione,
24059599516SKenneth E. Jansen     &   'integer' // char(0) , iotype)
24159599516SKenneth E. Jansen
24259599516SKenneth E. Jansen         allocate( point2ilwork(nlwork) )
24359599516SKenneth E. Jansen         allocate( ilworkread(nlwork) )
244f262839cSCameron Smith         call phio_readdatablock(igeom,'ilwork' // char(0),ilworkread,
24559599516SKenneth E. Jansen     &                      nlwork,'integer' // char(0) , iotype)
24659599516SKenneth E. Jansen
24759599516SKenneth E. Jansenc      call closefile( igeom, "read" )
24859599516SKenneth E. Jansenc      call finalizephmpiio( igeom )
24959599516SKenneth E. Jansen
25059599516SKenneth E. Jansenc         fname1='size of ilwork array?'
25159599516SKenneth E. Jansenc         call readheader(igeomBAK,fname1,nlwork,ione,'integer', iotype)
25259599516SKenneth E. Jansen
25359599516SKenneth E. Jansenc         ione=1
25459599516SKenneth E. Jansenc         fname1='ilwork?'
25559599516SKenneth E. Jansenc         call readheader(igeomBAK,fname1,nlwork,ione,'integer', iotype)
25659599516SKenneth E. Jansen
25759599516SKenneth E. Jansenc         allocate( point2ilwork(nlwork) )
25859599516SKenneth E. Jansenc         allocate( ilworkread(nlwork) )
25959599516SKenneth E. Jansenc         call readdatablock(igeomBAK,fname1,ilworkread,
26059599516SKenneth E. Jansenc     &                      nlwork,'integer', iotype)
26159599516SKenneth E. Jansencc MR CHANGE
26259599516SKenneth E. Jansen
26359599516SKenneth E. Jansen
26459599516SKenneth E. Jansen         point2ilwork = ilworkread
26559599516SKenneth E. Jansen         call ctypes (point2ilwork)
26659599516SKenneth E. Jansen      else
26759599516SKenneth E. Jansen           nlwork=1
26859599516SKenneth E. Jansen           allocate( point2ilwork(1))
26959599516SKenneth E. Jansen           nshg0 = nshg
27059599516SKenneth E. Jansen      endif
27159599516SKenneth E. Jansen
27259599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccc
27359599516SKenneth E. Jansen
27459599516SKenneth E. Jansen      itwo=2
27559599516SKenneth E. Jansen
27659599516SKenneth E. Jansenc      print *, "fname2 is", fname2
27759599516SKenneth E. Jansen
27859599516SKenneth E. Jansencc MR CHANGE
27959599516SKenneth E. Jansenc      call initphmpiio(nfields,nppf,nfiles,igeom,'read')
28059599516SKenneth E. Jansenc      call openfile( fnamer, 'read', igeom )
28159599516SKenneth E. JansenCC MR CHANGE
28259599516SKenneth E. Jansen
283d1293ce9SCameron Smith      call phio_readheader(igeom,'co-ordinates' // char(0),intfromfile,itwo,
28459599516SKenneth E. Jansen     & 'double' // char(0), iotype)
28559599516SKenneth E. Jansen      numnp=intfromfile(1)
28659599516SKenneth E. Jansenc      print *, "read out @@@@@@ is ", numnp
28759599516SKenneth E. Jansen      allocate( point2x(numnp,nsd) )
28859599516SKenneth E. Jansen      allocate( xread(numnp,nsd) )
28959599516SKenneth E. Jansen      ixsiz=numnp*nsd
290f262839cSCameron Smith      call phio_readdatablock(igeom,'co-ordinates' // char(0),xread,ixsiz,
29159599516SKenneth E. Jansen     & 'double' // char(0), iotype)
29259599516SKenneth E. Jansen      point2x = xread
29359599516SKenneth E. Jansen
29459599516SKenneth E. Jansen!      call closefile( igeom, "read" )
29559599516SKenneth E. Jansen!      call finalizephmpiio( igeom )
29659599516SKenneth E. Jansen
29759599516SKenneth E. Jansen!       print *, "Finished finalize"
29859599516SKenneth E. Jansen
29959599516SKenneth E. Jansenc      deallocate (point2x)
30059599516SKenneth E. Jansenc      deallocate (xread)
30159599516SKenneth E. Jansen
30259599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccc
30359599516SKenneth E. Jansen
30459599516SKenneth E. Jansenc
30559599516SKenneth E. Jansenc.... read the node coordinates
30659599516SKenneth E. Jansenc
30759599516SKenneth E. Jansen
30859599516SKenneth E. Jansenc      itwo=2
30959599516SKenneth E. Jansenc      fname1='co-ordinates?'
31059599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,intfromfile,itwo, 'double', iotype)
31159599516SKenneth E. Jansenc      numnp=intfromfile(1)
31259599516SKenneth E. Jansencc      nsd=intfromfile(2)
31359599516SKenneth E. Jansenc      allocate( point2x(numnp,nsd) )
31459599516SKenneth E. Jansenc      allocate( xread(numnp,nsd) )
31559599516SKenneth E. Jansenc      ixsiz=numnp*nsd
31659599516SKenneth E. Jansenc      call readdatablock(igeomBAK,fname1,xread,ixsiz, 'double',iotype)
31759599516SKenneth E. Jansenc      point2x = xread
31859599516SKenneth E. Jansen
31959599516SKenneth E. Jansenc
32059599516SKenneth E. Jansenc.... read in and block out the connectivity
32159599516SKenneth E. Jansenc
32259599516SKenneth E. Jansen
32359599516SKenneth E. Jansen! !MR CHANGE
32459599516SKenneth E. Jansen!     This is not necessary but this avoids to have the geombc files opend two times.
32559599516SKenneth E. Jansen!     A better way consists in pasisng the file handler to genblk or make it global or use igeomBAK instead of igeom
32659599516SKenneth E. Jansen!      call closefile( igeom, "read" )
32759599516SKenneth E. Jansen!      call finalizephmpiio( igeom )
32859599516SKenneth E. Jansen! !MR CHANGE END
32959599516SKenneth E. Jansen
33059599516SKenneth E. Jansen      call genblk (IBKSIZ)
33159599516SKenneth E. Jansen
33259599516SKenneth E. Jansen! !MR CHANGE
33359599516SKenneth E. Jansen!      call initphmpiio( nfields, nppf, nfiles, igeom, 'read')
33459599516SKenneth E. Jansen!      call openfile( fnamer, 'read', igeom )
33559599516SKenneth E. Jansen! !MR CHANGE END
33659599516SKenneth E. Jansen
33759599516SKenneth E. Jansenc
33859599516SKenneth E. Jansenc.... read the boundary condition mapping array
33959599516SKenneth E. Jansenc
34059599516SKenneth E. Jansen
34159599516SKenneth E. Jansencc MR CHANGE
34259599516SKenneth E. Jansen!      call initphmpiio(nfields,nppf,nfiles,igeom, 'read')
34359599516SKenneth E. Jansen!      call openfile( fnamer, 'read', igeom )
34459599516SKenneth E. Jansencc MR CHANGE
34559599516SKenneth E. Jansen
34659599516SKenneth E. Jansen      ione=1
347d1293ce9SCameron Smith      call phio_readheader(igeom,'bc mapping array' // char(0),nshg,ione,
34859599516SKenneth E. Jansen     & 'integer' // char(0),iotype)
34959599516SKenneth E. Jansen
35059599516SKenneth E. Jansenc      fname1='bc mapping array?'
35159599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,nshg,
35259599516SKenneth E. Jansenc     &     ione,'integer', iotype)
35359599516SKenneth E. Jansen
35459599516SKenneth E. Jansen      allocate( nBC(nshg) )
35559599516SKenneth E. Jansen
35659599516SKenneth E. Jansen      allocate( nBCread(nshg) )
35759599516SKenneth E. Jansen
35859599516SKenneth E. Jansenc      call readdatablock(igeomBAK,fname1,nBCread,nshg,'integer',iotype)
359f262839cSCameron Smith      call phio_readdatablock(igeom,'bc mapping array' // char(0),
3603c6dc7b4SCameron Smith     & nBCread,nshg,'integer' // char(0),iotype)
36159599516SKenneth E. Jansen
36259599516SKenneth E. Jansen      nBC=nBCread
36359599516SKenneth E. Jansen
36459599516SKenneth E. Jansenc
36559599516SKenneth E. Jansenc.... read the temporary iBC array
36659599516SKenneth E. Jansenc
36759599516SKenneth E. Jansen      ione=1
368d1293ce9SCameron Smith      call phio_readheader(igeom,'bc codes array' // char(0) ,numpbc,ione,
36959599516SKenneth E. Jansen     & 'integer' // char(0),iotype)
37059599516SKenneth E. Jansen
37159599516SKenneth E. Jansenc      ione = 1
37259599516SKenneth E. Jansenc      fname1='bc codes array?'
37359599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,numpbc,
37459599516SKenneth E. Jansenc     &     ione, 'integer', iotype)
37559599516SKenneth E. Jansen
37659599516SKenneth E. Jansen!MR CHANGE
37759599516SKenneth E. Jansen!       if ( numpbc > 0 ) then
37859599516SKenneth E. Jansen!          allocate( iBCtmp(numpbc) )
37959599516SKenneth E. Jansen!          allocate( iBCtmpread(numpbc) )
38059599516SKenneth E. Jansen! c         call readdatablock(igeomBAK,fname1,iBCtmpread,numpbc,
38159599516SKenneth E. Jansen! c     &                      'integer',iotype)
38259599516SKenneth E. Jansen!         call readdatablock(igeom,fname2,iBCtmpread,numpbc,
38359599516SKenneth E. Jansen!      &                      'integer',iotype)
38459599516SKenneth E. Jansen!          iBCtmp=iBCtmpread
38559599516SKenneth E. Jansen!       else  ! sometimes a partition has no BC's
38659599516SKenneth E. Jansen!          allocate( iBCtmp(1) )
38759599516SKenneth E. Jansen!          iBCtmp=0
38859599516SKenneth E. Jansen!       endif
38959599516SKenneth E. Jansen
39059599516SKenneth E. Jansen      if ( numpbc > 0 ) then
39159599516SKenneth E. Jansen        allocate( iBCtmp(numpbc) )
39259599516SKenneth E. Jansen        allocate( iBCtmpread(numpbc) )
39359599516SKenneth E. Jansen      else
39459599516SKenneth E. Jansen        allocate( iBCtmp(1) )
39559599516SKenneth E. Jansen        allocate( iBCtmpread(1) )
39659599516SKenneth E. Jansen      endif
39759599516SKenneth E. Jansenc         call readdatablock(igeomBAK,fname1,iBCtmpread,numpbc,
39859599516SKenneth E. Jansenc     &                      'integer',iotype)
399f262839cSCameron Smith      call phio_readdatablock(igeom,'bc codes array' // char(0),
4003c6dc7b4SCameron Smith     & iBCtmpread,numpbc,'integer' // char(0),iotype)
40159599516SKenneth E. Jansen
40259599516SKenneth E. Jansen      if ( numpbc > 0 ) then
40359599516SKenneth E. Jansen         iBCtmp=iBCtmpread
40459599516SKenneth E. Jansen      else  ! sometimes a partition has no BC's
40559599516SKenneth E. Jansen         deallocate( iBCtmpread)
40659599516SKenneth E. Jansen         iBCtmp=0
40759599516SKenneth E. Jansen      endif
40859599516SKenneth E. Jansen!MR CHANGE END
40959599516SKenneth E. Jansen
41059599516SKenneth E. Jansenc
41159599516SKenneth E. Jansenc.... read boundary condition data
41259599516SKenneth E. Jansenc
41359599516SKenneth E. Jansen
41459599516SKenneth E. Jansen      ione=1
41559599516SKenneth E. Jansen
41659599516SKenneth E. Jansenc      ione=1
41759599516SKenneth E. Jansenc      fname1='boundary condition array?'
41859599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,intfromfile,
41959599516SKenneth E. Jansenc     &     ione, 'double', iotype)
420d1293ce9SCameron Smith      call phio_readheader(igeom,'boundary condition array' // char(0),
4213c6dc7b4SCameron Smith     & intfromfile,ione, 'double' // char(0), iotype)
42259599516SKenneth E. Jansenc here intfromfile(1) contains (ndof+7)*numpbc
42359599516SKenneth E. Jansen!MR CHANGE
42459599516SKenneth E. Jansen!       if ( numpbc > 0 ) then
42559599516SKenneth E. Jansen!          if(intfromfile(1).ne.(ndof+7)*numpbc) then
42659599516SKenneth E. Jansen!            warning='WARNING more data in BCinp than needed: keeping 1st'
42759599516SKenneth E. Jansen!            write(*,*) warning, ndof+7
42859599516SKenneth E. Jansen!          endif
42959599516SKenneth E. Jansen!          allocate( BCinp(numpbc,ndof+7) )
43059599516SKenneth E. Jansen!          nsecondrank=intfromfile(1)/numpbc
43159599516SKenneth E. Jansen!          allocate( BCinpread(numpbc,nsecondrank) )
43259599516SKenneth E. Jansen!          iBCinpsiz=intfromfile(1)
43359599516SKenneth E. Jansen! c         call readdatablock(igeomBAK,fname1,BCinpread,iBCinpsiz,
43459599516SKenneth E. Jansen! c     &                      'double',iotype)
43559599516SKenneth E. Jansen!          call readdatablock(igeom,fname2,BCinpread,iBCinpsiz,
43659599516SKenneth E. Jansen!      &                      'double',iotype)
43759599516SKenneth E. Jansen!          BCinp(:,1:(ndof+7))=BCinpread(:,1:(ndof+7))
43859599516SKenneth E. Jansen!       else  ! sometimes a partition has no BC's
43959599516SKenneth E. Jansen!          allocate( BCinp(1,ndof+7) )
44059599516SKenneth E. Jansen!          BCinp=0
44159599516SKenneth E. Jansen!       endif
44259599516SKenneth E. Jansen
44359599516SKenneth E. Jansen      if ( numpbc > 0 ) then
44459599516SKenneth E. Jansen!         if(intfromfile(1).ne.(ndof+7)*numpbc) then
44559599516SKenneth E. Jansen!           warning='WARNING more data in BCinp than needed: keeping 1st'
44659599516SKenneth E. Jansen!           write(*,*) warning, ndof+7
44759599516SKenneth E. Jansen!         endif
44859599516SKenneth E. Jansen         allocate( BCinp(numpbc,ndof+7) )
44959599516SKenneth E. Jansen         nsecondrank=intfromfile(1)/numpbc
45059599516SKenneth E. Jansen         allocate( BCinpread(numpbc,nsecondrank) )
45159599516SKenneth E. Jansen         iBCinpsiz=intfromfile(1)
45259599516SKenneth E. Jansen      else
45359599516SKenneth E. Jansen         allocate( BCinp(1,ndof+7) )
45459599516SKenneth E. Jansen         allocate( BCinpread(0,0) ) !dummy
45559599516SKenneth E. Jansen         iBCinpsiz=intfromfile(1)
45659599516SKenneth E. Jansen      endif
45759599516SKenneth E. Jansenc         call readdatablock(igeomBAK,fname1,BCinpread,iBCinpsiz,
45859599516SKenneth E. Jansenc     &                      'double',iotype)
45959599516SKenneth E. Jansen
460f262839cSCameron Smith      call phio_readdatablock(igeom,'boundary condition array' // char(0),
4613c6dc7b4SCameron Smith     & BCinpread,iBCinpsiz,'double' // char(0) ,iotype)
46259599516SKenneth E. Jansen
46359599516SKenneth E. Jansen      if ( numpbc > 0 ) then
46459599516SKenneth E. Jansen         BCinp(:,1:(ndof+7))=BCinpread(:,1:(ndof+7))
46559599516SKenneth E. Jansen      else  ! sometimes a partition has no BC's
46659599516SKenneth E. Jansen         deallocate(BCinpread)
46759599516SKenneth E. Jansen         BCinp=0
46859599516SKenneth E. Jansen      endif
46959599516SKenneth E. Jansen!MR CHANGE END
47059599516SKenneth E. Jansen
47159599516SKenneth E. Jansenc
47259599516SKenneth E. Jansenc.... read periodic boundary conditions
47359599516SKenneth E. Jansenc
47459599516SKenneth E. Jansen
47559599516SKenneth E. Jansen      ione=1
47659599516SKenneth E. Jansenc      fname1='periodic masters array?'
47759599516SKenneth E. Jansenc      call readheader(igeomBAK,fname1,nshg,
47859599516SKenneth E. Jansenc     &     ione, 'integer', iotype)
479d1293ce9SCameron Smith      call phio_readheader(igeom,'periodic masters array' // char(0) ,nshg,
48059599516SKenneth E. Jansen     & ione,'integer' // char(0), iotype)
48159599516SKenneth E. Jansen      allocate( point2iper(nshg) )
48259599516SKenneth E. Jansen      allocate( iperread(nshg) )
48359599516SKenneth E. Jansenc      call readdatablock(igeomBAK,fname1,iperread,nshg,
48459599516SKenneth E. Jansenc     &                      'integer',iotype)
485f262839cSCameron Smith      call phio_readdatablock(igeom,'periodic masters array' // char(0),
4863c6dc7b4SCameron Smith     & iperread,nshg,'integer' // char(0),iotype)
48759599516SKenneth E. Jansen      point2iper=iperread
48859599516SKenneth E. Jansen
48959599516SKenneth E. Jansen
49059599516SKenneth E. Jansen! !MR CHANGE
49159599516SKenneth E. Jansen!      call closefile( igeom, "read" )
49259599516SKenneth E. Jansen!      call finalizephmpiio( igeom )
49359599516SKenneth E. Jansen! !MR CHANGE END
49459599516SKenneth E. Jansen
49559599516SKenneth E. Jansenc
49659599516SKenneth E. Jansenc.... generate the boundary element blocks
49759599516SKenneth E. Jansenc
49859599516SKenneth E. Jansen      call genbkb (ibksiz)
49959599516SKenneth E. Jansen
50059599516SKenneth E. Jansen
50159599516SKenneth E. Jansen! !MR CHANGE
50259599516SKenneth E. Jansen!       write(*,*) 'HELLO 12 from ', myrank
50359599516SKenneth E. Jansen! !MR CHANGE END
50459599516SKenneth E. Jansen
50559599516SKenneth E. Jansenc
50659599516SKenneth E. Jansenc  Read in the nsons and ifath arrays if needed
50759599516SKenneth E. Jansenc
50859599516SKenneth E. Jansenc  There is a fundamental shift in the meaning of ifath based on whether
50959599516SKenneth E. Jansenc  there exist homogenous directions in the flow.
51059599516SKenneth E. Jansenc
51159599516SKenneth E. Jansenc  HOMOGENOUS DIRECTIONS EXIST:  Here nfath is the number of inhomogenous
51259599516SKenneth E. Jansenc  points in the TOTAL mesh.  That is to say that each partition keeps a
51359599516SKenneth E. Jansenc  link to  ALL inhomogenous points.  This link is furthermore not to the
51459599516SKenneth E. Jansenc  sms numbering but to the original structured grid numbering.  These
51559599516SKenneth E. Jansenc  inhomogenous points are thought of as fathers, with their sons being all
51659599516SKenneth E. Jansenc  the points in the homogenous directions that have this father's
51759599516SKenneth E. Jansenc  inhomogeneity.  The array ifath takes as an arguement the sms numbering
51859599516SKenneth E. Jansenc  and returns as a result the father.
51959599516SKenneth E. Jansenc
52059599516SKenneth E. Jansenc  In this case nsons is the number of sons that each father has and ifath
52159599516SKenneth E. Jansenc  is an array which tells the
52259599516SKenneth E. Jansenc
52359599516SKenneth E. Jansenc  NO HOMOGENOUS DIRECTIONS.  In this case the mesh would grow to rapidly
52459599516SKenneth E. Jansenc  if we followed the above strategy since every partition would index its
52559599516SKenneth E. Jansenc  points to the ENTIRE mesh.  Furthermore, there would never be a need
52659599516SKenneth E. Jansenc  to average to a node off processor since there is no spatial averaging.
52759599516SKenneth E. Jansenc  Therefore, to properly account for this case we must recognize it and
52859599516SKenneth E. Jansenc  inerrupt certain actions (i.e. assembly of the average across partitions).
52959599516SKenneth E. Jansenc  This case is easily identified by noting that maxval(nsons) =1 (i.e. no
53059599516SKenneth E. Jansenc  father has any sons).  Reiterating to be clear, in this case ifath does
53159599516SKenneth E. Jansenc  not point to a global numbering but instead just points to itself.
53259599516SKenneth E. Jansenc
53359599516SKenneth E. Jansen      nfath=1  ! some architectures choke on a zero or undeclared
53459599516SKenneth E. Jansen                 ! dimension variable.  This sets it to a safe, small value.
53559599516SKenneth E. Jansen      if(((iLES .lt. 20) .and. (iLES.gt.0))
53659599516SKenneth E. Jansen     &                   .or. (itwmod.gt.0)  ) then ! don't forget same
53759599516SKenneth E. Jansen                                                    ! conditional in proces.f
53859599516SKenneth E. Jansen
53959599516SKenneth E. Jansenc           read (igeomBAK) nfath  ! nfath already read in input.f,
54059599516SKenneth E. Jansen                                     ! needed for alloc
54159599516SKenneth E. Jansen         ione=1
54259599516SKenneth E. Jansenc         call creadlist(igeomBAK,ione,nfath)
54359599516SKenneth E. Jansenc         fname1='keyword sonfath?'
54459599516SKenneth E. Jansen         if(nohomog.gt.0) then
54559599516SKenneth E. Jansen
54659599516SKenneth E. Jansen
54759599516SKenneth E. Jansen!             fname1='number of father-nodes?'
54859599516SKenneth E. Jansen!             call readheader(igeomBAK,fname1,nfath,ione,'integer', iotype)
54959599516SKenneth E. Jansen
550d1293ce9SCameron Smith            call phio_readheader(igeom,'number of father-nodes' // char(0),
5513c6dc7b4SCameron Smith     &       nfath,ione,'integer' // char(0), iotype)
55259599516SKenneth E. Jansen
55359599516SKenneth E. Jansenc
55459599516SKenneth E. Jansenc     fname1='keyword nsons?'
55559599516SKenneth E. Jansen!             fname1='number of son-nodes for each father?'
55659599516SKenneth E. Jansen!             call readheader(igeomBAK,fname1,nfath,ione,'integer', iotype)
55759599516SKenneth E. Jansen
558d1293ce9SCameron Smith            call phio_readheader(igeom,
5593c6dc7b4SCameron Smith     &       'number of son-nodes for each father' // char(0),
5603c6dc7b4SCameron Smith     &       nfath,ione,'integer' // char(0), iotype)
56159599516SKenneth E. Jansen
56259599516SKenneth E. Jansen            allocate (point2nsons(nfath))
56359599516SKenneth E. Jansen
56459599516SKenneth E. Jansen!             call readdatablock(igeomBAK,fname1,point2nsons,nfath,
56559599516SKenneth E. Jansen!      &                      'integer',iotype)
566f262839cSCameron Smith            call phio_readdatablock(igeom,
5673c6dc7b4SCameron Smith     &       'number of son-nodes for each father' // char(0),
5683c6dc7b4SCameron Smith     &       point2nsons,nfath,'integer' // char(0), iotype)
56959599516SKenneth E. Jansen
57059599516SKenneth E. Jansenc
57159599516SKenneth E. Jansen!             fname1='keyword ifath?'
57259599516SKenneth E. Jansen!             call readheader(igeomBAK,fname1,nshg,ione,'integer', iotype)
57359599516SKenneth E. Jansen
574d1293ce9SCameron Smith            call phio_readheader(igeom,'keyword ifath' // char(0),nshg,ione,
57559599516SKenneth E. Jansen     &      'integer' // char(0), iotype)
57659599516SKenneth E. Jansen
57759599516SKenneth E. Jansen            allocate (point2ifath(nshg))
57859599516SKenneth E. Jansen
57959599516SKenneth E. Jansen!             call readdatablock(igeomBAK,fname1,point2ifath,nshg,
58059599516SKenneth E. Jansen!      &                      'integer',iotype)
581f262839cSCameron Smith            call phio_readdatablock(igeom,'keyword ifath' // char(0),point2ifath,
58259599516SKenneth E. Jansen     &                      nshg,'integer' // char(0) , iotype)
58359599516SKenneth E. Jansen
58459599516SKenneth E. Jansenc
58559599516SKenneth E. Jansen            nsonmax=maxval(point2nsons)
58659599516SKenneth E. Jansenc
58759599516SKenneth E. Jansen         else  ! this is the case where there is no homogeneity
58859599516SKenneth E. Jansen               ! therefore ever node is a father (too itself).  sonfath
58959599516SKenneth E. Jansen               ! (a routine in NSpre) will set this up but this gives
59059599516SKenneth E. Jansen               ! you an option to avoid that.
59159599516SKenneth E. Jansen            nfath=nshg
59259599516SKenneth E. Jansen            allocate (point2nsons(nfath))
59359599516SKenneth E. Jansen            point2nsons=1
59459599516SKenneth E. Jansen            allocate (point2ifath(nshg))
59559599516SKenneth E. Jansen            do i=1,nshg
59659599516SKenneth E. Jansen               point2ifath(i)=i
59759599516SKenneth E. Jansen            enddo
59859599516SKenneth E. Jansen            nsonmax=1
59959599516SKenneth E. Jansenc
60059599516SKenneth E. Jansen         endif
60159599516SKenneth E. Jansen      else
60259599516SKenneth E. Jansen         allocate (point2nsons(1))
60359599516SKenneth E. Jansen         allocate (point2ifath(1))
60459599516SKenneth E. Jansen      endif
60559599516SKenneth E. Jansen
60659599516SKenneth E. Jansen! !MR CHANGE
60759599516SKenneth E. Jansen      call closefile( igeom, "read" // char(0) )
60859599516SKenneth E. Jansen      call finalizephmpiio( igeom )
60959599516SKenneth E. Jansen! !MR CHANGE END
61059599516SKenneth E. Jansen
61159599516SKenneth E. Jansen! !MR CHANGE
61259599516SKenneth E. Jansen!       write(*,*) 'HELLO 13 from ', myrank
61359599516SKenneth E. Jansen! !MR CHANGE END
61459599516SKenneth E. Jansen
61559599516SKenneth E. Jansenc
61659599516SKenneth E. Jansenc  renumber the master partition for SPEBC
61759599516SKenneth E. Jansenc
61859599516SKenneth E. Jansenc      if((myrank.eq.master).and.(irscale.ge.0)) then
61959599516SKenneth E. Jansenc         call setSPEBC(numnp, nfath, nsonmax)
62059599516SKenneth E. Jansenc         call renum(point2x,point2ifath,point2nsons)
62159599516SKenneth E. Jansenc      endif
62259599516SKenneth E. Jansenc
62359599516SKenneth E. Jansenc.... Read restart files
62459599516SKenneth E. Jansen
62559599516SKenneth E. Jansenc$$$ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
62659599516SKenneth E. Jansenc
62759599516SKenneth E. Jansenc      nfields = 11
62859599516SKenneth E. Jansenc      numparts = 512
62959599516SKenneth E. Jansenc      nppp = numparts/numpe
63059599516SKenneth E. Jansenc      startpart = myrank * nppp +1
63159599516SKenneth E. Jansenc      int endpart = startpart + nppp - 1
63259599516SKenneth E. Jansenc      nppf = numparts/nfiles
63359599516SKenneth E. Jansencc      fnamer = "/users/nliu/PIG4/4-procs_case/restart-file"
63459599516SKenneth E. Jansencc      fnamer="./4-procs_case/restart-file"
63559599516SKenneth E. Jansen
63682f286aaSCameron Smith      call phio_restartname(irstart, fnamer)
637*ade0e30fSCameron Smith      call phio_openfile(fnamer, 'read' // char(0), nfiles, ignored,
638*ade0e30fSCameron Smith     & ignored, descriptor)
63959599516SKenneth E. Jansen
64059599516SKenneth E. Jansen      ithree=3
64159599516SKenneth E. Jansenc      call creadlist(irstin,ithree,nshg2,ndof2,lstep)
64259599516SKenneth E. Jansen
64359599516SKenneth E. Jansen      itmp = int(log10(float(myrank+1)))+1
64459599516SKenneth E. Jansen
64559599516SKenneth E. Jansenc      print *, "Solution is : ", fname1
64659599516SKenneth E. Jansen
64759599516SKenneth E. Jansen      intfromfile=0
648d1293ce9SCameron Smith      call phio_readheader(descriptor,'solution' // char(0) ,intfromfile,
6493c6dc7b4SCameron Smith     & ithree,'integer' // char(0), iotype)
65059599516SKenneth E. Jansenc
65159599516SKenneth E. Jansenc.... read the values of primitive variables into q
65259599516SKenneth E. Jansenc
65359599516SKenneth E. Jansen
65459599516SKenneth E. Jansenc      print *, "intfromfile(1) is ", intfromfile(1)
65559599516SKenneth E. Jansenc      print *, "intfromfile(2) is ", intfromfile(2)
65659599516SKenneth E. Jansenc      print *, "intfromfile(3) is ", intfromfile(3)
65759599516SKenneth E. Jansen
65859599516SKenneth E. Jansen      allocate( qold(nshg,ndof) )
65959599516SKenneth E. Jansen      if(intfromfile(1).ne.0) then
66059599516SKenneth E. Jansen         nshg2=intfromfile(1)
66159599516SKenneth E. Jansen         ndof2=intfromfile(2)
66259599516SKenneth E. Jansen         lstep=intfromfile(3)
66359599516SKenneth E. Jansen         if(ndof2.ne.ndof) then
66459599516SKenneth E. Jansen
66559599516SKenneth E. Jansen         endif
66659599516SKenneth E. Jansenc
66759599516SKenneth E. Jansen        if (nshg2 .ne. nshg)
66859599516SKenneth E. Jansen     &        call error ('restar  ', 'nshg   ', nshg)
66959599516SKenneth E. Jansen         allocate( qread(nshg,ndof2) )
67059599516SKenneth E. Jansen         iqsiz=nshg*ndof2
671f262839cSCameron Smith         call phio_readdatablock(descriptor,'solution' // char(0),qread,iqsiz,
67259599516SKenneth E. Jansen     &                         'double' // char(0),iotype)
67359599516SKenneth E. Jansen         qold(:,1:ndof)=qread(:,1:ndof)
67459599516SKenneth E. Jansen         deallocate(qread)
67559599516SKenneth E. Jansen      else
67659599516SKenneth E. Jansen         if (myrank.eq.master) then
67759599516SKenneth E. Jansen            if (matflg(1,1).eq.0) then ! compressible
67859599516SKenneth E. Jansen               warning='Solution is set to zero (with p and T to one)'
67959599516SKenneth E. Jansen            else
68059599516SKenneth E. Jansen               warning='Solution is set to zero'
68159599516SKenneth E. Jansen            endif
68259599516SKenneth E. Jansen            write(*,*) warning
68359599516SKenneth E. Jansen         endif
68459599516SKenneth E. Jansen         qold=zero
68559599516SKenneth E. Jansen         if (matflg(1,1).eq.0) then ! compressible
68659599516SKenneth E. Jansen            qold(:,1)=one ! avoid zero pressure
68759599516SKenneth E. Jansen            qold(:,nflow)=one ! avoid zero temperature
68859599516SKenneth E. Jansen         endif
68959599516SKenneth E. Jansen      endif
69059599516SKenneth E. Jansen
69159599516SKenneth E. Jansen
69259599516SKenneth E. Jansen! !MR CHANGE
69359599516SKenneth E. Jansen!       write(*,*) 'HELLO 16-8 from ', myrank
69459599516SKenneth E. Jansen! !MR CHANGE END
69559599516SKenneth E. Jansen
69659599516SKenneth E. Jansenc      itmp=1
69759599516SKenneth E. Jansenc      if (myrank .gt. 0) itmp = int(log10(float(myrank)))+1
69859599516SKenneth E. Jansen      intfromfile=0
699d1293ce9SCameron Smith      call phio_readheader(descriptor,'time derivative of solution' // char(0),
7003c6dc7b4SCameron Smith     & intfromfile,ithree,'integer' // char(0),iotype)
70159599516SKenneth E. Jansen      allocate( acold(nshg,ndof) )
70259599516SKenneth E. Jansen      if(intfromfile(1).ne.0) then
70359599516SKenneth E. Jansen         nshg2=intfromfile(1)
70459599516SKenneth E. Jansen         ndof2=intfromfile(2)
70559599516SKenneth E. Jansen         lstep=intfromfile(3)
70659599516SKenneth E. Jansen
70759599516SKenneth E. Jansenc      print *, "intfromfile(1) is ", intfromfile(1)
70859599516SKenneth E. Jansenc      print *, "intfromfile(2) is ", intfromfile(2)
70959599516SKenneth E. Jansenc      print *, "intfromfile(3) is ", intfromfile(3)
71059599516SKenneth E. Jansen
71159599516SKenneth E. Jansen         if (nshg2 .ne. nshg)
71259599516SKenneth E. Jansen     &        call error ('restar  ', 'nshg   ', nshg)
71359599516SKenneth E. Jansenc
71459599516SKenneth E. Jansen         allocate( acread(nshg,ndof2) )
71559599516SKenneth E. Jansen         acread=zero
71659599516SKenneth E. Jansen         iacsiz=nshg*ndof2
717f262839cSCameron Smith         call phio_readdatablock(descriptor,
7183c6dc7b4SCameron Smith     &    'time derivative of solution' // char(0),acread,
71959599516SKenneth E. Jansen     &    iacsiz, 'double' // char(0),iotype)
72059599516SKenneth E. Jansen         acold(:,1:ndof)=acread(:,1:ndof)
72159599516SKenneth E. Jansen         deallocate(acread)
72259599516SKenneth E. Jansen      else
72359599516SKenneth E. Jansen         if (myrank.eq.master) then
72459599516SKenneth E. Jansen            warning='Time derivative of solution is set to zero (SAFE)'
72559599516SKenneth E. Jansen            write(*,*) warning
72659599516SKenneth E. Jansen         endif
72759599516SKenneth E. Jansen         acold=zero
72859599516SKenneth E. Jansen      endif
72959599516SKenneth E. Jansen
73059599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
73159599516SKenneth E. Jansencc
73259599516SKenneth E. Jansenc
73359599516SKenneth E. Jansencc
73459599516SKenneth E. Jansencc.... read the header and check it against the run data
73559599516SKenneth E. Jansencc
73659599516SKenneth E. Jansen
73759599516SKenneth E. Jansen
73859599516SKenneth E. Jansenc      ithree=3
73959599516SKenneth E. Jansenccc      call creadlist(irstin,ithree,nshg2,ndof2,lstep)
74059599516SKenneth E. Jansenc      fname1='solution?'
74159599516SKenneth E. Jansenc      intfromfile=0
74259599516SKenneth E. Jansenc      call readheader(irstin,fname1,intfromfile,
74359599516SKenneth E. Jansenc     &     ithree,'integer', iotype)
74459599516SKenneth E. Jansencc
74559599516SKenneth E. Jansencc.... read the values of primitive variables into q
74659599516SKenneth E. Jansencc
74759599516SKenneth E. Jansenc      allocate( qold(nshg,ndof) )
74859599516SKenneth E. Jansenc      if(intfromfile(1).ne.0) then
74959599516SKenneth E. Jansenc         nshg2=intfromfile(1)
75059599516SKenneth E. Jansenc         ndof2=intfromfile(2)
75159599516SKenneth E. Jansenc         lstep=intfromfile(3)
75259599516SKenneth E. Jansenc         if(ndof2.ne.ndof) then
75359599516SKenneth E. Jansenc           warning='WARNING more data in restart than needed: keeping 1st '
75459599516SKenneth E. Jansenc           write(*,*) warning , ndof
75559599516SKenneth E. Jansenc         endif
75659599516SKenneth E. Jansencc
75759599516SKenneth E. Jansenc         if (nshg2 .ne. nshg)
75859599516SKenneth E. Jansenc     &        call error ('restar  ', 'nshg   ', nshg)
75959599516SKenneth E. Jansenc         allocate( qread(nshg,ndof2) )
76059599516SKenneth E. Jansen
76159599516SKenneth E. Jansenc         iqsiz=nshg*ndof2
76259599516SKenneth E. Jansenc         call readdatablock(irstin,fname1,qread,iqsiz,
76359599516SKenneth E. Jansenc     &                         'double',iotype)
76459599516SKenneth E. Jansenc         qold(:,1:ndof)=qread(:,1:ndof)
76559599516SKenneth E. Jansenc         deallocate(qread)
76659599516SKenneth E. Jansenc      else
76759599516SKenneth E. Jansenc         if (myrank.eq.master) then
76859599516SKenneth E. Jansenc            if (matflg(1,1).eq.0) then ! compressible
76959599516SKenneth E. Jansenc               warning='Solution is set to zero (with p and T to one)'
77059599516SKenneth E. Jansenc            else
77159599516SKenneth E. Jansenc               warning='Solution is set to zero'
77259599516SKenneth E. Jansenc            endif
77359599516SKenneth E. Jansenc            write(*,*) warning
77459599516SKenneth E. Jansenc         endif
77559599516SKenneth E. Jansenc         qold=zero
77659599516SKenneth E. Jansenc         if (matflg(1,1).eq.0) then ! compressible
77759599516SKenneth E. Jansenc            qold(:,1)=one ! avoid zero pressure
77859599516SKenneth E. Jansenc            qold(:,nflow)=one ! avoid zero temperature
77959599516SKenneth E. Jansenc         endif
78059599516SKenneth E. Jansenc      endif
78159599516SKenneth E. Jansencc
78259599516SKenneth E. Jansenc      fname1='time derivative of solution?'
78359599516SKenneth E. Jansenc      intfromfile=0
78459599516SKenneth E. Jansenc      call readheader(irstin,fname1,intfromfile,
78559599516SKenneth E. Jansenc     &     ithree,'integer', iotype)
78659599516SKenneth E. Jansenc      allocate( acold(nshg,ndof) )
78759599516SKenneth E. Jansenc      if(intfromfile(1).ne.0) then
78859599516SKenneth E. Jansenc         nshg2=intfromfile(1)
78959599516SKenneth E. Jansenc         ndof2=intfromfile(2)
79059599516SKenneth E. Jansenc         lstep=intfromfile(3)
79159599516SKenneth E. Jansenc
79259599516SKenneth E. Jansenc         if (nshg2 .ne. nshg)
79359599516SKenneth E. Jansenc     &        call error ('restar  ', 'nshg   ', nshg)
79459599516SKenneth E. Jansencc
79559599516SKenneth E. Jansenc         allocate( acread(nshg,ndof2) )
79659599516SKenneth E. Jansenc         acread=zero
79759599516SKenneth E. Jansenc
79859599516SKenneth E. Jansenc         iacsiz=nshg*ndof2
79959599516SKenneth E. Jansenc         call readdatablock(irstin,fname1,acread,iacsiz,
80059599516SKenneth E. Jansenc     &                   'double',iotype)
80159599516SKenneth E. Jansenc         acold(:,1:ndof)=acread(:,1:ndof)
80259599516SKenneth E. Jansenc         deallocate(acread)
80359599516SKenneth E. Jansenc      else
80459599516SKenneth E. Jansenc         if (myrank.eq.master) then
80559599516SKenneth E. Jansenc            warning='Time derivative of solution is set to zero (SAFE)'
80659599516SKenneth E. Jansenc            write(*,*) warning
80759599516SKenneth E. Jansenc         endif
80859599516SKenneth E. Jansenc         acold=zero
80959599516SKenneth E. Jansenc      endif
81059599516SKenneth E. Jansen
81159599516SKenneth E. Jansenc      call creadlist(irstin,ithree,nshg2,ndisp,lstep)
81259599516SKenneth E. Jansen
81359599516SKenneth E. Jansen      if (ideformwall.eq.1) then
81459599516SKenneth E. Jansen!          fname1='displacement?'
81559599516SKenneth E. Jansen!          call readheader(irstin,fname1,intfromfile,
81659599516SKenneth E. Jansen!      &        ithree,'integer', iotype)
81759599516SKenneth E. Jansen
81859599516SKenneth E. Jansen          intfromfile=0
819d1293ce9SCameron Smith          call phio_readheader(descriptor,'displacement' // char(0),
8203c6dc7b4SCameron Smith     &     intfromfile,ithree,'integer' // char(0),iotype)
82159599516SKenneth E. Jansen
82259599516SKenneth E. Jansen         nshg2=intfromfile(1)
82359599516SKenneth E. Jansen         ndisp=intfromfile(2)
82459599516SKenneth E. Jansen         lstep=intfromfile(3)
82559599516SKenneth E. Jansen         if(ndisp.ne.nsd) then
82659599516SKenneth E. Jansen            warning='WARNING ndisp not equal nsd'
82759599516SKenneth E. Jansen            write(*,*) warning , ndisp
82859599516SKenneth E. Jansen         endif
82959599516SKenneth E. Jansenc
83059599516SKenneth E. Jansen         if (nshg2 .ne. nshg)
83159599516SKenneth E. Jansen     &        call error ('restar  ', 'nshg   ', nshg)
83259599516SKenneth E. Jansenc
83359599516SKenneth E. Jansenc.... read the values of primitive variables into uold
83459599516SKenneth E. Jansenc
83559599516SKenneth E. Jansen
83659599516SKenneth E. Jansen         allocate( uold(nshg,nsd) )
83759599516SKenneth E. Jansen         allocate( uread(nshg,nsd) )
83859599516SKenneth E. Jansen
83959599516SKenneth E. Jansen         iusiz=nshg*nsd
84059599516SKenneth E. Jansen
84159599516SKenneth E. Jansen!          call readdatablock(irstin,fname1,uread,iusiz,
84259599516SKenneth E. Jansen!      &        'double',iotype)
843f262839cSCameron Smith         call phio_readdatablock(descriptor,'displacement' // char(0),
8441a0ed25eSCameron Smith     &          uread,iusiz, 'double' // char(0),iotype)
84559599516SKenneth E. Jansen
84659599516SKenneth E. Jansen         uold(:,1:nsd)=uread(:,1:nsd)
84759599516SKenneth E. Jansen       else
84859599516SKenneth E. Jansen         allocate( uold(nshg,nsd) )
84959599516SKenneth E. Jansen         uold(:,1:nsd) = zero
85059599516SKenneth E. Jansen       endif
85159599516SKenneth E. Jansen
85259599516SKenneth E. Jansenc
85359599516SKenneth E. Jansenc.... close c-binary files
85459599516SKenneth E. Jansenc
85559599516SKenneth E. Jansen!MR CHANGE
85659599516SKenneth E. Jansen!      call closefile( irstin, "read" )
85759599516SKenneth E. Jansen
85859599516SKenneth E. Jansen      call closefile( descriptor, "read" // char(0) )
85959599516SKenneth E. Jansen      call finalizephmpiio( descriptor )
86059599516SKenneth E. Jansen
86159599516SKenneth E. Jansen!MR CHANGE
86259599516SKenneth E. Jansen!      call closefile( igeomBAK,  "read" )
86359599516SKenneth E. Jansenc
86459599516SKenneth E. Jansen      deallocate(xread)
86559599516SKenneth E. Jansen      if ( numpbc > 0 )  then
86659599516SKenneth E. Jansen         deallocate(bcinpread)
86759599516SKenneth E. Jansen         deallocate(ibctmpread)
86859599516SKenneth E. Jansen      endif
86959599516SKenneth E. Jansen      deallocate(iperread)
87059599516SKenneth E. Jansen      if(numpe.gt.1)
87159599516SKenneth E. Jansen     &     deallocate(ilworkread)
87259599516SKenneth E. Jansen      deallocate(nbcread)
87359599516SKenneth E. Jansen
87459599516SKenneth E. Jansen      return
87559599516SKenneth E. Jansenc
87659599516SKenneth E. Jansen 994  call error ('input   ','opening ', igeomBAK)
87759599516SKenneth E. Jansen 995  call error ('input   ','opening ', igeomBAK)
87859599516SKenneth E. Jansen 997  call error ('input   ','end file', igeomBAK)
87959599516SKenneth E. Jansen 998  call error ('input   ','end file', igeomBAK)
88059599516SKenneth E. Jansenc
88159599516SKenneth E. Jansen      end
88259599516SKenneth E. Jansen
88359599516SKenneth E. Jansenc
88459599516SKenneth E. Jansenc No longer called but kept around in case....
88559599516SKenneth E. Jansenc
88659599516SKenneth E. Jansen      subroutine genpzero(iBC)
88759599516SKenneth E. Jansen
88859599516SKenneth E. Jansen      use pointer_data
88959599516SKenneth E. Jansenc
89059599516SKenneth E. Jansen      include "common.h"
89159599516SKenneth E. Jansen      integer iBC(nshg)
89259599516SKenneth E. Jansenc
89359599516SKenneth E. Jansenc....  check to see if any of the nodes have a dirichlet pressure
89459599516SKenneth E. Jansenc
89559599516SKenneth E. Jansen      pzero=1
89659599516SKenneth E. Jansen      if (any(btest(iBC,2))) pzero=0
89759599516SKenneth E. Jansenc
89859599516SKenneth E. Jansen      do iblk = 1, nelblb
89959599516SKenneth E. Jansen         npro = lcblkb(1,iblk+1)-lcblkb(1,iblk)
90059599516SKenneth E. Jansen         do i=1, npro
90159599516SKenneth E. Jansen            iBCB1=miBCB(iblk)%p(i,1)
90259599516SKenneth E. Jansenc
90359599516SKenneth E. Jansenc.... check to see if any of the nodes have a Neumann pressure
90459599516SKenneth E. Jansenc     but not periodic (note that
90559599516SKenneth E. Jansenc
90659599516SKenneth E. Jansen            if(btest(iBCB1,1)) pzero=0
90759599516SKenneth E. Jansen         enddo
90859599516SKenneth E. Jansenc
90959599516SKenneth E. Jansenc.... share results with other processors
91059599516SKenneth E. Jansenc
91159599516SKenneth E. Jansen         pzl=pzero
91259599516SKenneth E. Jansen         if (numpe .gt. 1)
91359599516SKenneth E. Jansen     &        call MPI_ALLREDUCE (pzl, pzero, 1,
91459599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_MIN, MPI_COMM_WORLD,ierr)
91559599516SKenneth E. Jansen
91659599516SKenneth E. Jansen      enddo
91759599516SKenneth E. Jansenc
91859599516SKenneth E. Jansenc.... return
91959599516SKenneth E. Jansenc
92059599516SKenneth E. Jansen      return
92159599516SKenneth E. Jansenc
92259599516SKenneth E. Jansen      end
92359599516SKenneth E. Jansen
924