xref: /phasta/phSolver/incompressible/bc3diag.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine bc3Diag (iBC,  BC,  res)
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc----------------------------------------------------------------------
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc This routine satisfies the BC of the diagonal vector for 3D elements.
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc input:
8*59599516SKenneth E. Jansenc  iBC   (nshg)        : Boundary Condition Code
9*59599516SKenneth E. Jansenc  BC    (nshg,ndofBC) : the boundary condition constraint parameters
10*59599516SKenneth E. Jansenc  res   (nshg,nflow)   : residual before BC is applied
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc output:
13*59599516SKenneth E. Jansenc  res   (nshg,nflow)   : residual after satisfaction of BC
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc
16*59599516SKenneth E. Jansenc Thuc Bui,      Winter 1989.
17*59599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
18*59599516SKenneth E. Jansenc----------------------------------------------------------------------
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansen        include "common.h"
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansen        dimension iBC(nshg),                BC(nshg,ndofBC),
23*59599516SKenneth E. Jansen     &            res(nshg,4)
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansenc.... pressure
26*59599516SKenneth E. Jansenc
27*59599516SKenneth E. Jansen        where (btest(iBC,2))
28*59599516SKenneth E. Jansen           res(:,4) = zero
29*59599516SKenneth E. Jansen        endwhere
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansenc.... velocities
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansenc ibits(n1,n2,n3) extracts bits n2+1 through n2+n3 (extending to the left
34*59599516SKenneth E. Jansenc as is traditional in binary) of the integer n1
35*59599516SKenneth E. Jansenc and returns the base 10 integer. In examples below x y z a b can
36*59599516SKenneth E. Jansenc be 1 or zero without any effect.
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc.... x1-velocity
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansenc if iBC=4   bits of ibc =00000100 => ibits(4,3,3)=0
41*59599516SKenneth E. Jansenc if iBC=40  bits of ibc =00101000 => ibits(4,3,3)=5
42*59599516SKenneth E. Jansenc if iBC=40  bits of ibc =00101000 => ibits(4,3,2)=1
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 1)   ! bits of iBC= xy001zab
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansenc     notice that the extracted 3 bits form the number 1.  below
47*59599516SKenneth E. Jansenc     you will see the combinations which make up 2-7, all of the
48*59599516SKenneth E. Jansenc     possible velocity combinations
49*59599516SKenneth E. Jansenc
50*59599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,1)
51*59599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,5) * res(:,1)
52*59599516SKenneth E. Jansen          res(:,1) = zero
53*59599516SKenneth E. Jansen        endwhere
54*59599516SKenneth E. Jansenc
55*59599516SKenneth E. Jansenc.... x2-velocity
56*59599516SKenneth E. Jansenc
57*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 2)   ! bits of iBC= xy010zab
58*59599516SKenneth E. Jansen          res(:,1) = res(:,1) - BC(:,4) * res(:,2)
59*59599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,5) * res(:,2)
60*59599516SKenneth E. Jansen          res(:,2) = zero
61*59599516SKenneth E. Jansen        endwhere
62*59599516SKenneth E. Jansenc
63*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 3)  ! bits of iBC= xy011zab
66*59599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,4) * res(:,1) - BC(:,6) * res(:,2)
67*59599516SKenneth E. Jansen          res(:,1) = zero
68*59599516SKenneth E. Jansen          res(:,2) = zero
69*59599516SKenneth E. Jansen        endwhere
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansenc.... x3-velocity
72*59599516SKenneth E. Jansenc
73*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 4)  ! bits of iBC= xy100zab
74*59599516SKenneth E. Jansen          res(:,1) = res(:,1) - BC(:,4) * res(:,3)
75*59599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,5) * res(:,3)
76*59599516SKenneth E. Jansen          res(:,3) = zero
77*59599516SKenneth E. Jansen        endwhere
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 5)  ! bits of iBC= xy101zab
82*59599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,1) - BC(:,6) * res(:,3)
83*59599516SKenneth E. Jansen          res(:,1) = zero
84*59599516SKenneth E. Jansen          res(:,3) = zero
85*59599516SKenneth E. Jansen        endwhere
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 6)  ! bits of iBC= xy110zab
90*59599516SKenneth E. Jansen          res(:,1) = res(:,1) - BC(:,4) * res(:,2) - BC(:,6) * res(:,3)
91*59599516SKenneth E. Jansen          res(:,2) = zero
92*59599516SKenneth E. Jansen          res(:,3) = zero
93*59599516SKenneth E. Jansen        endwhere
94*59599516SKenneth E. Jansenc
95*59599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity
96*59599516SKenneth E. Jansenc
97*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 7)  ! bits of iBC= xy111zab
98*59599516SKenneth E. Jansen          res(:,1) = zero
99*59599516SKenneth E. Jansen          res(:,2) = zero
100*59599516SKenneth E. Jansen          res(:,3) = zero
101*59599516SKenneth E. Jansen        endwhere
102*59599516SKenneth E. Jansenc
103*59599516SKenneth E. Jansenc.... scaled plane extraction boundary condition
104*59599516SKenneth E. Jansenc
105*59599516SKenneth E. Jansen        if(intpres.eq.1) then  ! interpolating pressure so zero continuity res
106*59599516SKenneth E. Jansen           where (btest(iBC,11))
107*59599516SKenneth E. Jansen              res(:,1) = zero
108*59599516SKenneth E. Jansen              res(:,2) = zero
109*59599516SKenneth E. Jansen              res(:,3) = zero
110*59599516SKenneth E. Jansen              res(:,4) = zero
111*59599516SKenneth E. Jansen           endwhere
112*59599516SKenneth E. Jansen        else  ! leave residual in continuity equation
113*59599516SKenneth E. Jansen           where (btest(iBC,11))
114*59599516SKenneth E. Jansen              res(:,1) = zero
115*59599516SKenneth E. Jansen              res(:,2) = zero
116*59599516SKenneth E. Jansen              res(:,3) = zero
117*59599516SKenneth E. Jansen           endwhere
118*59599516SKenneth E. Jansen        endif
119*59599516SKenneth E. Jansen
120*59599516SKenneth E. Jansenc.... return
121*59599516SKenneth E. Jansenc
122*59599516SKenneth E. Jansen        return
123*59599516SKenneth E. Jansen        end
124*59599516SKenneth E. Jansen
125*59599516SKenneth E. Jansen
126*59599516SKenneth E. Jansen        subroutine bc3SclrDiag (iBC,  res)
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansenc----------------------------------------------------------------------
129*59599516SKenneth E. Jansenc
130*59599516SKenneth E. Jansenc This routine satisfies the BC of the diagonal vector for 3D elements.
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansenc input:
133*59599516SKenneth E. Jansenc  iBC   (nshg)        : Boundary Condition Code
134*59599516SKenneth E. Jansenc  BC    (nshg,ndofBC) : the boundary condition constraint parameters
135*59599516SKenneth E. Jansenc  res   (nshg)   : residual before BC is applied
136*59599516SKenneth E. Jansenc
137*59599516SKenneth E. Jansenc output:
138*59599516SKenneth E. Jansenc  res   (nshg)   : residual after satisfaction of BC
139*59599516SKenneth E. Jansenc
140*59599516SKenneth E. Jansenc
141*59599516SKenneth E. Jansenc Thuc Bui,      Winter 1989.
142*59599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
143*59599516SKenneth E. Jansenc----------------------------------------------------------------------
144*59599516SKenneth E. Jansenc
145*59599516SKenneth E. Jansen        include "common.h"
146*59599516SKenneth E. Jansenc
147*59599516SKenneth E. Jansen        dimension iBC(nshg),                BC(nshg,ndofBC),
148*59599516SKenneth E. Jansen     &            res(nshg)
149*59599516SKenneth E. Jansen
150*59599516SKenneth E. Jansen       if(isclr.eq.0) then
151*59599516SKenneth E. Jansenc
152*59599516SKenneth E. Jansenc.... temperature
153*59599516SKenneth E. Jansenc
154*59599516SKenneth E. Jansen          where (btest(iBC,1))
155*59599516SKenneth E. Jansen             res = zero
156*59599516SKenneth E. Jansen          endwhere
157*59599516SKenneth E. Jansen       else
158*59599516SKenneth E. Jansenc
159*59599516SKenneth E. Jansenc.... scalar
160*59599516SKenneth E. Jansenc
161*59599516SKenneth E. Jansen          ib=5+isclr
162*59599516SKenneth E. Jansen          where (btest(iBC,ib))
163*59599516SKenneth E. Jansen             res = zero
164*59599516SKenneth E. Jansen          endwhere
165*59599516SKenneth E. Jansen       endif
166*59599516SKenneth E. Jansenc
167*59599516SKenneth E. Jansenc.... return
168*59599516SKenneth E. Jansenc
169*59599516SKenneth E. Jansen        return
170*59599516SKenneth E. Jansen        end
171