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 22*9a6935e5SKenneth E. Jansen integer, target, allocatable :: ientp(:,:),iBCBtp(:,:) 23*9a6935e5SKenneth E. Jansen real*8, target, allocatable :: BCBtp(:,:) 2459599516SKenneth E. Jansen integer materb(ibksz) 25*9a6935e5SKenneth E. Jansen integer, target :: 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 35*9a6935e5SKenneth E. Jansen integer, target :: 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 41bc62cfd4SCameron Smith character(len=30) :: dataInt, dataDbl 42e5afe575SCameron Smith dataInt = c_char_'integer'//c_null_char 43bc62cfd4SCameron Smith dataDbl = c_char_'double'//c_null_char 44e5afe575SCameron 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 78d5d2f64dSCameron Smith call phio_readheader(fhandle, 79e5afe575SCameron Smith & c_char_'total number of boundary tpblocks' // char(0), 80e5afe575SCameron 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 98d5d2f64dSCameron Smith call phio_readheader(fhandle, 99e5afe575SCameron Smith & c_char_'connectivity boundary1' // char(0), 100e5afe575SCameron 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) 134d5d2f64dSCameron Smith call phio_readheader(fhandle, 135e5afe575SCameron Smith & c_char_'connectivity boundary1' // char(0), 136e5afe575SCameron 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 166d5d2f64dSCameron Smith call phio_readdatablock(fhandle, 167bc62cfd4SCameron Smith & c_char_'connectivity boundary1' // char(0), 168bc62cfd4SCameron Smith & c_loc(ientp),iientpsiz,dataInt,iotype) 16959599516SKenneth E. Jansen 17059599516SKenneth E. Jansen!MR CHANGE 17159599516SKenneth E. Jansen! write (temp1,"('connectivityBoundaryDatablock_',i1,'_',i1)") 17259599516SKenneth E. Jansen! & iblk,myrank 17359599516SKenneth E. Jansen! temp1=trim(temp1) 17459599516SKenneth E. Jansen 17559599516SKenneth E. Jansen! open(unit=14,file=temp1,status='unknown') 17659599516SKenneth E. Jansen! do i=1,neltp 17759599516SKenneth E. Jansen! do j=1,nshl 17859599516SKenneth E. Jansen! write(14,*) ientp(i,j) 17959599516SKenneth E. Jansen! enddo 18059599516SKenneth E. Jansen! enddo 18159599516SKenneth E. Jansen! write(14,*) iientpsiz 18259599516SKenneth E. Jansen! close(14) 18359599516SKenneth E. Jansen!MR CHANGE END 18459599516SKenneth E. Jansen 18559599516SKenneth E. Jansen 18659599516SKenneth E. Jansenc 18759599516SKenneth E. Jansenc.... Read the boundary flux codes 18859599516SKenneth E. Jansenc 18959599516SKenneth E. Jansen 19059599516SKenneth E. Jansen! print *,"connectivity [] is ", trim(fname2),ientp(0,0) 19159599516SKenneth E. Jansen 19259599516SKenneth E. Jansen 19359599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 19459599516SKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD, ierr) 19559599516SKenneth E. Jansen 19659599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 19759599516SKenneth E. Jansen 198d5d2f64dSCameron Smith call phio_readheader(fhandle, 199e5afe575SCameron Smith & c_char_'nbc codes1' // char(0), 200e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 20159599516SKenneth E. Jansen iiBCBtpsiz=neltp*ndiBCB 202d5d2f64dSCameron Smith call phio_readdatablock(fhandle, 203bc62cfd4SCameron Smith & c_char_'nbc codes1' // char(0), 204bc62cfd4SCameron Smith & c_loc(iBCBtp),iiBCBtpsiz,dataInt,iotype) 20559599516SKenneth E. Jansen 20659599516SKenneth E. Jansen!MR CHANGE 20759599516SKenneth E. Jansen! print *, "ndiBCB is ",ndiBCB 20859599516SKenneth E. Jansen! write (temp1,"('nbcCodesDatablock_',i1,'_',i1)") 20959599516SKenneth E. Jansen! & iblk,myrank 21059599516SKenneth E. Jansen! temp1=trim(temp1) 21159599516SKenneth E. Jansen! 21259599516SKenneth E. Jansen! open(unit=13,file=temp1,status='unknown') 21359599516SKenneth E. Jansen! do i=1,neltp 21459599516SKenneth E. Jansen! do j=1,ndiBCB 21559599516SKenneth E. Jansen! write(13,*) iBCBtp(i,j) 21659599516SKenneth E. Jansen! enddo 21759599516SKenneth E. Jansen! enddo 21859599516SKenneth E. Jansen! write(13,*) iiBCBtpsiz 21959599516SKenneth E. Jansen! close(13) 22059599516SKenneth E. Jansen!! iBCBtp(:,:) = 0 ! JUST FOR TEST 22159599516SKenneth E. Jansen!MR CHANGE END 22259599516SKenneth E. Jansen 22359599516SKenneth E. Jansenc 22459599516SKenneth E. Jansenc.... read the boundary condition data 22559599516SKenneth E. Jansenc 22659599516SKenneth E. Jansen 22759599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 22859599516SKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD, ierr) 22959599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 23059599516SKenneth E. Jansen 231d5d2f64dSCameron Smith call phio_readheader(fhandle, 232e5afe575SCameron Smith & c_char_'nbc values1' // char(0), 233e5afe575SCameron Smith & c_loc(intfromfile), ieight, dataInt, iotype) 23459599516SKenneth E. Jansen BCBtp = zero 23559599516SKenneth E. Jansen iBCBtpsiz=neltp*ndBCB 236d5d2f64dSCameron Smith call phio_readdatablock(fhandle, 237bc62cfd4SCameron Smith & c_char_'nbc values1' // char(0), 238bc62cfd4SCameron Smith & c_loc(BCBtp),iBCBtpsiz,dataDbl,iotype) 23959599516SKenneth E. Jansen 24059599516SKenneth E. Jansen!MR CHANGE 24159599516SKenneth E. Jansen! write (temp1,"('nbcValuesDatablock_',i1,'_',i1)") 24259599516SKenneth E. Jansen! & iblk,myrank 24359599516SKenneth E. Jansen! temp1=trim(temp1) 24459599516SKenneth E. Jansen! open(unit=12,file=temp1,status='unknown') 24559599516SKenneth E. Jansen! do i=1,neltp 24659599516SKenneth E. Jansen! do j=1,ndBCB 24759599516SKenneth E. Jansen! write(12,*) BCBtp(i,j) 24859599516SKenneth E. Jansen! enddo 24959599516SKenneth E. Jansen! enddo 25059599516SKenneth E. Jansen! write(12,*) iBCBtpsiz 25159599516SKenneth E. Jansen! close(12) 25259599516SKenneth E. Jansen!MR CHANGE END 25359599516SKenneth E. Jansen 25459599516SKenneth E. Jansenc 25559599516SKenneth E. Jansenc This is a temporary fix until NSpre properly zeros this array where it 25659599516SKenneth E. Jansenc is not set. DEC has indigestion with these arrays though the 25759599516SKenneth E. Jansenc result is never used (never effects solution). 25859599516SKenneth E. Jansenc 25959599516SKenneth E. Jansen 26059599516SKenneth E. Jansen 26159599516SKenneth E. Jansen!MR CHANGE 26259599516SKenneth E. Jansen if(writeLock==0) then 26359599516SKenneth E. Jansen!MR CHANGE 26459599516SKenneth E. Jansen! print *,"In ASSIGN ASSIGN",myrank 26559599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),0)) BCBtp(:,1)=zero 26659599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),1)) BCBtp(:,2)=zero 26759599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),3)) BCBtp(:,6)=zero 26859599516SKenneth E. Jansen if(ndBCB.gt.6) then 26959599516SKenneth E. Jansen do i=6,ndof 27059599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),i-1)) BCBtp(:,i+1)=zero 27159599516SKenneth E. Jansen enddo 27259599516SKenneth E. Jansen endif 27359599516SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),2)) 27459599516SKenneth E. Jansen BCBtp(:,3)=zero 27559599516SKenneth E. Jansen BCBtp(:,4)=zero 27659599516SKenneth E. Jansen BCBtp(:,5)=zero 27759599516SKenneth E. Jansen endwhere 27859599516SKenneth E. Jansen 27959599516SKenneth E. Jansen do n=1,neltp,ibksz 28059599516SKenneth E. Jansen nelblb=nelblb+1 28159599516SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 28259599516SKenneth E. Jansenc 28359599516SKenneth E. Jansen lcblkb(1,nelblb) = iel 28459599516SKenneth E. Jansenc lcblkb(2,nelblb) = iopen ! available for later use 28559599516SKenneth E. Jansen lcblkb(3,nelblb) = lcsyst 28659599516SKenneth E. Jansen lcblkb(4,nelblb) = ipordl 28759599516SKenneth E. Jansen lcblkb(5,nelblb) = nenl 28859599516SKenneth E. Jansen lcblkb(6,nelblb) = nenbl 28959599516SKenneth E. Jansen lcblkb(7,nelblb) = mattyp 29059599516SKenneth E. Jansen lcblkb(8,nelblb) = ndofl 29159599516SKenneth E. Jansen lcblkb(9,nelblb) = nshl 29259599516SKenneth E. Jansen lcblkb(10,nelblb) = nshlb ! # of shape functions per elt 29359599516SKenneth E. Jansenc 29459599516SKenneth E. Jansenc.... save the element block 29559599516SKenneth E. Jansenc 29659599516SKenneth E. Jansen n1=n 29759599516SKenneth E. Jansen n2=n+npro-1 29859599516SKenneth E. Jansen materb=1 ! all one material for now 29959599516SKenneth E. Jansenc 30059599516SKenneth E. Jansenc.... allocate memory for stack arrays 30159599516SKenneth E. Jansenc 30259599516SKenneth E. Jansen 30359599516SKenneth E. Jansen allocate (mienb(nelblb)%p(npro,nshl)) 30459599516SKenneth E. Jansenc 30559599516SKenneth E. Jansen allocate (miBCB(nelblb)%p(npro,ndiBCB)) 30659599516SKenneth E. Jansenc 30759599516SKenneth E. Jansen allocate (mBCB(nelblb)%p(npro,nshlb,ndBCB)) 30859599516SKenneth E. Jansenc 30959599516SKenneth E. Jansen allocate (mmatb(nelblb)%p(npro)) 31059599516SKenneth E. Jansenc 31159599516SKenneth E. Jansenc.... save the boundary element block 31259599516SKenneth E. Jansenc 31359599516SKenneth E. Jansen call gensvb (ientp(n1:n2,1:nshl), 31459599516SKenneth E. Jansen & iBCBtp(n1:n2,:), BCBtp(n1:n2,:), 31559599516SKenneth E. Jansen & materb, mienb(nelblb)%p, 31659599516SKenneth E. Jansen & miBCB(nelblb)%p, mBCB(nelblb)%p, 31759599516SKenneth E. Jansen & mmatb(nelblb)%p) 31859599516SKenneth E. Jansenc 31959599516SKenneth E. Jansen iel=iel+npro 32059599516SKenneth E. Jansen enddo 32159599516SKenneth E. Jansen 32259599516SKenneth E. Jansen!MR CHANGE 32359599516SKenneth E. Jansen endif 32459599516SKenneth E. Jansen!MR CHANGE 32559599516SKenneth E. Jansen deallocate(ientp) 32659599516SKenneth E. Jansen deallocate(iBCBtp) 32759599516SKenneth E. Jansen deallocate(BCBtp) 32859599516SKenneth E. Jansen 32959599516SKenneth E. Jansen enddo 33059599516SKenneth E. Jansen lcblkb(1,nelblb+1) = iel 33159599516SKenneth E. Jansen 33259599516SKenneth E. Jansen! call closefile( igeom, "read" ) 33359599516SKenneth E. Jansen! call finalizephmpiio( igeom ) 33459599516SKenneth E. Jansen 33559599516SKenneth E. Jansenc 33659599516SKenneth E. Jansenc.... return 33759599516SKenneth E. Jansenc 33859599516SKenneth E. Jansen return 33959599516SKenneth E. Jansenc 34059599516SKenneth E. Jansenc.... end of file error handling 34159599516SKenneth E. Jansenc 34259599516SKenneth E. Jansen 911 call error ('genbcb ','end file',igeomBAK) 34359599516SKenneth E. Jansenc 34459599516SKenneth E. Jansen1000 format(a80,//, 34559599516SKenneth 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',//, 34659599516SKenneth E. Jansen & ' Elem BC codes',/, 34759599516SKenneth E. Jansen & ' Number C P V H ',5x,27('Node',i1,:,2x)) 34859599516SKenneth E. Jansen1100 format(2x,i5,2x,4i2,3x,27i7) 34959599516SKenneth E. Jansenc$$$2000 format(a80,//, 35059599516SKenneth E. Jansenc$$$ & ' B o u n d a r y E l e m e n t B C D a t a ',//, 35159599516SKenneth E. Jansenc$$$ & ' Node ',3x,'mass',/, 35259599516SKenneth E. Jansenc$$$ & ' Number ',3x,'flux',6x,'Pressure',6x,'Heat',6x, 35359599516SKenneth E. Jansenc$$$ & 3('Viscous',i1,:,4x)) 35459599516SKenneth E. Jansen2100 format(2x,i5,1p,1x,6e12.4) 35559599516SKenneth E. Jansenc 35659599516SKenneth E. Jansen end 35759599516SKenneth E. Jansen 358