xref: /phasta/phSolver/compressible/bc3res.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine bc3Res (y,  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  y     (nshg,ndof)   : Y variables
9*59599516SKenneth E. Jansenc  iBC   (nshg)        : Boundary Condition Code
10*59599516SKenneth E. Jansenc  BC    (nshg,ndofBC) : the boundary condition constraint parameters
11*59599516SKenneth E. Jansenc  res   (nshg,nflow)   : residual before BC is applied
12*59599516SKenneth E. Jansenc
13*59599516SKenneth E. Jansenc output:
14*59599516SKenneth E. Jansenc  res   (nshg,nflow)   : residual after satisfaction of BC
15*59599516SKenneth E. Jansenc
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansenc Thuc Bui,      Winter 1989.
18*59599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
19*59599516SKenneth E. Jansenc----------------------------------------------------------------------
20*59599516SKenneth E. Jansenc
21*59599516SKenneth E. Jansen      include "common.h"
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansen      dimension y(nshg,ndof),             iBC(nshg),
24*59599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
25*59599516SKenneth E. Jansen     &            res(nshg,nflow),           ilwork(nlwork),
26*59599516SKenneth E. Jansen     &            iper(nshg)
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansenc.... density
29*59599516SKenneth E. Jansenc
30*59599516SKenneth E. Jansen      where (btest(iBC,0))
31*59599516SKenneth E. Jansen         res(:,5) = res(:,5) + BC(:,1)*Rgas* res(:,1) !IDEAL GAS ASSUMED
32*59599516SKenneth E. Jansen         res(:,1) = zero
33*59599516SKenneth E. Jansen      endwhere
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansenc.... pressure
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansen      if(EntropyPressure.eq.1) then
38*59599516SKenneth E. Jansen         where (btest(iBC,2))
39*59599516SKenneth E. Jansen
40*59599516SKenneth E. Jansenc Thought this would be correct if W was in the tangent space of V
41*59599516SKenneth E. Jansenc as described in Shakib's thesis it does not work for primitive
42*59599516SKenneth E. Jansenc variables
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansenc Instead we use the entropy variable W
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansen            res(:,2) = res(:,2) -y(:,1)*res(:,1)
47*59599516SKenneth E. Jansen            res(:,3) = res(:,3) -y(:,2)*res(:,1)
48*59599516SKenneth E. Jansen            res(:,4) = res(:,4) -y(:,3)*res(:,1)
49*59599516SKenneth E. Jansen            res(:,5) = res(:,5) -
50*59599516SKenneth E. Jansen     &           (gamma*Rgas/gamma1*y(:,5)
51*59599516SKenneth E. Jansen     &           + pt5 * ( y(:,1)**2 + y(:,2)**2 + y(:,3)**2))*res(:,1)
52*59599516SKenneth E. Jansen            res(:,1) = zero
53*59599516SKenneth E. Jansen         endwhere
54*59599516SKenneth E. Jansen      else
55*59599516SKenneth E. Jansen         where (btest(iBC,2))
56*59599516SKenneth E. Jansen            res(:,1) = zero
57*59599516SKenneth E. Jansen         endwhere
58*59599516SKenneth E. Jansen      endif
59*59599516SKenneth E. Jansenc
60*59599516SKenneth E. Jansenc.... velocities
61*59599516SKenneth E. Jansenc
62*59599516SKenneth E. Jansenc ibits(n1,n2,n3) extracts bits n2+1 through n2+n3 (extending to the left
63*59599516SKenneth E. Jansenc as is traditional in binary) of the integer n1
64*59599516SKenneth E. Jansenc and returns the base 10 integer. In examples below x y z a b can
65*59599516SKenneth E. Jansenc be 1 or zero without any effect.
66*59599516SKenneth E. Jansenc
67*59599516SKenneth E. Jansenc.... x1-velocity
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansenc if iBC=4   bits of ibc =00000100 => ibits(4,3,3)=0
70*59599516SKenneth E. Jansenc if iBC=40  bits of ibc =00101000 => ibits(4,3,3)=5
71*59599516SKenneth E. Jansenc if iBC=40  bits of ibc =00101000 => ibits(4,3,2)=1
72*59599516SKenneth E. Jansenc
73*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 1)   ! bits of iBC= xy001zab
74*59599516SKenneth E. Jansenc
75*59599516SKenneth E. Jansenc     notice that the extracted 3 bits form the number 1.  below
76*59599516SKenneth E. Jansenc     you will see the combinations which make up 2-7, all of the
77*59599516SKenneth E. Jansenc     possible velocity combinations
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,4) * res(:,2)
80*59599516SKenneth E. Jansen          res(:,4) = res(:,4) - BC(:,5) * res(:,2)
81*59599516SKenneth E. Jansen          res(:,2) = zero
82*59599516SKenneth E. Jansen        endwhere
83*59599516SKenneth E. Jansenc
84*59599516SKenneth E. Jansenc.... x2-velocity
85*59599516SKenneth E. Jansenc
86*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 2)   ! bits of iBC= xy010zab
87*59599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,3)
88*59599516SKenneth E. Jansen          res(:,4) = res(:,4) - BC(:,5) * res(:,3)
89*59599516SKenneth E. Jansen          res(:,3) = zero
90*59599516SKenneth E. Jansen        endwhere
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity
93*59599516SKenneth E. Jansenc
94*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 3)  ! bits of iBC= xy011zab
95*59599516SKenneth E. Jansen          res(:,4) = res(:,4) - BC(:,4) * res(:,2) - BC(:,6) * res(:,3)
96*59599516SKenneth E. Jansen          res(:,2) = zero
97*59599516SKenneth E. Jansen          res(:,3) = zero
98*59599516SKenneth E. Jansen        endwhere
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... x3-velocity
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 4)  ! bits of iBC= xy100zab
103*59599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,4)
104*59599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,5) * res(:,4)
105*59599516SKenneth E. Jansen          res(:,4) = zero
106*59599516SKenneth E. Jansen        endwhere
107*59599516SKenneth E. Jansenc
108*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 5)  ! bits of iBC= xy101zab
111*59599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,4) * res(:,2) - BC(:,6) * res(:,4)
112*59599516SKenneth E. Jansen          res(:,2) = zero
113*59599516SKenneth E. Jansen          res(:,4) = zero
114*59599516SKenneth E. Jansen        endwhere
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 6)  ! bits of iBC= xy110zab
119*59599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,3) - BC(:,6) * res(:,4)
120*59599516SKenneth E. Jansen          res(:,3) = zero
121*59599516SKenneth E. Jansen          res(:,4) = zero
122*59599516SKenneth E. Jansen        endwhere
123*59599516SKenneth E. Jansenc
124*59599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity
125*59599516SKenneth E. Jansenc
126*59599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 7)  ! bits of iBC= xy111zab
127*59599516SKenneth E. Jansen          res(:,2) = zero
128*59599516SKenneth E. Jansen          res(:,3) = zero
129*59599516SKenneth E. Jansen          res(:,4) = zero
130*59599516SKenneth E. Jansen        endwhere
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansenc.... scaled plane extraction boundary condition
133*59599516SKenneth E. Jansenc
134*59599516SKenneth E. Jansen        if(intpres.eq.1) then  ! interpolating pressure so zero continuity res
135*59599516SKenneth E. Jansen           where (btest(iBC,11))
136*59599516SKenneth E. Jansen              res(:,1) = zero
137*59599516SKenneth E. Jansen              res(:,2) = zero
138*59599516SKenneth E. Jansen              res(:,3) = zero
139*59599516SKenneth E. Jansen              res(:,4) = zero
140*59599516SKenneth E. Jansen	      res(:,5) = zero ! added to correspond to genscale (Elaine)
141*59599516SKenneth E. Jansen           endwhere
142*59599516SKenneth E. Jansen        else  ! leave residual in continuity equation
143*59599516SKenneth E. Jansen           where (btest(iBC,11))
144*59599516SKenneth E. Jansen              res(:,2) = zero
145*59599516SKenneth E. Jansen              res(:,3) = zero
146*59599516SKenneth E. Jansen              res(:,4) = zero
147*59599516SKenneth E. Jansen	      res(:,5) = zero ! added to correspond to genscale (Elaine)
148*59599516SKenneth E. Jansen           endwhere
149*59599516SKenneth E. Jansen        endif
150*59599516SKenneth E. Jansenc
151*59599516SKenneth E. Jansenc.... temperature
152*59599516SKenneth E. Jansenc
153*59599516SKenneth E. Jansen        where (btest(iBC,1)) res(:,5) = zero
154*59599516SKenneth E. Jansenc
155*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications)
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansen        do j = 1,nshg
158*59599516SKenneth E. Jansen          if (btest(iBC(j),10)) then
159*59599516SKenneth E. Jansen            i = iper(j)
160*59599516SKenneth E. Jansen            res(i,:) = res(i,:) + res(j,:)
161*59599516SKenneth E. Jansen            res(j,:) = zero
162*59599516SKenneth E. Jansen          endif
163*59599516SKenneth E. Jansen        enddo
164*59599516SKenneth E. Jansenc
165*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters
166*59599516SKenneth E. Jansenc
167*59599516SKenneth E. Jansenc        do i = 1,nshg
168*59599516SKenneth E. Jansenc           if (btest(iBC(i),10)) then
169*59599516SKenneth E. Jansenc              res(i,:) = res(iper(i),:)
170*59599516SKenneth E. Jansenc           endif
171*59599516SKenneth E. Jansenc        enddo
172*59599516SKenneth E. Jansen       if(numpe.gt.1) then
173*59599516SKenneth E. Jansenc
174*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated
175*59599516SKenneth E. Jansenc
176*59599516SKenneth E. Jansen        numtask = ilwork(1)
177*59599516SKenneth E. Jansen        itkbeg = 1
178*59599516SKenneth E. Jansen
179*59599516SKenneth E. Jansen        do itask = 1, numtask
180*59599516SKenneth E. Jansen
181*59599516SKenneth E. Jansen          iacc   = ilwork (itkbeg + 2)
182*59599516SKenneth E. Jansen          numseg = ilwork (itkbeg + 4)
183*59599516SKenneth E. Jansen
184*59599516SKenneth E. Jansen          if (iacc .eq. 0) then
185*59599516SKenneth E. Jansen            do is = 1,numseg
186*59599516SKenneth E. Jansen              isgbeg = ilwork (itkbeg + 3 + 2*is)
187*59599516SKenneth E. Jansen              lenseg = ilwork (itkbeg + 4 + 2*is)
188*59599516SKenneth E. Jansen              isgend = isgbeg + lenseg - 1
189*59599516SKenneth E. Jansen              res(isgbeg:isgend,:) = zero
190*59599516SKenneth E. Jansen            enddo
191*59599516SKenneth E. Jansen          endif
192*59599516SKenneth E. Jansen
193*59599516SKenneth E. Jansen          itkbeg = itkbeg + 4 + 2*numseg
194*59599516SKenneth E. Jansen
195*59599516SKenneth E. Jansen        enddo
196*59599516SKenneth E. Jansen        endif
197*59599516SKenneth E. Jansenc
198*59599516SKenneth E. Jansenc.... return
199*59599516SKenneth E. Jansenc
200*59599516SKenneth E. Jansen        return
201*59599516SKenneth E. Jansen        end
202*59599516SKenneth E. Jansenc
203*59599516SKenneth E. Jansenc
204*59599516SKenneth E. Jansenc
205*59599516SKenneth E. Jansen        subroutine bc3ResSclr (y,  iBC,  BC,   rest,
206*59599516SKenneth E. Jansen     &                         iper, ilwork)
207*59599516SKenneth E. Jansenc
208*59599516SKenneth E. Jansenc----------------------------------------------------------------------
209*59599516SKenneth E. Jansenc
210*59599516SKenneth E. Jansenc This routine satisfies the BC of the residual vector for 3D elements.
211*59599516SKenneth E. Jansenc
212*59599516SKenneth E. Jansenc input:
213*59599516SKenneth E. Jansenc  Y     (nshg,ndof)   : Y Variables
214*59599516SKenneth E. Jansenc  iBC   (nshg)        : Boundary Condition Code
215*59599516SKenneth E. Jansenc  BC    (nshg,ndofBC) : the boundary condition constraint parameters
216*59599516SKenneth E. Jansenc  rest  (nshg)        : residual before BC is applied
217*59599516SKenneth E. Jansenc
218*59599516SKenneth E. Jansenc output:
219*59599516SKenneth E. Jansenc  rest  (nshg)        : residual after satisfaction of BC
220*59599516SKenneth E. Jansenc
221*59599516SKenneth E. Jansenc
222*59599516SKenneth E. Jansenc Thuc Bui,      Winter 1989.
223*59599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
224*59599516SKenneth E. Jansenc----------------------------------------------------------------------
225*59599516SKenneth E. Jansenc
226*59599516SKenneth E. Jansen        include "common.h"
227*59599516SKenneth E. Jansenc
228*59599516SKenneth E. Jansen        dimension y(nshg,ndof),      iBC(nshg),
229*59599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
230*59599516SKenneth E. Jansen     &            rest(nshg),        ilwork(nlwork),
231*59599516SKenneth E. Jansen     &            iper(nshg)
232*59599516SKenneth E. Jansenc
233*59599516SKenneth E. Jansenc
234*59599516SKenneth E. Jansen         id = isclr+5
235*59599516SKenneth E. Jansenc.... Scalar Variable
236*59599516SKenneth E. Jansenc
237*59599516SKenneth E. Jansen        where (btest(iBC,id))
238*59599516SKenneth E. Jansen          rest(:) = zero
239*59599516SKenneth E. Jansen        endwhere
240*59599516SKenneth E. Jansenc
241*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications)
242*59599516SKenneth E. Jansenc
243*59599516SKenneth E. Jansen        do j = 1,nshg
244*59599516SKenneth E. Jansen          if (btest(iBC(j),10)) then
245*59599516SKenneth E. Jansen            i = iper(j)
246*59599516SKenneth E. Jansen            rest(i) = rest(i) + rest(j)
247*59599516SKenneth E. Jansen            rest(j) = zero   !changed
248*59599516SKenneth E. Jansen          endif
249*59599516SKenneth E. Jansen        enddo
250*59599516SKenneth E. Jansenc
251*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters
252*59599516SKenneth E. Jansenc
253*59599516SKenneth E. Jansenc$$$         do i = 1,nshg
254*59599516SKenneth E. Jansenc$$$            if (btest(iBC(i),10)) then
255*59599516SKenneth E. Jansenc$$$               rest(i) = rest(iper(i))
256*59599516SKenneth E. Jansenc$$$            endif
257*59599516SKenneth E. Jansenc$$$         enddo
258*59599516SKenneth E. Jansenc
259*59599516SKenneth E. Jansenc removed for impl=4 as we have set the loops over ntopsh
260*59599516SKenneth E. Jansenc
261*59599516SKenneth E. Jansen        if(numpe.gt.1 ) then
262*59599516SKenneth E. Jansenc
263*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated
264*59599516SKenneth E. Jansenc
265*59599516SKenneth E. Jansen           numtask = ilwork(1)
266*59599516SKenneth E. Jansen           itkbeg = 1
267*59599516SKenneth E. Jansen
268*59599516SKenneth E. Jansen           do itask = 1, numtask
269*59599516SKenneth E. Jansen
270*59599516SKenneth E. Jansen              iacc   = ilwork (itkbeg + 2)
271*59599516SKenneth E. Jansen              numseg = ilwork (itkbeg + 4)
272*59599516SKenneth E. Jansen
273*59599516SKenneth E. Jansen              if (iacc .eq. 0) then
274*59599516SKenneth E. Jansen                 do is = 1,numseg
275*59599516SKenneth E. Jansen                    isgbeg = ilwork (itkbeg + 3 + 2*is)
276*59599516SKenneth E. Jansen                    lenseg = ilwork (itkbeg + 4 + 2*is)
277*59599516SKenneth E. Jansen                    isgend = isgbeg + lenseg - 1
278*59599516SKenneth E. Jansen                    rest(isgbeg:isgend) = zero
279*59599516SKenneth E. Jansen                 enddo
280*59599516SKenneth E. Jansen              endif
281*59599516SKenneth E. Jansen
282*59599516SKenneth E. Jansen              itkbeg = itkbeg + 4 + 2*numseg
283*59599516SKenneth E. Jansen
284*59599516SKenneth E. Jansen           enddo
285*59599516SKenneth E. Jansen        endif
286*59599516SKenneth E. Jansenc
287*59599516SKenneth E. Jansenc
288*59599516SKenneth E. Jansenc.... return
289*59599516SKenneth E. Jansenc
290*59599516SKenneth E. Jansen        return
291*59599516SKenneth E. Jansen        end
292*59599516SKenneth E. Jansen
293