159599516SKenneth E. Jansen subroutine genbkb (ibksz) 259599516SKenneth E. Jansenc 359599516SKenneth E. Jansenc---------------------------------------------------------------------- 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc This routine reads the boundary elements, reorders them and 659599516SKenneth E. Jansenc generates traces for the gather/scatter operations. 759599516SKenneth E. Jansenc 859599516SKenneth E. Jansenc Zdenek Johan, Fall 1991. 959599516SKenneth E. Jansenc---------------------------------------------------------------------- 1059599516SKenneth E. Jansenc 1159599516SKenneth E. Jansen use dtnmod 1259599516SKenneth E. Jansen use pointer_data 13e5afe575SCameron Smith use phio 14e5afe575SCameron Smith use iso_c_binding 1559599516SKenneth E. Jansenc 1659599516SKenneth E. Jansen include "common.h" 1759599516SKenneth E. Jansen!MR CHANGE 1859599516SKenneth E. Jansen include "mpif.h" !Required to determine the max for itpblk 1959599516SKenneth E. Jansen!MR CHANGE END 2059599516SKenneth E. Jansenc 2159599516SKenneth E. Jansen 2259599516SKenneth E. Jansen integer, allocatable :: ientp(:,:),iBCBtp(:,:) 2359599516SKenneth E. Jansen real*8, allocatable :: BCBtp(:,:) 2459599516SKenneth E. Jansen integer materb(ibksz) 2559599516SKenneth E. Jansen integer intfromfile(50) ! integers read from headers 2659599516SKenneth E. Jansen character*255 fname1 2759599516SKenneth E. Jansen 2859599516SKenneth E. Jansencccccccccccccc New Phasta IO starts here cccccccccccccccccccccccccccccc 2959599516SKenneth E. Jansen 3059599516SKenneth E. Jansen integer :: descriptor, descriptorG, GPID, color, nfiles, nfields 3159599516SKenneth E. Jansen integer :: numparts, nppf, nppp, nprocs, writeLock 3259599516SKenneth E. Jansen integer :: ierr_io, numprocs, itmp, itmp2 3359599516SKenneth E. Jansen! integer :: num_local_loop, num_global_loop 3459599516SKenneth E. Jansen!MR CHANGE 3559599516SKenneth E. Jansen integer :: itpblktot,ierr 3659599516SKenneth E. Jansen!MR CHANGE END 3759599516SKenneth E. Jansen 3859599516SKenneth E. Jansen character*255 fnamer, fname2, temp2 3959599516SKenneth E. Jansen character*64 temp1, temp3 4059599516SKenneth E. Jansen 41e5afe575SCameron Smith type(c_ptr) :: handle 42*bc62cfd4SCameron Smith character(len=30) :: dataInt, dataDbl 43e5afe575SCameron Smith dataInt = c_char_'integer'//c_null_char 44*bc62cfd4SCameron Smith dataDbl = c_char_'double'//c_null_char 45e5afe575SCameron Smith 4659599516SKenneth E. Jansen nfiles = nsynciofiles 4759599516SKenneth E. Jansen nfields = nsynciofieldsreadgeombc 4859599516SKenneth E. Jansen numparts = numpe !This is the common settings. Beware if you try to compute several parts per process 4959599516SKenneth E. Jansen 5059599516SKenneth E. Jansen nppp = numparts/numpe 5159599516SKenneth E. Jansen nppf = numparts/nfiles 5259599516SKenneth E. Jansen 5359599516SKenneth E. Jansen color = int(myrank/(numparts/nfiles)) 5459599516SKenneth E. Jansen itmp2 = int(log10(float(color+1)))+1 5559599516SKenneth E. Jansen write (temp2,"('(''geombc-dat.'',i',i1,')')") itmp2 5659599516SKenneth E. Jansen temp2=trim(temp2) 5759599516SKenneth E. Jansen write (fnamer,temp2) (color+1) 5859599516SKenneth E. Jansen fnamer=trim(fnamer) 5959599516SKenneth E. Jansen 6059599516SKenneth E. Jansen ione=1 6159599516SKenneth E. Jansen itwo=2 6259599516SKenneth E. Jansen ieight=8 6359599516SKenneth E. Jansen ieleven=11 6459599516SKenneth E. Jansen itmp = int(log10(float(myrank+1)))+1 6559599516SKenneth E. Jansen 6659599516SKenneth E. Jansen! num_global_loop = 4 6759599516SKenneth E. Jansen! num_local_loop = nelblb 6859599516SKenneth E. Jansen 6959599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 7059599516SKenneth E. Jansen 7159599516SKenneth E. Jansen iel=1 7259599516SKenneth E. Jansen itpblk=nelblb 7359599516SKenneth E. Jansen 7459599516SKenneth E. Jansen 7559599516SKenneth E. Jansen!MR CHANGE 7659599516SKenneth E. Jansen ! Get the total number of different interior topologies in the whole domain. 7759599516SKenneth E. Jansen ! Try to read from a field. If the field does not exist, scan the geombc file. 7859599516SKenneth E. Jansen itpblktot=-1 79e5afe575SCameron Smith call phio_readheader(handle, 80e5afe575SCameron Smith & c_char_'total number of boundary tpblocks' // char(0), 81e5afe575SCameron Smith & c_loc(itpblktot), ione, dataInt, iotype) 8259599516SKenneth E. Jansen 8359599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' boundary itpblktot intermediate:', 8459599516SKenneth E. Jansen! & itpblktot 8559599516SKenneth E. Jansen 8659599516SKenneth E. Jansen if (itpblktot == -1) then 8759599516SKenneth E. Jansen ! The field 'total number of different boundary tpblocks' was not found in the geombc file. 8859599516SKenneth E. Jansen ! Scan all the geombc file for the 'connectivity interior' fields to get this information. 8959599516SKenneth E. Jansen iblk=0 9059599516SKenneth E. Jansen neltp=0 9159599516SKenneth E. Jansen do while(neltp .ne. -1) 9259599516SKenneth E. Jansen 9359599516SKenneth E. Jansen ! intfromfile is reinitialized to -1 every time. 9459599516SKenneth E. Jansen ! If connectivity boundary@xxx is not found, then 9559599516SKenneth E. Jansen ! readheader will return intfromfile unchanged 9659599516SKenneth E. Jansen 9759599516SKenneth E. Jansen intfromfile(:)=-1 9859599516SKenneth E. Jansen iblk = iblk+1 99e5afe575SCameron Smith call phio_readheader(handle, 100e5afe575SCameron Smith & c_char_'connectivity boundary1' // char(0), 101e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 10259599516SKenneth E. Jansen neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise 10359599516SKenneth E. Jansen end do 10459599516SKenneth E. Jansen itpblktot = iblk-1 10559599516SKenneth E. Jansen end if 10659599516SKenneth E. Jansen 10759599516SKenneth E. Jansen if (myrank == 0) then 10859599516SKenneth E. Jansen write(*,*) 'Number of boundary topologies: ',itpblktot 10959599516SKenneth E. Jansen endif 11059599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' boundary itpblktot final:', 11159599516SKenneth E. Jansen! & itpblktot 11259599516SKenneth E. Jansen 11359599516SKenneth E. Jansen!MR CHANGE END 11459599516SKenneth E. Jansen nelblb=0 11559599516SKenneth E. Jansen mattyp=0 11659599516SKenneth E. Jansen ndofl = ndof 11759599516SKenneth E. Jansen!MR CHANGE 11859599516SKenneth E. Jansen! call initphmpiio( nfields, nppf, nfiles, igeom ) 11959599516SKenneth E. Jansen! call openfile( fnamer, 'read', igeom ) 12059599516SKenneth E. Jansen 12159599516SKenneth E. Jansen do iblk = 1, itpblktot 12259599516SKenneth E. Jansen writeLock=0; 12359599516SKenneth E. Jansen!MR CHANGE END 12459599516SKenneth E. Jansen 12559599516SKenneth E. Jansen 12659599516SKenneth E. Jansen! print *, "Loop ",iblk, myrank, itpblk, trim(fnamer) 12759599516SKenneth E. Jansen 12859599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 12959599516SKenneth E. Jansen! write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2)) 13059599516SKenneth E. Jansen 13159599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 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, 136e5afe575SCameron Smith & c_char_'connectivity boundary1' // char(0), 137e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 13859599516SKenneth E. Jansen neltp =intfromfile(1) 13959599516SKenneth E. Jansen nenl =intfromfile(2) 14059599516SKenneth E. Jansen ipordl=intfromfile(3) 14159599516SKenneth E. Jansen nshl =intfromfile(4) 14259599516SKenneth E. Jansen nshlb =intfromfile(5) 14359599516SKenneth E. Jansen nenbl =intfromfile(6) 14459599516SKenneth E. Jansen lcsyst=intfromfile(7) 14559599516SKenneth E. Jansen numnbc=intfromfile(8) 14659599516SKenneth E. Jansen 14759599516SKenneth E. Jansen!MR CHANGE 14859599516SKenneth E. Jansen! write (temp1,"('connectivityBoundaryHeader_',i1,'_',i1)") 14959599516SKenneth E. Jansen! & iblk,myrank 15059599516SKenneth E. Jansen! temp1=trim(temp1) 15159599516SKenneth E. Jansen! open(unit=14,file=temp1,status='unknown') 15259599516SKenneth E. Jansen! write(14,*) intfromfile(:) 15359599516SKenneth E. Jansen! close(14) 15459599516SKenneth E. Jansen!MR CHANGE END 15559599516SKenneth E. Jansen 15659599516SKenneth E. Jansen allocate (ientp(neltp,nshl)) 15759599516SKenneth E. Jansen allocate (iBCBtp(neltp,ndiBCB)) 15859599516SKenneth E. Jansen allocate (BCBtp(neltp,ndBCB)) 15959599516SKenneth E. Jansen iientpsiz=neltp*nshl 16059599516SKenneth E. Jansen 16159599516SKenneth E. Jansen if (neltp==0) then 16259599516SKenneth E. Jansen writeLock=1; 16359599516SKenneth E. Jansen endif 16459599516SKenneth E. Jansen 16559599516SKenneth E. Jansen! print *, "neltp is ", neltp 16659599516SKenneth E. Jansen 167*bc62cfd4SCameron Smith call phio_readdatablock(handle, 168*bc62cfd4SCameron Smith & c_char_'connectivity boundary1' // char(0), 169*bc62cfd4SCameron Smith & c_loc(ientp),iientpsiz,dataInt,iotype) 17059599516SKenneth E. Jansen 17159599516SKenneth E. Jansen!MR CHANGE 17259599516SKenneth E. Jansen! write (temp1,"('connectivityBoundaryDatablock_',i1,'_',i1)") 17359599516SKenneth E. Jansen! & iblk,myrank 17459599516SKenneth E. Jansen! temp1=trim(temp1) 17559599516SKenneth E. Jansen 17659599516SKenneth E. Jansen! open(unit=14,file=temp1,status='unknown') 17759599516SKenneth E. Jansen! do i=1,neltp 17859599516SKenneth E. Jansen! do j=1,nshl 17959599516SKenneth E. Jansen! write(14,*) ientp(i,j) 18059599516SKenneth E. Jansen! enddo 18159599516SKenneth E. Jansen! enddo 18259599516SKenneth E. Jansen! write(14,*) iientpsiz 18359599516SKenneth E. Jansen! close(14) 18459599516SKenneth E. Jansen!MR CHANGE END 18559599516SKenneth E. Jansen 18659599516SKenneth E. Jansen 18759599516SKenneth E. Jansenc 18859599516SKenneth E. Jansenc.... Read the boundary flux codes 18959599516SKenneth E. Jansenc 19059599516SKenneth E. Jansen 19159599516SKenneth E. Jansen! print *,"connectivity [] is ", trim(fname2),ientp(0,0) 19259599516SKenneth E. Jansen 19359599516SKenneth E. Jansen 19459599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 19559599516SKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD, ierr) 19659599516SKenneth E. Jansen 19759599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 19859599516SKenneth E. Jansen 199e5afe575SCameron Smith call phio_readheader(handle, 200e5afe575SCameron Smith & c_char_'nbc codes1' // char(0), 201e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 20259599516SKenneth E. Jansen iiBCBtpsiz=neltp*ndiBCB 203*bc62cfd4SCameron Smith call phio_readdatablock(handle, 204*bc62cfd4SCameron Smith & c_char_'nbc codes1' // char(0), 205*bc62cfd4SCameron Smith & c_loc(iBCBtp),iiBCBtpsiz,dataInt,iotype) 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen!MR CHANGE 20859599516SKenneth E. Jansen! print *, "ndiBCB is ",ndiBCB 20959599516SKenneth E. Jansen! write (temp1,"('nbcCodesDatablock_',i1,'_',i1)") 21059599516SKenneth E. Jansen! & iblk,myrank 21159599516SKenneth E. Jansen! temp1=trim(temp1) 21259599516SKenneth E. Jansen! 21359599516SKenneth E. Jansen! open(unit=13,file=temp1,status='unknown') 21459599516SKenneth E. Jansen! do i=1,neltp 21559599516SKenneth E. Jansen! do j=1,ndiBCB 21659599516SKenneth E. Jansen! write(13,*) iBCBtp(i,j) 21759599516SKenneth E. Jansen! enddo 21859599516SKenneth E. Jansen! enddo 21959599516SKenneth E. Jansen! write(13,*) iiBCBtpsiz 22059599516SKenneth E. Jansen! close(13) 22159599516SKenneth E. Jansen!! iBCBtp(:,:) = 0 ! JUST FOR TEST 22259599516SKenneth E. Jansen!MR CHANGE END 22359599516SKenneth E. Jansen 22459599516SKenneth E. Jansenc 22559599516SKenneth E. Jansenc.... read the boundary condition data 22659599516SKenneth E. Jansenc 22759599516SKenneth E. Jansen 22859599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 22959599516SKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD, ierr) 23059599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 23159599516SKenneth E. Jansen 232e5afe575SCameron Smith call phio_readheader(handle, 233e5afe575SCameron Smith & c_char_'nbc values1' // char(0), 234e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 23559599516SKenneth E. Jansen BCBtp = zero 23659599516SKenneth E. Jansen iBCBtpsiz=neltp*ndBCB 237*bc62cfd4SCameron Smith call phio_readdatablock(handle, 238*bc62cfd4SCameron Smith & c_char_'nbc values1' // char(0), 239*bc62cfd4SCameron Smith & c_loc(BCBtp),iBCBtpsiz,dataDbl,iotype) 24059599516SKenneth E. Jansen 24159599516SKenneth E. Jansen!MR CHANGE 24259599516SKenneth E. Jansen! write (temp1,"('nbcValuesDatablock_',i1,'_',i1)") 24359599516SKenneth E. Jansen! & iblk,myrank 24459599516SKenneth E. Jansen! temp1=trim(temp1) 24559599516SKenneth E. Jansen! open(unit=12,file=temp1,status='unknown') 24659599516SKenneth E. Jansen! do i=1,neltp 24759599516SKenneth E. Jansen! do j=1,ndBCB 24859599516SKenneth E. Jansen! write(12,*) BCBtp(i,j) 24959599516SKenneth E. Jansen! enddo 25059599516SKenneth E. Jansen! enddo 25159599516SKenneth E. Jansen! write(12,*) iBCBtpsiz 25259599516SKenneth E. Jansen! close(12) 25359599516SKenneth E. Jansen!MR CHANGE END 25459599516SKenneth E. Jansen 25559599516SKenneth E. Jansenc 25659599516SKenneth E. Jansenc This is a temporary fix until NSpre properly zeros this array where it 25759599516SKenneth E. Jansenc is not set. DEC has indigestion with these arrays though the 25859599516SKenneth E. Jansenc result is never used (never effects solution). 25959599516SKenneth E. Jansenc 26059599516SKenneth E. Jansen 26159599516SKenneth E. Jansen 26259599516SKenneth E. Jansen!MR CHANGE 26359599516SKenneth E. Jansen if(writeLock==0) then 26459599516SKenneth E. Jansen!MR CHANGE 26559599516SKenneth E. Jansen! print *,"In ASSIGN ASSIGN",myrank 26659599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),0)) BCBtp(:,1)=zero 26759599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),1)) BCBtp(:,2)=zero 26859599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),3)) BCBtp(:,6)=zero 26959599516SKenneth E. Jansen if(ndBCB.gt.6) then 27059599516SKenneth E. Jansen do i=6,ndof 27159599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),i-1)) BCBtp(:,i+1)=zero 27259599516SKenneth E. Jansen enddo 27359599516SKenneth E. Jansen endif 27459599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),2)) 27559599516SKenneth E. Jansen BCBtp(:,3)=zero 27659599516SKenneth E. Jansen BCBtp(:,4)=zero 27759599516SKenneth E. Jansen BCBtp(:,5)=zero 27859599516SKenneth E. Jansen endwhere 27959599516SKenneth E. Jansen 28059599516SKenneth E. Jansen do n=1,neltp,ibksz 28159599516SKenneth E. Jansen nelblb=nelblb+1 28259599516SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 28359599516SKenneth E. Jansenc 28459599516SKenneth E. Jansen lcblkb(1,nelblb) = iel 28559599516SKenneth E. Jansenc lcblkb(2,nelblb) = iopen ! available for later use 28659599516SKenneth E. Jansen lcblkb(3,nelblb) = lcsyst 28759599516SKenneth E. Jansen lcblkb(4,nelblb) = ipordl 28859599516SKenneth E. Jansen lcblkb(5,nelblb) = nenl 28959599516SKenneth E. Jansen lcblkb(6,nelblb) = nenbl 29059599516SKenneth E. Jansen lcblkb(7,nelblb) = mattyp 29159599516SKenneth E. Jansen lcblkb(8,nelblb) = ndofl 29259599516SKenneth E. Jansen lcblkb(9,nelblb) = nshl 29359599516SKenneth E. Jansen lcblkb(10,nelblb) = nshlb ! # of shape functions per elt 29459599516SKenneth E. Jansenc 29559599516SKenneth E. Jansenc.... save the element block 29659599516SKenneth E. Jansenc 29759599516SKenneth E. Jansen n1=n 29859599516SKenneth E. Jansen n2=n+npro-1 29959599516SKenneth E. Jansen materb=1 ! all one material for now 30059599516SKenneth E. Jansenc 30159599516SKenneth E. Jansenc.... allocate memory for stack arrays 30259599516SKenneth E. Jansenc 30359599516SKenneth E. Jansen 30459599516SKenneth E. Jansen allocate (mienb(nelblb)%p(npro,nshl)) 30559599516SKenneth E. Jansenc 30659599516SKenneth E. Jansen allocate (miBCB(nelblb)%p(npro,ndiBCB)) 30759599516SKenneth E. Jansenc 30859599516SKenneth E. Jansen allocate (mBCB(nelblb)%p(npro,nshlb,ndBCB)) 30959599516SKenneth E. Jansenc 31059599516SKenneth E. Jansen allocate (mmatb(nelblb)%p(npro)) 31159599516SKenneth E. Jansenc 31259599516SKenneth E. Jansenc.... save the boundary element block 31359599516SKenneth E. Jansenc 31459599516SKenneth E. Jansen call gensvb (ientp(n1:n2,1:nshl), 31559599516SKenneth E. Jansen & iBCBtp(n1:n2,:), BCBtp(n1:n2,:), 31659599516SKenneth E. Jansen & materb, mienb(nelblb)%p, 31759599516SKenneth E. Jansen & miBCB(nelblb)%p, mBCB(nelblb)%p, 31859599516SKenneth E. Jansen & mmatb(nelblb)%p) 31959599516SKenneth E. Jansenc 32059599516SKenneth E. Jansen iel=iel+npro 32159599516SKenneth E. Jansen enddo 32259599516SKenneth E. Jansen 32359599516SKenneth E. Jansen!MR CHANGE 32459599516SKenneth E. Jansen endif 32559599516SKenneth E. Jansen!MR CHANGE 32659599516SKenneth E. Jansen deallocate(ientp) 32759599516SKenneth E. Jansen deallocate(iBCBtp) 32859599516SKenneth E. Jansen deallocate(BCBtp) 32959599516SKenneth E. Jansen 33059599516SKenneth E. Jansen enddo 33159599516SKenneth E. Jansen lcblkb(1,nelblb+1) = iel 33259599516SKenneth E. Jansen 33359599516SKenneth E. Jansen! call closefile( igeom, "read" ) 33459599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 33559599516SKenneth E. Jansen 33659599516SKenneth E. Jansenc 33759599516SKenneth E. Jansenc.... return 33859599516SKenneth E. Jansenc 33959599516SKenneth E. Jansen return 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansenc.... end of file error handling 34259599516SKenneth E. Jansenc 34359599516SKenneth E. Jansen 911 call error ('genbcb ','end file',igeomBAK) 34459599516SKenneth E. Jansenc 34559599516SKenneth E. Jansen1000 format(a80,//, 34659599516SKenneth E. Jansen & ' B o u n d a r y E l e m e n t C o n n e c t i v i t y',//, 34759599516SKenneth E. Jansen & ' Elem BC codes',/, 34859599516SKenneth E. Jansen & ' Number C P V H ',5x,27('Node',i1,:,2x)) 34959599516SKenneth E. Jansen1100 format(2x,i5,2x,4i2,3x,27i7) 35059599516SKenneth E. Jansenc$$$2000 format(a80,//, 35159599516SKenneth E. Jansenc$$$ & ' B o u n d a r y E l e m e n t B C D a t a ',//, 35259599516SKenneth E. Jansenc$$$ & ' Node ',3x,'mass',/, 35359599516SKenneth E. Jansenc$$$ & ' Number ',3x,'flux',6x,'Pressure',6x,'Heat',6x, 35459599516SKenneth E. Jansenc$$$ & 3('Viscous',i1,:,4x)) 35559599516SKenneth E. Jansen2100 format(2x,i5,1p,1x,6e12.4) 35659599516SKenneth E. Jansenc 35759599516SKenneth E. Jansen end 35859599516SKenneth E. Jansen 359