1*0f541e5dSKenneth E. Jansen subroutine genbkbPosix (ibksz) 29d714148SKenneth E. Jansenc 39d714148SKenneth E. Jansenc---------------------------------------------------------------------- 49d714148SKenneth E. Jansenc 59d714148SKenneth E. Jansenc This routine reads the boundary elements, reorders them and 69d714148SKenneth E. Jansenc generates traces for the gather/scatter operations. 79d714148SKenneth E. Jansenc 89d714148SKenneth E. Jansenc Zdenek Johan, Fall 1991. 99d714148SKenneth E. Jansenc---------------------------------------------------------------------- 109d714148SKenneth E. Jansenc 119d714148SKenneth E. Jansen use dtnmod 129d714148SKenneth E. Jansen use pointer_data 13*0f541e5dSKenneth E. Jansen use phio 14*0f541e5dSKenneth E. Jansen use iso_c_binding 159d714148SKenneth E. Jansen include "common.h" 16*0f541e5dSKenneth E. Jansen include "mpif.h" !Required to determine the max for itpblk 179d714148SKenneth E. Jansen 18*0f541e5dSKenneth E. Jansen integer, target, allocatable :: ientp(:,:),iBCBtp(:,:) 19*0f541e5dSKenneth E. Jansen real*8, target, allocatable :: BCBtp(:,:) 209d714148SKenneth E. Jansen integer materb(ibksz) 21*0f541e5dSKenneth E. Jansen integer, target :: intfromfile(50) ! integers read from headers 229d714148SKenneth E. Jansen character*255 fname1 23*0f541e5dSKenneth E. Jansen integer :: descriptor, descriptorG, GPID, color, nfields 24*0f541e5dSKenneth E. Jansen integer :: numparts, nppp, nprocs, writeLock 25*0f541e5dSKenneth E. Jansen integer :: ierr_io, numprocs, itmp, itmp2 26*0f541e5dSKenneth E. Jansen integer, target :: itpblktot,ierr 27*0f541e5dSKenneth E. Jansen character*255 fname2 28*0f541e5dSKenneth E. Jansen character(len=30) :: dataInt, dataDbl 29*0f541e5dSKenneth E. Jansen dataInt = c_char_'integer'//c_null_char 30*0f541e5dSKenneth E. Jansen dataDbl = c_char_'double'//c_null_char 31*0f541e5dSKenneth E. Jansen 32*0f541e5dSKenneth E. Jansen nfields = nsynciofieldsreadgeombc 33*0f541e5dSKenneth E. Jansen numparts = numpe !This is the common settings. Beware if you try to compute several parts per process 34*0f541e5dSKenneth E. Jansen nppp = numparts/numpe 35*0f541e5dSKenneth E. Jansen ione=1 36*0f541e5dSKenneth E. Jansen itwo=2 37*0f541e5dSKenneth E. Jansen ieight=8 38*0f541e5dSKenneth E. Jansen ieleven=11 39*0f541e5dSKenneth E. Jansen itmp = int(log10(float(myrank+1)))+1 409d714148SKenneth E. Jansen iel=1 419d714148SKenneth E. Jansen itpblk=nelblb 429d714148SKenneth E. Jansen nelblb=0 439d714148SKenneth E. Jansen mattyp=0 449d714148SKenneth E. Jansen ndofl = ndof 459d714148SKenneth E. Jansen do iblk = 1, itpblk 46*0f541e5dSKenneth E. Jansen write (fname2,"('connectivity boundary?')") 47*0f541e5dSKenneth E. Jansen call phio_readheader(fhandle, fname2 // char(0), 48*0f541e5dSKenneth E. Jansen & c_loc(intfromfile), ieight, dataInt, iotype) 499d714148SKenneth E. Jansen neltp =intfromfile(1) 509d714148SKenneth E. Jansen nenl =intfromfile(2) 519d714148SKenneth E. Jansen ipordl=intfromfile(3) 529d714148SKenneth E. Jansen nshl =intfromfile(4) 539d714148SKenneth E. Jansen nshlb =intfromfile(5) 549d714148SKenneth E. Jansen nenbl =intfromfile(6) 559d714148SKenneth E. Jansen lcsyst=intfromfile(7) 569d714148SKenneth E. Jansen numnbc=intfromfile(8) 57*0f541e5dSKenneth E. Jansen 589d714148SKenneth E. Jansen allocate (ientp(neltp,nshl)) 599d714148SKenneth E. Jansen allocate (iBCBtp(neltp,ndiBCB)) 609d714148SKenneth E. Jansen allocate (BCBtp(neltp,ndBCB)) 619d714148SKenneth E. Jansen iientpsiz=neltp*nshl 62*0f541e5dSKenneth E. Jansen 63*0f541e5dSKenneth E. Jansen 64*0f541e5dSKenneth E. Jansen call phio_readdatablock(fhandle, fname2 // char(0), 65*0f541e5dSKenneth E. Jansen & c_loc(ientp),iientpsiz,dataInt,iotype) 669d714148SKenneth E. Jansenc 679d714148SKenneth E. Jansenc.... Read the boundary flux codes 689d714148SKenneth E. Jansenc 69*0f541e5dSKenneth E. Jansen 70*0f541e5dSKenneth E. Jansen write (fname2,"('nbc codes?')") 71*0f541e5dSKenneth E. Jansen 72*0f541e5dSKenneth E. Jansen call phio_readheader(fhandle, fname2 // char(0), 73*0f541e5dSKenneth E. Jansen & c_loc(intfromfile), ieight, dataInt, iotype) 749d714148SKenneth E. Jansen iiBCBtpsiz=neltp*ndiBCB 75*0f541e5dSKenneth E. Jansen call phio_readdatablock(fhandle, fname2 // char(0), 76*0f541e5dSKenneth E. Jansen & c_loc(iBCBtp),iiBCBtpsiz,dataInt,iotype) 779d714148SKenneth E. Jansenc 789d714148SKenneth E. Jansenc.... read the boundary condition data 799d714148SKenneth E. Jansenc 80*0f541e5dSKenneth E. Jansen write (fname2,"('nbc values?')") 81*0f541e5dSKenneth E. Jansen 82*0f541e5dSKenneth E. Jansen call phio_readheader(fhandle, fname2 // char(0), 83*0f541e5dSKenneth E. Jansen & c_loc(intfromfile), ieight, dataInt, iotype) 849d714148SKenneth E. Jansen BCBtp = zero 859d714148SKenneth E. Jansen iBCBtpsiz=neltp*ndBCB 86*0f541e5dSKenneth E. Jansen call phio_readdatablock(fhandle, fname2 // char(0), 87*0f541e5dSKenneth E. Jansen & c_loc(BCBtp),iBCBtpsiz,dataDbl,iotype) 889d714148SKenneth E. Jansenc 899d714148SKenneth E. Jansenc This is a temporary fix until NSpre properly zeros this array where it 909d714148SKenneth E. Jansenc is not set. DEC has indigestion with these arrays though the 919d714148SKenneth E. Jansenc result is never used (never effects solution). 929d714148SKenneth E. Jansenc 939d714148SKenneth E. Jansen 949d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),0)) BCBtp(:,1)=zero 959d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),1)) BCBtp(:,2)=zero 969d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),3)) BCBtp(:,6)=zero 979d714148SKenneth E. Jansen if(ndBCB.gt.6) then 989d714148SKenneth E. Jansen do i=6,ndof 999d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),i-1)) BCBtp(:,i+1)=zero 1009d714148SKenneth E. Jansen enddo 1019d714148SKenneth E. Jansen endif 1029d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),2)) 1039d714148SKenneth E. Jansen BCBtp(:,3)=zero 1049d714148SKenneth E. Jansen BCBtp(:,4)=zero 1059d714148SKenneth E. Jansen BCBtp(:,5)=zero 1069d714148SKenneth E. Jansen endwhere 1079d714148SKenneth E. Jansen 1089d714148SKenneth E. Jansen 1099d714148SKenneth E. Jansen do n=1,neltp,ibksz 1109d714148SKenneth E. Jansen nelblb=nelblb+1 1119d714148SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 1129d714148SKenneth E. Jansenc 1139d714148SKenneth E. Jansen lcblkb(1,nelblb) = iel 1149d714148SKenneth E. Jansenc lcblkb(2,nelblb) = iopen ! available for later use 1159d714148SKenneth E. Jansen lcblkb(3,nelblb) = lcsyst 1169d714148SKenneth E. Jansen lcblkb(4,nelblb) = ipordl 1179d714148SKenneth E. Jansen lcblkb(5,nelblb) = nenl 1189d714148SKenneth E. Jansen lcblkb(6,nelblb) = nenbl 1199d714148SKenneth E. Jansen lcblkb(7,nelblb) = mattyp 1209d714148SKenneth E. Jansen lcblkb(8,nelblb) = ndofl 1219d714148SKenneth E. Jansen lcblkb(9,nelblb) = nshl 1229d714148SKenneth E. Jansen lcblkb(10,nelblb) = nshlb ! # of shape functions per elt 1239d714148SKenneth E. Jansenc 1249d714148SKenneth E. Jansenc.... save the element block 1259d714148SKenneth E. Jansenc 1269d714148SKenneth E. Jansen n1=n 1279d714148SKenneth E. Jansen n2=n+npro-1 1289d714148SKenneth E. Jansen materb=1 ! all one material for now 1299d714148SKenneth E. Jansenc 1309d714148SKenneth E. Jansenc.... allocate memory for stack arrays 1319d714148SKenneth E. Jansenc 1329d714148SKenneth E. Jansen 1339d714148SKenneth E. Jansen allocate (mienb(nelblb)%p(npro,nshl)) 1349d714148SKenneth E. Jansen allocate (miBCB(nelblb)%p(npro,ndiBCB)) 1359d714148SKenneth E. Jansen allocate (mBCB(nelblb)%p(npro,nshlb,ndBCB)) 1369d714148SKenneth E. Jansen allocate (mmatb(nelblb)%p(npro)) 1379d714148SKenneth E. Jansenc 1389d714148SKenneth E. Jansenc.... save the boundary element block 1399d714148SKenneth E. Jansenc 1409d714148SKenneth E. Jansen call gensvb (ientp(n1:n2,1:nshl), 1419d714148SKenneth E. Jansen & iBCBtp(n1:n2,:), BCBtp(n1:n2,:), 1429d714148SKenneth E. Jansen & materb, mienb(nelblb)%p, 1439d714148SKenneth E. Jansen & miBCB(nelblb)%p, mBCB(nelblb)%p, 1449d714148SKenneth E. Jansen & mmatb(nelblb)%p) 1459d714148SKenneth E. Jansenc 1469d714148SKenneth E. Jansen iel=iel+npro 1479d714148SKenneth E. Jansen enddo 1489d714148SKenneth E. Jansen deallocate(ientp) 1499d714148SKenneth E. Jansen deallocate(iBCBtp) 1509d714148SKenneth E. Jansen deallocate(BCBtp) 1519d714148SKenneth E. Jansen enddo 1529d714148SKenneth E. Jansen lcblkb(1,nelblb+1) = iel 1539d714148SKenneth E. Jansen 1549d714148SKenneth E. Jansenc 1559d714148SKenneth E. Jansenc.... return 1569d714148SKenneth E. Jansenc 1579d714148SKenneth E. Jansen return 1589d714148SKenneth E. Jansenc 1599d714148SKenneth E. Jansenc.... end of file error handling 1609d714148SKenneth E. Jansenc 1619d714148SKenneth E. Jansen 911 call error ('genbcb ','end file',igeom) 1629d714148SKenneth E. Jansenc 1639d714148SKenneth E. Jansen1000 format(a80,//, 1649d714148SKenneth 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',//, 1659d714148SKenneth E. Jansen & ' Elem BC codes',/, 1669d714148SKenneth E. Jansen & ' Number C P V H ',5x,27('Node',i1,:,2x)) 1679d714148SKenneth E. Jansen1100 format(2x,i5,2x,4i2,3x,27i7) 1689d714148SKenneth E. Jansenc$$$2000 format(a80,//, 1699d714148SKenneth E. Jansenc$$$ & ' B o u n d a r y E l e m e n t B C D a t a ',//, 1709d714148SKenneth E. Jansenc$$$ & ' Node ',3x,'mass',/, 1719d714148SKenneth E. Jansenc$$$ & ' Number ',3x,'flux',6x,'Pressure',6x,'Heat',6x, 1729d714148SKenneth E. Jansenc$$$ & 3('Viscous',i1,:,4x)) 1739d714148SKenneth E. Jansen2100 format(2x,i5,1p,1x,6e12.4) 1749d714148SKenneth E. Jansenc 1759d714148SKenneth E. Jansen end 1769d714148SKenneth E. Jansen 1779d714148SKenneth E. Jansen 1789d714148SKenneth E. Jansen 1799d714148SKenneth E. Jansen 180