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