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