xref: /phasta/phSolver/incompressible/e3res.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine e3Res ( u1,        u2,         u3,
2*59599516SKenneth E. Jansen     &                   uBar,      aci,        WdetJ,
3*59599516SKenneth E. Jansen     &                   g1yi,      g2yi,       g3yi,
4*59599516SKenneth E. Jansen     &                   rLui,      rmu,        rho,
5*59599516SKenneth E. Jansen     &                   tauC,      tauM,       tauBar,
6*59599516SKenneth E. Jansen     &                   shpfun,    shg,        src,
7*59599516SKenneth E. Jansen     &                   rl,        pres,       acl,
8*59599516SKenneth E. Jansen     &                   rlsli)
9*59599516SKenneth E. Jansenc------------------------------------------------------------------------
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc  This routine computes the residual vector at an
12*59599516SKenneth E. Jansenc  integration point.
13*59599516SKenneth E. Jansenc
14*59599516SKenneth E. Jansenc  input:
15*59599516SKenneth E. Jansenc     u1(npro)                  : x1-velocity
16*59599516SKenneth E. Jansenc     u2(npro)                  : x2-velocity
17*59599516SKenneth E. Jansenc     u3(npro)                  : x3-velocity
18*59599516SKenneth E. Jansenc     uBar(npro,3)              : u - tauM * Li
19*59599516SKenneth E. Jansenc     aci(npro,3)               : acceleration
20*59599516SKenneth E. Jansenc     rlsli(npro,6)             : resolved Leonard stresses
21*59599516SKenneth E. Jansenc     WdetJ(npro)               : weighted jacobian determinant
22*59599516SKenneth E. Jansenc     g1yi(npro,ndof)              : x1-gradient of variables
23*59599516SKenneth E. Jansenc     g2yi(npro,ndof)              : x2-gradient of variables
24*59599516SKenneth E. Jansenc     g3yi(npro,ndof)              : x3-gradient of variables
25*59599516SKenneth E. Jansenc     rLui(npro,3)              : total residual of NS equations
26*59599516SKenneth E. Jansenc     rmu(npro)                 : fluid viscosity
27*59599516SKenneth E. Jansenc     rho(npro)                 : density
28*59599516SKenneth E. Jansenc     tauC(npro)                : continuity tau
29*59599516SKenneth E. Jansenc     tauM(npro)                : momentum tau
30*59599516SKenneth E. Jansenc     tauBar(npro)              : additional tau
31*59599516SKenneth E. Jansenc     shpfun(npro,nshl)         : element shape functions
32*59599516SKenneth E. Jansenc     shg(npro,nshl,nsd)        : global grad of element shape functions
33*59599516SKenneth E. Jansenc     src(npro,nsd)             : body force term
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansenc  output:
36*59599516SKenneth E. Jansenc     rl(npro,nshl,nflow)
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc------------------------------------------------------------------------
39*59599516SKenneth E. Jansen      include "common.h"
40*59599516SKenneth E. Jansen
41*59599516SKenneth E. Jansen      dimension u1(npro),         u2(npro),         u3(npro),
42*59599516SKenneth E. Jansen     &          uBar(npro,nsd),   aci(npro,nsd),    WdetJ(npro),
43*59599516SKenneth E. Jansen     &          g1yi(npro,nflow), g2yi(npro,nflow), g3yi(npro,nflow),
44*59599516SKenneth E. Jansen     &          rLui(npro,nsd),   rmu(npro),        rho(npro),
45*59599516SKenneth E. Jansen     &          tauC(npro),       tauM(npro),       tauBar(npro),
46*59599516SKenneth E. Jansen     &          shpfun(npro,nshl),shg(npro,nshl,nsd), src(npro,nsd),
47*59599516SKenneth E. Jansen     &          pres(npro)
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansen      dimension rl(npro,nshl,nflow),
50*59599516SKenneth E. Jansen     &          acl(npro,nshl,ndof),
51*59599516SKenneth E. Jansen     &          rlsli(npro,6)
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansenc.... local declarations
54*59599516SKenneth E. Jansenc
55*59599516SKenneth E. Jansen      real*8    tmp1(npro),   tmp2(npro),          tmp3(npro),
56*59599516SKenneth E. Jansen     &          tmp(npro),    rGNa(npro,nsd,nsd),  rNa(npro,nsd),
57*59599516SKenneth E. Jansen     &          locmass(npro,nshl),omega(3)
58*59599516SKenneth E. Jansen
59*59599516SKenneth E. Jansen      integer aa
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansenc.... initialize multipliers for Na and Na_{,i}
62*59599516SKenneth E. Jansenc
63*59599516SKenneth E. Jansen      rNa  = zero
64*59599516SKenneth E. Jansen      rGNa = zero
65*59599516SKenneth E. Jansenc
66*59599516SKenneth E. Jansenc.... compute the Na multiplier
67*59599516SKenneth E. Jansenc
68*59599516SKenneth E. Jansen      tmps     = one-flmpr  ! consistant mass factor
69*59599516SKenneth E. Jansen
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansenc no density yet...it comes later
72*59599516SKenneth E. Jansenc
73*59599516SKenneth E. Jansen      rNa(:,1) = aci(:,1)  * tmps
74*59599516SKenneth E. Jansen     &         - src(:,1)
75*59599516SKenneth E. Jansen      rNa(:,2) = aci(:,2)  * tmps
76*59599516SKenneth E. Jansen     &         - src(:,2)
77*59599516SKenneth E. Jansen      rNa(:,3) = aci(:,3)  * tmps
78*59599516SKenneth E. Jansen     &         - src(:,3)
79*59599516SKenneth E. Jansen
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansenc.... rotating frame terms if needed
82*59599516SKenneth E. Jansenc
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen      if(matflg(6,1).eq.1) then ! rotation
85*59599516SKenneth E. Jansen
86*59599516SKenneth E. Jansen         omega(1)=datmat(1,6,1)
87*59599516SKenneth E. Jansen         omega(2)=datmat(2,6,1)
88*59599516SKenneth E. Jansen         omega(3)=datmat(3,6,1)
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansenc no density yet...it comes later
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen
93*59599516SKenneth E. Jansen         rNa(:,1) = rNa(:,1) + (omega(2)-omega(3)) * tauM * rLui(:,1)
94*59599516SKenneth E. Jansen         rNa(:,2) = rNa(:,2) + (omega(3)-omega(1)) * tauM * rLui(:,2)
95*59599516SKenneth E. Jansen         rNa(:,3) = rNa(:,3) + (omega(1)-omega(2)) * tauM * rLui(:,3)
96*59599516SKenneth E. Jansen      endif
97*59599516SKenneth E. Jansen
98*59599516SKenneth E. Jansen
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... compute the Na,i multiplier
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen      tmp  = -pres + tauC * (g1yi(:,2) + g2yi(:,3) + g3yi(:,4))
103*59599516SKenneth E. Jansen      tmp1 =  rmu * ( g2yi(:,2) + g1yi(:,3) )
104*59599516SKenneth E. Jansen      tmp2 =  rmu * ( g3yi(:,3) + g2yi(:,4) )
105*59599516SKenneth E. Jansen      tmp3 =  rmu * ( g1yi(:,4) + g3yi(:,2) )
106*59599516SKenneth E. Jansen
107*59599516SKenneth E. Jansen
108*59599516SKenneth E. Jansen      if(iconvflow.eq.2) then  ! advective form (NO IBP either)
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansenc no density yet...it comes later
111*59599516SKenneth E. Jansenc
112*59599516SKenneth E. Jansen         rNa(:,1) = rNa(:,1)
113*59599516SKenneth E. Jansen     &            + ubar(:,1) * g1yi(:,2)
114*59599516SKenneth E. Jansen     &            + ubar(:,2) * g2yi(:,2)
115*59599516SKenneth E. Jansen     &            + ubar(:,3) * g3yi(:,2)
116*59599516SKenneth E. Jansen         rNa(:,2) = rNa(:,2)
117*59599516SKenneth E. Jansen     &            + ubar(:,1) * g1yi(:,3)
118*59599516SKenneth E. Jansen     &            + ubar(:,2) * g2yi(:,3)
119*59599516SKenneth E. Jansen     &            + ubar(:,3) * g3yi(:,3)
120*59599516SKenneth E. Jansen         rNa(:,3) = rNa(:,3)
121*59599516SKenneth E. Jansen     &            + ubar(:,1) * g1yi(:,4)
122*59599516SKenneth E. Jansen     &            + ubar(:,2) * g2yi(:,4)
123*59599516SKenneth E. Jansen     &            + ubar(:,3) * g3yi(:,4)
124*59599516SKenneth E. Jansen
125*59599516SKenneth E. Jansen         rGNa(:,1,1) = two * rmu * g1yi(:,2) + tmp
126*59599516SKenneth E. Jansen         rGNa(:,1,2) = tmp1
127*59599516SKenneth E. Jansen         rGNa(:,1,3) = tmp3
128*59599516SKenneth E. Jansen         rGNa(:,2,1) = tmp1
129*59599516SKenneth E. Jansen         rGNa(:,2,2) = two * rmu * g2yi(:,3) + tmp
130*59599516SKenneth E. Jansen         rGNa(:,2,3) = tmp2
131*59599516SKenneth E. Jansen         rGNa(:,3,1) = tmp3
132*59599516SKenneth E. Jansen         rGNa(:,3,2) = tmp2
133*59599516SKenneth E. Jansen         rGNa(:,3,3) = two * rmu * g3yi(:,4) + tmp
134*59599516SKenneth E. Jansen      else   ! conservative form (with IBP)
135*59599516SKenneth E. Jansen
136*59599516SKenneth E. Jansenc                                            IBP conservative convection
137*59599516SKenneth E. Jansenc                                                      |||||
138*59599516SKenneth E. Jansenc                                                      vvvvv
139*59599516SKenneth E. Jansen         rGNa(:,1,1) = two * rmu * g1yi(:,2) + tmp - u1(:)*u1(:)*rho(:)
140*59599516SKenneth E. Jansen         rGNa(:,1,2) = tmp1                        - u1(:)*u2(:)*rho(:)
141*59599516SKenneth E. Jansen         rGNa(:,1,3) = tmp3                        - u1(:)*u3(:)*rho(:)
142*59599516SKenneth E. Jansen         rGNa(:,2,1) = tmp1                        - u1(:)*u2(:)*rho(:)
143*59599516SKenneth E. Jansen         rGNa(:,2,2) = two * rmu * g2yi(:,3) + tmp - u2(:)*u2(:)*rho(:)
144*59599516SKenneth E. Jansen         rGNa(:,2,3) = tmp2                        - u3(:)*u2(:)*rho(:)
145*59599516SKenneth E. Jansen         rGNa(:,3,1) = tmp3                        - u1(:)*u3(:)*rho(:)
146*59599516SKenneth E. Jansen         rGNa(:,3,2) = tmp2                        - u3(:)*u2(:)*rho(:)
147*59599516SKenneth E. Jansen         rGNa(:,3,3) = two * rmu * g3yi(:,4) + tmp - u3(:)*u3(:)*rho(:)
148*59599516SKenneth E. Jansen      endif
149*59599516SKenneth E. Jansen      if((iLES.gt.10).and.(iLES.lt.20)) then    ! bard
150*59599516SKenneth E. Jansen         rGNa(:,1,1) = rGNa(:,1,1) - rlsli(:,1)*rho(:)
151*59599516SKenneth E. Jansen         rGNa(:,1,2) = rGNa(:,1,2) - rlsli(:,4)*rho(:)
152*59599516SKenneth E. Jansen         rGNa(:,1,3) = rGNa(:,1,3) - rlsli(:,5)*rho(:)
153*59599516SKenneth E. Jansen         rGNa(:,2,1) = rGNa(:,2,1) - rlsli(:,4)*rho(:)
154*59599516SKenneth E. Jansen         rGNa(:,2,2) = rGNa(:,2,2) - rlsli(:,2)*rho(:)
155*59599516SKenneth E. Jansen         rGNa(:,2,3) = rGNa(:,2,3) - rlsli(:,6)*rho(:)
156*59599516SKenneth E. Jansen         rGNa(:,3,1) = rGNa(:,3,1) - rlsli(:,5)*rho(:)
157*59599516SKenneth E. Jansen         rGNa(:,3,2) = rGNa(:,3,2) - rlsli(:,6)*rho(:)
158*59599516SKenneth E. Jansen         rGNa(:,3,3) = rGNa(:,3,3) - rlsli(:,3)*rho(:)
159*59599516SKenneth E. Jansen      endif
160*59599516SKenneth E. Jansen
161*59599516SKenneth E. Jansen      tmp1        = tauM * rLui(:,1)
162*59599516SKenneth E. Jansen      tmp2        = tauM * rLui(:,2)
163*59599516SKenneth E. Jansen      tmp3        = tauM * rLui(:,3)
164*59599516SKenneth E. Jansen
165*59599516SKenneth E. Jansen      rGNa(:,1,1) = rGNa(:,1,1) + tmp1 * u1
166*59599516SKenneth E. Jansen      rGNa(:,1,2) = rGNa(:,1,2) + tmp1 * u2
167*59599516SKenneth E. Jansen      rGNa(:,1,3) = rGNa(:,1,3) + tmp1 * u3
168*59599516SKenneth E. Jansen      rGNa(:,2,1) = rGNa(:,2,1) + tmp2 * u1
169*59599516SKenneth E. Jansen      rGNa(:,2,2) = rGNa(:,2,2) + tmp2 * u2
170*59599516SKenneth E. Jansen      rGNa(:,2,3) = rGNa(:,2,3) + tmp2 * u3
171*59599516SKenneth E. Jansen      rGNa(:,3,1) = rGNa(:,3,1) + tmp3 * u1
172*59599516SKenneth E. Jansen      rGNa(:,3,2) = rGNa(:,3,2) + tmp3 * u2
173*59599516SKenneth E. Jansen      rGNa(:,3,3) = rGNa(:,3,3) + tmp3 * u3
174*59599516SKenneth E. Jansen
175*59599516SKenneth E. Jansen      if(iconvflow.eq.1) then
176*59599516SKenneth E. Jansenc
177*59599516SKenneth E. Jansenc... get the u_j w_{i,i} term in there to match A_j^T w_{i,j} tau L_i
178*59599516SKenneth E. Jansenc    to match the SUPG of incompressible limit
179*59599516SKenneth E. Jansenc
180*59599516SKenneth E. Jansen         rGNa(:,1,1) = rGNa(:,1,1) + tmp1 * u1
181*59599516SKenneth E. Jansen         rGNa(:,1,2) = rGNa(:,1,2) + tmp2 * u1
182*59599516SKenneth E. Jansen         rGNa(:,1,3) = rGNa(:,1,3) + tmp3 * u1
183*59599516SKenneth E. Jansen         rGNa(:,2,1) = rGNa(:,2,1) + tmp1 * u2
184*59599516SKenneth E. Jansen         rGNa(:,2,2) = rGNa(:,2,2) + tmp2 * u2
185*59599516SKenneth E. Jansen         rGNa(:,2,3) = rGNa(:,2,3) + tmp3 * u2
186*59599516SKenneth E. Jansen         rGNa(:,3,1) = rGNa(:,3,1) + tmp1 * u3
187*59599516SKenneth E. Jansen         rGNa(:,3,2) = rGNa(:,3,2) + tmp2 * u3
188*59599516SKenneth E. Jansen         rGNa(:,3,3) = rGNa(:,3,3) + tmp3 * u3
189*59599516SKenneth E. Jansen      endif
190*59599516SKenneth E. Jansen
191*59599516SKenneth E. Jansen      if(iconvflow.eq.2) then  ! advective form has a taubar term to restore con
192*59599516SKenneth E. Jansen         tmp1 = tauBar
193*59599516SKenneth E. Jansen     &     * ( rLui(:,1) * g1yi(:,2)
194*59599516SKenneth E. Jansen     &       + rLui(:,2) * g2yi(:,2)
195*59599516SKenneth E. Jansen     &       + rLui(:,3) * g3yi(:,2) )
196*59599516SKenneth E. Jansen         tmp2 = tauBar
197*59599516SKenneth E. Jansen     &     * ( rLui(:,1) * g1yi(:,3)
198*59599516SKenneth E. Jansen     &       + rLui(:,2) * g2yi(:,3)
199*59599516SKenneth E. Jansen     &       + rLui(:,3) * g3yi(:,3) )
200*59599516SKenneth E. Jansen         tmp3 = tauBar
201*59599516SKenneth E. Jansen     &     * ( rLui(:,1) * g1yi(:,4)
202*59599516SKenneth E. Jansen     &       + rLui(:,2) * g2yi(:,4)
203*59599516SKenneth E. Jansen     &       + rLui(:,3) * g3yi(:,4) )
204*59599516SKenneth E. Jansen
205*59599516SKenneth E. Jansen         rGNa(:,1,1) = rGNa(:,1,1) + tmp1 * rLui(:,1)
206*59599516SKenneth E. Jansen         rGNa(:,1,2) = rGNa(:,1,2) + tmp1 * rLui(:,2)
207*59599516SKenneth E. Jansen         rGNa(:,1,3) = rGNa(:,1,3) + tmp1 * rLui(:,3)
208*59599516SKenneth E. Jansen         rGNa(:,2,1) = rGNa(:,2,1) + tmp2 * rLui(:,1)
209*59599516SKenneth E. Jansen         rGNa(:,2,2) = rGNa(:,2,2) + tmp2 * rLui(:,2)
210*59599516SKenneth E. Jansen         rGNa(:,2,3) = rGNa(:,2,3) + tmp2 * rLui(:,3)
211*59599516SKenneth E. Jansen         rGNa(:,3,1) = rGNa(:,3,1) + tmp3 * rLui(:,1)
212*59599516SKenneth E. Jansen         rGNa(:,3,2) = rGNa(:,3,2) + tmp3 * rLui(:,2)
213*59599516SKenneth E. Jansen         rGNa(:,3,3) = rGNa(:,3,3) + tmp3 * rLui(:,3)
214*59599516SKenneth E. Jansen      endif   ! end of advective form
215*59599516SKenneth E. Jansenc
216*59599516SKenneth E. Jansenc.... everything that gets multiplied by rNa was supposed
217*59599516SKenneth E. Jansenc     to have density multiplying it.  Do it now.
218*59599516SKenneth E. Jansen
219*59599516SKenneth E. Jansen      rNa(:,1) = rNa(:,1) * rho
220*59599516SKenneth E. Jansen      rNa(:,2) = rNa(:,2) * rho
221*59599516SKenneth E. Jansen      rNa(:,3) = rNa(:,3) * rho
222*59599516SKenneth E. Jansen
223*59599516SKenneth E. Jansenc
224*59599516SKenneth E. Jansenc
225*59599516SKenneth E. Jansenc.... multiply the residual pieces by the weight space
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansen      do aa = 1,nshl
228*59599516SKenneth E. Jansenc
229*59599516SKenneth E. Jansenc.... continuity
230*59599516SKenneth E. Jansenc
231*59599516SKenneth E. Jansen         rl(:,aa,4) = rl(:,aa,4) + WdetJ
232*59599516SKenneth E. Jansen     &              * ( shg(:,aa,1) * uBar(:,1)
233*59599516SKenneth E. Jansen     &                + shg(:,aa,2) * uBar(:,2)
234*59599516SKenneth E. Jansen     &                + shg(:,aa,3) * uBar(:,3) )
235*59599516SKenneth E. Jansenc
236*59599516SKenneth E. Jansenc.... momentum
237*59599516SKenneth E. Jansenc
238*59599516SKenneth E. Jansen         rl(:,aa,1) = rl(:,aa,1) - WdetJ
239*59599516SKenneth E. Jansen     &              * ( shpfun(:,aa) * rNa(:,1)
240*59599516SKenneth E. Jansen     &                + shg(:,aa,1) * rGNa(:,1,1)
241*59599516SKenneth E. Jansen     &                + shg(:,aa,2) * rGNa(:,1,2)
242*59599516SKenneth E. Jansen     &                + shg(:,aa,3) * rGNa(:,1,3) )
243*59599516SKenneth E. Jansen         rl(:,aa,2) = rl(:,aa,2) - WdetJ
244*59599516SKenneth E. Jansen     &              * ( shpfun(:,aa) * rNa(:,2)
245*59599516SKenneth E. Jansen     &                + shg(:,aa,1) * rGNa(:,2,1)
246*59599516SKenneth E. Jansen     &                + shg(:,aa,2) * rGNa(:,2,2)
247*59599516SKenneth E. Jansen     &                + shg(:,aa,3) * rGNa(:,2,3) )
248*59599516SKenneth E. Jansen         rl(:,aa,3) = rl(:,aa,3) - WdetJ
249*59599516SKenneth E. Jansen     &              * ( shpfun(:,aa) * rNa(:,3)
250*59599516SKenneth E. Jansen     &                + shg(:,aa,1) * rGNa(:,3,1)
251*59599516SKenneth E. Jansen     &                + shg(:,aa,2) * rGNa(:,3,2)
252*59599516SKenneth E. Jansen     &                + shg(:,aa,3) * rGNa(:,3,3) )
253*59599516SKenneth E. Jansen
254*59599516SKenneth E. Jansen      enddo
255*59599516SKenneth E. Jansenc
256*59599516SKenneth E. Jansenc.... return
257*59599516SKenneth E. Jansenc
258*59599516SKenneth E. Jansen      return
259*59599516SKenneth E. Jansen      end
260*59599516SKenneth E. Jansen
261*59599516SKenneth E. Jansen
262*59599516SKenneth E. Jansen
263*59599516SKenneth E. Jansenc------------------------------------------------------------------------
264*59599516SKenneth E. Jansenc
265*59599516SKenneth E. Jansenc     calculate the residual for the advection-diffusion equation
266*59599516SKenneth E. Jansenc
267*59599516SKenneth E. Jansenc------------------------------------------------------------------------
268*59599516SKenneth E. Jansen      subroutine e3ResSclr ( uMod,              gGradS,
269*59599516SKenneth E. Jansen     &                       Sclr,		Sdot,	gradS,
270*59599516SKenneth E. Jansen     &                       WdetJ,		rLS,	tauS,
271*59599516SKenneth E. Jansen     &                       shpfun,            shg,    src,
272*59599516SKenneth E. Jansen     &                       diffus,
273*59599516SKenneth E. Jansen     &                       rl )
274*59599516SKenneth E. Jansenc
275*59599516SKenneth E. Jansen      include "common.h"
276*59599516SKenneth E. Jansen
277*59599516SKenneth E. Jansen      real*8    uMod(npro,nsd),   gGradS(npro, nsd),
278*59599516SKenneth E. Jansen     &          Sclr(npro),       Sdot(npro),	gradS(npro,nsd),
279*59599516SKenneth E. Jansen     &          WdetJ(npro),      rLS(npro),	rho(npro),
280*59599516SKenneth E. Jansen     &          tauS(npro),       shpfun(npro,nshl), src(npro),
281*59599516SKenneth E. Jansen     &          shg(npro,nshl,3), rl(npro,nshl)
282*59599516SKenneth E. Jansen
283*59599516SKenneth E. Jansen      real*8    diffus(npro)
284*59599516SKenneth E. Jansenc
285*59599516SKenneth E. Jansenc.... local declarations
286*59599516SKenneth E. Jansenc
287*59599516SKenneth E. Jansen      real*8    rGNa(npro,nsd),   rNa(npro),  rcp(npro), tmp(npro)
288*59599516SKenneth E. Jansen
289*59599516SKenneth E. Jansen      integer   aa
290*59599516SKenneth E. Jansenc
291*59599516SKenneth E. Jansenc.... initialize multipliers for Na and Na_{,i}
292*59599516SKenneth E. Jansenc
293*59599516SKenneth E. Jansen      rNa  = zero
294*59599516SKenneth E. Jansen      rGNa = zero
295*59599516SKenneth E. Jansenc
296*59599516SKenneth E. Jansenc.... Na multiplier
297*59599516SKenneth E. Jansenc
298*59599516SKenneth E. Jansen      tmps     = one-flmpr  ! consistant mass factor
299*59599516SKenneth E. Jansen      rcp = one ! rho * cp
300*59599516SKenneth E. Jansen
301*59599516SKenneth E. Jansen
302*59599516SKenneth E. Jansen         rNa = rcp*(tmps*Sdot + uMod(:,1) * gradS(:,1)
303*59599516SKenneth E. Jansen     &                         + uMod(:,2) * gradS(:,2)
304*59599516SKenneth E. Jansen     &                         + uMod(:,3) * gradS(:,3) )
305*59599516SKenneth E. Jansen     &        - src
306*59599516SKenneth E. Jansen
307*59599516SKenneth E. Jansen
308*59599516SKenneth E. Jansen
309*59599516SKenneth E. Jansen      tmp = rcp * tauS * (rLS -src)
310*59599516SKenneth E. Jansenc
311*59599516SKenneth E. Jansenc.... Na,i multiplier
312*59599516SKenneth E. Jansenc
313*59599516SKenneth E. Jansen      rGNa(:,1) = diffus * gradS(:,1) + uMod(:,1) * tmp
314*59599516SKenneth E. Jansen      rGNa(:,2) = diffus * gradS(:,2) + uMod(:,2) * tmp
315*59599516SKenneth E. Jansen      rGNa(:,3) = diffus * gradS(:,3) + uMod(:,3) * tmp
316*59599516SKenneth E. Jansenc
317*59599516SKenneth E. Jansen      if (idcsclr(1) .ne. 0) then
318*59599516SKenneth E. Jansen         if ((idcsclr(2).eq.1 .and. isclr.eq.1) .or.
319*59599516SKenneth E. Jansen     &        (idcsclr(2).eq.2 .and. isclr.eq.2)) then ! scalar with dc
320*59599516SKenneth E. Jansenc
321*59599516SKenneth E. Jansenc.... add the contribution of DC to residual
322*59599516SKenneth E. Jansenc
323*59599516SKenneth E. Jansen            rGNa(:,1) = rGNa(:,1) + gGradS(:,1) ! gGradS is
324*59599516SKenneth E. Jansen            rGNa(:,2) = rGNa(:,2) + gGradS(:,2) ! g^{ij}*Y_{j}*dcFct
325*59599516SKenneth E. Jansen            rGNa(:,3) = rGNa(:,3) + gGradS(:,3) ! calculated in e3dc.f
326*59599516SKenneth E. Jansenc
327*59599516SKenneth E. Jansen         endif
328*59599516SKenneth E. Jansen      endif                     ! end of idcsclr
329*59599516SKenneth E. Jansenc
330*59599516SKenneth E. Jansenc.... multiply the residual pieces by the weight space
331*59599516SKenneth E. Jansenc
332*59599516SKenneth E. Jansen      do aa = 1,nshl
333*59599516SKenneth E. Jansenc
334*59599516SKenneth E. Jansen         rl(:,aa) = rl(:,aa)	- WdetJ
335*59599516SKenneth E. Jansen     &                        * ( shpfun(:,aa) * rNa(:)
336*59599516SKenneth E. Jansen     &                        + shg(:,aa,1) * rGNa(:,1)
337*59599516SKenneth E. Jansen     &                        + shg(:,aa,2) * rGNa(:,2)
338*59599516SKenneth E. Jansen     &                        + shg(:,aa,3) * rGNa(:,3) )
339*59599516SKenneth E. Jansen
340*59599516SKenneth E. Jansen      enddo
341*59599516SKenneth E. Jansenc
342*59599516SKenneth E. Jansenc.... return
343*59599516SKenneth E. Jansenc
344*59599516SKenneth E. Jansen      return
345*59599516SKenneth E. Jansen      end
346*59599516SKenneth E. Jansen
347*59599516SKenneth E. Jansen
348*59599516SKenneth E. Jansen
349*59599516SKenneth E. Jansenc----------------------------------------------------------------------
350*59599516SKenneth E. Jansenc     Calculate the strong PDE residual.
351*59599516SKenneth E. Jansenc----------------------------------------------------------------------
352*59599516SKenneth E. Jansen      subroutine e3resStrongPDE(
353*59599516SKenneth E. Jansen     &     aci,  u1,   u2,   u3,   Temp, rho,  xx,
354*59599516SKenneth E. Jansen     &           g1yi, g2yi, g3yi,
355*59599516SKenneth E. Jansen     &     rLui, src, divqi)
356*59599516SKenneth E. Jansen      include "common.h"
357*59599516SKenneth E. Jansenc     INPUTS
358*59599516SKenneth E. Jansen      double precision, intent(in), dimension(npro,nsd) ::
359*59599516SKenneth E. Jansen     &     aci, xx
360*59599516SKenneth E. Jansen      double precision, intent(in), dimension(npro,nflow) ::
361*59599516SKenneth E. Jansen     &     g1yi, g2yi, g3yi
362*59599516SKenneth E. Jansen      double precision, intent(in), dimension(npro) ::
363*59599516SKenneth E. Jansen     &     u1, u2, u3, Temp, rho
364*59599516SKenneth E. Jansenc     OUTPUTS
365*59599516SKenneth E. Jansen      double precision, intent(out), dimension(npro,nsd) ::
366*59599516SKenneth E. Jansen     &     rLui, src
367*59599516SKenneth E. Jansenc     LOCALS
368*59599516SKenneth E. Jansen      double precision, dimension(npro) ::
369*59599516SKenneth E. Jansen     &     divu
370*59599516SKenneth E. Jansen      double precision, dimension(npro,nsd) ::
371*59599516SKenneth E. Jansen     &     divqi
372*59599516SKenneth E. Jansen      double precision, dimension(nsd) ::
373*59599516SKenneth E. Jansen     &     omega
374*59599516SKenneth E. Jansenc.... compute source term
375*59599516SKenneth E. Jansen      src = zero
376*59599516SKenneth E. Jansen      if(matflg(5,1) .ge. 1) then
377*59599516SKenneth E. Jansenc        body force contribution to src
378*59599516SKenneth E. Jansen         bfx      = datmat(1,5,1) ! Boussinesq, g*alfap
379*59599516SKenneth E. Jansen         bfy      = datmat(2,5,1)
380*59599516SKenneth E. Jansen         bfz      = datmat(3,5,1)
381*59599516SKenneth E. Jansen         select case ( matflg(5,1) )
382*59599516SKenneth E. Jansen         case ( 1 )             ! standard linear body force
383*59599516SKenneth E. Jansen            src(:,1) = bfx
384*59599516SKenneth E. Jansen            src(:,2) = bfy
385*59599516SKenneth E. Jansen            src(:,3) = bfz
386*59599516SKenneth E. Jansen         case ( 2 )             ! boussinesq body force
387*59599516SKenneth E. Jansen            Tref = datmat(2,2,1)
388*59599516SKenneth E. Jansen            src(:,1) = bfx * (Temp(:)-Tref)
389*59599516SKenneth E. Jansen            src(:,2) = bfy * (Temp(:)-Tref)
390*59599516SKenneth E. Jansen            src(:,3) = bfz * (Temp(:)-Tref)
391*59599516SKenneth E. Jansen         case ( 3 )             ! user specified f(x,y,z)
392*59599516SKenneth E. Jansen            call e3source(xx, src)
393*59599516SKenneth E. Jansen         end select
394*59599516SKenneth E. Jansen      endif
395*59599516SKenneth E. Jansenc
396*59599516SKenneth E. Jansen      if(matflg(6,1).eq.1) then
397*59599516SKenneth E. Jansenc        coriolis force contribution to src
398*59599516SKenneth E. Jansen         omega(1)=datmat(1,6,1)
399*59599516SKenneth E. Jansen         omega(2)=datmat(2,6,1)
400*59599516SKenneth E. Jansen         omega(3)=datmat(3,6,1)
401*59599516SKenneth E. Jansenc  note that we calculate f as if it contains the usual source
402*59599516SKenneth E. Jansenc  plus the Coriolis and the centrifugal forces taken to the rhs (sign change)
403*59599516SKenneth E. Jansenc  as long as we are doing SUPG with no accounting for these terms in the
404*59599516SKenneth E. Jansenc  LHS this is the only change (which will find its way to the RHS momentum
405*59599516SKenneth E. Jansenc  equation (both Galerkin and SUPG parts)).
406*59599516SKenneth E. Jansenc
407*59599516SKenneth E. Jansenc  uncomment later if you want rotation always about z axis
408*59599516SKenneth E. Jansenc                 orig_src - om x om x r       - two om x u
409*59599516SKenneth E. Jansenc
410*59599516SKenneth E. Jansenc$$$          src(:,1)=src(:,1)+omega(3)*omega(3)*xx(:,1)+two*omega(3)*u2
411*59599516SKenneth E. Jansenc$$$          src(:,2)=src(:,2)+omega(3)*omega(3)*xx(:,2)-two*omega(3)*u1
412*59599516SKenneth E. Jansenc
413*59599516SKenneth E. Jansenc more general for testing
414*59599516SKenneth E. Jansenc
415*59599516SKenneth E. Jansen         src(:,1)=src(:,1)
416*59599516SKenneth E. Jansen     &        -omega(2)*(omega(1)*xx(:,2)-omega(2)*xx(:,1))
417*59599516SKenneth E. Jansen     &        -omega(3)*(omega(1)*xx(:,3)-omega(3)*xx(:,1))
418*59599516SKenneth E. Jansen     &        -two*(omega(2)*u3-omega(3)*u2)
419*59599516SKenneth E. Jansen         src(:,2)=src(:,2)
420*59599516SKenneth E. Jansen     &        -omega(1)*(omega(2)*xx(:,1)-omega(1)*xx(:,2))
421*59599516SKenneth E. Jansen     &        -omega(3)*(omega(2)*xx(:,3)-omega(3)*xx(:,2))
422*59599516SKenneth E. Jansen     &        -two*(omega(3)*u1-omega(1)*u3)
423*59599516SKenneth E. Jansen         src(:,3)=src(:,3)
424*59599516SKenneth E. Jansen     &        -omega(1)*(omega(3)*xx(:,1)-omega(1)*xx(:,3))
425*59599516SKenneth E. Jansen     &        -omega(2)*(omega(3)*xx(:,2)-omega(2)*xx(:,3))
426*59599516SKenneth E. Jansen     &        -two*(omega(1)*u2-omega(2)*u1)
427*59599516SKenneth E. Jansen      endif
428*59599516SKenneth E. Jansenc     calculate momentum residual
429*59599516SKenneth E. Jansen      rLui(:,1) =(aci(:,1) + u1 * g1yi(:,2)
430*59599516SKenneth E. Jansen     &     + u2 * g2yi(:,2)
431*59599516SKenneth E. Jansen     &     + u3 * g3yi(:,2) - src(:,1) ) * rho
432*59599516SKenneth E. Jansen     &     + g1yi(:,1)
433*59599516SKenneth E. Jansen     &        - divqi(:,1)
434*59599516SKenneth E. Jansen      rLui(:,2) =(aci(:,2) + u1 * g1yi(:,3)
435*59599516SKenneth E. Jansen     &     + u2 * g2yi(:,3)
436*59599516SKenneth E. Jansen     &     + u3 * g3yi(:,3) - src(:,2) ) * rho
437*59599516SKenneth E. Jansen     &     + g2yi(:,1)
438*59599516SKenneth E. Jansen     &        - divqi(:,2)
439*59599516SKenneth E. Jansen      rLui(:,3) =(aci(:,3) + u1 * g1yi(:,4)
440*59599516SKenneth E. Jansen     &     + u2 * g2yi(:,4)
441*59599516SKenneth E. Jansen     &     + u3 * g3yi(:,4) - src(:,3) ) * rho
442*59599516SKenneth E. Jansen     &     + g3yi(:,1)
443*59599516SKenneth E. Jansen     &        - divqi(:,3)
444*59599516SKenneth E. Jansen      if(iconvflow.eq.1) then
445*59599516SKenneth E. Jansen         divu(:)  = (g1yi(:,2) + g2yi(:,3) + g3yi(:,4))*rho
446*59599516SKenneth E. Jansen         rLui(:,1)=rlui(:,1)+u1(:)*divu(:)
447*59599516SKenneth E. Jansen         rLui(:,2)=rlui(:,2)+u2(:)*divu(:)
448*59599516SKenneth E. Jansen         rLui(:,3)=rlui(:,3)+u3(:)*divu(:)
449*59599516SKenneth E. Jansen      endif
450*59599516SKenneth E. Jansenc
451*59599516SKenneth E. Jansen      return
452*59599516SKenneth E. Jansen      end subroutine e3resStrongPDE
453