xref: /phasta/phSolver/compressible/bc3bdg.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine bc3BDg (y,  iBC,  BC, BDiag, iper, ilwork)
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc----------------------------------------------------------------------
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc This routine satisfies the BC of the block-diagonal preconditioning
6*59599516SKenneth E. Jansenc   matrix for 3D elements.
7*59599516SKenneth E. Jansenc
8*59599516SKenneth E. Jansenc input:
9*59599516SKenneth E. Jansenc  y      (nshg,ndof)   : Y variables
10*59599516SKenneth E. Jansenc  iBC    (nshg)        : boundary condition code
11*59599516SKenneth E. Jansenc  BC     (nshg,ndofBC) : Dirichlet BC constraint parameters
12*59599516SKenneth E. Jansenc  BDiag   (nshg,nflow,nflow) : preconditionning matrix before BC
13*59599516SKenneth E. Jansenc                          (only upper part)
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc output:
16*59599516SKenneth E. Jansenc  BDiag   (nshg,nflow,nflow) : preconditionning matrix after BC
17*59599516SKenneth E. Jansenc                          is satisfied
18*59599516SKenneth E. Jansenc
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from g3bce.f)
21*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
22*59599516SKenneth E. Jansenc----------------------------------------------------------------------
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansen        include "common.h"
25*59599516SKenneth E. Jansenc
26*59599516SKenneth E. Jansen        dimension y(nshg,ndof),             iBC(nshg),
27*59599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
28*59599516SKenneth E. Jansen     &            BDiag(nshg,nflow,nflow),        ilwork(nlwork),
29*59599516SKenneth E. Jansen     &            iper(nshg)
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansen        real*8 a5(nshg)
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansenc.... density
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansen          do i = 1, nshg
36*59599516SKenneth E. Jansen             a5(i) = - y(i,5) * (Rgas * gamma / gamma1) !IDEAL GAS ASSUMED
37*59599516SKenneth E. Jansen          end do
38*59599516SKenneth E. Jansen
39*59599516SKenneth E. Jansen        where (btest(iBC,0))
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansenc.... engbc was replaced for a5 by following
42*59599516SKenneth E. Jansen
43*59599516SKenneth E. Jansen          BDiag(:,5,5) = BDiag(:,5,5) + a5 * a5 * BDiag(:,1,1) +
44*59599516SKenneth E. Jansen     &                                       a5 * BDiag(:,1,5) +
45*59599516SKenneth E. Jansen     &                                       a5 * BDiag(:,5,1)
46*59599516SKenneth E. Jansen          BDiag(:,4,5) = BDiag(:,4,5) +  a5 * BDiag(:,4,1)
47*59599516SKenneth E. Jansen          BDiag(:,3,5) = BDiag(:,3,5) +  a5 * BDiag(:,3,1)
48*59599516SKenneth E. Jansen          BDiag(:,2,5) = BDiag(:,2,5) +  a5 * BDiag(:,2,1)
49*59599516SKenneth E. Jansen          BDiag(:,5,4) = BDiag(:,5,4) +  a5 * BDiag(:,1,4)
50*59599516SKenneth E. Jansen          BDiag(:,5,3) = BDiag(:,5,3) +  a5 * BDiag(:,1,3)
51*59599516SKenneth E. Jansen          BDiag(:,5,2) = BDiag(:,5,2) +  a5 * BDiag(:,1,2)
52*59599516SKenneth E. Jansen          BDiag(:,1,2) = zero
53*59599516SKenneth E. Jansen          BDiag(:,1,3) = zero
54*59599516SKenneth E. Jansen          BDiag(:,1,4) = zero
55*59599516SKenneth E. Jansen          BDiag(:,1,5) = zero
56*59599516SKenneth E. Jansen          BDiag(:,2,1) = zero
57*59599516SKenneth E. Jansen          BDiag(:,3,1) = zero
58*59599516SKenneth E. Jansen          BDiag(:,4,1) = zero
59*59599516SKenneth E. Jansen          BDiag(:,5,1) = zero
60*59599516SKenneth E. Jansen          BDiag(:,1,1) = one
61*59599516SKenneth E. Jansen        endwhere
62*59599516SKenneth E. Jansen
63*59599516SKenneth E. Jansenc       where (btest(iBC,11)) ! pressure  to deactivate
64*59599516SKenneth E. Jansen        where (btest(iBC,2)) ! pressure
65*59599516SKenneth E. Jansen
66*59599516SKenneth E. Jansen          BDiag(:,1,2) = zero
67*59599516SKenneth E. Jansen          BDiag(:,1,3) = zero
68*59599516SKenneth E. Jansen          BDiag(:,1,4) = zero
69*59599516SKenneth E. Jansen          BDiag(:,1,5) = zero
70*59599516SKenneth E. Jansen          BDiag(:,2,1) = zero
71*59599516SKenneth E. Jansen          BDiag(:,3,1) = zero
72*59599516SKenneth E. Jansen          BDiag(:,4,1) = zero
73*59599516SKenneth E. Jansen          BDiag(:,5,1) = zero
74*59599516SKenneth E. Jansen          BDiag(:,1,1) = one
75*59599516SKenneth E. Jansen        endwhere
76*59599516SKenneth E. Jansen
77*59599516SKenneth E. Jansenc
78*59599516SKenneth E. Jansenc.... velocities
79*59599516SKenneth E. Jansenc
80*59599516SKenneth E. Jansenc.... x1-velocity
81*59599516SKenneth E. Jansenc
82*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 1)
83*59599516SKenneth E. Jansen          BDiag(:,5,4) = BDiag(:,5,4) - BC(:,5) * BDiag(:,5,2)
84*59599516SKenneth E. Jansen          BDiag(:,5,3) = BDiag(:,5,3) - BC(:,4) * BDiag(:,5,2)
85*59599516SKenneth E. Jansen
86*59599516SKenneth E. Jansen          BDiag(:,4,5) = BDiag(:,4,5) - BC(:,5) * BDiag(:,2,5)
87*59599516SKenneth E. Jansen          BDiag(:,3,5) = BDiag(:,3,5) - BC(:,4) * BDiag(:,2,5)
88*59599516SKenneth E. Jansen
89*59599516SKenneth E. Jansen          BDiag(:,4,1) = BDiag(:,4,1) - BC(:,5) * BDiag(:,2,1)
90*59599516SKenneth E. Jansen          BDiag(:,3,1) = BDiag(:,3,1) - BC(:,4) * BDiag(:,2,1)
91*59599516SKenneth E. Jansen
92*59599516SKenneth E. Jansen          BDiag(:,1,4) = BDiag(:,1,4) - BC(:,5) * BDiag(:,1,2)
93*59599516SKenneth E. Jansen          BDiag(:,1,3) = BDiag(:,1,3) - BC(:,4) * BDiag(:,1,2)
94*59599516SKenneth E. Jansen
95*59599516SKenneth E. Jansen          BDiag(:,4,4) = BDiag(:,4,4) + BC(:,5) * BC(:,5) * BDiag(:,2,2)
96*59599516SKenneth E. Jansen     &                                -           BC(:,5) * BDiag(:,2,4)
97*59599516SKenneth E. Jansen     &                                -           BC(:,5) * BDiag(:,4,2)
98*59599516SKenneth E. Jansen          BDiag(:,3,4) = BDiag(:,3,4) + BC(:,4) * BC(:,5) * BDiag(:,2,2)
99*59599516SKenneth E. Jansen     &                                -           BC(:,5) * BDiag(:,3,2)
100*59599516SKenneth E. Jansen     &                                -           BC(:,4) * BDiag(:,2,4)
101*59599516SKenneth E. Jansen          BDiag(:,4,3) = BDiag(:,4,3) + BC(:,4) * BC(:,5) * BDiag(:,2,2)
102*59599516SKenneth E. Jansen     &                                -           BC(:,5) * BDiag(:,2,3)
103*59599516SKenneth E. Jansen     &                                -           BC(:,4) * BDiag(:,4,2)
104*59599516SKenneth E. Jansen          BDiag(:,3,3) = BDiag(:,3,3) + BC(:,4) * BC(:,4) * BDiag(:,2,2)
105*59599516SKenneth E. Jansen     &                                -           BC(:,4) * BDiag(:,2,3)
106*59599516SKenneth E. Jansen     &                                -           BC(:,4) * BDiag(:,3,2)
107*59599516SKenneth E. Jansen          BDiag(:,2,1) = zero
108*59599516SKenneth E. Jansen          BDiag(:,1,2) = zero
109*59599516SKenneth E. Jansen          BDiag(:,2,3) = zero
110*59599516SKenneth E. Jansen          BDiag(:,2,4) = zero
111*59599516SKenneth E. Jansen          BDiag(:,2,5) = zero
112*59599516SKenneth E. Jansen          BDiag(:,3,2) = zero
113*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
114*59599516SKenneth E. Jansen          BDiag(:,5,2) = zero
115*59599516SKenneth E. Jansen          BDiag(:,2,2) = one
116*59599516SKenneth E. Jansen        endwhere
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansenc.... x2-velocity
119*59599516SKenneth E. Jansenc
120*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 2)
121*59599516SKenneth E. Jansen          BDiag(:,5,4) = BDiag(:,5,4) - BC(:,5) * BDiag(:,5,3)
122*59599516SKenneth E. Jansen          BDiag(:,5,2) = BDiag(:,5,2) - BC(:,4) * BDiag(:,5,3)
123*59599516SKenneth E. Jansen
124*59599516SKenneth E. Jansen          BDiag(:,4,5) = BDiag(:,4,5) - BC(:,5) * BDiag(:,3,5)
125*59599516SKenneth E. Jansen          BDiag(:,2,5) = BDiag(:,2,5) - BC(:,4) * BDiag(:,3,5)
126*59599516SKenneth E. Jansen
127*59599516SKenneth E. Jansen          BDiag(:,4,1) = BDiag(:,4,1) - BC(:,5) * BDiag(:,3,1)
128*59599516SKenneth E. Jansen          BDiag(:,2,1) = BDiag(:,2,1) - BC(:,4) * BDiag(:,3,1)
129*59599516SKenneth E. Jansen
130*59599516SKenneth E. Jansen          BDiag(:,1,4) = BDiag(:,1,4) - BC(:,5) * BDiag(:,1,3)
131*59599516SKenneth E. Jansen          BDiag(:,1,2) = BDiag(:,1,2) - BC(:,4) * BDiag(:,1,3)
132*59599516SKenneth E. Jansen
133*59599516SKenneth E. Jansen          BDiag(:,4,4) = BDiag(:,4,4) + BC(:,5) * BC(:,5) * BDiag(:,3,3)
134*59599516SKenneth E. Jansen     &                                -           BC(:,5) * BDiag(:,3,4)
135*59599516SKenneth E. Jansen     &                                -           BC(:,5) * BDiag(:,4,3)
136*59599516SKenneth E. Jansen          BDiag(:,2,4) = BDiag(:,2,4) + BC(:,4) * BC(:,5) * BDiag(:,3,3)
137*59599516SKenneth E. Jansen     &                                - 	  BC(:,5) * BDiag(:,2,3)
138*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,3,4)
139*59599516SKenneth E. Jansen          BDiag(:,4,2) = BDiag(:,4,2) + BC(:,4) * BC(:,5) * BDiag(:,3,3)
140*59599516SKenneth E. Jansen     &                                - 	  BC(:,5) * BDiag(:,3,2)
141*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,4,3)
142*59599516SKenneth E. Jansen          BDiag(:,2,2) = BDiag(:,2,2) + BC(:,4) * BC(:,4) * BDiag(:,3,3)
143*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,2,3)
144*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,3,2)
145*59599516SKenneth E. Jansen          BDiag(:,3,1) = zero
146*59599516SKenneth E. Jansen          BDiag(:,3,2) = zero
147*59599516SKenneth E. Jansen          BDiag(:,3,4) = zero
148*59599516SKenneth E. Jansen          BDiag(:,3,5) = zero
149*59599516SKenneth E. Jansen          BDiag(:,1,3) = zero
150*59599516SKenneth E. Jansen          BDiag(:,2,3) = zero
151*59599516SKenneth E. Jansen          BDiag(:,4,3) = zero
152*59599516SKenneth E. Jansen          BDiag(:,5,3) = zero
153*59599516SKenneth E. Jansen          BDiag(:,3,3) = one
154*59599516SKenneth E. Jansen        endwhere
155*59599516SKenneth E. Jansenc
156*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity
157*59599516SKenneth E. Jansenc
158*59599516SKenneth E. Jansen      where (ibits(iBC,3,3) .eq. 3)
159*59599516SKenneth E. Jansen      BDiag(:,4,4) = BDiag(:,4,4) + BC(:,4) * BC(:,4) * BDiag(:,2,2)
160*59599516SKenneth E. Jansen     &                            + BC(:,6) * BC(:,6) * BDiag(:,3,3)
161*59599516SKenneth E. Jansen     &           + BC(:,4) * BC(:,6) * ( BDiag(:,2,3) * BDiag(:,3,2))
162*59599516SKenneth E. Jansen     &           -           BC(:,6) * ( BDiag(:,4,3) * BDiag(:,3,4))
163*59599516SKenneth E. Jansen     &           -           BC(:,4) * ( BDiag(:,4,2) * BDiag(:,2,4))
164*59599516SKenneth E. Jansen      BDiag(:,1,4) = BDiag(:,1,4) -           BC(:,4) * BDiag(:,1,2)
165*59599516SKenneth E. Jansen     &                            -           BC(:,6) * BDiag(:,1,3)
166*59599516SKenneth E. Jansen      BDiag(:,4,1) = BDiag(:,4,1) -           BC(:,4) * BDiag(:,2,1)
167*59599516SKenneth E. Jansen     &                            -           BC(:,6) * BDiag(:,3,1)
168*59599516SKenneth E. Jansen      BDiag(:,5,4) = BDiag(:,5,4) -           BC(:,4) * BDiag(:,5,2)
169*59599516SKenneth E. Jansen     &                            -           BC(:,6) * BDiag(:,5,3)
170*59599516SKenneth E. Jansen      BDiag(:,4,5) = BDiag(:,4,5) -           BC(:,4) * BDiag(:,2,5)
171*59599516SKenneth E. Jansen     &                            -           BC(:,6) * BDiag(:,3,5)
172*59599516SKenneth E. Jansen          BDiag(:,2,1) = zero
173*59599516SKenneth E. Jansen          BDiag(:,2,3) = zero
174*59599516SKenneth E. Jansen          BDiag(:,2,4) = zero
175*59599516SKenneth E. Jansen          BDiag(:,2,5) = zero
176*59599516SKenneth E. Jansen          BDiag(:,3,1) = zero
177*59599516SKenneth E. Jansen          BDiag(:,3,2) = zero
178*59599516SKenneth E. Jansen          BDiag(:,3,4) = zero
179*59599516SKenneth E. Jansen          BDiag(:,3,5) = zero
180*59599516SKenneth E. Jansen          BDiag(:,1,2) = zero
181*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
182*59599516SKenneth E. Jansen          BDiag(:,5,2) = zero
183*59599516SKenneth E. Jansen          BDiag(:,1,3) = zero
184*59599516SKenneth E. Jansen          BDiag(:,4,3) = zero
185*59599516SKenneth E. Jansen          BDiag(:,5,3) = zero
186*59599516SKenneth E. Jansen          BDiag(:,3,3) = one
187*59599516SKenneth E. Jansen          BDiag(:,2,2) = one
188*59599516SKenneth E. Jansen        endwhere
189*59599516SKenneth E. Jansenc
190*59599516SKenneth E. Jansenc.... x3-velocity
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 4)
193*59599516SKenneth E. Jansen          BDiag(:,5,3) = BDiag(:,5,3) - BC(:,5) * BDiag(:,5,4)
194*59599516SKenneth E. Jansen          BDiag(:,5,2) = BDiag(:,5,2) - BC(:,4) * BDiag(:,5,4)
195*59599516SKenneth E. Jansen
196*59599516SKenneth E. Jansen          BDiag(:,3,5) = BDiag(:,3,5) - BC(:,5) * BDiag(:,4,5)
197*59599516SKenneth E. Jansen          BDiag(:,2,5) = BDiag(:,2,5) - BC(:,4) * BDiag(:,4,5)
198*59599516SKenneth E. Jansen
199*59599516SKenneth E. Jansen          BDiag(:,3,1) = BDiag(:,3,1) - BC(:,5) * BDiag(:,4,1)
200*59599516SKenneth E. Jansen          BDiag(:,2,1) = BDiag(:,2,1) - BC(:,4) * BDiag(:,4,1)
201*59599516SKenneth E. Jansen
202*59599516SKenneth E. Jansen          BDiag(:,1,3) = BDiag(:,1,3) - BC(:,5) * BDiag(:,1,4)
203*59599516SKenneth E. Jansen          BDiag(:,1,2) = BDiag(:,1,2) - BC(:,4) * BDiag(:,1,4)
204*59599516SKenneth E. Jansen
205*59599516SKenneth E. Jansen          BDiag(:,3,3) = BDiag(:,3,3) + BC(:,5) * BC(:,5) * BDiag(:,4,4)
206*59599516SKenneth E. Jansen     &                                - 	  BC(:,5) * BDiag(:,3,4)
207*59599516SKenneth E. Jansen     &                                - 	  BC(:,5) * BDiag(:,4,3)
208*59599516SKenneth E. Jansen          BDiag(:,2,3) = BDiag(:,2,3) + BC(:,4) * BC(:,5) * BDiag(:,4,4)
209*59599516SKenneth E. Jansen     &                                - 	  BC(:,5) * BDiag(:,2,4)
210*59599516SKenneth E. Jansen     &                                -	          BC(:,4) * BDiag(:,4,3)
211*59599516SKenneth E. Jansen          BDiag(:,3,2) = BDiag(:,3,2) + BC(:,4) * BC(:,5) * BDiag(:,4,4)
212*59599516SKenneth E. Jansen     &                                -   	  BC(:,5) * BDiag(:,4,2)
213*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,3,4)
214*59599516SKenneth E. Jansen          BDiag(:,2,2) = BDiag(:,2,2) + BC(:,4) * BC(:,4) * BDiag(:,4,4)
215*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,2,4)
216*59599516SKenneth E. Jansen     &                                - 	  BC(:,4) * BDiag(:,4,2)
217*59599516SKenneth E. Jansen          BDiag(:,4,1) = zero
218*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
219*59599516SKenneth E. Jansen          BDiag(:,4,3) = zero
220*59599516SKenneth E. Jansen          BDiag(:,4,5) = zero
221*59599516SKenneth E. Jansen          BDiag(:,1,4) = zero
222*59599516SKenneth E. Jansen          BDiag(:,2,4) = zero
223*59599516SKenneth E. Jansen          BDiag(:,3,4) = zero
224*59599516SKenneth E. Jansen          BDiag(:,5,4) = zero
225*59599516SKenneth E. Jansen          BDiag(:,4,4) = one
226*59599516SKenneth E. Jansen        endwhere
227*59599516SKenneth E. Jansenc
228*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity
229*59599516SKenneth E. Jansenc
230*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 5)
231*59599516SKenneth E. Jansen          BDiag(:,3,3) = BDiag(:,3,3) + BC(:,4) * BC(:,4) * BDiag(:,2,2)
232*59599516SKenneth E. Jansen     &                                + BC(:,6) * BC(:,6) * BDiag(:,4,4)
233*59599516SKenneth E. Jansen     &                + BC(:,4) * BC(:,6) *(BDiag(:,2,4) + BDiag(:,4,2))
234*59599516SKenneth E. Jansen     &                -           BC(:,4) *(BDiag(:,2,3) + BDiag(:,3,2))
235*59599516SKenneth E. Jansen     &                -           BC(:,6) *(BDiag(:,4,3) + BDiag(:,3,4))
236*59599516SKenneth E. Jansen          BDiag(:,1,3) = BDiag(:,1,3) -           BC(:,4) * BDiag(:,1,2)
237*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,1,4)
238*59599516SKenneth E. Jansen          BDiag(:,3,1) = BDiag(:,3,1) -           BC(:,4) * BDiag(:,2,1)
239*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,4,1)
240*59599516SKenneth E. Jansen          BDiag(:,5,3) = BDiag(:,5,3) -           BC(:,4) * BDiag(:,5,2)
241*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,5,4)
242*59599516SKenneth E. Jansen          BDiag(:,3,5) = BDiag(:,3,5) -           BC(:,4) * BDiag(:,2,5)
243*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,4,5)
244*59599516SKenneth E. Jansen          BDiag(:,2,1) = zero
245*59599516SKenneth E. Jansen          BDiag(:,2,3) = zero
246*59599516SKenneth E. Jansen          BDiag(:,2,4) = zero
247*59599516SKenneth E. Jansen          BDiag(:,2,5) = zero
248*59599516SKenneth E. Jansen          BDiag(:,4,1) = zero
249*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
250*59599516SKenneth E. Jansen          BDiag(:,4,3) = zero
251*59599516SKenneth E. Jansen          BDiag(:,4,5) = zero
252*59599516SKenneth E. Jansen          BDiag(:,1,2) = zero
253*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
254*59599516SKenneth E. Jansen          BDiag(:,5,2) = zero
255*59599516SKenneth E. Jansen          BDiag(:,1,4) = zero
256*59599516SKenneth E. Jansen          BDiag(:,3,4) = zero
257*59599516SKenneth E. Jansen          BDiag(:,5,4) = zero
258*59599516SKenneth E. Jansen          BDiag(:,4,4) = one
259*59599516SKenneth E. Jansen          BDiag(:,2,2) = one
260*59599516SKenneth E. Jansen        endwhere
261*59599516SKenneth E. Jansenc
262*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity
263*59599516SKenneth E. Jansenc
264*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 6)
265*59599516SKenneth E. Jansen          BDiag(:,2,2) = BDiag(:,2,2) + BC(:,4) * BC(:,4) * BDiag(:,3,3)
266*59599516SKenneth E. Jansen     &                                + BC(:,6) * BC(:,6) * BDiag(:,4,4)
267*59599516SKenneth E. Jansen     &               + BC(:,4) * BC(:,6) * (BDiag(:,3,4) + BDiag(:,4,3))
268*59599516SKenneth E. Jansen     &               -            BC(:,4) *(BDiag(:,2,3) + BDiag(:,3,2))
269*59599516SKenneth E. Jansen     &               -            BC(:,6) *(BDiag(:,4,2) + BDiag(:,2,4))
270*59599516SKenneth E. Jansen          BDiag(:,1,2) = BDiag(:,1,2) -           BC(:,4) * BDiag(:,1,3)
271*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,1,4)
272*59599516SKenneth E. Jansen          BDiag(:,2,1) = BDiag(:,2,1) -           BC(:,4) * BDiag(:,3,1)
273*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,4,1)
274*59599516SKenneth E. Jansen          BDiag(:,5,2) = BDiag(:,5,2) -           BC(:,4) * BDiag(:,5,3)
275*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,5,4)
276*59599516SKenneth E. Jansen          BDiag(:,2,5) = BDiag(:,2,5) -           BC(:,4) * BDiag(:,3,5)
277*59599516SKenneth E. Jansen     &                                -           BC(:,6) * BDiag(:,4,5)
278*59599516SKenneth E. Jansen          BDiag(:,3,1) = zero
279*59599516SKenneth E. Jansen          BDiag(:,3,2) = zero
280*59599516SKenneth E. Jansen          BDiag(:,3,4) = zero
281*59599516SKenneth E. Jansen          BDiag(:,3,5) = zero
282*59599516SKenneth E. Jansen          BDiag(:,4,1) = zero
283*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
284*59599516SKenneth E. Jansen          BDiag(:,4,3) = zero
285*59599516SKenneth E. Jansen          BDiag(:,4,5) = zero
286*59599516SKenneth E. Jansen          BDiag(:,1,3) = zero
287*59599516SKenneth E. Jansen          BDiag(:,2,3) = zero
288*59599516SKenneth E. Jansen          BDiag(:,5,3) = zero
289*59599516SKenneth E. Jansen          BDiag(:,1,4) = zero
290*59599516SKenneth E. Jansen          BDiag(:,2,4) = zero
291*59599516SKenneth E. Jansen          BDiag(:,5,4) = zero
292*59599516SKenneth E. Jansen          BDiag(:,4,4) = one
293*59599516SKenneth E. Jansen          BDiag(:,3,3) = one
294*59599516SKenneth E. Jansen        endwhere
295*59599516SKenneth E. Jansenc
296*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity and x3-velocity
297*59599516SKenneth E. Jansenc
298*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 7)
299*59599516SKenneth E. Jansen          BDiag(:,2,1) = zero
300*59599516SKenneth E. Jansen          BDiag(:,2,3) = zero
301*59599516SKenneth E. Jansen          BDiag(:,2,4) = zero
302*59599516SKenneth E. Jansen          BDiag(:,2,5) = zero
303*59599516SKenneth E. Jansen          BDiag(:,3,1) = zero
304*59599516SKenneth E. Jansen          BDiag(:,3,2) = zero
305*59599516SKenneth E. Jansen          BDiag(:,3,4) = zero
306*59599516SKenneth E. Jansen          BDiag(:,3,5) = zero
307*59599516SKenneth E. Jansen          BDiag(:,4,1) = zero
308*59599516SKenneth E. Jansen          BDiag(:,4,2) = zero
309*59599516SKenneth E. Jansen          BDiag(:,4,3) = zero
310*59599516SKenneth E. Jansen          BDiag(:,4,5) = zero
311*59599516SKenneth E. Jansen          BDiag(:,1,2) = zero
312*59599516SKenneth E. Jansen          BDiag(:,5,2) = zero
313*59599516SKenneth E. Jansen          BDiag(:,1,3) = zero
314*59599516SKenneth E. Jansen          BDiag(:,5,3) = zero
315*59599516SKenneth E. Jansen          BDiag(:,1,4) = zero
316*59599516SKenneth E. Jansen          BDiag(:,5,4) = zero
317*59599516SKenneth E. Jansen          BDiag(:,2,2) = one
318*59599516SKenneth E. Jansen          BDiag(:,3,3) = one
319*59599516SKenneth E. Jansen          BDiag(:,4,4) = one
320*59599516SKenneth E. Jansen        endwhere
321*59599516SKenneth E. Jansenc
322*59599516SKenneth E. Jansenc.... temperature
323*59599516SKenneth E. Jansenc
324*59599516SKenneth E. Jansen        where (btest(iBC,1))
325*59599516SKenneth E. Jansen          BDiag(:,5,5) = one
326*59599516SKenneth E. Jansen          BDiag(:,1,5) = zero
327*59599516SKenneth E. Jansen          BDiag(:,2,5) = zero
328*59599516SKenneth E. Jansen          BDiag(:,3,5) = zero
329*59599516SKenneth E. Jansen          BDiag(:,4,5) = zero
330*59599516SKenneth E. Jansen          BDiag(:,5,1) = zero
331*59599516SKenneth E. Jansen          BDiag(:,5,2) = zero
332*59599516SKenneth E. Jansen          BDiag(:,5,3) = zero
333*59599516SKenneth E. Jansen          BDiag(:,5,4) = zero
334*59599516SKenneth E. Jansen        endwhere
335*59599516SKenneth E. Jansenc
336*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications)
337*59599516SKenneth E. Jansenc
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansen           do j = 1,nshg
340*59599516SKenneth E. Jansen              if (btest(iBC(j),10)) then
341*59599516SKenneth E. Jansen                 i = iper(j)
342*59599516SKenneth E. Jansen                 BDiag(i, :,:) = BDiag(i,:,:) + BDiag(j,:,:)
343*59599516SKenneth E. Jansen              endif
344*59599516SKenneth E. Jansen           enddo
345*59599516SKenneth E. Jansenc
346*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters
347*59599516SKenneth E. Jansenc
348*59599516SKenneth E. Jansen           do j = 1,nshg
349*59599516SKenneth E. Jansen              if (btest(iBC(j),10)) then
350*59599516SKenneth E. Jansen                 i=iper(j)
351*59599516SKenneth E. Jansen                 BDiag(j,:,:) = BDiag(i,:,:)
352*59599516SKenneth E. Jansen              endif
353*59599516SKenneth E. Jansen           enddo
354*59599516SKenneth E. Jansenc$$$        endif
355*59599516SKenneth E. Jansen
356*59599516SKenneth E. Jansen        if(numpe.gt.1) then
357*59599516SKenneth E. Jansenc
358*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated
359*59599516SKenneth E. Jansenc
360*59599516SKenneth E. Jansen        numtask = ilwork(1)
361*59599516SKenneth E. Jansen        itkbeg = 1
362*59599516SKenneth E. Jansen
363*59599516SKenneth E. Jansen        do itask = 1, numtask
364*59599516SKenneth E. Jansen
365*59599516SKenneth E. Jansen          iacc   = ilwork (itkbeg + 2)
366*59599516SKenneth E. Jansen          numseg = ilwork (itkbeg + 4)
367*59599516SKenneth E. Jansen
368*59599516SKenneth E. Jansen          if (iacc .eq. 0) then
369*59599516SKenneth E. Jansen            do is = 1,numseg
370*59599516SKenneth E. Jansen              isgbeg = ilwork (itkbeg + 3 + 2*is)
371*59599516SKenneth E. Jansen              lenseg = ilwork (itkbeg + 4 + 2*is)
372*59599516SKenneth E. Jansen              isgend = isgbeg + lenseg - 1
373*59599516SKenneth E. Jansen              BDiag(isgbeg:isgend,:,:) = zero
374*59599516SKenneth E. Jansen              BDiag(isgbeg:isgend,1,1) = one
375*59599516SKenneth E. Jansen              BDiag(isgbeg:isgend,2,2) = one
376*59599516SKenneth E. Jansen              BDiag(isgbeg:isgend,3,3) = one
377*59599516SKenneth E. Jansen              BDiag(isgbeg:isgend,4,4) = one
378*59599516SKenneth E. Jansen              BDiag(isgbeg:isgend,5,5) = one
379*59599516SKenneth E. Jansen            enddo
380*59599516SKenneth E. Jansen          endif
381*59599516SKenneth E. Jansen
382*59599516SKenneth E. Jansen          itkbeg = itkbeg + 4 + 2*numseg
383*59599516SKenneth E. Jansen
384*59599516SKenneth E. Jansen        enddo
385*59599516SKenneth E. Jansen        endif
386*59599516SKenneth E. Jansenc
387*59599516SKenneth E. Jansenc.... return
388*59599516SKenneth E. Jansenc
389*59599516SKenneth E. Jansen        return
390*59599516SKenneth E. Jansen        end
391*59599516SKenneth E. Jansenc
392*59599516SKenneth E. Jansenc
393*59599516SKenneth E. Jansenc
394*59599516SKenneth E. Jansen        subroutine bc3BDgSclr (iBC, Diag, iper, ilwork)
395*59599516SKenneth E. Jansenc
396*59599516SKenneth E. Jansenc----------------------------------------------------------------------
397*59599516SKenneth E. Jansenc
398*59599516SKenneth E. Jansenc This routine satisfies the BC of the block-diagonal preconditioning
399*59599516SKenneth E. Jansenc   matrix for 3D elements.
400*59599516SKenneth E. Jansenc
401*59599516SKenneth E. Jansenc input:
402*59599516SKenneth E. Jansenc  iBC    (numnp)        : boundary condition code
403*59599516SKenneth E. Jansenc  BC     (numnp,ndofBC) : Dirichlet BC constraint parameters
404*59599516SKenneth E. Jansenc  Diag   (numnp) : preconditionning diagonal matrix before BC
405*59599516SKenneth E. Jansenc
406*59599516SKenneth E. Jansenc output:
407*59599516SKenneth E. Jansenc  Diag   (numnp) : preconditionning matrix after BC
408*59599516SKenneth E. Jansenc                          is satisfied
409*59599516SKenneth E. Jansenc
410*59599516SKenneth E. Jansenc
411*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from g3bce.f)
412*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
413*59599516SKenneth E. Jansenc----------------------------------------------------------------------
414*59599516SKenneth E. Jansenc
415*59599516SKenneth E. Jansen        include "common.h"
416*59599516SKenneth E. Jansenc
417*59599516SKenneth E. Jansen        dimension iBC(nshg),
418*59599516SKenneth E. Jansen     &            Diag(nshg),             ilwork(nlwork),
419*59599516SKenneth E. Jansen     &            iper(nshg)
420*59599516SKenneth E. Jansenc
421*59599516SKenneth E. Jansenc
422*59599516SKenneth E. Jansen      id = isclr+5
423*59599516SKenneth E. Jansenc
424*59599516SKenneth E. Jansenc.... scalar variable
425*59599516SKenneth E. Jansenc
426*59599516SKenneth E. Jansen        where (btest(iBC,id))
427*59599516SKenneth E. Jansen          Diag(:) = one
428*59599516SKenneth E. Jansen        endwhere
429*59599516SKenneth E. Jansenc
430*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications)
431*59599516SKenneth E. Jansenc
432*59599516SKenneth E. Jansen        do j = 1,nshg
433*59599516SKenneth E. Jansen          if (btest(iBC(j),10)) then
434*59599516SKenneth E. Jansen            i = iper(j)
435*59599516SKenneth E. Jansen            Diag(i) = Diag(i) + Diag(j)
436*59599516SKenneth E. Jansen          endif
437*59599516SKenneth E. Jansen        enddo
438*59599516SKenneth E. Jansenc
439*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters
440*59599516SKenneth E. Jansenc
441*59599516SKenneth E. Jansen      do i = 1,nshg
442*59599516SKenneth E. Jansen         if (btest(iBC(i),10)) then
443*59599516SKenneth E. Jansen            Diag(i) = Diag(iper(i))
444*59599516SKenneth E. Jansen         endif
445*59599516SKenneth E. Jansen      enddo
446*59599516SKenneth E. Jansenc
447*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated
448*59599516SKenneth E. Jansenc
449*59599516SKenneth E. Jansen      if(numpe.gt.1) then
450*59599516SKenneth E. Jansen         numtask = ilwork(1)
451*59599516SKenneth E. Jansen         itkbeg = 1
452*59599516SKenneth E. Jansen
453*59599516SKenneth E. Jansen         do itask = 1, numtask
454*59599516SKenneth E. Jansen
455*59599516SKenneth E. Jansen            iacc   = ilwork (itkbeg + 2)
456*59599516SKenneth E. Jansen            numseg = ilwork (itkbeg + 4)
457*59599516SKenneth E. Jansen
458*59599516SKenneth E. Jansen            if (iacc .eq. 0) then
459*59599516SKenneth E. Jansen               do is = 1,numseg
460*59599516SKenneth E. Jansen                  isgbeg = ilwork (itkbeg + 3 + 2*is)
461*59599516SKenneth E. Jansen                  lenseg = ilwork (itkbeg + 4 + 2*is)
462*59599516SKenneth E. Jansen                  isgend = isgbeg + lenseg - 1
463*59599516SKenneth E. Jansen                  Diag(isgbeg:isgend) = one
464*59599516SKenneth E. Jansen               enddo
465*59599516SKenneth E. Jansen            endif
466*59599516SKenneth E. Jansen
467*59599516SKenneth E. Jansen            itkbeg = itkbeg + 4 + 2*numseg
468*59599516SKenneth E. Jansen
469*59599516SKenneth E. Jansen         enddo
470*59599516SKenneth E. Jansen      endif
471*59599516SKenneth E. Jansenc
472*59599516SKenneth E. Jansenc.... return
473*59599516SKenneth E. Jansenc
474*59599516SKenneth E. Jansen        return
475*59599516SKenneth E. Jansen        end
476*59599516SKenneth E. Jansen
477*59599516SKenneth E. Jansen
478*59599516SKenneth E. Jansen
479