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