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. Jansen include "common.h" 1559599516SKenneth E. Jansen include "mpif.h" !Required to determine the max for itpblk 16*3aa841a8SCameron Smith 179a6935e5SKenneth E. Jansen integer, target, allocatable :: ientp(:,:) 1859599516SKenneth E. Jansen integer mater(ibksz) 199a6935e5SKenneth E. Jansen integer, target :: intfromfile(50) ! integers read from headers 2059599516SKenneth E. Jansen character*255 fname1 2159599516SKenneth E. Jansen integer :: descriptor, descriptorG, GPID, color, nfiles 2259599516SKenneth E. Jansen integer :: numparts, writeLock 232efdc748SKenneth E. Jansen integer :: ierr_io, numprocs 249a6935e5SKenneth E. Jansen integer, target :: itpblktot,ierr,iseven 252efdc748SKenneth E. Jansen character*255 fname2 26e5afe575SCameron Smith character(len=30) :: dataInt 27d5d2f64dSCameron Smith dataInt = c_char_'integer'//c_null_char 2859599516SKenneth E. Jansen nfiles = nsynciofiles 2959599516SKenneth E. Jansen numparts = numpe !This is the common settings. Beware if you try to compute several parts per process 3059599516SKenneth E. Jansen ione=1 3159599516SKenneth E. Jansen itwo=2 3259599516SKenneth E. Jansen iseven=7 3359599516SKenneth E. Jansen ieleven=11 3459599516SKenneth E. Jansen iel=1 3559599516SKenneth E. Jansen itpblk=nelblk 3659599516SKenneth E. Jansen 3759599516SKenneth E. Jansen ! Get the total number of different interior topologies in the whole domain. 3859599516SKenneth E. Jansen ! Try to read from a field. If the field does not exist, scan the geombc file. 392efdc748SKenneth E. Jansen itpblktot=1 ! hardwired to montopology for now 40d5d2f64dSCameron Smith call phio_readheader(fhandle, 41e5afe575SCameron Smith & c_char_'total number of interior tpblocks' // char(0), 42e5afe575SCameron Smith & c_loc(itpblktot), ione, dataInt, iotype) 4359599516SKenneth E. Jansen 4459599516SKenneth E. Jansen if (itpblktot == -1) then 4559599516SKenneth E. Jansen ! The field 'total number of different interior tpblocks' was not found in the geombc file. 4659599516SKenneth E. Jansen ! Scan all the geombc file for the 'connectivity interior' fields to get this information. 4759599516SKenneth E. Jansen iblk=0 4859599516SKenneth E. Jansen neltp=0 4959599516SKenneth E. Jansen do while(neltp .ne. -1) 5059599516SKenneth E. Jansen 5159599516SKenneth E. Jansen ! intfromfile is reinitialized to -1 every time. 5259599516SKenneth E. Jansen ! If connectivity interior@xxx is not found, then 5359599516SKenneth E. Jansen ! readheader will return intfromfile unchanged 5459599516SKenneth E. Jansen 5559599516SKenneth E. Jansen intfromfile(:)=-1 5659599516SKenneth E. Jansen iblk = iblk+1 572efdc748SKenneth E. Jansen if(nfiles.gt.0) then 58aa9d7345SCameron Smith write (fname2,"('connectivity interior',i1)") iblk 592efdc748SKenneth E. Jansen else 602efdc748SKenneth E. Jansen write (fname2,"('connectivity interior linear tetrahedron')") 612efdc748SKenneth E. Jansen endif 6259599516SKenneth E. Jansen 6359599516SKenneth E. Jansen !write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2)) 64d5d2f64dSCameron Smith call phio_readheader(fhandle, fname2 // char(0), 65e5afe575SCameron Smith & c_loc(intfromfile), iseven, dataInt, iotype) 6659599516SKenneth E. Jansen neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise 6759599516SKenneth E. Jansen end do 6859599516SKenneth E. Jansen itpblktot = iblk-1 6959599516SKenneth E. Jansen end if 7059599516SKenneth E. Jansen 7159599516SKenneth E. Jansen if (myrank == 0) then 7259599516SKenneth E. Jansen write(*,*) 'Number of interior topologies: ',itpblktot 7359599516SKenneth E. Jansen endif 7459599516SKenneth E. Jansen 7559599516SKenneth E. Jansen nelblk=0 7659599516SKenneth E. Jansen mattyp = 0 7759599516SKenneth E. Jansen ndofl = ndof 7859599516SKenneth E. Jansen nsymdl = nsymdf 7959599516SKenneth E. Jansen 8059599516SKenneth E. Jansen do iblk = 1, itpblktot 8159599516SKenneth E. Jansen writeLock=0; 822efdc748SKenneth E. Jansen if(nfiles.gt.0) then 83aa9d7345SCameron Smith write (fname2,"('connectivity interior',i1)") iblk 842efdc748SKenneth E. Jansen else 852efdc748SKenneth E. Jansen write (fname2,"('connectivity interior linear tetrahedron')") 862efdc748SKenneth E. Jansen endif 8759599516SKenneth E. Jansen 8859599516SKenneth E. Jansen ! Synchronization for performance monitoring, as some parts do not include some topologies 8959599516SKenneth E. Jansen call MPI_Barrier(MPI_COMM_WORLD,ierr) 90d5d2f64dSCameron Smith call phio_readheader(fhandle, fname2 // char(0), 91e5afe575SCameron Smith & c_loc(intfromfile), iseven, dataInt, iotype) 9259599516SKenneth E. Jansen neltp =intfromfile(1) 9359599516SKenneth E. Jansen nenl =intfromfile(2) 9459599516SKenneth E. Jansen ipordl =intfromfile(3) 9559599516SKenneth E. Jansen nshl =intfromfile(4) 9659599516SKenneth E. Jansen ijunk =intfromfile(5) 9759599516SKenneth E. Jansen ijunk =intfromfile(6) 9859599516SKenneth E. Jansen lcsyst =intfromfile(7) 9959599516SKenneth E. Jansen allocate (ientp(neltp,nshl)) 10059599516SKenneth E. Jansen iientpsiz=neltp*nshl 10159599516SKenneth E. Jansen 10259599516SKenneth E. Jansen if (neltp==0) then 10359599516SKenneth E. Jansen writeLock=1; 10459599516SKenneth E. Jansen endif 10559599516SKenneth E. Jansen 106d5d2f64dSCameron Smith call phio_readdatablock(fhandle,fname2 // char(0), 107bc62cfd4SCameron Smith & c_loc(ientp), iientpsiz, dataInt, iotype) 10859599516SKenneth E. Jansen 10959599516SKenneth E. Jansen if(writeLock==0) then 11059599516SKenneth E. Jansen do n=1,neltp,ibksz 11159599516SKenneth E. Jansen nelblk=nelblk+1 11259599516SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 11359599516SKenneth E. Jansen lcblk(1,nelblk) = iel 11459599516SKenneth E. Jansen lcblk(3,nelblk) = lcsyst 11559599516SKenneth E. Jansen lcblk(4,nelblk) = ipordl 11659599516SKenneth E. Jansen lcblk(5,nelblk) = nenl 11759599516SKenneth E. Jansen lcblk(6,nelblk) = nfacel 11859599516SKenneth E. Jansen lcblk(7,nelblk) = mattyp 11959599516SKenneth E. Jansen lcblk(8,nelblk) = ndofl 12059599516SKenneth E. Jansen lcblk(9,nelblk) = nsymdl 12159599516SKenneth E. Jansen lcblk(10,nelblk) = nshl ! # of shape functions per elt 12259599516SKenneth E. Jansenc 12359599516SKenneth E. Jansenc.... allocate memory for stack arrays 12459599516SKenneth E. Jansenc 12559599516SKenneth E. Jansen allocate (mmat(nelblk)%p(npro)) 12659599516SKenneth E. Jansenc 12759599516SKenneth E. Jansen allocate (mien(nelblk)%p(npro,nshl)) 12859599516SKenneth E. Jansen allocate (mxmudmi(nelblk)%p(npro,maxsh)) 12959599516SKenneth E. Jansenc 13059599516SKenneth E. Jansenc.... save the element block 13159599516SKenneth E. Jansenc 13259599516SKenneth E. Jansen n1=n 13359599516SKenneth E. Jansen n2=n+npro-1 13459599516SKenneth E. Jansen mater=1 ! all one material for now 13559599516SKenneth E. Jansen call gensav (ientp(n1:n2,1:nshl), 13659599516SKenneth E. Jansen & mater, mien(nelblk)%p, 13759599516SKenneth E. Jansen & mmat(nelblk)%p) 13859599516SKenneth E. Jansen iel=iel+npro 13959599516SKenneth E. Jansen enddo 14059599516SKenneth E. Jansen endif 14159599516SKenneth E. Jansen deallocate(ientp) 14259599516SKenneth E. Jansen enddo 14359599516SKenneth E. Jansen 14459599516SKenneth E. Jansen lcblk(1,nelblk+1) = iel 14559599516SKenneth E. Jansen return 14659599516SKenneth E. Jansen1000 format(a80,//, 14759599516SKenneth E. Jansen & ' N o d a l C o n n e c t i v i t y',//, 14859599516SKenneth E. Jansen & ' Elem ',/, 14959599516SKenneth E. Jansen & ' Number ',7x,27('Node',i2,:,2x)) 15059599516SKenneth E. Jansen1100 format(2x,i5,6x,27i8) 15159599516SKenneth E. Jansen end 152