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 13*e5afe575SCameron Smith use phio 14*e5afe575SCameron 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 41*e5afe575SCameron Smith type(c_ptr) :: handle 42*e5afe575SCameron Smith character(len=30) :: dataInt 43*e5afe575SCameron Smith dataInt = c_char_'integer'//c_null_char 44*e5afe575SCameron Smith 4559599516SKenneth E. Jansen nfiles = nsynciofiles 4659599516SKenneth E. Jansen nfields = nsynciofieldsreadgeombc 4759599516SKenneth E. Jansen numparts = numpe !This is the common settings. Beware if you try to compute several parts per process 4859599516SKenneth E. Jansen 4959599516SKenneth E. Jansen nppp = numparts/numpe 5059599516SKenneth E. Jansen nppf = numparts/nfiles 5159599516SKenneth E. Jansen 5259599516SKenneth E. Jansen color = int(myrank/(numparts/nfiles)) 5359599516SKenneth E. Jansen itmp2 = int(log10(float(color+1)))+1 5459599516SKenneth E. Jansen write (temp2,"('(''geombc-dat.'',i',i1,')')") itmp2 5559599516SKenneth E. Jansen temp2=trim(temp2) 5659599516SKenneth E. Jansen write (fnamer,temp2) (color+1) 5759599516SKenneth E. Jansen fnamer=trim(fnamer) 5859599516SKenneth E. Jansen 5959599516SKenneth E. Jansen ione=1 6059599516SKenneth E. Jansen itwo=2 6159599516SKenneth E. Jansen ieight=8 6259599516SKenneth E. Jansen ieleven=11 6359599516SKenneth E. Jansen itmp = int(log10(float(myrank+1)))+1 6459599516SKenneth E. Jansen 6559599516SKenneth E. Jansen! num_global_loop = 4 6659599516SKenneth E. Jansen! num_local_loop = nelblb 6759599516SKenneth E. Jansen 6859599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 6959599516SKenneth E. Jansen 7059599516SKenneth E. Jansen iel=1 7159599516SKenneth E. Jansen itpblk=nelblb 7259599516SKenneth E. Jansen 7359599516SKenneth E. Jansen 7459599516SKenneth E. Jansen!MR CHANGE 7559599516SKenneth E. Jansen ! Get the total number of different interior topologies in the whole domain. 7659599516SKenneth E. Jansen ! Try to read from a field. If the field does not exist, scan the geombc file. 7759599516SKenneth E. Jansen itpblktot=-1 78*e5afe575SCameron Smith call phio_readheader(handle, 79*e5afe575SCameron Smith & c_char_'total number of boundary tpblocks' // char(0), 80*e5afe575SCameron Smith & c_loc(itpblktot), ione, dataInt, iotype) 8159599516SKenneth E. Jansen 8259599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' boundary itpblktot intermediate:', 8359599516SKenneth E. Jansen! & itpblktot 8459599516SKenneth E. Jansen 8559599516SKenneth E. Jansen if (itpblktot == -1) then 8659599516SKenneth E. Jansen ! The field 'total number of different boundary tpblocks' was not found in the geombc file. 8759599516SKenneth E. Jansen ! Scan all the geombc file for the 'connectivity interior' fields to get this information. 8859599516SKenneth E. Jansen iblk=0 8959599516SKenneth E. Jansen neltp=0 9059599516SKenneth E. Jansen do while(neltp .ne. -1) 9159599516SKenneth E. Jansen 9259599516SKenneth E. Jansen ! intfromfile is reinitialized to -1 every time. 9359599516SKenneth E. Jansen ! If connectivity boundary@xxx is not found, then 9459599516SKenneth E. Jansen ! readheader will return intfromfile unchanged 9559599516SKenneth E. Jansen 9659599516SKenneth E. Jansen intfromfile(:)=-1 9759599516SKenneth E. Jansen iblk = iblk+1 98*e5afe575SCameron Smith call phio_readheader(handle, 99*e5afe575SCameron Smith & c_char_'connectivity boundary1' // char(0), 100*e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 10159599516SKenneth E. Jansen neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise 10259599516SKenneth E. Jansen end do 10359599516SKenneth E. Jansen itpblktot = iblk-1 10459599516SKenneth E. Jansen end if 10559599516SKenneth E. Jansen 10659599516SKenneth E. Jansen if (myrank == 0) then 10759599516SKenneth E. Jansen write(*,*) 'Number of boundary topologies: ',itpblktot 10859599516SKenneth E. Jansen endif 10959599516SKenneth E. Jansen! write (*,*) 'Rank: ',myrank,' boundary itpblktot final:', 11059599516SKenneth E. Jansen! & itpblktot 11159599516SKenneth E. Jansen 11259599516SKenneth E. Jansen!MR CHANGE END 11359599516SKenneth E. Jansen nelblb=0 11459599516SKenneth E. Jansen mattyp=0 11559599516SKenneth E. Jansen ndofl = ndof 11659599516SKenneth E. Jansen!MR CHANGE 11759599516SKenneth E. Jansen! call initphmpiio( nfields, nppf, nfiles, igeom ) 11859599516SKenneth E. Jansen! call openfile( fnamer, 'read', igeom ) 11959599516SKenneth E. Jansen 12059599516SKenneth E. Jansen do iblk = 1, itpblktot 12159599516SKenneth E. Jansen writeLock=0; 12259599516SKenneth E. Jansen!MR CHANGE END 12359599516SKenneth E. Jansen 12459599516SKenneth E. Jansen 12559599516SKenneth E. Jansen! print *, "Loop ",iblk, myrank, itpblk, trim(fnamer) 12659599516SKenneth E. Jansen 12759599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 12859599516SKenneth E. Jansen! write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2)) 12959599516SKenneth E. Jansen 13059599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 13159599516SKenneth E. Jansen 13259599516SKenneth E. Jansen ! Synchronization for performance monitoring, as some parts do not include some topologies 13359599516SKenneth E. Jansen call MPI_Barrier(MPI_COMM_WORLD,ierr) 134*e5afe575SCameron Smith call phio_readheader(handle, 135*e5afe575SCameron Smith & c_char_'connectivity boundary1' // char(0), 136*e5afe575SCameron Smith & c_loc(intfromfile), ieight, 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 nshlb =intfromfile(5) 14259599516SKenneth E. Jansen nenbl =intfromfile(6) 14359599516SKenneth E. Jansen lcsyst=intfromfile(7) 14459599516SKenneth E. Jansen numnbc=intfromfile(8) 14559599516SKenneth E. Jansen 14659599516SKenneth E. Jansen!MR CHANGE 14759599516SKenneth E. Jansen! write (temp1,"('connectivityBoundaryHeader_',i1,'_',i1)") 14859599516SKenneth E. Jansen! & iblk,myrank 14959599516SKenneth E. Jansen! temp1=trim(temp1) 15059599516SKenneth E. Jansen! open(unit=14,file=temp1,status='unknown') 15159599516SKenneth E. Jansen! write(14,*) intfromfile(:) 15259599516SKenneth E. Jansen! close(14) 15359599516SKenneth E. Jansen!MR CHANGE END 15459599516SKenneth E. Jansen 15559599516SKenneth E. Jansen allocate (ientp(neltp,nshl)) 15659599516SKenneth E. Jansen allocate (iBCBtp(neltp,ndiBCB)) 15759599516SKenneth E. Jansen allocate (BCBtp(neltp,ndBCB)) 15859599516SKenneth E. Jansen iientpsiz=neltp*nshl 15959599516SKenneth E. Jansen 16059599516SKenneth E. Jansen if (neltp==0) then 16159599516SKenneth E. Jansen writeLock=1; 16259599516SKenneth E. Jansen endif 16359599516SKenneth E. Jansen 16459599516SKenneth E. Jansen! print *, "neltp is ", neltp 16559599516SKenneth E. Jansen 166f262839cSCameron Smith call phio_readdatablock(igeom,'connectivity boundary1' // char(0), 167ba1c73e0SCameron Smith & ientp,iientpsiz,'integer' // char(0),iotype) 16859599516SKenneth E. Jansen 16959599516SKenneth E. Jansen!MR CHANGE 17059599516SKenneth E. Jansen! write (temp1,"('connectivityBoundaryDatablock_',i1,'_',i1)") 17159599516SKenneth E. Jansen! & iblk,myrank 17259599516SKenneth E. Jansen! temp1=trim(temp1) 17359599516SKenneth E. Jansen 17459599516SKenneth E. Jansen! open(unit=14,file=temp1,status='unknown') 17559599516SKenneth E. Jansen! do i=1,neltp 17659599516SKenneth E. Jansen! do j=1,nshl 17759599516SKenneth E. Jansen! write(14,*) ientp(i,j) 17859599516SKenneth E. Jansen! enddo 17959599516SKenneth E. Jansen! enddo 18059599516SKenneth E. Jansen! write(14,*) iientpsiz 18159599516SKenneth E. Jansen! close(14) 18259599516SKenneth E. Jansen!MR CHANGE END 18359599516SKenneth E. Jansen 18459599516SKenneth E. Jansen 18559599516SKenneth E. Jansenc 18659599516SKenneth E. Jansenc.... Read the boundary flux codes 18759599516SKenneth E. Jansenc 18859599516SKenneth E. Jansen 18959599516SKenneth E. Jansen! print *,"connectivity [] is ", trim(fname2),ientp(0,0) 19059599516SKenneth E. Jansen 19159599516SKenneth E. Jansen 19259599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 19359599516SKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD, ierr) 19459599516SKenneth E. Jansen 19559599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 19659599516SKenneth E. Jansen 197*e5afe575SCameron Smith call phio_readheader(handle, 198*e5afe575SCameron Smith & c_char_'nbc codes1' // char(0), 199*e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 20059599516SKenneth E. Jansen iiBCBtpsiz=neltp*ndiBCB 201f262839cSCameron Smith call phio_readdatablock(igeom,'nbc codes1' // char(0) ,iBCBtp, 20259599516SKenneth E. Jansen & iiBCBtpsiz,'integer' // char(0),iotype) 20359599516SKenneth E. Jansen 20459599516SKenneth E. Jansen!MR CHANGE 20559599516SKenneth E. Jansen! print *, "ndiBCB is ",ndiBCB 20659599516SKenneth E. Jansen! write (temp1,"('nbcCodesDatablock_',i1,'_',i1)") 20759599516SKenneth E. Jansen! & iblk,myrank 20859599516SKenneth E. Jansen! temp1=trim(temp1) 20959599516SKenneth E. Jansen! 21059599516SKenneth E. Jansen! open(unit=13,file=temp1,status='unknown') 21159599516SKenneth E. Jansen! do i=1,neltp 21259599516SKenneth E. Jansen! do j=1,ndiBCB 21359599516SKenneth E. Jansen! write(13,*) iBCBtp(i,j) 21459599516SKenneth E. Jansen! enddo 21559599516SKenneth E. Jansen! enddo 21659599516SKenneth E. Jansen! write(13,*) iiBCBtpsiz 21759599516SKenneth E. Jansen! close(13) 21859599516SKenneth E. Jansen!! iBCBtp(:,:) = 0 ! JUST FOR TEST 21959599516SKenneth E. Jansen!MR CHANGE END 22059599516SKenneth E. Jansen 22159599516SKenneth E. Jansenc 22259599516SKenneth E. Jansenc.... read the boundary condition data 22359599516SKenneth E. Jansenc 22459599516SKenneth E. Jansen 22559599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 22659599516SKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD, ierr) 22759599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 22859599516SKenneth E. Jansen 229*e5afe575SCameron Smith call phio_readheader(handle, 230*e5afe575SCameron Smith & c_char_'nbc values1' // char(0), 231*e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 23259599516SKenneth E. Jansen BCBtp = zero 23359599516SKenneth E. Jansen iBCBtpsiz=neltp*ndBCB 234f262839cSCameron Smith call phio_readdatablock(igeom,'nbc values1' // char(0), 235ba1c73e0SCameron Smith & BCBtp,iBCBtpsiz,'double' // char(0) ,iotype) 23659599516SKenneth E. Jansen 23759599516SKenneth E. Jansen!MR CHANGE 23859599516SKenneth E. Jansen! write (temp1,"('nbcValuesDatablock_',i1,'_',i1)") 23959599516SKenneth E. Jansen! & iblk,myrank 24059599516SKenneth E. Jansen! temp1=trim(temp1) 24159599516SKenneth E. Jansen! open(unit=12,file=temp1,status='unknown') 24259599516SKenneth E. Jansen! do i=1,neltp 24359599516SKenneth E. Jansen! do j=1,ndBCB 24459599516SKenneth E. Jansen! write(12,*) BCBtp(i,j) 24559599516SKenneth E. Jansen! enddo 24659599516SKenneth E. Jansen! enddo 24759599516SKenneth E. Jansen! write(12,*) iBCBtpsiz 24859599516SKenneth E. Jansen! close(12) 24959599516SKenneth E. Jansen!MR CHANGE END 25059599516SKenneth E. Jansen 25159599516SKenneth E. Jansenc 25259599516SKenneth E. Jansenc This is a temporary fix until NSpre properly zeros this array where it 25359599516SKenneth E. Jansenc is not set. DEC has indigestion with these arrays though the 25459599516SKenneth E. Jansenc result is never used (never effects solution). 25559599516SKenneth E. Jansenc 25659599516SKenneth E. Jansen 25759599516SKenneth E. Jansen 25859599516SKenneth E. Jansen!MR CHANGE 25959599516SKenneth E. Jansen if(writeLock==0) then 26059599516SKenneth E. Jansen!MR CHANGE 26159599516SKenneth E. Jansen! print *,"In ASSIGN ASSIGN",myrank 26259599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),0)) BCBtp(:,1)=zero 26359599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),1)) BCBtp(:,2)=zero 26459599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),3)) BCBtp(:,6)=zero 26559599516SKenneth E. Jansen if(ndBCB.gt.6) then 26659599516SKenneth E. Jansen do i=6,ndof 26759599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),i-1)) BCBtp(:,i+1)=zero 26859599516SKenneth E. Jansen enddo 26959599516SKenneth E. Jansen endif 27059599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),2)) 27159599516SKenneth E. Jansen BCBtp(:,3)=zero 27259599516SKenneth E. Jansen BCBtp(:,4)=zero 27359599516SKenneth E. Jansen BCBtp(:,5)=zero 27459599516SKenneth E. Jansen endwhere 27559599516SKenneth E. Jansen 27659599516SKenneth E. Jansen do n=1,neltp,ibksz 27759599516SKenneth E. Jansen nelblb=nelblb+1 27859599516SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 27959599516SKenneth E. Jansenc 28059599516SKenneth E. Jansen lcblkb(1,nelblb) = iel 28159599516SKenneth E. Jansenc lcblkb(2,nelblb) = iopen ! available for later use 28259599516SKenneth E. Jansen lcblkb(3,nelblb) = lcsyst 28359599516SKenneth E. Jansen lcblkb(4,nelblb) = ipordl 28459599516SKenneth E. Jansen lcblkb(5,nelblb) = nenl 28559599516SKenneth E. Jansen lcblkb(6,nelblb) = nenbl 28659599516SKenneth E. Jansen lcblkb(7,nelblb) = mattyp 28759599516SKenneth E. Jansen lcblkb(8,nelblb) = ndofl 28859599516SKenneth E. Jansen lcblkb(9,nelblb) = nshl 28959599516SKenneth E. Jansen lcblkb(10,nelblb) = nshlb ! # of shape functions per elt 29059599516SKenneth E. Jansenc 29159599516SKenneth E. Jansenc.... save the element block 29259599516SKenneth E. Jansenc 29359599516SKenneth E. Jansen n1=n 29459599516SKenneth E. Jansen n2=n+npro-1 29559599516SKenneth E. Jansen materb=1 ! all one material for now 29659599516SKenneth E. Jansenc 29759599516SKenneth E. Jansenc.... allocate memory for stack arrays 29859599516SKenneth E. Jansenc 29959599516SKenneth E. Jansen 30059599516SKenneth E. Jansen allocate (mienb(nelblb)%p(npro,nshl)) 30159599516SKenneth E. Jansenc 30259599516SKenneth E. Jansen allocate (miBCB(nelblb)%p(npro,ndiBCB)) 30359599516SKenneth E. Jansenc 30459599516SKenneth E. Jansen allocate (mBCB(nelblb)%p(npro,nshlb,ndBCB)) 30559599516SKenneth E. Jansenc 30659599516SKenneth E. Jansen allocate (mmatb(nelblb)%p(npro)) 30759599516SKenneth E. Jansenc 30859599516SKenneth E. Jansenc.... save the boundary element block 30959599516SKenneth E. Jansenc 31059599516SKenneth E. Jansen call gensvb (ientp(n1:n2,1:nshl), 31159599516SKenneth E. Jansen & iBCBtp(n1:n2,:), BCBtp(n1:n2,:), 31259599516SKenneth E. Jansen & materb, mienb(nelblb)%p, 31359599516SKenneth E. Jansen & miBCB(nelblb)%p, mBCB(nelblb)%p, 31459599516SKenneth E. Jansen & mmatb(nelblb)%p) 31559599516SKenneth E. Jansenc 31659599516SKenneth E. Jansen iel=iel+npro 31759599516SKenneth E. Jansen enddo 31859599516SKenneth E. Jansen 31959599516SKenneth E. Jansen!MR CHANGE 32059599516SKenneth E. Jansen endif 32159599516SKenneth E. Jansen!MR CHANGE 32259599516SKenneth E. Jansen deallocate(ientp) 32359599516SKenneth E. Jansen deallocate(iBCBtp) 32459599516SKenneth E. Jansen deallocate(BCBtp) 32559599516SKenneth E. Jansen 32659599516SKenneth E. Jansen enddo 32759599516SKenneth E. Jansen lcblkb(1,nelblb+1) = iel 32859599516SKenneth E. Jansen 32959599516SKenneth E. Jansen! call closefile( igeom, "read" ) 33059599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 33159599516SKenneth E. Jansen 33259599516SKenneth E. Jansenc 33359599516SKenneth E. Jansenc.... return 33459599516SKenneth E. Jansenc 33559599516SKenneth E. Jansen return 33659599516SKenneth E. Jansenc 33759599516SKenneth E. Jansenc.... end of file error handling 33859599516SKenneth E. Jansenc 33959599516SKenneth E. Jansen 911 call error ('genbcb ','end file',igeomBAK) 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansen1000 format(a80,//, 34259599516SKenneth 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',//, 34359599516SKenneth E. Jansen & ' Elem BC codes',/, 34459599516SKenneth E. Jansen & ' Number C P V H ',5x,27('Node',i1,:,2x)) 34559599516SKenneth E. Jansen1100 format(2x,i5,2x,4i2,3x,27i7) 34659599516SKenneth E. Jansenc$$$2000 format(a80,//, 34759599516SKenneth E. Jansenc$$$ & ' B o u n d a r y E l e m e n t B C D a t a ',//, 34859599516SKenneth E. Jansenc$$$ & ' Node ',3x,'mass',/, 34959599516SKenneth E. Jansenc$$$ & ' Number ',3x,'flux',6x,'Pressure',6x,'Heat',6x, 35059599516SKenneth E. Jansenc$$$ & 3('Viscous',i1,:,4x)) 35159599516SKenneth E. Jansen2100 format(2x,i5,1p,1x,6e12.4) 35259599516SKenneth E. Jansenc 35359599516SKenneth E. Jansen end 35459599516SKenneth E. Jansen 355