xref: /phasta/phSolver/common/genbkbPosix.f (revision 0f541e5d26e66cb112f701a63cd9dac73e936f62)
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