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