159599516SKenneth E. Jansen subroutine genblk (IBKSZ) 259599516SKenneth E. Jansenc 359599516SKenneth E. Jansenc---------------------------------------------------------------------- 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc This routine reads the interior elements and generates the 659599516SKenneth E. Jansenc appropriate blocks. 759599516SKenneth E. Jansenc 859599516SKenneth E. Jansenc Zdenek Johan, Fall 1991. 959599516SKenneth E. Jansenc---------------------------------------------------------------------- 1059599516SKenneth E. Jansenc 1159599516SKenneth E. Jansen use pointer_data 12e5afe575SCameron Smith use phio 13e5afe575SCameron Smith use iso_c_binding 1459599516SKenneth E. Jansenc 1559599516SKenneth E. Jansen include "common.h" 1659599516SKenneth E. Jansen!MR CHANGE 1759599516SKenneth E. Jansen include "mpif.h" !Required to determine the max for itpblk 1859599516SKenneth E. Jansen!MR CHANGE END 1959599516SKenneth E. Jansenc 2059599516SKenneth E. Jansen integer, allocatable :: ientp(:,:) 2159599516SKenneth E. Jansen integer mater(ibksz) 2259599516SKenneth E. Jansen integer intfromfile(50) ! integers read from headers 2359599516SKenneth E. Jansen character*255 fname1 2459599516SKenneth E. Jansen 2559599516SKenneth E. Jansencccccccccccccc New Phasta IO starts here ccccccccccccccccccccccccc 2659599516SKenneth E. Jansen 2759599516SKenneth E. Jansen integer :: descriptor, descriptorG, GPID, color, nfiles 2859599516SKenneth E. Jansen integer :: numparts, writeLock 2959599516SKenneth E. Jansen integer :: ierr_io, numprocs, itmp, itmp2 3059599516SKenneth E. Jansen!MR CHANGE 3159599516SKenneth E. Jansen integer :: itpblktot,ierr,iseven 3259599516SKenneth E. Jansen!MR CHANGE END 3359599516SKenneth E. Jansen character*255 fnamer, fname2, temp2 3459599516SKenneth E. Jansen character*64 temp1, temp3 35e5afe575SCameron Smith 36e5afe575SCameron Smith character(len=30) :: dataInt 37e5afe575SCameron Smith type(c_ptr) :: handle 38e5afe575SCameron Smith 3959599516SKenneth E. Jansen!THIS NEEDS TO BE CLEANED - MR 4059599516SKenneth E. Jansen nfiles = nsynciofiles 4159599516SKenneth E. Jansen! nfields = nsynciofieldsreadgeombc 4259599516SKenneth E. Jansen numparts = numpe !This is the common settings. Beware if you try to compute several parts per process 4359599516SKenneth E. Jansen 4459599516SKenneth E. Jansen! nppp = numparts/numpe 4559599516SKenneth E. Jansen! nppf = numparts/nfiles 4659599516SKenneth E. Jansen 4759599516SKenneth E. Jansen color = int(myrank/(numparts/nfiles)) !Should call the SyncIO routine here 4859599516SKenneth E. Jansen itmp2 = int(log10(float(color+1)))+1 4959599516SKenneth E. Jansen write (temp2,"('(''geombc-dat.'',i',i1,')')") itmp2 5059599516SKenneth E. Jansen temp2=trim(temp2) 5159599516SKenneth E. Jansen write (fnamer,temp2) (color+1) 5259599516SKenneth E. Jansen fnamer=trim(fnamer) 5359599516SKenneth E. Jansen 5459599516SKenneth E. Jansen ione=1 5559599516SKenneth E. Jansen itwo=2 5659599516SKenneth E. Jansen iseven=7 5759599516SKenneth E. Jansen ieleven=11 5859599516SKenneth E. Jansen itmp = int(log10(float(myrank+1)))+1 5959599516SKenneth E. Jansen 6059599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 6159599516SKenneth E. Jansen 6259599516SKenneth E. Jansenc 6359599516SKenneth E. Jansen iel=1 6459599516SKenneth E. Jansen itpblk=nelblk 6559599516SKenneth E. Jansen!MR CHANGE 6659599516SKenneth E. Jansen 6759599516SKenneth E. Jansen ! Get the total number of different interior topologies in the whole domain. 6859599516SKenneth E. Jansen ! Try to read from a field. If the field does not exist, scan the geombc file. 6959599516SKenneth E. Jansen itpblktot=-1 70e5afe575SCameron Smith call phio_readheader(handle, 71e5afe575SCameron Smith & c_char_'total number of interior tpblocks' // char(0), 72e5afe575SCameron Smith & c_loc(itpblktot), ione, dataInt, iotype) 7359599516SKenneth E. Jansen 7459599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' interior itpblktot intermediate:', 7559599516SKenneth E. Jansen! & itpblktot 7659599516SKenneth E. Jansen 7759599516SKenneth E. Jansen if (itpblktot == -1) then 7859599516SKenneth E. Jansen ! The field 'total number of different interior tpblocks' was not found in the geombc file. 7959599516SKenneth E. Jansen ! Scan all the geombc file for the 'connectivity interior' fields to get this information. 8059599516SKenneth E. Jansen iblk=0 8159599516SKenneth E. Jansen neltp=0 8259599516SKenneth E. Jansen do while(neltp .ne. -1) 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansen ! intfromfile is reinitialized to -1 every time. 8559599516SKenneth E. Jansen ! If connectivity interior@xxx is not found, then 8659599516SKenneth E. Jansen ! readheader will return intfromfile unchanged 8759599516SKenneth E. Jansen 8859599516SKenneth E. Jansen intfromfile(:)=-1 8959599516SKenneth E. Jansen iblk = iblk+1 90aa9d7345SCameron Smith write (fname2,"('connectivity interior',i1)") iblk 9159599516SKenneth E. Jansen 9259599516SKenneth E. Jansen !write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2)) 93e5afe575SCameron Smith call phio_readheader(handle, fname2 // char(0), 94e5afe575SCameron Smith & c_loc(intfromfile), iseven, dataInt, iotype) 9559599516SKenneth E. Jansen neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise 9659599516SKenneth E. Jansen end do 9759599516SKenneth E. Jansen itpblktot = iblk-1 9859599516SKenneth E. Jansen end if 9959599516SKenneth E. Jansen 10059599516SKenneth E. Jansen if (myrank == 0) then 10159599516SKenneth E. Jansen write(*,*) 'Number of interior topologies: ',itpblktot 10259599516SKenneth E. Jansen endif 10359599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' interior itpblktot final:', 10459599516SKenneth E. Jansen! & itpblktot 10559599516SKenneth E. Jansen 10659599516SKenneth E. Jansen!MR CHANGE END 10759599516SKenneth E. Jansen 10859599516SKenneth E. Jansen nelblk=0 10959599516SKenneth E. Jansen mattyp = 0 11059599516SKenneth E. Jansen ndofl = ndof 11159599516SKenneth E. Jansen nsymdl = nsymdf 11259599516SKenneth E. Jansen 11359599516SKenneth E. Jansen! call initphmpiio( nfields, nppf, nfiles, igeom ) 11459599516SKenneth E. Jansen! call openfile( fnamer, 'read', igeom ) 11559599516SKenneth E. Jansen 11659599516SKenneth E. Jansen! do iblk = 1, itpblk 11759599516SKenneth E. Jansen do iblk = 1, itpblktot 11859599516SKenneth E. Jansen writeLock=0; 11959599516SKenneth E. Jansen!MR CHANGE END 12059599516SKenneth E. Jansenc 12159599516SKenneth E. Jansenc read(igeomBAK) neltp,nenl,ipordl,nshl, ijunk, ijunk, lcsyst 12259599516SKenneth E. Jansenc call creadlist(igeomBAK,iseven, 12359599516SKenneth E. Jansenc & neltp,nenl,ipordl,nshl, ijunk, ijunk, lcsyst) 12459599516SKenneth E. Jansen 12559599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 12659599516SKenneth E. Jansen 127aa9d7345SCameron Smith write (fname2,"('connectivity interior',i1)") iblk 12859599516SKenneth E. Jansen 12959599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 13059599516SKenneth E. Jansen 13159599516SKenneth E. Jansenc fname1='connectivity interior?' 13259599516SKenneth E. Jansen 13359599516SKenneth E. Jansen ! Synchronization for performance monitoring, as some parts do not include some topologies 13459599516SKenneth E. Jansen call MPI_Barrier(MPI_COMM_WORLD,ierr) 135e5afe575SCameron Smith call phio_readheader(handle, fname2 // char(0), 136e5afe575SCameron Smith & c_loc(intfromfile), iseven, dataInt, iotype) 13759599516SKenneth E. Jansen neltp =intfromfile(1) 13859599516SKenneth E. Jansen nenl =intfromfile(2) 13959599516SKenneth E. Jansen ipordl =intfromfile(3) 14059599516SKenneth E. Jansen nshl =intfromfile(4) 14159599516SKenneth E. Jansen ijunk =intfromfile(5) 14259599516SKenneth E. Jansen ijunk =intfromfile(6) 14359599516SKenneth E. Jansen lcsyst =intfromfile(7) 14459599516SKenneth E. Jansen allocate (ientp(neltp,nshl)) 14559599516SKenneth E. Jansenc read(igeomBAK) ientp 14659599516SKenneth E. Jansen iientpsiz=neltp*nshl 14759599516SKenneth E. Jansen 14859599516SKenneth E. Jansen if (neltp==0) then 14959599516SKenneth E. Jansen writeLock=1; 15059599516SKenneth E. Jansen endif 15159599516SKenneth E. Jansen 152*bc62cfd4SCameron Smith call phio_readdatablock(handle,fname2 // char(0), 153*bc62cfd4SCameron Smith & c_loc(ientp), iientpsiz, dataInt, iotype) 15459599516SKenneth E. Jansen 15559599516SKenneth E. Jansen! call closefile( igeom, "read" // char(0) ) 15659599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 15759599516SKenneth E. Jansen 15859599516SKenneth E. Jansen!MR CHANGE 15959599516SKenneth E. Jansen if(writeLock==0) then 16059599516SKenneth E. Jansen!MR CHANGE 16159599516SKenneth E. Jansen 16259599516SKenneth E. Jansen do n=1,neltp,ibksz 16359599516SKenneth E. Jansen nelblk=nelblk+1 16459599516SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 16559599516SKenneth E. Jansenc 16659599516SKenneth E. Jansen lcblk(1,nelblk) = iel 16759599516SKenneth E. Jansenc lcblk(2,nelblk) = iopen ! available for later use 16859599516SKenneth E. Jansen lcblk(3,nelblk) = lcsyst 16959599516SKenneth E. Jansen lcblk(4,nelblk) = ipordl 17059599516SKenneth E. Jansen lcblk(5,nelblk) = nenl 17159599516SKenneth E. Jansen lcblk(6,nelblk) = nfacel 17259599516SKenneth E. Jansen lcblk(7,nelblk) = mattyp 17359599516SKenneth E. Jansen lcblk(8,nelblk) = ndofl 17459599516SKenneth E. Jansen lcblk(9,nelblk) = nsymdl 17559599516SKenneth E. Jansen lcblk(10,nelblk) = nshl ! # of shape functions per elt 17659599516SKenneth E. Jansenc 17759599516SKenneth E. Jansenc.... allocate memory for stack arrays 17859599516SKenneth E. Jansenc 17959599516SKenneth E. Jansen allocate (mmat(nelblk)%p(npro)) 18059599516SKenneth E. Jansenc 18159599516SKenneth E. Jansen allocate (mien(nelblk)%p(npro,nshl)) 18259599516SKenneth E. Jansen allocate (mxmudmi(nelblk)%p(npro,maxsh)) 18359599516SKenneth E. Jansenc 18459599516SKenneth E. Jansenc.... save the element block 18559599516SKenneth E. Jansenc 18659599516SKenneth E. Jansen n1=n 18759599516SKenneth E. Jansen n2=n+npro-1 18859599516SKenneth E. Jansen mater=1 ! all one material for now 18959599516SKenneth E. Jansen call gensav (ientp(n1:n2,1:nshl), 19059599516SKenneth E. Jansen & mater, mien(nelblk)%p, 19159599516SKenneth E. Jansen & mmat(nelblk)%p) 19259599516SKenneth E. Jansen iel=iel+npro 19359599516SKenneth E. Jansenc 19459599516SKenneth E. Jansen enddo 19559599516SKenneth E. Jansen!MR CHANGE 19659599516SKenneth E. Jansen endif 19759599516SKenneth E. Jansen!MR CHANGE 19859599516SKenneth E. Jansen deallocate(ientp) 19959599516SKenneth E. Jansen enddo 20059599516SKenneth E. Jansen 20159599516SKenneth E. Jansen! call closefile( igeom, "read" // char(0) ) 20259599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 20359599516SKenneth E. Jansen 20459599516SKenneth E. Jansen lcblk(1,nelblk+1) = iel 20559599516SKenneth E. Jansenc 20659599516SKenneth E. Jansenc.... return 20759599516SKenneth E. Jansenc 20859599516SKenneth E. JansenCAD call timer ('Back ') 20959599516SKenneth E. Jansenc 21059599516SKenneth E. Jansen return 21159599516SKenneth E. Jansenc 21259599516SKenneth E. Jansen1000 format(a80,//, 21359599516SKenneth E. Jansen & ' N o d a l C o n n e c t i v i t y',//, 21459599516SKenneth E. Jansen & ' Elem ',/, 21559599516SKenneth E. Jansen & ' Number ',7x,27('Node',i2,:,2x)) 21659599516SKenneth E. Jansen1100 format(2x,i5,6x,27i8) 21759599516SKenneth E. Jansen end 218