xref: /phasta/phSolver/incompressible/e3b.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine e3b (ul,      yl,      acl,     iBCB,    BCB,
2*59599516SKenneth E. Jansen     &                  shpb,    shglb,
3*59599516SKenneth E. Jansen     &                  xlb,     rl,      sgn,     dwl,     xKebe)
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc----------------------------------------------------------------------
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc   This routine calculates the 3D RHS residual of the fluid boundary
8*59599516SKenneth E. Jansenc   elements.
9*59599516SKenneth E. Jansenc
10*59599516SKenneth E. Jansenc input:
11*59599516SKenneth E. Jansenc  yl     (npro,nshl,ndof)      : Y variables
12*59599516SKenneth E. Jansenc  iBCB   (npro,ndiBCB)         : boundary condition code (iBCB(:,1) is
13*59599516SKenneth E. Jansenc      a bit tested boundary integral flag i.e.
14*59599516SKenneth E. Jansenc                  if set to value of BCB      if set to floating value
15*59599516SKenneth E. Jansenc      iBCB(:,1) : convective flux * 1            0  (ditto to all below)
16*59599516SKenneth E. Jansenc                  pressure   flux * 2
17*59599516SKenneth E. Jansenc                  viscous    flux * 4
18*59599516SKenneth E. Jansenc                  heat       flux * 8
19*59599516SKenneth E. Jansenc                  turbulence wall * 16
20*59599516SKenneth E. Jansenc                  scalarI   flux  * 16*2^I
21*59599516SKenneth E. Jansenc                  (where I is the scalar number)
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansenc      iBCB(:,2) is the srfID given by the user in MGI that we will
24*59599516SKenneth E. Jansenc                collect integrated fluxes for.
25*59599516SKenneth E. Jansenc
26*59599516SKenneth E. Jansenc  BCB    (npro,nshlb,ndBCB)    : Boundary Condition values
27*59599516SKenneth E. Jansenc                                  BCB (1) : mass flux
28*59599516SKenneth E. Jansenc                                  BCB (2) : pressure
29*59599516SKenneth E. Jansenc                                  BCB (3) : viscous flux in x1-direc.
30*59599516SKenneth E. Jansenc                                  BCB (4) : viscous flux in x2-direc.
31*59599516SKenneth E. Jansenc                                  BCB (5) : viscous flux in x3-direc.
32*59599516SKenneth E. Jansenc                                  BCB (6) : heat flux
33*59599516SKenneth E. Jansenc  shpb   (nen,ngaussb)           : boundary element shape-functions
34*59599516SKenneth E. Jansenc  shglb  (nsd,nen,ngaussb)       : boundary element grad-shape-functions
35*59599516SKenneth E. Jansenc  xlb    (npro,nenl,nsd)       : nodal coordinates at current step
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansenc output:
38*59599516SKenneth E. Jansenc  rl     (npro,nshl,nflow)      : element residual
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansenc Note: Always the first side of the element is on the boundary.
41*59599516SKenneth E. Jansenc       However, note that for higher-order elements the nodes on
42*59599516SKenneth E. Jansenc       the boundary side are not the first nshlb nodes, see the
43*59599516SKenneth E. Jansenc       array mnodeb.
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2b.f)
47*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
48*59599516SKenneth E. Jansenc Alberto Figueroa, Winter 2004.  CMM-FSI
49*59599516SKenneth E. Jansenc Irene Vignon, Spring 2004
50*59599516SKenneth E. Jansenc----------------------------------------------------------------------
51*59599516SKenneth E. Jansenc
52*59599516SKenneth E. Jansen        include "common.h"
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansen        dimension yl(npro,nshl,ndof),          iBCB(npro,ndiBCB),
55*59599516SKenneth E. Jansen     &            BCB(npro,nshlb,ndBCB),       shpb(nshl,ngaussb),
56*59599516SKenneth E. Jansen     &            shglb(nsd,nshl,ngaussb),
57*59599516SKenneth E. Jansen     &            xlb(npro,nenl,nsd),          ul(npro,nshl,nsd),
58*59599516SKenneth E. Jansen     &            acl(npro,nshl,ndof),
59*59599516SKenneth E. Jansen     &            rl(npro,nshl,nflow)
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansen        dimension g1yi(npro,ndof),             g2yi(npro,ndof),
62*59599516SKenneth E. Jansen     &            g3yi(npro,ndof),             WdetJb(npro),
63*59599516SKenneth E. Jansen     &            bnorm(npro,nsd)
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansen        dimension u1(npro),                    u2(npro),
66*59599516SKenneth E. Jansen     &            u3(npro),                    rho(npro),
67*59599516SKenneth E. Jansen     &            unm(npro),                   pres(npro),
68*59599516SKenneth E. Jansen     &            vdot(npro,nsd),              rlKwall(npro,nshlb,nsd)
69*59599516SKenneth E. Jansenc
70*59599516SKenneth E. Jansen        dimension rou(npro),                   rmu(npro)
71*59599516SKenneth E. Jansenc
72*59599516SKenneth E. Jansen        dimension tau1n(npro),
73*59599516SKenneth E. Jansen     &            tau2n(npro),                 tau3n(npro)
74*59599516SKenneth E. Jansenc
75*59599516SKenneth E. Jansen        dimension lnode(27),               sgn(npro,nshl),
76*59599516SKenneth E. Jansen     &            shape(npro,nshl),        shdrv(npro,nsd,nshl),
77*59599516SKenneth E. Jansen     &            rNa(npro,4)
78*59599516SKenneth E. Jansen
79*59599516SKenneth E. Jansen        real*8    xmudmi(npro,ngauss),      dwl(npro,nshl)
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansen      	dimension xKebe(npro,9,nshl,nshl),  rKwall_glob(npro,9,nshl,nshl)
82*59599516SKenneth E. Jansen      	integer   intp
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen
85*59599516SKenneth E. Jansenc
86*59599516SKenneth E. Jansenc.... compute the nodes which lie on the boundary (hierarchic)
87*59599516SKenneth E. Jansenc
88*59599516SKenneth E. Jansen        call getbnodes(lnode)
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansenc.... loop through the integration points
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen        if(lcsyst.eq.3.or.lcsyst.eq.4) then
93*59599516SKenneth E. Jansen           ngaussb = nintb(lcsyst)
94*59599516SKenneth E. Jansen        else
95*59599516SKenneth E. Jansen           ngaussb = nintb(lcsyst)
96*59599516SKenneth E. Jansen        endif
97*59599516SKenneth E. Jansen
98*59599516SKenneth E. Jansen        do intp = 1, ngaussb
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... get the hierarchic shape functions at this int point
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen        call getshp(shpb,        shglb,        sgn,
103*59599516SKenneth E. Jansen     &              shape,       shdrv)
104*59599516SKenneth E. Jansenc
105*59599516SKenneth E. Jansenc     NOTE I DID NOT PASS THE lnode down.  It is not needed
106*59599516SKenneth E. Jansenc     since the shape functions are zero on the boundary
107*59599516SKenneth E. Jansenc
108*59599516SKenneth E. Jansenc     Note that xmudmi is not calculated at these quadrature
109*59599516SKenneth E. Jansenc     points so you give it a zero.  This has implications.
110*59599516SKenneth E. Jansenc     the traction calculated by this approach will include
111*59599516SKenneth E. Jansenc     molecular stresses ONLY.  This is why we will use the
112*59599516SKenneth E. Jansenc     consistent flux method to obtain the forces when doing
113*59599516SKenneth E. Jansenc     effective viscosity wall modeling.  When doing slip velocity
114*59599516SKenneth E. Jansenc     this is not a problem since the traction is given from the
115*59599516SKenneth E. Jansenc     log law relation (not the viscosity).
116*59599516SKenneth E. Jansenc
117*59599516SKenneth E. Jansen        xmudmi=zero
118*59599516SKenneth E. Jansenc
119*59599516SKenneth E. Jansenc.... get necessary fluid properties (including eddy viscosity)
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansen        call getdiff(dwl, yl,     shape,     xmudmi, xlb,   rmu, rho)
122*59599516SKenneth E. Jansenc
123*59599516SKenneth E. Jansenc.... calculate the integraton variables
124*59599516SKenneth E. Jansenc
125*59599516SKenneth E. Jansen        call e3bvar (yl,              acl,             ul,
126*59599516SKenneth E. Jansen     &               shape,
127*59599516SKenneth E. Jansen     &               shdrv,           xlb,
128*59599516SKenneth E. Jansen     &               lnode,           WdetJb,
129*59599516SKenneth E. Jansen     &               bnorm,           pres,
130*59599516SKenneth E. Jansen     &               u1,              u2,              u3,
131*59599516SKenneth E. Jansen     &               rmu,             unm,
132*59599516SKenneth E. Jansen     &               tau1n,           tau2n,           tau3n,
133*59599516SKenneth E. Jansen     &               vdot,            rlKwall,
134*59599516SKenneth E. Jansen     &               xKebe,           rKwall_glob)
135*59599516SKenneth E. Jansen
136*59599516SKenneth E. Jansenc
137*59599516SKenneth E. Jansenc.... -----------------> boundary conditions <-------------------
138*59599516SKenneth E. Jansenc
139*59599516SKenneth E. Jansen        do iel = 1, npro
140*59599516SKenneth E. Jansenc
141*59599516SKenneth E. Jansenc  if we have a nonzero value then
142*59599516SKenneth E. Jansenc  calculate the fluxes through this surface
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansen           iface = abs(iBCB(iel,2))
145*59599516SKenneth E. Jansen!MR CHANGE
146*59599516SKenneth E. Jansen           if(iface>MAXSURF) then
147*59599516SKenneth E. Jansen            write(*,*) 'iface>MAXSURF',iface,MAXSURF
148*59599516SKenneth E. Jansen            write(*,*) 'Increase MAXSURF or decrease surfID in geom.spj'
149*59599516SKenneth E. Jansen            stop !brutal but mpi_finalize will not work without broadcasting the information to other processors.
150*59599516SKenneth E. Jansen           endif
151*59599516SKenneth E. Jansen!MR CHANGE END
152*59599516SKenneth E. Jansen
153*59599516SKenneth E. Jansen           if (nsrflist(iface) .ne. 0 .and. ires.ne.2) then
154*59599516SKenneth E. Jansen              flxID(1,iface) =  flxID(1,iface) + WdetJb(iel)! measure area too
155*59599516SKenneth E. Jansen              flxID(2,iface) =  flxID(2,iface) - WdetJb(iel) * unm(iel)
156*59599516SKenneth E. Jansen              flxID(3,iface) = flxID(3,iface)
157*59599516SKenneth E. Jansen     &                   - ( tau1n(iel) - bnorm(iel,1)*pres(iel))
158*59599516SKenneth E. Jansen     &                   * WdetJb(iel)
159*59599516SKenneth E. Jansen              flxID(4,iface) = flxID(4,iface)
160*59599516SKenneth E. Jansen     &                   - ( tau2n(iel) - bnorm(iel,2)*pres(iel))
161*59599516SKenneth E. Jansen     &                   * WdetJb(iel)
162*59599516SKenneth E. Jansen              flxID(5,iface) = flxID(5,iface)
163*59599516SKenneth E. Jansen     &                   - ( tau3n(iel) - bnorm(iel,3)*pres(iel))
164*59599516SKenneth E. Jansen     &                   * WdetJb(iel)
165*59599516SKenneth E. Jansen
166*59599516SKenneth E. Jansen           endif
167*59599516SKenneth E. Jansenc
168*59599516SKenneth E. Jansenc
169*59599516SKenneth E. Jansenc.... mass flux
170*59599516SKenneth E. Jansenc
171*59599516SKenneth E. Jansen
172*59599516SKenneth E. Jansen           if (btest(iBCB(iel,1),0)) then
173*59599516SKenneth E. Jansen              unm(iel)  = zero
174*59599516SKenneth E. Jansen              do n = 1, nshlb
175*59599516SKenneth E. Jansen                 nodlcl = lnode(n)
176*59599516SKenneth E. Jansen                 unm(iel) = unm(iel)
177*59599516SKenneth E. Jansen     &                    + shape(iel,nodlcl) * BCB(iel,n,1)
178*59599516SKenneth E. Jansen              enddo
179*59599516SKenneth E. Jansen           endif
180*59599516SKenneth E. Jansenc
181*59599516SKenneth E. Jansenc.... pressure
182*59599516SKenneth E. Jansenc
183*59599516SKenneth E. Jansen           if (btest(iBCB(iel,1),1)) then
184*59599516SKenneth E. Jansen              pres(iel) = zero
185*59599516SKenneth E. Jansen              do n = 1, nshlb
186*59599516SKenneth E. Jansen                 nodlcl = lnode(n)
187*59599516SKenneth E. Jansen                 pres(iel) = pres(iel)
188*59599516SKenneth E. Jansen     &                     + shape(iel,nodlcl) * BCB(iel,n,2)
189*59599516SKenneth E. Jansen              enddo
190*59599516SKenneth E. Jansen           endif
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansenc.... viscous flux
193*59599516SKenneth E. Jansenc
194*59599516SKenneth E. Jansen           if (btest(iBCB(iel,1),2)) then
195*59599516SKenneth E. Jansen              tau1n(iel) = zero
196*59599516SKenneth E. Jansen              tau2n(iel) = zero
197*59599516SKenneth E. Jansen              tau3n(iel) = zero
198*59599516SKenneth E. Jansen              do n = 1, nshlb
199*59599516SKenneth E. Jansen                 nodlcl = lnode(n)
200*59599516SKenneth E. Jansen                 tau1n(iel) = tau1n(iel)
201*59599516SKenneth E. Jansen     &                      + shape(iel,nodlcl)*BCB(iel,n,3)
202*59599516SKenneth E. Jansen                 tau2n(iel) = tau2n(iel)
203*59599516SKenneth E. Jansen     &                      + shape(iel,nodlcl)*BCB(iel,n,4)
204*59599516SKenneth E. Jansen                 tau3n(iel) = tau3n(iel)
205*59599516SKenneth E. Jansen     &                      + shape(iel,nodlcl)*BCB(iel,n,5)
206*59599516SKenneth E. Jansen              enddo
207*59599516SKenneth E. Jansen           endif
208*59599516SKenneth E. Jansen!KJ CHANGE      if(ideformwall.eq.1) then
209*59599516SKenneth E. Jansenc
210*59599516SKenneth E. Jansenc.... turbulence wall (as a way of checking for deformable wall stiffness)
211*59599516SKenneth E. Jansenc
212*59599516SKenneth E. Jansen           if (btest(iBCB(iel,1),4)) then
213*59599516SKenneth E. Jansen              rlKwall(iel,:,:) = rlKwall(iel,:,:) / ngaussb ! divide by number of gauss points
214*59599516SKenneth E. Jansen              pres(iel) = zero                              ! to avoid the gauss point loop
215*59599516SKenneth E. Jansen              tau1n(iel) = zero                             ! and make the traction contribution
216*59599516SKenneth E. Jansen              tau2n(iel) = zero                             ! zero
217*59599516SKenneth E. Jansen              tau3n(iel) = zero
218*59599516SKenneth E. Jansen           else
219*59599516SKenneth E. Jansen              rlKwall(iel,:,:) = zero                       ! this is not a deformable element
220*59599516SKenneth E. Jansen              vdot(iel,:) = zero
221*59599516SKenneth E. Jansen              xKebe(iel,:,:,:) = zero
222*59599516SKenneth E. Jansen              rKwall_glob(iel,:,:,:) = zero                 ! no stiffness: not a wall element
223*59599516SKenneth E. Jansen           endif
224*59599516SKenneth E. Jansen!KJ CHANGE      endif
225*59599516SKenneth E. Jansen
226*59599516SKenneth E. Jansen        enddo                                               ! end of bc loop
227*59599516SKenneth E. Jansenc
228*59599516SKenneth E. Jansenc$$$c.... if we are computing the bdry for the consistent
229*59599516SKenneth E. Jansenc$$$c     boundary forces, we must not include the surface elements
230*59599516SKenneth E. Jansenc$$$c     in the computataion (could be done MUCH more efficiently!)--->
231*59599516SKenneth E. Jansen                                                                  !this
232*59599516SKenneth E. Jansen                                                                  !comment should read as for the consistent flux calculation rather than boundary forces
233*59599516SKenneth E. Jansenc$$$c
234*59599516SKenneth E. Jansen        if (ires .eq. 2) then
235*59599516SKenneth E. Jansen           do iel = 1, npro
236*59599516SKenneth E. Jansen              if (nsrflist(iBCB(iel,2)) .ne. 0) then
237*59599516SKenneth E. Jansen                 unm(iel) = zero
238*59599516SKenneth E. Jansen                 tau1n(iel) = zero
239*59599516SKenneth E. Jansen                 tau2n(iel) = zero
240*59599516SKenneth E. Jansen                 tau3n(iel) = zero
241*59599516SKenneth E. Jansenc                 pres(iel) = zero
242*59599516SKenneth E. Jansenc
243*59599516SKenneth E. Jansenc whatever is zeroed here will beome part of the post-processed surface
244*59599516SKenneth E. Jansenc                 "traction force"
245*59599516SKenneth E. Jansen!KJ CHANGE         if(ideformwall.eq.1) then
246*59599516SKenneth E. Jansenc
247*59599516SKenneth E. Jansenc uncomment the next two lines to get all of the t vector coming from
248*59599516SKenneth E. Jansenc                 Alberto's wall motion model.
249*59599516SKenneth E. Jansenc                 vdot(iel,:)=zero
250*59599516SKenneth E. Jansenc                 rlKwall(iel,:,:)=zero
251*59599516SKenneth E. Jansen
252*59599516SKenneth E. Jansenc
253*59599516SKenneth E. Jansenc uncomment the next 8 lines to get only the tangential part
254*59599516SKenneth E. Jansenc
255*59599516SKenneth E. Jansen                  vn=dot_product(vdot(iel,:),bnorm(iel,:))
256*59599516SKenneth E. Jansen                  vdot(iel,:)=vn*bnorm(iel,:)
257*59599516SKenneth E. Jansen                  walln1=dot_product(rlkwall(iel,1,:),bnorm(iel,:))
258*59599516SKenneth E. Jansen                  walln2=dot_product(rlkwall(iel,2,:),bnorm(iel,:))
259*59599516SKenneth E. Jansen                  walln3=dot_product(rlkwall(iel,3,:),bnorm(iel,:))
260*59599516SKenneth E. Jansen                  rlkwall(iel,1,:)=walln1*bnorm(iel,:)
261*59599516SKenneth E. Jansen                  rlkwall(iel,2,:)=walln2*bnorm(iel,:)
262*59599516SKenneth E. Jansen                  rlkwall(iel,3,:)=walln3*bnorm(iel,:)
263*59599516SKenneth E. Jansen!KJ CHANGE              endif
264*59599516SKenneth E. Jansen             endif
265*59599516SKenneth E. Jansen           enddo
266*59599516SKenneth E. Jansen        endif
267*59599516SKenneth E. Jansenc
268*59599516SKenneth E. Jansenc.... assemble the contributions
269*59599516SKenneth E. Jansenc
270*59599516SKenneth E. Jansen        rNa(:,1) = -WdetJb * ( tau1n - bnorm(:,1) * pres - vdot(:,1))
271*59599516SKenneth E. Jansen        rNa(:,2) = -WdetJb * ( tau2n - bnorm(:,2) * pres - vdot(:,2))
272*59599516SKenneth E. Jansen        rNa(:,3) = -WdetJb * ( tau3n - bnorm(:,3) * pres - vdot(:,3))
273*59599516SKenneth E. Jansen        rNa(:,4) =  WdetJb * unm
274*59599516SKenneth E. Jansenc
275*59599516SKenneth E. Jansen        if(iconvflow.eq.1) then     ! conservative form was integrated
276*59599516SKenneth E. Jansen                                    ! by parts and has a convective
277*59599516SKenneth E. Jansen                                    ! boundary integral
278*59599516SKenneth E. Jansenc
279*59599516SKenneth E. Jansenc.... assemble the contributions
280*59599516SKenneth E. Jansenc
281*59599516SKenneth E. Jansen           rou=rho*unm
282*59599516SKenneth E. Jansen           rNa(:,1) = rNa(:,1) + WdetJb * rou * u1
283*59599516SKenneth E. Jansen           rNa(:,2) = rNa(:,2) + WdetJb * rou * u2
284*59599516SKenneth E. Jansen           rNa(:,3) = rNa(:,3) + WdetJb * rou * u3
285*59599516SKenneth E. Jansen        endif
286*59599516SKenneth E. Jansenc
287*59599516SKenneth E. Jansenc.... ------------------------->  Residual  <--------------------------
288*59599516SKenneth E. Jansenc
289*59599516SKenneth E. Jansenc.... add the flux to the residual
290*59599516SKenneth E. Jansenc
291*59599516SKenneth E. Jansen        do n = 1, nshlb
292*59599516SKenneth E. Jansen           nodlcl = lnode(n)
293*59599516SKenneth E. Jansen
294*59599516SKenneth E. Jansen           rl(:,nodlcl,1) = rl(:,nodlcl,1) - shape(:,nodlcl) * rNa(:,1)
295*59599516SKenneth E. Jansen           rl(:,nodlcl,2) = rl(:,nodlcl,2) - shape(:,nodlcl) * rNa(:,2)
296*59599516SKenneth E. Jansen           rl(:,nodlcl,3) = rl(:,nodlcl,3) - shape(:,nodlcl) * rNa(:,3)
297*59599516SKenneth E. Jansen           rl(:,nodlcl,4) = rl(:,nodlcl,4) - shape(:,nodlcl) * rNa(:,4)
298*59599516SKenneth E. Jansen
299*59599516SKenneth E. Jansen        enddo
300*59599516SKenneth E. Jansen        if(ideformwall.eq.1) then
301*59599516SKenneth E. Jansen           rl(:,1,1) = rl(:,1,1) - rlKwall(:,1,1)
302*59599516SKenneth E. Jansen           rl(:,1,2) = rl(:,1,2) - rlKwall(:,1,2)
303*59599516SKenneth E. Jansen           rl(:,1,3) = rl(:,1,3) - rlKwall(:,1,3)
304*59599516SKenneth E. Jansen
305*59599516SKenneth E. Jansen           rl(:,2,1) = rl(:,2,1) - rlKwall(:,2,1)
306*59599516SKenneth E. Jansen           rl(:,2,2) = rl(:,2,2) - rlKwall(:,2,2)
307*59599516SKenneth E. Jansen           rl(:,2,3) = rl(:,2,3) - rlKwall(:,2,3)
308*59599516SKenneth E. Jansen
309*59599516SKenneth E. Jansen           rl(:,3,1) = rl(:,3,1) - rlKwall(:,3,1)
310*59599516SKenneth E. Jansen           rl(:,3,2) = rl(:,3,2) - rlKwall(:,3,2)
311*59599516SKenneth E. Jansen           rl(:,3,3) = rl(:,3,3) - rlKwall(:,3,3)
312*59599516SKenneth E. Jansen        endif
313*59599516SKenneth E. Jansenc
314*59599516SKenneth E. Jansenc.... -------------------->  Aerodynamic Forces  <---------------------
315*59599516SKenneth E. Jansenc
316*59599516SKenneth E. Jansen        if (((ires .ne. 2) .and. (iter .eq. nitr))
317*59599516SKenneth E. Jansen     &                     .and. (abs(itwmod).eq.1)) then
318*59599516SKenneth E. Jansenc
319*59599516SKenneth E. Jansenc.... compute the forces on the body
320*59599516SKenneth E. Jansenc
321*59599516SKenneth E. Jansen           where (nsrflist(iBCB(:,2)).eq.1)
322*59599516SKenneth E. Jansen              tau1n = ( tau1n - bnorm(:,1)*pres)  * WdetJb
323*59599516SKenneth E. Jansen              tau2n = ( tau2n - bnorm(:,2)*pres)  * WdetJb
324*59599516SKenneth E. Jansen              tau3n = ( tau3n - bnorm(:,3)*pres)  * WdetJb
325*59599516SKenneth E. Jansen           elsewhere
326*59599516SKenneth E. Jansen              tau1n = zero
327*59599516SKenneth E. Jansen              tau2n = zero
328*59599516SKenneth E. Jansen              tau3n = zero
329*59599516SKenneth E. Jansen           endwhere
330*59599516SKenneth E. Jansenc
331*59599516SKenneth E. Jansenc Note that the sign has changed from the compressible code to
332*59599516SKenneth E. Jansenc make it consistent with the way the bflux calculates the forces
333*59599516SKenneth E. Jansenc Note also that Hflux has moved to e3btemp
334*59599516SKenneth E. Jansenc
335*59599516SKenneth E. Jansen          Force(1) = Force(1) - sum(tau1n)
336*59599516SKenneth E. Jansen          Force(2) = Force(2) - sum(tau2n)
337*59599516SKenneth E. Jansen          Force(3) = Force(3) - sum(tau3n)
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansenc
340*59599516SKenneth E. Jansen        endif
341*59599516SKenneth E. Jansenc
342*59599516SKenneth E. Jansenc.... end of integration loop
343*59599516SKenneth E. Jansenc
344*59599516SKenneth E. Jansen        enddo
345*59599516SKenneth E. Jansen        if(ideformwall.eq.1) then
346*59599516SKenneth E. Jansenc
347*59599516SKenneth E. Jansenc.... -----> Wall Stiffness and Mass matrices for implicit LHS  <-----------
348*59599516SKenneth E. Jansenc
349*59599516SKenneth E. Jansenc.... Now we simply have to add the stiffness contribution in rKwall_glob to
350*59599516SKenneth E. Jansenc.... the mass contribution already contained in xKebe
351*59599516SKenneth E. Jansen
352*59599516SKenneth E. Jansenc.... this line is going to destroy the mass matrix contribution
353*59599516SKenneth E. Jansen
354*59599516SKenneth E. Jansen
355*59599516SKenneth E. Jansenc      xKebe = zero
356*59599516SKenneth E. Jansen
357*59599516SKenneth E. Jansen         xKebe(:,:,:,:) = ( xKebe(:,:,:,:)*iwallmassfactor
358*59599516SKenneth E. Jansen     &           + rKwall_glob(:,:,:,:)*iwallstiffactor )
359*59599516SKenneth E. Jansen
360*59599516SKenneth E. Jansen         endif
361*59599516SKenneth E. Jansenc$$$        ttim(40) = ttim(40) + tmr()
362*59599516SKenneth E. Jansenc
363*59599516SKenneth E. Jansenc.... return
364*59599516SKenneth E. Jansenc
365*59599516SKenneth E. Jansen        return
366*59599516SKenneth E. Jansen        end
367*59599516SKenneth E. Jansen
368*59599516SKenneth E. Jansen
369*59599516SKenneth E. Jansenc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
370*59599516SKenneth E. Jansenc*********************************************************************
371*59599516SKenneth E. Jansenc*********************************************************************
372*59599516SKenneth E. Jansen
373*59599516SKenneth E. Jansen
374*59599516SKenneth E. Jansen        subroutine e3bSclr (yl,      iBCB,    BCB,     shpb,    shglb,
375*59599516SKenneth E. Jansen     &                      xlb,     rl,      sgn,     dwl)
376*59599516SKenneth E. Jansen        include "common.h"
377*59599516SKenneth E. Jansenc
378*59599516SKenneth E. Jansen        dimension yl(npro,nshl,ndof),          iBCB(npro,ndiBCB),
379*59599516SKenneth E. Jansen     &            BCB(npro,nshlb,ndBCB),       shpb(nshl,*),
380*59599516SKenneth E. Jansen     &            shglb(nsd,nshl,*),
381*59599516SKenneth E. Jansen     &            xlb(npro,nenl,nsd),
382*59599516SKenneth E. Jansen     &            rl(npro,nshl)
383*59599516SKenneth E. Jansenc
384*59599516SKenneth E. Jansen        real*8    WdetJb(npro),                bnorm(npro,nsd)
385*59599516SKenneth E. Jansenc
386*59599516SKenneth E. Jansen        dimension lnode(27),                   sgn(npro,nshl),
387*59599516SKenneth E. Jansen     &            shape(npro,nshl),            shdrv(npro,nsd,nshl),
388*59599516SKenneth E. Jansen     &            rNa(npro),                   flux(npro)
389*59599516SKenneth E. Jansen        real*8    dwl(npro,nshl)
390*59599516SKenneth E. Jansen
391*59599516SKenneth E. Jansenc
392*59599516SKenneth E. Jansenc.... compute the nodes which lie on the boundary (hierarchic)
393*59599516SKenneth E. Jansenc
394*59599516SKenneth E. Jansen        call getbnodes(lnode)
395*59599516SKenneth E. Jansenc
396*59599516SKenneth E. Jansenc.... loop through the integration points
397*59599516SKenneth E. Jansenc
398*59599516SKenneth E. Jansen        if(lcsyst.eq.3.or.lcsyst.eq.4) then
399*59599516SKenneth E. Jansen           ngaussb = nintb(lcsyst)
400*59599516SKenneth E. Jansen        else
401*59599516SKenneth E. Jansen           ngaussb = nintb(lcsyst)
402*59599516SKenneth E. Jansen        endif
403*59599516SKenneth E. Jansen        do intp = 1, ngaussb
404*59599516SKenneth E. Jansenc
405*59599516SKenneth E. Jansenc.... get the hierarchic shape functions at this int point
406*59599516SKenneth E. Jansenc
407*59599516SKenneth E. Jansen        call getshp(shpb,        shglb,        sgn,
408*59599516SKenneth E. Jansen     &              shape,       shdrv)
409*59599516SKenneth E. Jansenc
410*59599516SKenneth E. Jansenc.... calculate the integraton variables
411*59599516SKenneth E. Jansenc
412*59599516SKenneth E. Jansen        call e3bvarSclr (yl,          shdrv,   xlb,
413*59599516SKenneth E. Jansen     &                   shape,       WdetJb,  bnorm,
414*59599516SKenneth E. Jansen     &                   flux,        dwl )
415*59599516SKenneth E. Jansenc
416*59599516SKenneth E. Jansenc.... -----------------> boundary conditions <-------------------
417*59599516SKenneth E. Jansenc
418*59599516SKenneth E. Jansen
419*59599516SKenneth E. Jansenc
420*59599516SKenneth E. Jansenc.... heat or scalar  flux
421*59599516SKenneth E. Jansenc
422*59599516SKenneth E. Jansen        if(isclr.eq.0) then
423*59599516SKenneth E. Jansen           iwalljump=0
424*59599516SKenneth E. Jansen        else
425*59599516SKenneth E. Jansen           iwalljump=1  !turb wall between heat and scalar flux..jump over
426*59599516SKenneth E. Jansen        endif
427*59599516SKenneth E. Jansen        ib=4+isclr+iwalljump
428*59599516SKenneth E. Jansen        ibb=6+isclr
429*59599516SKenneth E. Jansen        do iel=1, npro
430*59599516SKenneth E. Jansenc
431*59599516SKenneth E. Jansenc  if we have a nonzero value then
432*59599516SKenneth E. Jansenc  calculate the fluxes through this surface
433*59599516SKenneth E. Jansenc
434*59599516SKenneth E. Jansen           if (nsrflist(iBCB(iel,2)).ne.0 .and. ires.ne.2) then
435*59599516SKenneth E. Jansen              iface = abs(iBCB(iel,2))
436*59599516SKenneth E. Jansen              flxID(ibb,iface) =  flxID(ibb,iface)
437*59599516SKenneth E. Jansen     &                          - WdetJb(iel) * flux(iel)
438*59599516SKenneth E. Jansen           endif
439*59599516SKenneth E. Jansen
440*59599516SKenneth E. Jansen           if (btest(iBCB(iel,1),ib-1)) then
441*59599516SKenneth E. Jansen              flux(iel) = zero
442*59599516SKenneth E. Jansen              do n = 1, nshlb
443*59599516SKenneth E. Jansen                 nodlcl = lnode(n)
444*59599516SKenneth E. Jansen                 flux(iel) = flux(iel)
445*59599516SKenneth E. Jansen     &                     + shape(iel,nodlcl) * BCB(iel,n,ibb)
446*59599516SKenneth E. Jansen              enddo
447*59599516SKenneth E. Jansen           endif
448*59599516SKenneth E. Jansen        enddo
449*59599516SKenneth E. Jansenc
450*59599516SKenneth E. Jansenc.... assemble the contributions
451*59599516SKenneth E. Jansenc
452*59599516SKenneth E. Jansen        rNa(:) = -WdetJb * flux
453*59599516SKenneth E. Jansenc
454*59599516SKenneth E. Jansenc.... ------------------------->  Residual  <--------------------------
455*59599516SKenneth E. Jansenc
456*59599516SKenneth E. Jansenc.... add the flux to the residual
457*59599516SKenneth E. Jansenc
458*59599516SKenneth E. Jansen        do n = 1, nshlb
459*59599516SKenneth E. Jansen           nodlcl = lnode(n)
460*59599516SKenneth E. Jansen
461*59599516SKenneth E. Jansen           rl(:,nodlcl) = rl(:,nodlcl) - shape(:,nodlcl) * rNa(:)
462*59599516SKenneth E. Jansen        enddo
463*59599516SKenneth E. Jansenc
464*59599516SKenneth E. Jansenc.... -------------------->  Aerodynamic Forces  <---------------------
465*59599516SKenneth E. Jansenc
466*59599516SKenneth E. Jansen        if ((ires .ne. 2) .and. (iter .eq. nitr)) then
467*59599516SKenneth E. Jansenc
468*59599516SKenneth E. Jansenc.... compute the forces on the body
469*59599516SKenneth E. Jansenc
470*59599516SKenneth E. Jansen           if(isclr.eq.0)   HFlux    = sum(flux)
471*59599516SKenneth E. Jansenc
472*59599516SKenneth E. Jansen        endif
473*59599516SKenneth E. Jansenc
474*59599516SKenneth E. Jansenc.... end of integration loop
475*59599516SKenneth E. Jansenc
476*59599516SKenneth E. Jansen        enddo
477*59599516SKenneth E. Jansen
478*59599516SKenneth E. Jansenc
479*59599516SKenneth E. Jansenc.... return
480*59599516SKenneth E. Jansenc
481*59599516SKenneth E. Jansen        return
482*59599516SKenneth E. Jansen        end
483*59599516SKenneth E. Jansen
484