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