1*9d714148SKenneth E. Jansen subroutine genbkb (ibksz) 2*9d714148SKenneth E. Jansenc 3*9d714148SKenneth E. Jansenc---------------------------------------------------------------------- 4*9d714148SKenneth E. Jansenc 5*9d714148SKenneth E. Jansenc This routine reads the boundary elements, reorders them and 6*9d714148SKenneth E. Jansenc generates traces for the gather/scatter operations. 7*9d714148SKenneth E. Jansenc 8*9d714148SKenneth E. Jansenc Zdenek Johan, Fall 1991. 9*9d714148SKenneth E. Jansenc---------------------------------------------------------------------- 10*9d714148SKenneth E. Jansenc 11*9d714148SKenneth E. Jansen use dtnmod 12*9d714148SKenneth E. Jansen use pointer_data 13*9d714148SKenneth E. Jansenc 14*9d714148SKenneth E. Jansen include "common.h" 15*9d714148SKenneth E. Jansenc 16*9d714148SKenneth E. Jansen 17*9d714148SKenneth E. Jansen integer, allocatable :: ientp(:,:),iBCBtp(:,:) 18*9d714148SKenneth E. Jansen real*8, allocatable :: BCBtp(:,:) 19*9d714148SKenneth E. Jansen integer materb(ibksz) 20*9d714148SKenneth E. Jansen integer intfromfile(50) ! integers read from headers 21*9d714148SKenneth E. Jansen character*255 fname1 22*9d714148SKenneth E. Jansen iel=1 23*9d714148SKenneth E. Jansen itpblk=nelblb 24*9d714148SKenneth E. Jansen nelblb=0 25*9d714148SKenneth E. Jansen mattyp=0 26*9d714148SKenneth E. Jansen ndofl = ndof 27*9d714148SKenneth E. Jansen do iblk = 1, itpblk 28*9d714148SKenneth E. Jansen ieight=8 29*9d714148SKenneth E. Jansen fname1='connectivity boundary?' 30*9d714148SKenneth E. Jansen call readheader(igeom,fname1,intfromfile,ieight, 31*9d714148SKenneth E. Jansen & 'integer',iotype) 32*9d714148SKenneth E. Jansen neltp =intfromfile(1) 33*9d714148SKenneth E. Jansen nenl =intfromfile(2) 34*9d714148SKenneth E. Jansen ipordl=intfromfile(3) 35*9d714148SKenneth E. Jansen nshl =intfromfile(4) 36*9d714148SKenneth E. Jansen nshlb =intfromfile(5) 37*9d714148SKenneth E. Jansen nenbl =intfromfile(6) 38*9d714148SKenneth E. Jansen lcsyst=intfromfile(7) 39*9d714148SKenneth E. Jansen numnbc=intfromfile(8) 40*9d714148SKenneth E. Jansenc 41*9d714148SKenneth E. Jansen allocate (ientp(neltp,nshl)) 42*9d714148SKenneth E. Jansen allocate (iBCBtp(neltp,ndiBCB)) 43*9d714148SKenneth E. Jansen allocate (BCBtp(neltp,ndBCB)) 44*9d714148SKenneth E. Jansen iientpsiz=neltp*nshl 45*9d714148SKenneth E. Jansen call readdatablock(igeom,fname1,ientp,iientpsiz, 46*9d714148SKenneth E. Jansen & 'integer',iotype) 47*9d714148SKenneth E. Jansenc 48*9d714148SKenneth E. Jansenc.... Read the boundary flux codes 49*9d714148SKenneth E. Jansenc 50*9d714148SKenneth E. Jansen fname1='nbc codes?' 51*9d714148SKenneth E. Jansen call readheader(igeom,fname1,intfromfile,ieight, 52*9d714148SKenneth E. Jansen & 'integer',iotype) 53*9d714148SKenneth E. Jansen iiBCBtpsiz=neltp*ndiBCB 54*9d714148SKenneth E. Jansen call readdatablock(igeom,fname1,iBCBtp,iiBCBtpsiz, 55*9d714148SKenneth E. Jansen & 'integer',iotype) 56*9d714148SKenneth E. Jansenc 57*9d714148SKenneth E. Jansenc.... read the boundary condition data 58*9d714148SKenneth E. Jansenc 59*9d714148SKenneth E. Jansen fname1='nbc values?' 60*9d714148SKenneth E. Jansen call readheader(igeom,fname1,intfromfile,ieight, 61*9d714148SKenneth E. Jansen & 'integer',iotype) 62*9d714148SKenneth E. Jansen BCBtp = zero 63*9d714148SKenneth E. Jansen iBCBtpsiz=neltp*ndBCB 64*9d714148SKenneth E. Jansen call readdatablock(igeom,fname1,BCBtp,iBCBtpsiz, 65*9d714148SKenneth E. Jansen & 'double',iotype) 66*9d714148SKenneth E. Jansenc 67*9d714148SKenneth E. Jansenc This is a temporary fix until NSpre properly zeros this array where it 68*9d714148SKenneth E. Jansenc is not set. DEC has indigestion with these arrays though the 69*9d714148SKenneth E. Jansenc result is never used (never effects solution). 70*9d714148SKenneth E. Jansenc 71*9d714148SKenneth E. Jansen 72*9d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),0)) BCBtp(:,1)=zero 73*9d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),1)) BCBtp(:,2)=zero 74*9d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),3)) BCBtp(:,6)=zero 75*9d714148SKenneth E. Jansen if(ndBCB.gt.6) then 76*9d714148SKenneth E. Jansen do i=6,ndof 77*9d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),i-1)) BCBtp(:,i+1)=zero 78*9d714148SKenneth E. Jansen enddo 79*9d714148SKenneth E. Jansen endif 80*9d714148SKenneth E. Jansen where(.not.btest(iBCBtp(:,1),2)) 81*9d714148SKenneth E. Jansen BCBtp(:,3)=zero 82*9d714148SKenneth E. Jansen BCBtp(:,4)=zero 83*9d714148SKenneth E. Jansen BCBtp(:,5)=zero 84*9d714148SKenneth E. Jansen endwhere 85*9d714148SKenneth E. Jansen 86*9d714148SKenneth E. Jansen 87*9d714148SKenneth E. Jansen do n=1,neltp,ibksz 88*9d714148SKenneth E. Jansen nelblb=nelblb+1 89*9d714148SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 90*9d714148SKenneth E. Jansenc 91*9d714148SKenneth E. Jansen lcblkb(1,nelblb) = iel 92*9d714148SKenneth E. Jansenc lcblkb(2,nelblb) = iopen ! available for later use 93*9d714148SKenneth E. Jansen lcblkb(3,nelblb) = lcsyst 94*9d714148SKenneth E. Jansen lcblkb(4,nelblb) = ipordl 95*9d714148SKenneth E. Jansen lcblkb(5,nelblb) = nenl 96*9d714148SKenneth E. Jansen lcblkb(6,nelblb) = nenbl 97*9d714148SKenneth E. Jansen lcblkb(7,nelblb) = mattyp 98*9d714148SKenneth E. Jansen lcblkb(8,nelblb) = ndofl 99*9d714148SKenneth E. Jansen lcblkb(9,nelblb) = nshl 100*9d714148SKenneth E. Jansen lcblkb(10,nelblb) = nshlb ! # of shape functions per elt 101*9d714148SKenneth E. Jansenc 102*9d714148SKenneth E. Jansenc.... save the element block 103*9d714148SKenneth E. Jansenc 104*9d714148SKenneth E. Jansen n1=n 105*9d714148SKenneth E. Jansen n2=n+npro-1 106*9d714148SKenneth E. Jansen materb=1 ! all one material for now 107*9d714148SKenneth E. Jansenc 108*9d714148SKenneth E. Jansenc.... allocate memory for stack arrays 109*9d714148SKenneth E. Jansenc 110*9d714148SKenneth E. Jansen 111*9d714148SKenneth E. Jansen allocate (mienb(nelblb)%p(npro,nshl)) 112*9d714148SKenneth E. Jansenc 113*9d714148SKenneth E. Jansen allocate (miBCB(nelblb)%p(npro,ndiBCB)) 114*9d714148SKenneth E. Jansenc 115*9d714148SKenneth E. Jansen allocate (mBCB(nelblb)%p(npro,nshlb,ndBCB)) 116*9d714148SKenneth E. Jansenc 117*9d714148SKenneth E. Jansen allocate (mmatb(nelblb)%p(npro)) 118*9d714148SKenneth E. Jansenc 119*9d714148SKenneth E. Jansenc.... save the boundary element block 120*9d714148SKenneth E. Jansenc 121*9d714148SKenneth E. Jansen call gensvb (ientp(n1:n2,1:nshl), 122*9d714148SKenneth E. Jansen & iBCBtp(n1:n2,:), BCBtp(n1:n2,:), 123*9d714148SKenneth E. Jansen & materb, mienb(nelblb)%p, 124*9d714148SKenneth E. Jansen & miBCB(nelblb)%p, mBCB(nelblb)%p, 125*9d714148SKenneth E. Jansen & mmatb(nelblb)%p) 126*9d714148SKenneth E. Jansenc 127*9d714148SKenneth E. Jansen iel=iel+npro 128*9d714148SKenneth E. Jansen enddo 129*9d714148SKenneth E. Jansen deallocate(ientp) 130*9d714148SKenneth E. Jansen deallocate(iBCBtp) 131*9d714148SKenneth E. Jansen deallocate(BCBtp) 132*9d714148SKenneth E. Jansen enddo 133*9d714148SKenneth E. Jansen lcblkb(1,nelblb+1) = iel 134*9d714148SKenneth E. Jansen 135*9d714148SKenneth E. Jansenc 136*9d714148SKenneth E. Jansenc.... return 137*9d714148SKenneth E. Jansenc 138*9d714148SKenneth E. Jansen return 139*9d714148SKenneth E. Jansenc 140*9d714148SKenneth E. Jansenc.... end of file error handling 141*9d714148SKenneth E. Jansenc 142*9d714148SKenneth E. Jansen 911 call error ('genbcb ','end file',igeom) 143*9d714148SKenneth E. Jansenc 144*9d714148SKenneth E. Jansen1000 format(a80,//, 145*9d714148SKenneth 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',//, 146*9d714148SKenneth E. Jansen & ' Elem BC codes',/, 147*9d714148SKenneth E. Jansen & ' Number C P V H ',5x,27('Node',i1,:,2x)) 148*9d714148SKenneth E. Jansen1100 format(2x,i5,2x,4i2,3x,27i7) 149*9d714148SKenneth E. Jansenc$$$2000 format(a80,//, 150*9d714148SKenneth E. Jansenc$$$ & ' B o u n d a r y E l e m e n t B C D a t a ',//, 151*9d714148SKenneth E. Jansenc$$$ & ' Node ',3x,'mass',/, 152*9d714148SKenneth E. Jansenc$$$ & ' Number ',3x,'flux',6x,'Pressure',6x,'Heat',6x, 153*9d714148SKenneth E. Jansenc$$$ & 3('Viscous',i1,:,4x)) 154*9d714148SKenneth E. Jansen2100 format(2x,i5,1p,1x,6e12.4) 155*9d714148SKenneth E. Jansenc 156*9d714148SKenneth E. Jansen end 157*9d714148SKenneth E. Jansen 158*9d714148SKenneth E. Jansen 159*9d714148SKenneth E. Jansen 160*9d714148SKenneth E. Jansen 161