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 6459599516SKenneth E. Jansen write(temp1, 6559599516SKenneth E. Jansen & "('(''total number of interior tpblocks@'',i',i1,',A1)')") itmp 6659599516SKenneth E. Jansen 6759599516SKenneth E. Jansen write (fname2,temp1) (myrank+1),'?' 68*d1293ce9SCameron Smith call phio_readheader(igeom,fname2 // char(0) ,itpblktot,ione, 6959599516SKenneth E. Jansen & 'integer' // char(0),iotype) 7059599516SKenneth E. Jansen 7159599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' interior itpblktot intermediate:', 7259599516SKenneth E. Jansen! & itpblktot 7359599516SKenneth E. Jansen 7459599516SKenneth E. Jansen if (itpblktot == -1) then 7559599516SKenneth E. Jansen ! The field 'total number of different interior tpblocks' was not found in the geombc file. 7659599516SKenneth E. Jansen ! Scan all the geombc file for the 'connectivity interior' fields to get this information. 7759599516SKenneth E. Jansen iblk=0 7859599516SKenneth E. Jansen neltp=0 7959599516SKenneth E. Jansen do while(neltp .ne. -1) 8059599516SKenneth E. Jansen 8159599516SKenneth E. Jansen ! intfromfile is reinitialized to -1 every time. 8259599516SKenneth E. Jansen ! If connectivity interior@xxx is not found, then 8359599516SKenneth E. Jansen ! readheader will return intfromfile unchanged 8459599516SKenneth E. Jansen 8559599516SKenneth E. Jansen intfromfile(:)=-1 8659599516SKenneth E. Jansen iblk = iblk+1 8759599516SKenneth E. Jansen write (temp1,"('connectivity interior',i1)") iblk 8859599516SKenneth E. Jansen temp1 = trim(temp1) 8959599516SKenneth E. Jansen write (temp3,"('(''@'',i',i1,',A1)')") itmp 9059599516SKenneth E. Jansen write (fname2, temp3) (myrank+1), '?' 9159599516SKenneth E. Jansen fname2 = trim(temp1)//trim(fname2) 9259599516SKenneth E. Jansen 9359599516SKenneth E. Jansen !write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2)) 94*d1293ce9SCameron Smith call phio_readheader(igeom,fname2 // char(0),intfromfile, 9559599516SKenneth E. Jansen & iseven,'integer' // char(0),iotype) 9659599516SKenneth E. Jansen neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise 9759599516SKenneth E. Jansen end do 9859599516SKenneth E. Jansen itpblktot = iblk-1 9959599516SKenneth E. Jansen end if 10059599516SKenneth E. Jansen 10159599516SKenneth E. Jansen if (myrank == 0) then 10259599516SKenneth E. Jansen write(*,*) 'Number of interior topologies: ',itpblktot 10359599516SKenneth E. Jansen endif 10459599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' interior itpblktot final:', 10559599516SKenneth E. Jansen! & itpblktot 10659599516SKenneth E. Jansen 10759599516SKenneth E. Jansen!MR CHANGE END 10859599516SKenneth E. Jansen 10959599516SKenneth E. Jansen nelblk=0 11059599516SKenneth E. Jansen mattyp = 0 11159599516SKenneth E. Jansen ndofl = ndof 11259599516SKenneth E. Jansen nsymdl = nsymdf 11359599516SKenneth E. Jansen 11459599516SKenneth E. Jansen! call initphmpiio( nfields, nppf, nfiles, igeom ) 11559599516SKenneth E. Jansen! call openfile( fnamer, 'read', igeom ) 11659599516SKenneth E. Jansen 11759599516SKenneth E. Jansen! do iblk = 1, itpblk 11859599516SKenneth E. Jansen do iblk = 1, itpblktot 11959599516SKenneth E. Jansen writeLock=0; 12059599516SKenneth E. Jansen!MR CHANGE END 12159599516SKenneth E. Jansenc 12259599516SKenneth E. Jansenc read(igeomBAK) neltp,nenl,ipordl,nshl, ijunk, ijunk, lcsyst 12359599516SKenneth E. Jansenc call creadlist(igeomBAK,iseven, 12459599516SKenneth E. Jansenc & neltp,nenl,ipordl,nshl, ijunk, ijunk, lcsyst) 12559599516SKenneth E. Jansen 12659599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 12759599516SKenneth E. Jansen 12859599516SKenneth E. Jansen write (temp1,"('connectivity interior',i1)") iblk 12959599516SKenneth E. Jansen temp1=trim(temp1) 13059599516SKenneth E. Jansen write (temp3,"('(''@'',i',i1,',A1)')") itmp 13159599516SKenneth E. Jansen write (fname2, temp3) (myrank+1), '?' 13259599516SKenneth E. Jansen fname2 = trim(temp1)//trim(fname2) 13359599516SKenneth E. Jansen 13459599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 13559599516SKenneth E. Jansen 13659599516SKenneth E. Jansenc fname1='connectivity interior?' 13759599516SKenneth E. Jansen 13859599516SKenneth E. Jansen ! Synchronization for performance monitoring, as some parts do not include some topologies 13959599516SKenneth E. Jansen call MPI_Barrier(MPI_COMM_WORLD,ierr) 140*d1293ce9SCameron Smith call phio_readheader(igeom,fname2 // char(0) ,intfromfile, 14159599516SKenneth E. Jansen & iseven,"integer" // char(0), iotype) 14259599516SKenneth E. Jansen neltp =intfromfile(1) 14359599516SKenneth E. Jansen nenl =intfromfile(2) 14459599516SKenneth E. Jansen ipordl =intfromfile(3) 14559599516SKenneth E. Jansen nshl =intfromfile(4) 14659599516SKenneth E. Jansen ijunk =intfromfile(5) 14759599516SKenneth E. Jansen ijunk =intfromfile(6) 14859599516SKenneth E. Jansen lcsyst =intfromfile(7) 14959599516SKenneth E. Jansen allocate (ientp(neltp,nshl)) 15059599516SKenneth E. Jansenc read(igeomBAK) ientp 15159599516SKenneth E. Jansen iientpsiz=neltp*nshl 15259599516SKenneth E. Jansen 15359599516SKenneth E. Jansen if (neltp==0) then 15459599516SKenneth E. Jansen writeLock=1; 15559599516SKenneth E. Jansen endif 15659599516SKenneth E. Jansen 15759599516SKenneth E. Jansen call readdatablock(igeom,fname2 // char(0),ientp,iientpsiz, 15859599516SKenneth E. Jansen & "integer" // char(0), iotype) 15959599516SKenneth E. Jansen 16059599516SKenneth E. Jansen! call closefile( igeom, "read" // char(0) ) 16159599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 16259599516SKenneth E. Jansen 16359599516SKenneth E. Jansen!MR CHANGE 16459599516SKenneth E. Jansen if(writeLock==0) then 16559599516SKenneth E. Jansen!MR CHANGE 16659599516SKenneth E. Jansen 16759599516SKenneth E. Jansen do n=1,neltp,ibksz 16859599516SKenneth E. Jansen nelblk=nelblk+1 16959599516SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 17059599516SKenneth E. Jansenc 17159599516SKenneth E. Jansen lcblk(1,nelblk) = iel 17259599516SKenneth E. Jansenc lcblk(2,nelblk) = iopen ! available for later use 17359599516SKenneth E. Jansen lcblk(3,nelblk) = lcsyst 17459599516SKenneth E. Jansen lcblk(4,nelblk) = ipordl 17559599516SKenneth E. Jansen lcblk(5,nelblk) = nenl 17659599516SKenneth E. Jansen lcblk(6,nelblk) = nfacel 17759599516SKenneth E. Jansen lcblk(7,nelblk) = mattyp 17859599516SKenneth E. Jansen lcblk(8,nelblk) = ndofl 17959599516SKenneth E. Jansen lcblk(9,nelblk) = nsymdl 18059599516SKenneth E. Jansen lcblk(10,nelblk) = nshl ! # of shape functions per elt 18159599516SKenneth E. Jansenc 18259599516SKenneth E. Jansenc.... allocate memory for stack arrays 18359599516SKenneth E. Jansenc 18459599516SKenneth E. Jansen allocate (mmat(nelblk)%p(npro)) 18559599516SKenneth E. Jansenc 18659599516SKenneth E. Jansen allocate (mien(nelblk)%p(npro,nshl)) 18759599516SKenneth E. Jansen allocate (mxmudmi(nelblk)%p(npro,maxsh)) 18859599516SKenneth E. Jansenc 18959599516SKenneth E. Jansenc.... save the element block 19059599516SKenneth E. Jansenc 19159599516SKenneth E. Jansen n1=n 19259599516SKenneth E. Jansen n2=n+npro-1 19359599516SKenneth E. Jansen mater=1 ! all one material for now 19459599516SKenneth E. Jansen call gensav (ientp(n1:n2,1:nshl), 19559599516SKenneth E. Jansen & mater, mien(nelblk)%p, 19659599516SKenneth E. Jansen & mmat(nelblk)%p) 19759599516SKenneth E. Jansen iel=iel+npro 19859599516SKenneth E. Jansenc 19959599516SKenneth E. Jansen enddo 20059599516SKenneth E. Jansen!MR CHANGE 20159599516SKenneth E. Jansen endif 20259599516SKenneth E. Jansen!MR CHANGE 20359599516SKenneth E. Jansen deallocate(ientp) 20459599516SKenneth E. Jansen enddo 20559599516SKenneth E. Jansen 20659599516SKenneth E. Jansen! call closefile( igeom, "read" // char(0) ) 20759599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 20859599516SKenneth E. Jansen 20959599516SKenneth E. Jansen lcblk(1,nelblk+1) = iel 21059599516SKenneth E. Jansenc 21159599516SKenneth E. Jansenc.... return 21259599516SKenneth E. Jansenc 21359599516SKenneth E. JansenCAD call timer ('Back ') 21459599516SKenneth E. Jansenc 21559599516SKenneth E. Jansen return 21659599516SKenneth E. Jansenc 21759599516SKenneth E. Jansen1000 format(a80,//, 21859599516SKenneth E. Jansen & ' N o d a l C o n n e c t i v i t y',//, 21959599516SKenneth E. Jansen & ' Elem ',/, 22059599516SKenneth E. Jansen & ' Number ',7x,27('Node',i2,:,2x)) 22159599516SKenneth E. Jansen1100 format(2x,i5,6x,27i8) 22259599516SKenneth E. Jansen end 223