1*59599516SKenneth E. Jansen subroutine e3bvar (yl, acl, ul, 2*59599516SKenneth E. Jansen & shpb, shglb, 3*59599516SKenneth E. Jansen & xlb, lnode, 4*59599516SKenneth E. Jansen & WdetJb, bnorm, pres, 5*59599516SKenneth E. Jansen & u1, u2, u3, rmu, 6*59599516SKenneth E. Jansen & unm, tau1n, tau2n, tau3n, 7*59599516SKenneth E. Jansen & vdot, rlKwall, 8*59599516SKenneth E. Jansen & xKebe, rKwall_glob) 9*59599516SKenneth E. Jansenc 10*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 11*59599516SKenneth E. Jansenc 12*59599516SKenneth E. Jansenc This routine computes the variables at integration points for 13*59599516SKenneth E. Jansenc the boundary element routine. 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc input: 16*59599516SKenneth E. Jansenc yl (npro,nshl,ndof) : primitive variables (local) 17*59599516SKenneth E. Jansenc ndof: 5[p,v1,v2,v3,T]+number of scalars solved 18*59599516SKenneth E. Jansenc acl (npro,nshl,ndof) : acceleration (local) 19*59599516SKenneth E. Jansenc ul (npro,nshlb,nsd) : displacement (local) 20*59599516SKenneth E. Jansenc shpb (nen) : boundary element shape-functions 21*59599516SKenneth E. Jansenc shglb (nsd,nen) : boundary element grad-shape-functions 22*59599516SKenneth E. Jansenc xlb (npro,nenl,nsd) : nodal coordinates at current step 23*59599516SKenneth E. Jansenc lnode (nenb) : local nodes on the boundary 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansenc output: 26*59599516SKenneth E. Jansenc g1yi (npro,ndof) : grad-v in direction 1 27*59599516SKenneth E. Jansenc g2yi (npro,ndof) : grad-v in direction 2 28*59599516SKenneth E. Jansenc g3yi (npro,ndof) : grad-v in direction 3 29*59599516SKenneth E. Jansenc WdetJb (npro) : weighted Jacobian 30*59599516SKenneth E. Jansenc bnorm (npro,nsd) : outward normal 31*59599516SKenneth E. Jansenc pres (npro) : pressure 32*59599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 33*59599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 34*59599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 35*59599516SKenneth E. Jansenc unm (npro) : BC u dot n 36*59599516SKenneth E. Jansenc p (npro) : BC pressure 37*59599516SKenneth E. Jansenc tau1n (npro) : BC viscous flux 1 38*59599516SKenneth E. Jansenc tau2n (npro) : BC viscous flux 2 39*59599516SKenneth E. Jansenc tau3n (npro) : BC viscous flux 3 40*59599516SKenneth E. Jansenc vdot (npro,nsd) : acceleration at quadrature points 41*59599516SKenneth E. Jansenc rlKwall(npro,nshlb,nsd) : wall stiffness contribution to the local residual 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2bvar.f) 44*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 45*59599516SKenneth E. Jansenc Alberto Figueroa, Winter 2004. CMM-FSI 46*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 47*59599516SKenneth E. Jansenc 48*59599516SKenneth E. Jansen use turbsa 49*59599516SKenneth E. Jansen include "common.h" 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansen dimension yl(npro,nshl,ndof), rmu(npro), 52*59599516SKenneth E. Jansen & shpb(npro,nshl), shglb(npro,nsd,nshl), 53*59599516SKenneth E. Jansen & xlb(npro,nenl,nsd), 54*59599516SKenneth E. Jansen & lnode(27), g1yi(npro,ndof), 55*59599516SKenneth E. Jansen & g2yi(npro,ndof), g3yi(npro,ndof), 56*59599516SKenneth E. Jansen & WdetJb(npro), bnorm(npro,nsd), 57*59599516SKenneth E. Jansen & pres(npro), 58*59599516SKenneth E. Jansen & u1(npro), u2(npro), 59*59599516SKenneth E. Jansen & u3(npro), 60*59599516SKenneth E. Jansen & unm(npro), 61*59599516SKenneth E. Jansen & tau1n(npro), tau2n(npro), 62*59599516SKenneth E. Jansen & tau3n(npro), 63*59599516SKenneth E. Jansen & acl(npro,nshl,ndof), ul(npro,nshl,nsd), 64*59599516SKenneth E. Jansen & vdot(npro,nsd), rlKwall(npro,nshlb,nsd) 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansen dimension gl1yi(npro,ndof), gl2yi(npro,ndof), 67*59599516SKenneth E. Jansen & gl3yi(npro,ndof), dxdxib(npro,nsd,nsd), 68*59599516SKenneth E. Jansen & dxidxb(npro,nsd,nsd), temp(npro), 69*59599516SKenneth E. Jansen & temp1(npro), temp2(npro), 70*59599516SKenneth E. Jansen & temp3(npro), 71*59599516SKenneth E. Jansen & v1(npro,nsd), v2(npro,nsd), 72*59599516SKenneth E. Jansen & v3(npro,nsd), 73*59599516SKenneth E. Jansen & rotnodallocal(npro,nsd,nsd), 74*59599516SKenneth E. Jansen & x1rot(npro,nsd), x2rot(npro,nsd), 75*59599516SKenneth E. Jansen & x3rot(npro,nsd), detJacrot(npro), 76*59599516SKenneth E. Jansen & B1(npro,5,3), B2(npro,5,3), 77*59599516SKenneth E. Jansen & B3(npro,5,3), Dmatrix(npro,5,5), 78*59599516SKenneth E. Jansen & DtimesB1(npro,5,3), DtimesB2(npro,5,3), 79*59599516SKenneth E. Jansen & DtimesB3(npro,5,3), 80*59599516SKenneth E. Jansen & rKwall_local11(npro,nsd,nsd), 81*59599516SKenneth E. Jansen & rKwall_local12(npro,nsd,nsd), 82*59599516SKenneth E. Jansen & rKwall_local13(npro,nsd,nsd), 83*59599516SKenneth E. Jansen & rKwall_local21(npro,nsd,nsd), 84*59599516SKenneth E. Jansen & rKwall_local22(npro,nsd,nsd), 85*59599516SKenneth E. Jansen & rKwall_local23(npro,nsd,nsd), 86*59599516SKenneth E. Jansen & rKwall_local31(npro,nsd,nsd), 87*59599516SKenneth E. Jansen & rKwall_local32(npro,nsd,nsd), 88*59599516SKenneth E. Jansen & rKwall_local33(npro,nsd,nsd), 89*59599516SKenneth E. Jansen & rKwall_glob11(npro,nsd,nsd), 90*59599516SKenneth E. Jansen & rKwall_glob12(npro,nsd,nsd), 91*59599516SKenneth E. Jansen & rKwall_glob13(npro,nsd,nsd), 92*59599516SKenneth E. Jansen & rKwall_glob21(npro,nsd,nsd), 93*59599516SKenneth E. Jansen & rKwall_glob22(npro,nsd,nsd), 94*59599516SKenneth E. Jansen & rKwall_glob23(npro,nsd,nsd), 95*59599516SKenneth E. Jansen & rKwall_glob31(npro,nsd,nsd), 96*59599516SKenneth E. Jansen & rKwall_glob32(npro,nsd,nsd), 97*59599516SKenneth E. Jansen & rKwall_glob33(npro,nsd,nsd) 98*59599516SKenneth E. Jansenc 99*59599516SKenneth E. Jansen dimension rKwall_glob(npro,9,nshl,nshl), 100*59599516SKenneth E. Jansen & xKebe(npro,9,nshl,nshl) 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansen real*8 lhmFctvw, tsFctvw(npro) 103*59599516SKenneth E. Jansen 104*59599516SKenneth E. Jansen dimension tmp1(npro) 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansen real*8 Turb(npro), xki, 107*59599516SKenneth E. Jansen & xki3, fv1 108*59599516SKenneth E. Jansenc 109*59599516SKenneth E. Jansen integer e, i, j 110*59599516SKenneth E. Jansenc 111*59599516SKenneth E. Jansen integer aa, b 112*59599516SKenneth E. Jansen 113*59599516SKenneth E. Jansen 114*59599516SKenneth E. Jansenc 115*59599516SKenneth E. Jansenc.... -------------------> integration variables <-------------------- 116*59599516SKenneth E. Jansenc 117*59599516SKenneth E. Jansenc.... compute the primitive variables at the integration point 118*59599516SKenneth E. Jansenc 119*59599516SKenneth E. Jansen pres = zero 120*59599516SKenneth E. Jansen u1 = zero 121*59599516SKenneth E. Jansen u2 = zero 122*59599516SKenneth E. Jansen u3 = zero 123*59599516SKenneth E. Jansenc 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen do n = 1, nshlb 126*59599516SKenneth E. Jansen nodlcl = lnode(n) 127*59599516SKenneth E. Jansenc 128*59599516SKenneth E. Jansen pres = pres + shpb(:,nodlcl) * yl(:,nodlcl,1) 129*59599516SKenneth E. Jansen u1 = u1 + shpb(:,nodlcl) * yl(:,nodlcl,2) 130*59599516SKenneth E. Jansen u2 = u2 + shpb(:,nodlcl) * yl(:,nodlcl,3) 131*59599516SKenneth E. Jansen u3 = u3 + shpb(:,nodlcl) * yl(:,nodlcl,4) 132*59599516SKenneth E. Jansen 133*59599516SKenneth E. Jansen enddo 134*59599516SKenneth E. Jansenc 135*59599516SKenneth E. Jansenc.... ----------------------> Element Metrics <----------------------- 136*59599516SKenneth E. Jansenc 137*59599516SKenneth E. Jansenc.... compute the deformation gradient 138*59599516SKenneth E. Jansenc 139*59599516SKenneth E. Jansen dxdxib = zero 140*59599516SKenneth E. Jansenc 141*59599516SKenneth E. Jansen do n = 1, nenl 142*59599516SKenneth E. Jansen dxdxib(:,1,1) = dxdxib(:,1,1) + xlb(:,n,1) * shglb(:,1,n) 143*59599516SKenneth E. Jansen dxdxib(:,1,2) = dxdxib(:,1,2) + xlb(:,n,1) * shglb(:,2,n) 144*59599516SKenneth E. Jansen dxdxib(:,1,3) = dxdxib(:,1,3) + xlb(:,n,1) * shglb(:,3,n) 145*59599516SKenneth E. Jansen dxdxib(:,2,1) = dxdxib(:,2,1) + xlb(:,n,2) * shglb(:,1,n) 146*59599516SKenneth E. Jansen dxdxib(:,2,2) = dxdxib(:,2,2) + xlb(:,n,2) * shglb(:,2,n) 147*59599516SKenneth E. Jansen dxdxib(:,2,3) = dxdxib(:,2,3) + xlb(:,n,2) * shglb(:,3,n) 148*59599516SKenneth E. Jansen dxdxib(:,3,1) = dxdxib(:,3,1) + xlb(:,n,3) * shglb(:,1,n) 149*59599516SKenneth E. Jansen dxdxib(:,3,2) = dxdxib(:,3,2) + xlb(:,n,3) * shglb(:,2,n) 150*59599516SKenneth E. Jansen dxdxib(:,3,3) = dxdxib(:,3,3) + xlb(:,n,3) * shglb(:,3,n) 151*59599516SKenneth E. Jansen enddo 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansenc.... compute the normal to the boundary 154*59599516SKenneth E. Jansenc 155*59599516SKenneth E. Jansenc$$$ if (lcsyst .eq. 4) then ! wedge-quad 156*59599516SKenneth E. Jansenc$$$ temp1 = dxdxib(:,2,1) * dxdxib(:,3,3) - 157*59599516SKenneth E. Jansenc$$$ & dxdxib(:,2,3) * dxdxib(:,3,1) 158*59599516SKenneth E. Jansenc$$$ temp2 = dxdxib(:,3,1) * dxdxib(:,1,3) - 159*59599516SKenneth E. Jansenc$$$ & dxdxib(:,3,3) * dxdxib(:,1,1) 160*59599516SKenneth E. Jansenc$$$ temp3 = dxdxib(:,1,1) * dxdxib(:,2,3) - 161*59599516SKenneth E. Jansenc$$$ & dxdxib(:,1,3) * dxdxib(:,2,1) 162*59599516SKenneth E. Jansenc$$$ elseif( lcyst .eq. 6) then ! pyr-tri face 163*59599516SKenneth E. Jansenc$$$ temp1 = dxdxib(:,2,1) * dxdxib(:,3,3) - 164*59599516SKenneth E. Jansenc$$$ & dxdxib(:,2,3) * dxdxib(:,3,1) 165*59599516SKenneth E. Jansenc$$$ temp2 = dxdxib(:,3,1) * dxdxib(:,1,3) - 166*59599516SKenneth E. Jansenc$$$ & dxdxib(:,3,3) * dxdxib(:,1,1) 167*59599516SKenneth E. Jansenc$$$ temp3 = dxdxib(:,1,1) * dxdxib(:,2,3) - 168*59599516SKenneth E. Jansenc$$$ & dxdxib(:,1,3) * dxdxib(:,2,1) 169*59599516SKenneth E. Jansenc$$$ elseif( lcyst .eq. 1) then !usual wrong way tets 170*59599516SKenneth E. Jansenc$$$ temp1 = -dxdxib(:,2,2) * dxdxib(:,3,1) + 171*59599516SKenneth E. Jansenc$$$ & dxdxib(:,2,1) * dxdxib(:,3,2) 172*59599516SKenneth E. Jansenc$$$ temp2 = -dxdxib(:,3,2) * dxdxib(:,1,1) + 173*59599516SKenneth E. Jansenc$$$ & dxdxib(:,3,1) * dxdxib(:,1,2) 174*59599516SKenneth E. Jansenc$$$ temp3 = -dxdxib(:,1,2) * dxdxib(:,2,1) + 175*59599516SKenneth E. Jansenc$$$ & dxdxib(:,1,1) * dxdxib(:,2,2) 176*59599516SKenneth E. Jansenc$$$ else 177*59599516SKenneth E. Jansenc$$$ temp1 = dxdxib(:,2,2) * dxdxib(:,3,1) - 178*59599516SKenneth E. Jansenc$$$ & dxdxib(:,2,1) * dxdxib(:,3,2) 179*59599516SKenneth E. Jansenc$$$ temp2 = dxdxib(:,3,2) * dxdxib(:,1,1) - 180*59599516SKenneth E. Jansenc$$$ & dxdxib(:,3,1) * dxdxib(:,1,2) 181*59599516SKenneth E. Jansenc$$$ temp3 = dxdxib(:,1,2) * dxdxib(:,2,1) - 182*59599516SKenneth E. Jansenc$$$ & dxdxib(:,1,1) * dxdxib(:,2,2) 183*59599516SKenneth E. Jansenc$$$ endif 184*59599516SKenneth E. Jansenc$$$c 185*59599516SKenneth E. Jansenc$$$ temp = one / sqrt ( temp1**2 + temp2**2 + temp3**2 ) 186*59599516SKenneth E. Jansenc$$$ bnorm(:,1) = temp1 * temp 187*59599516SKenneth E. Jansenc$$$ bnorm(:,2) = temp2 * temp 188*59599516SKenneth E. Jansenc$$$ bnorm(:,3) = temp3 * temp 189*59599516SKenneth E. Jansenc$$$c 190*59599516SKenneth E. Jansenc$$$ WdetJb = Qwtb(lcsyst,intp) / temp 191*59599516SKenneth E. Jansenc$$$ if(lcsyst .eq. 3) WdetJb=WdetJb*two 192*59599516SKenneth E. Jansenc 193*59599516SKenneth E. Jansenc.... compute the normal to the boundary. This is achieved by taking 194*59599516SKenneth E. Jansenc the cross product of two vectors in the plane of the 2-d 195*59599516SKenneth E. Jansenc boundary face. 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansen if(lcsyst.eq.1) then ! set to curl into element all others out 198*59599516SKenneth E. Jansen ipt2=2 199*59599516SKenneth E. Jansen ipt3=3 200*59599516SKenneth E. Jansen elseif(lcsyst.eq.2) then 201*59599516SKenneth E. Jansen ipt2=4 202*59599516SKenneth E. Jansen ipt3=2 203*59599516SKenneth E. Jansen elseif(lcsyst.eq.3) then 204*59599516SKenneth E. Jansen ipt2=3 205*59599516SKenneth E. Jansen ipt3=2 206*59599516SKenneth E. Jansen elseif(lcsyst.eq.4) then 207*59599516SKenneth E. Jansen ipt2=2 208*59599516SKenneth E. Jansen ipt3=4 209*59599516SKenneth E. Jansen elseif(lcsyst.eq.5) then 210*59599516SKenneth E. Jansen ipt2=4 211*59599516SKenneth E. Jansen ipt3=2 212*59599516SKenneth E. Jansen elseif(lcsyst.eq.6) then 213*59599516SKenneth E. Jansen ipt2=2 214*59599516SKenneth E. Jansen ipt3=5 215*59599516SKenneth E. Jansen endif 216*59599516SKenneth E. Jansen v1 = xlb(:,ipt2,:) - xlb(:,1,:) 217*59599516SKenneth E. Jansen v2 = xlb(:,ipt3,:) - xlb(:,1,:) 218*59599516SKenneth E. Jansenc 219*59599516SKenneth E. Jansenc compute cross product 220*59599516SKenneth E. Jansenc 221*59599516SKenneth E. Jansen temp1 = v1(:,2) * v2(:,3) - v2(:,2) * v1(:,3) 222*59599516SKenneth E. Jansen temp2 = v2(:,1) * v1(:,3) - v1(:,1) * v2(:,3) 223*59599516SKenneth E. Jansen temp3 = v1(:,1) * v2(:,2) - v2(:,1) * v1(:,2) 224*59599516SKenneth E. Jansenc 225*59599516SKenneth E. Jansenc mag is area for quads, twice area for tris 226*59599516SKenneth E. Jansenc 227*59599516SKenneth E. Jansen temp = one / sqrt ( temp1**2 + temp2**2 + temp3**2 ) 228*59599516SKenneth E. Jansen bnorm(:,1) = temp1 * temp 229*59599516SKenneth E. Jansen bnorm(:,2) = temp2 * temp 230*59599516SKenneth E. Jansen bnorm(:,3) = temp3 * temp 231*59599516SKenneth E. Jansenc 232*59599516SKenneth E. Jansen 233*59599516SKenneth E. Jansen if (lcsyst .eq. 1) then 234*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (four*temp) 235*59599516SKenneth E. Jansen elseif (lcsyst .eq. 2) then 236*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (four*temp) 237*59599516SKenneth E. Jansen elseif (lcsyst .eq. 3) then 238*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (two*temp) 239*59599516SKenneth E. Jansen elseif (lcsyst .eq. 4) then 240*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (four*temp) 241*59599516SKenneth E. Jansen elseif (lcsyst .eq. 5) then 242*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (four*temp) 243*59599516SKenneth E. Jansen elseif (lcsyst .eq. 6) then 244*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (two*temp) 245*59599516SKenneth E. Jansen endif 246*59599516SKenneth E. Jansenc 247*59599516SKenneth E. Jansenc.... --------------------------> Grad-V <---------------------------- 248*59599516SKenneth E. Jansenc 249*59599516SKenneth E. Jansenc.... compute grad-v for Navier-Stokes terms 250*59599516SKenneth E. Jansenc 251*59599516SKenneth E. Jansen if (Navier .eq. 1) then 252*59599516SKenneth E. Jansenc 253*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 254*59599516SKenneth E. Jansenc 255*59599516SKenneth E. Jansen dxidxb(:,1,1) = dxdxib(:,2,2) * dxdxib(:,3,3) 256*59599516SKenneth E. Jansen & - dxdxib(:,3,2) * dxdxib(:,2,3) 257*59599516SKenneth E. Jansen dxidxb(:,1,2) = dxdxib(:,3,2) * dxdxib(:,1,3) 258*59599516SKenneth E. Jansen & - dxdxib(:,1,2) * dxdxib(:,3,3) 259*59599516SKenneth E. Jansen dxidxb(:,1,3) = dxdxib(:,1,2) * dxdxib(:,2,3) 260*59599516SKenneth E. Jansen & - dxdxib(:,1,3) * dxdxib(:,2,2) 261*59599516SKenneth E. Jansen temp = one / ( dxidxb(:,1,1) * dxdxib(:,1,1) 262*59599516SKenneth E. Jansen & + dxidxb(:,1,2) * dxdxib(:,2,1) 263*59599516SKenneth E. Jansen & + dxidxb(:,1,3) * dxdxib(:,3,1) ) 264*59599516SKenneth E. Jansen dxidxb(:,1,1) = dxidxb(:,1,1) * temp 265*59599516SKenneth E. Jansen dxidxb(:,1,2) = dxidxb(:,1,2) * temp 266*59599516SKenneth E. Jansen dxidxb(:,1,3) = dxidxb(:,1,3) * temp 267*59599516SKenneth E. Jansen dxidxb(:,2,1) = (dxdxib(:,2,3) * dxdxib(:,3,1) 268*59599516SKenneth E. Jansen & - dxdxib(:,2,1) * dxdxib(:,3,3)) * temp 269*59599516SKenneth E. Jansen dxidxb(:,2,2) = (dxdxib(:,1,1) * dxdxib(:,3,3) 270*59599516SKenneth E. Jansen & - dxdxib(:,3,1) * dxdxib(:,1,3)) * temp 271*59599516SKenneth E. Jansen dxidxb(:,2,3) = (dxdxib(:,2,1) * dxdxib(:,1,3) 272*59599516SKenneth E. Jansen & - dxdxib(:,1,1) * dxdxib(:,2,3)) * temp 273*59599516SKenneth E. Jansen dxidxb(:,3,1) = (dxdxib(:,2,1) * dxdxib(:,3,2) 274*59599516SKenneth E. Jansen & - dxdxib(:,2,2) * dxdxib(:,3,1)) * temp 275*59599516SKenneth E. Jansen dxidxb(:,3,2) = (dxdxib(:,3,1) * dxdxib(:,1,2) 276*59599516SKenneth E. Jansen & - dxdxib(:,1,1) * dxdxib(:,3,2)) * temp 277*59599516SKenneth E. Jansen dxidxb(:,3,3) = (dxdxib(:,1,1) * dxdxib(:,2,2) 278*59599516SKenneth E. Jansen & - dxdxib(:,1,2) * dxdxib(:,2,1)) * temp 279*59599516SKenneth E. Jansenc 280*59599516SKenneth E. Jansenc.... compute local-grad-Y 281*59599516SKenneth E. Jansenc 282*59599516SKenneth E. Jansen gl1yi = zero 283*59599516SKenneth E. Jansen gl2yi = zero 284*59599516SKenneth E. Jansen gl3yi = zero 285*59599516SKenneth E. Jansenc 286*59599516SKenneth E. Jansen do n = 1, nshl 287*59599516SKenneth E. Jansen gl1yi(:,1) = gl1yi(:,1) + shglb(:,1,n) * yl(:,n,1) 288*59599516SKenneth E. Jansen gl1yi(:,2) = gl1yi(:,2) + shglb(:,1,n) * yl(:,n,2) 289*59599516SKenneth E. Jansen gl1yi(:,3) = gl1yi(:,3) + shglb(:,1,n) * yl(:,n,3) 290*59599516SKenneth E. Jansen gl1yi(:,4) = gl1yi(:,4) + shglb(:,1,n) * yl(:,n,4) 291*59599516SKenneth E. Jansenc 292*59599516SKenneth E. Jansen gl2yi(:,1) = gl2yi(:,1) + shglb(:,2,n) * yl(:,n,1) 293*59599516SKenneth E. Jansen gl2yi(:,2) = gl2yi(:,2) + shglb(:,2,n) * yl(:,n,2) 294*59599516SKenneth E. Jansen gl2yi(:,3) = gl2yi(:,3) + shglb(:,2,n) * yl(:,n,3) 295*59599516SKenneth E. Jansen gl2yi(:,4) = gl2yi(:,4) + shglb(:,2,n) * yl(:,n,4) 296*59599516SKenneth E. Jansenc 297*59599516SKenneth E. Jansen gl3yi(:,1) = gl3yi(:,1) + shglb(:,3,n) * yl(:,n,1) 298*59599516SKenneth E. Jansen gl3yi(:,2) = gl3yi(:,2) + shglb(:,3,n) * yl(:,n,2) 299*59599516SKenneth E. Jansen gl3yi(:,3) = gl3yi(:,3) + shglb(:,3,n) * yl(:,n,3) 300*59599516SKenneth E. Jansen gl3yi(:,4) = gl3yi(:,4) + shglb(:,3,n) * yl(:,n,4) 301*59599516SKenneth E. Jansen enddo 302*59599516SKenneth E. Jansenc 303*59599516SKenneth E. Jansenc.... convert local-grads to global-grads 304*59599516SKenneth E. Jansenc 305*59599516SKenneth E. Jansen g1yi(:,2) = dxidxb(:,1,1) * gl1yi(:,2) + 306*59599516SKenneth E. Jansen & dxidxb(:,2,1) * gl2yi(:,2) + 307*59599516SKenneth E. Jansen & dxidxb(:,3,1) * gl3yi(:,2) 308*59599516SKenneth E. Jansen g2yi(:,2) = dxidxb(:,1,2) * gl1yi(:,2) + 309*59599516SKenneth E. Jansen & dxidxb(:,2,2) * gl2yi(:,2) + 310*59599516SKenneth E. Jansen & dxidxb(:,3,2) * gl3yi(:,2) 311*59599516SKenneth E. Jansen g3yi(:,2) = dxidxb(:,1,3) * gl1yi(:,2) + 312*59599516SKenneth E. Jansen & dxidxb(:,2,3) * gl2yi(:,2) + 313*59599516SKenneth E. Jansen & dxidxb(:,3,3) * gl3yi(:,2) 314*59599516SKenneth E. Jansenc 315*59599516SKenneth E. Jansen g1yi(:,3) = dxidxb(:,1,1) * gl1yi(:,3) + 316*59599516SKenneth E. Jansen & dxidxb(:,2,1) * gl2yi(:,3) + 317*59599516SKenneth E. Jansen & dxidxb(:,3,1) * gl3yi(:,3) 318*59599516SKenneth E. Jansen g2yi(:,3) = dxidxb(:,1,2) * gl1yi(:,3) + 319*59599516SKenneth E. Jansen & dxidxb(:,2,2) * gl2yi(:,3) + 320*59599516SKenneth E. Jansen & dxidxb(:,3,2) * gl3yi(:,3) 321*59599516SKenneth E. Jansen g3yi(:,3) = dxidxb(:,1,3) * gl1yi(:,3) + 322*59599516SKenneth E. Jansen & dxidxb(:,2,3) * gl2yi(:,3) + 323*59599516SKenneth E. Jansen & dxidxb(:,3,3) * gl3yi(:,3) 324*59599516SKenneth E. Jansenc 325*59599516SKenneth E. Jansen g1yi(:,4) = dxidxb(:,1,1) * gl1yi(:,4) + 326*59599516SKenneth E. Jansen & dxidxb(:,2,1) * gl2yi(:,4) + 327*59599516SKenneth E. Jansen & dxidxb(:,3,1) * gl3yi(:,4) 328*59599516SKenneth E. Jansen g2yi(:,4) = dxidxb(:,1,2) * gl1yi(:,4) + 329*59599516SKenneth E. Jansen & dxidxb(:,2,2) * gl2yi(:,4) + 330*59599516SKenneth E. Jansen & dxidxb(:,3,2) * gl3yi(:,4) 331*59599516SKenneth E. Jansen g3yi(:,4) = dxidxb(:,1,3) * gl1yi(:,4) + 332*59599516SKenneth E. Jansen & dxidxb(:,2,3) * gl2yi(:,4) + 333*59599516SKenneth E. Jansen & dxidxb(:,3,3) * gl3yi(:,4) 334*59599516SKenneth E. Jansenc 335*59599516SKenneth E. Jansenc.... end grad-v 336*59599516SKenneth E. Jansenc 337*59599516SKenneth E. Jansen endif 338*59599516SKenneth E. Jansen 339*59599516SKenneth E. Jansenc 340*59599516SKenneth E. Jansenc.... mass flux 341*59599516SKenneth E. Jansenc 342*59599516SKenneth E. Jansen unm = bnorm(:,1) * u1 +bnorm(:,2) * u2 +bnorm(:,3) * u3 343*59599516SKenneth E. Jansen! no rho in continuity eq. 344*59599516SKenneth E. Jansen 345*59599516SKenneth E. Jansen 346*59599516SKenneth E. Jansenc 347*59599516SKenneth E. Jansenc.... viscous flux 348*59599516SKenneth E. Jansenc 349*59599516SKenneth E. Jansen tau1n = bnorm(:,1) * two * rmu * g1yi(:,2) 350*59599516SKenneth E. Jansen & + bnorm(:,2) * (rmu * (g2yi(:,2) + g1yi(:,3))) 351*59599516SKenneth E. Jansen & + bnorm(:,3) * (rmu * (g3yi(:,2) + g1yi(:,4))) 352*59599516SKenneth E. Jansen tau2n = bnorm(:,1) * (rmu * (g2yi(:,2) + g1yi(:,3))) 353*59599516SKenneth E. Jansen & + bnorm(:,2) * two * rmu * g2yi(:,3) 354*59599516SKenneth E. Jansen & + bnorm(:,3) * (rmu * (g3yi(:,3) + g2yi(:,4))) 355*59599516SKenneth E. Jansen tau3n = bnorm(:,1) * (rmu * (g3yi(:,2) + g1yi(:,4))) 356*59599516SKenneth E. Jansen & + bnorm(:,2) * (rmu * (g3yi(:,3) + g2yi(:,4))) 357*59599516SKenneth E. Jansen & + bnorm(:,3) * two * rmu * g3yi(:,4) 358*59599516SKenneth E. Jansenc 359*59599516SKenneth E. Jansen temp1 = bnorm(:,1) * tau1n 360*59599516SKenneth E. Jansen & + bnorm(:,2) * tau2n 361*59599516SKenneth E. Jansen & + bnorm(:,3) * tau3n 362*59599516SKenneth E. Jansen 363*59599516SKenneth E. Jansen pres = pres - temp1 364*59599516SKenneth E. Jansen 365*59599516SKenneth E. Jansen tau1n = tau1n - bnorm(:,1) * temp1 366*59599516SKenneth E. Jansen tau2n = tau2n - bnorm(:,2) * temp1 367*59599516SKenneth E. Jansen tau3n = tau3n - bnorm(:,3) * temp1 368*59599516SKenneth E. Jansen 369*59599516SKenneth E. Jansenc 370*59599516SKenneth E. Jansenc.... viscous flux control 371*59599516SKenneth E. Jansenc 372*59599516SKenneth E. Jansenc if iviscflux = 1, we consider the viscous flux on the RHS 373*59599516SKenneth E. Jansenc otherwise, if iviscflux = 0, we eliminate this term: stability in 374*59599516SKenneth E. Jansenc pressure-flow coupled boundaries for cardiovascular applications in 375*59599516SKenneth E. Jansenc situations of flow reversal 376*59599516SKenneth E. Jansen tau1n = tau1n * iviscflux 377*59599516SKenneth E. Jansen tau2n = tau2n * iviscflux 378*59599516SKenneth E. Jansen tau3n = tau3n * iviscflux 379*59599516SKenneth E. Jansen 380*59599516SKenneth E. Jansen vdot = zero 381*59599516SKenneth E. Jansen rlKwall = zero 382*59599516SKenneth E. Jansen if (intp.eq.ngaussb) then ! do this only for the last gauss point 383*59599516SKenneth E. Jansen rKwall_glob = zero 384*59599516SKenneth E. Jansen endif 385*59599516SKenneth E. Jansen 386*59599516SKenneth E. Jansen if(ideformwall.eq.1) then 387*59599516SKenneth E. Jansen do n = 1, nshlb 388*59599516SKenneth E. Jansen nodlcl = lnode(n) 389*59599516SKenneth E. Jansenc 390*59599516SKenneth E. Jansen vdot(:,1) = vdot(:,1) + shpb(:,nodlcl) * acl(:,nodlcl,2) 391*59599516SKenneth E. Jansen vdot(:,2) = vdot(:,2) + shpb(:,nodlcl) * acl(:,nodlcl,3) 392*59599516SKenneth E. Jansen vdot(:,3) = vdot(:,3) + shpb(:,nodlcl) * acl(:,nodlcl,4) 393*59599516SKenneth E. Jansen 394*59599516SKenneth E. Jansen enddo 395*59599516SKenneth E. Jansen vdot = vdot * thicknessvw * rhovw 396*59599516SKenneth E. Jansenc 397*59599516SKenneth E. Jansenc.... ---------------------> Stiffness matrix & residual <----------------- 398*59599516SKenneth E. Jansenc 399*59599516SKenneth E. Jansenc.... B^t * D * B formulation for plane stress enhanced membrane 400*59599516SKenneth E. Jansenc 401*59599516SKenneth E. Jansenc 402*59599516SKenneth E. Jansenc.... rotation matrix 403*59599516SKenneth E. Jansenc 404*59599516SKenneth E. Jansen v1 = xlb(:,ipt2,:) - xlb(:,1,:) 405*59599516SKenneth E. Jansen temp = one / sqrt ( v1(:,1)**2 + v1(:,2)**2 + v1(:,3)**2 ) 406*59599516SKenneth E. Jansen v1(:,1) = v1(:,1) * temp 407*59599516SKenneth E. Jansen v1(:,2) = v1(:,2) * temp 408*59599516SKenneth E. Jansen v1(:,3) = v1(:,3) * temp 409*59599516SKenneth E. Jansen 410*59599516SKenneth E. Jansen v2 = xlb(:,ipt3,:) - xlb(:,1,:) 411*59599516SKenneth E. Jansen 412*59599516SKenneth E. Jansenc compute cross product 413*59599516SKenneth E. Jansen temp1 = v1(:,2) * v2(:,3) - v2(:,2) * v1(:,3) 414*59599516SKenneth E. Jansen temp2 = v2(:,1) * v1(:,3) - v1(:,1) * v2(:,3) 415*59599516SKenneth E. Jansen temp3 = v1(:,1) * v2(:,2) - v2(:,1) * v1(:,2) 416*59599516SKenneth E. Jansen 417*59599516SKenneth E. Jansen temp = one / sqrt ( temp1**2 + temp2**2 + temp3**2 ) 418*59599516SKenneth E. Jansen v3(:,1) = temp1 * temp 419*59599516SKenneth E. Jansen v3(:,2) = temp2 * temp 420*59599516SKenneth E. Jansen v3(:,3) = temp3 * temp 421*59599516SKenneth E. Jansen 422*59599516SKenneth E. Jansenc cross product again for v2 423*59599516SKenneth E. Jansen temp1 = v3(:,2) * v1(:,3) - v1(:,2) * v3(:,3) 424*59599516SKenneth E. Jansen temp2 = v1(:,1) * v3(:,3) - v3(:,1) * v1(:,3) 425*59599516SKenneth E. Jansen temp3 = v3(:,1) * v1(:,2) - v1(:,1) * v3(:,2) 426*59599516SKenneth E. Jansen 427*59599516SKenneth E. Jansen temp = one / sqrt ( temp1**2 + temp2**2 + temp3**2 ) 428*59599516SKenneth E. Jansen v2(:,1) = temp1 * temp 429*59599516SKenneth E. Jansen v2(:,2) = temp2 * temp 430*59599516SKenneth E. Jansen v2(:,3) = temp3 * temp 431*59599516SKenneth E. Jansen 432*59599516SKenneth E. Jansen do j = 1, nsd 433*59599516SKenneth E. Jansen rotnodallocal(:,1,j) = v1(:,j) 434*59599516SKenneth E. Jansen rotnodallocal(:,2,j) = v2(:,j) 435*59599516SKenneth E. Jansen rotnodallocal(:,3,j) = v3(:,j) 436*59599516SKenneth E. Jansen enddo 437*59599516SKenneth E. Jansen 438*59599516SKenneth E. Jansenc 439*59599516SKenneth E. Jansenc.... rotated coordinates 440*59599516SKenneth E. Jansenc 441*59599516SKenneth E. Jansen x1rot = zero 442*59599516SKenneth E. Jansen x2rot = zero 443*59599516SKenneth E. Jansen x3rot = zero 444*59599516SKenneth E. Jansen 445*59599516SKenneth E. Jansen do i = 1, nsd 446*59599516SKenneth E. Jansen do j = 1, nsd 447*59599516SKenneth E. Jansen x1rot(:,i) = x1rot(:,i)+rotnodallocal(:,i,j)*xlb(:,1,j) 448*59599516SKenneth E. Jansen x2rot(:,i) = x2rot(:,i)+rotnodallocal(:,i,j)*xlb(:,ipt2,j) 449*59599516SKenneth E. Jansen x3rot(:,i) = x3rot(:,i)+rotnodallocal(:,i,j)*xlb(:,ipt3,j) 450*59599516SKenneth E. Jansen enddo 451*59599516SKenneth E. Jansen enddo 452*59599516SKenneth E. Jansen 453*59599516SKenneth E. Jansenc 454*59599516SKenneth E. Jansenc.... B matrices 455*59599516SKenneth E. Jansenc 456*59599516SKenneth E. Jansen B1 = zero 457*59599516SKenneth E. Jansen B2 = zero 458*59599516SKenneth E. Jansen B3 = zero 459*59599516SKenneth E. Jansen detJacrot = (x2rot(:,1)-x1rot(:,1)) * (x3rot(:,2)-x1rot(:,2)) - 460*59599516SKenneth E. Jansen & (x3rot(:,1)-x1rot(:,1)) * (x2rot(:,2)-x1rot(:,2)) 461*59599516SKenneth E. Jansen 462*59599516SKenneth E. Jansen B1(:,1,1) = (x2rot(:,2)-x3rot(:,2))/detJacrot(:) 463*59599516SKenneth E. Jansen B1(:,2,2) = (x3rot(:,1)-x2rot(:,1))/detJacrot(:) 464*59599516SKenneth E. Jansen B1(:,3,1) = (x3rot(:,1)-x2rot(:,1))/detJacrot(:) 465*59599516SKenneth E. Jansen B1(:,3,2) = (x2rot(:,2)-x3rot(:,2))/detJacrot(:) 466*59599516SKenneth E. Jansen B1(:,4,3) = (x2rot(:,2)-x3rot(:,2))/detJacrot(:) 467*59599516SKenneth E. Jansen B1(:,5,3) = (x3rot(:,1)-x2rot(:,1))/detJacrot(:) 468*59599516SKenneth E. Jansen 469*59599516SKenneth E. Jansen B2(:,1,1) = (x3rot(:,2)-x1rot(:,2))/detJacrot(:) 470*59599516SKenneth E. Jansen B2(:,2,2) = (x1rot(:,1)-x3rot(:,1))/detJacrot(:) 471*59599516SKenneth E. Jansen B2(:,3,1) = (x1rot(:,1)-x3rot(:,1))/detJacrot(:) 472*59599516SKenneth E. Jansen B2(:,3,2) = (x3rot(:,2)-x1rot(:,2))/detJacrot(:) 473*59599516SKenneth E. Jansen B2(:,4,3) = (x3rot(:,2)-x1rot(:,2))/detJacrot(:) 474*59599516SKenneth E. Jansen B2(:,5,3) = (x1rot(:,1)-x3rot(:,1))/detJacrot(:) 475*59599516SKenneth E. Jansen 476*59599516SKenneth E. Jansen B3(:,1,1) = (x1rot(:,2)-x2rot(:,2))/detJacrot(:) 477*59599516SKenneth E. Jansen B3(:,2,2) = (x2rot(:,1)-x1rot(:,1))/detJacrot(:) 478*59599516SKenneth E. Jansen B3(:,3,1) = (x2rot(:,1)-x1rot(:,1))/detJacrot(:) 479*59599516SKenneth E. Jansen B3(:,3,2) = (x1rot(:,2)-x2rot(:,2))/detJacrot(:) 480*59599516SKenneth E. Jansen B3(:,4,3) = (x1rot(:,2)-x2rot(:,2))/detJacrot(:) 481*59599516SKenneth E. Jansen B3(:,5,3) = (x2rot(:,1)-x1rot(:,1))/detJacrot(:) 482*59599516SKenneth E. Jansen 483*59599516SKenneth E. JansenC B1 = B1 / detJacrot 484*59599516SKenneth E. JansenC B2 = B2 / detJacrot 485*59599516SKenneth E. JansenC B3 = B3 / detJacrot 486*59599516SKenneth E. Jansen 487*59599516SKenneth E. Jansenc 488*59599516SKenneth E. Jansenc.... D matrix 489*59599516SKenneth E. Jansenc 490*59599516SKenneth E. Jansen Dmatrix = zero 491*59599516SKenneth E. Jansen temp1 = evw / (1.0d0 - rnuvw*rnuvw) 492*59599516SKenneth E. Jansen temp2 = rnuvw * temp1 493*59599516SKenneth E. Jansen temp3 = pt5 * (1.0d0 - rnuvw) * temp1 494*59599516SKenneth E. Jansen Dmatrix(:,1,1) = temp1 495*59599516SKenneth E. Jansen Dmatrix(:,1,2) = temp2 496*59599516SKenneth E. Jansen Dmatrix(:,2,1) = temp2 497*59599516SKenneth E. Jansen Dmatrix(:,2,2) = temp1 498*59599516SKenneth E. Jansen Dmatrix(:,3,3) = temp3 499*59599516SKenneth E. Jansen Dmatrix(:,4,4) = temp3*rshearconstantvw 500*59599516SKenneth E. Jansen Dmatrix(:,5,5) = temp3*rshearconstantvw 501*59599516SKenneth E. Jansenc 502*59599516SKenneth E. Jansenc.... D * [B1|B2|B3] 503*59599516SKenneth E. Jansenc 504*59599516SKenneth E. Jansen DtimesB1 = zero 505*59599516SKenneth E. Jansen DtimesB2 = zero 506*59599516SKenneth E. Jansen DtimesB3 = zero 507*59599516SKenneth E. Jansen do i = 1, 5 508*59599516SKenneth E. Jansen do j = 1, 3 509*59599516SKenneth E. Jansen do k = 1, 5 510*59599516SKenneth E. Jansen DtimesB1(:,i,j) = DtimesB1(:,i,j) 511*59599516SKenneth E. Jansen & + Dmatrix(:,i,k) * B1(:,k,j) 512*59599516SKenneth E. Jansen DtimesB2(:,i,j) = DtimesB2(:,i,j) 513*59599516SKenneth E. Jansen & + Dmatrix(:,i,k) * B2(:,k,j) 514*59599516SKenneth E. Jansen DtimesB3(:,i,j) = DtimesB3(:,i,j) 515*59599516SKenneth E. Jansen & + Dmatrix(:,i,k) * B3(:,k,j) 516*59599516SKenneth E. Jansen enddo 517*59599516SKenneth E. Jansen enddo 518*59599516SKenneth E. Jansen enddo 519*59599516SKenneth E. Jansenc 520*59599516SKenneth E. Jansenc.... [B1|B2|B3]^T * D * [B1|B2|B3] 521*59599516SKenneth E. Jansenc 522*59599516SKenneth E. Jansen rKwall_local11 = zero 523*59599516SKenneth E. Jansen rKwall_local12 = zero 524*59599516SKenneth E. Jansen rKwall_local13 = zero 525*59599516SKenneth E. Jansen rKwall_local21 = zero 526*59599516SKenneth E. Jansen rKwall_local22 = zero 527*59599516SKenneth E. Jansen rKwall_local23 = zero 528*59599516SKenneth E. Jansen rKwall_local31 = zero 529*59599516SKenneth E. Jansen rKwall_local32 = zero 530*59599516SKenneth E. Jansen rKwall_local33 = zero 531*59599516SKenneth E. Jansen 532*59599516SKenneth E. Jansen do i = 1, 3 ! i is a node index: i=1, nenbl=3 533*59599516SKenneth E. Jansen do j = 1, 3 ! same is true for j 534*59599516SKenneth E. Jansen do k = 1, 5 535*59599516SKenneth E. Jansen rKwall_local11(:,i,j) = rKwall_local11(:,i,j) 536*59599516SKenneth E. Jansen & + B1(:,k,i) * DtimesB1(:,k,j) 537*59599516SKenneth E. Jansen rKwall_local12(:,i,j) = rKwall_local12(:,i,j) 538*59599516SKenneth E. Jansen & + B1(:,k,i) * DtimesB2(:,k,j) 539*59599516SKenneth E. Jansen rKwall_local13(:,i,j) = rKwall_local13(:,i,j) 540*59599516SKenneth E. Jansen & + B1(:,k,i) * DtimesB3(:,k,j) 541*59599516SKenneth E. Jansen rKwall_local21(:,i,j) = rKwall_local21(:,i,j) 542*59599516SKenneth E. Jansen & + B2(:,k,i) * DtimesB1(:,k,j) 543*59599516SKenneth E. Jansen rKwall_local22(:,i,j) = rKwall_local22(:,i,j) 544*59599516SKenneth E. Jansen & + B2(:,k,i) * DtimesB2(:,k,j) 545*59599516SKenneth E. Jansen rKwall_local23(:,i,j) = rKwall_local23(:,i,j) 546*59599516SKenneth E. Jansen & + B2(:,k,i) * DtimesB3(:,k,j) 547*59599516SKenneth E. Jansen rKwall_local31(:,i,j) = rKwall_local31(:,i,j) 548*59599516SKenneth E. Jansen & + B3(:,k,i) * DtimesB1(:,k,j) 549*59599516SKenneth E. Jansen rKwall_local32(:,i,j) = rKwall_local32(:,i,j) 550*59599516SKenneth E. Jansen & + B3(:,k,i) * DtimesB2(:,k,j) 551*59599516SKenneth E. Jansen rKwall_local33(:,i,j) = rKwall_local33(:,i,j) 552*59599516SKenneth E. Jansen & + B3(:,k,i) * DtimesB3(:,k,j) 553*59599516SKenneth E. Jansen enddo 554*59599516SKenneth E. Jansen enddo 555*59599516SKenneth E. Jansen enddo 556*59599516SKenneth E. Jansen 557*59599516SKenneth E. Jansenc 558*59599516SKenneth E. Jansenc.... Now we need to rotate each of these submatrices to the global frame 559*59599516SKenneth E. Jansenc 560*59599516SKenneth E. Jansen call rotatestiff(rKwall_local11, rotnodallocal, rKwall_glob11) 561*59599516SKenneth E. Jansen call rotatestiff(rKwall_local12, rotnodallocal, rKwall_glob12) 562*59599516SKenneth E. Jansen call rotatestiff(rKwall_local13, rotnodallocal, rKwall_glob13) 563*59599516SKenneth E. Jansen call rotatestiff(rKwall_local21, rotnodallocal, rKwall_glob21) 564*59599516SKenneth E. Jansen call rotatestiff(rKwall_local22, rotnodallocal, rKwall_glob22) 565*59599516SKenneth E. Jansen call rotatestiff(rKwall_local23, rotnodallocal, rKwall_glob23) 566*59599516SKenneth E. Jansen call rotatestiff(rKwall_local31, rotnodallocal, rKwall_glob31) 567*59599516SKenneth E. Jansen call rotatestiff(rKwall_local32, rotnodallocal, rKwall_glob32) 568*59599516SKenneth E. Jansen call rotatestiff(rKwall_local33, rotnodallocal, rKwall_glob33) 569*59599516SKenneth E. Jansen 570*59599516SKenneth E. Jansenc multiply the nodal matrices by the area and the thickness 571*59599516SKenneth E. Jansen do i =1, nsd 572*59599516SKenneth E. Jansen do j = 1, nsd 573*59599516SKenneth E. Jansen rKwall_glob11(:,i,j) = rKwall_glob11(:,i,j) * detJacrot(:) 574*59599516SKenneth E. Jansen & * pt5 * thicknessvw 575*59599516SKenneth E. Jansen rKwall_glob12(:,i,j) = rKwall_glob12(:,i,j) * detJacrot(:) 576*59599516SKenneth E. Jansen & * pt5 * thicknessvw 577*59599516SKenneth E. Jansen rKwall_glob13(:,i,j) = rKwall_glob13(:,i,j) * detJacrot(:) 578*59599516SKenneth E. Jansen & * pt5 * thicknessvw 579*59599516SKenneth E. Jansen rKwall_glob21(:,i,j) = rKwall_glob21(:,i,j) * detJacrot(:) 580*59599516SKenneth E. Jansen & * pt5 * thicknessvw 581*59599516SKenneth E. Jansen rKwall_glob22(:,i,j) = rKwall_glob22(:,i,j) * detJacrot(:) 582*59599516SKenneth E. Jansen & * pt5 * thicknessvw 583*59599516SKenneth E. Jansen rKwall_glob23(:,i,j) = rKwall_glob23(:,i,j) * detJacrot(:) 584*59599516SKenneth E. Jansen & * pt5 * thicknessvw 585*59599516SKenneth E. Jansen rKwall_glob31(:,i,j) = rKwall_glob31(:,i,j) * detJacrot(:) 586*59599516SKenneth E. Jansen & * pt5 * thicknessvw 587*59599516SKenneth E. Jansen rKwall_glob32(:,i,j) = rKwall_glob32(:,i,j) * detJacrot(:) 588*59599516SKenneth E. Jansen & * pt5 * thicknessvw 589*59599516SKenneth E. Jansen rKwall_glob33(:,i,j) = rKwall_glob33(:,i,j) * detJacrot(:) 590*59599516SKenneth E. Jansen & * pt5 * thicknessvw 591*59599516SKenneth E. Jansen enddo 592*59599516SKenneth E. Jansen enddo 593*59599516SKenneth E. Jansen 594*59599516SKenneth E. Jansenc 595*59599516SKenneth E. Jansenc.... Final K * u product (in global coordinates) to get the residual 596*59599516SKenneth E. Jansenc 597*59599516SKenneth E. Jansen do i = 1, 3 ! now i is a spatial index: i=1, nsd=3 598*59599516SKenneth E. Jansen rlKwall(:,1,1) = rlKwall(:,1,1) 599*59599516SKenneth E. Jansen & + rKwall_glob11(:,1,i) * ul(:,1,i) 600*59599516SKenneth E. Jansen & + rKwall_glob12(:,1,i) * ul(:,2,i) 601*59599516SKenneth E. Jansen & + rKwall_glob13(:,1,i) * ul(:,3,i) 602*59599516SKenneth E. Jansen rlKwall(:,1,2) = rlKwall(:,1,2) 603*59599516SKenneth E. Jansen & + rKwall_glob11(:,2,i) * ul(:,1,i) 604*59599516SKenneth E. Jansen & + rKwall_glob12(:,2,i) * ul(:,2,i) 605*59599516SKenneth E. Jansen & + rKwall_glob13(:,2,i) * ul(:,3,i) 606*59599516SKenneth E. Jansen rlKwall(:,1,3) = rlKwall(:,1,3) 607*59599516SKenneth E. Jansen & + rKwall_glob11(:,3,i) * ul(:,1,i) 608*59599516SKenneth E. Jansen & + rKwall_glob12(:,3,i) * ul(:,2,i) 609*59599516SKenneth E. Jansen & + rKwall_glob13(:,3,i) * ul(:,3,i) 610*59599516SKenneth E. Jansen rlKwall(:,2,1) = rlKwall(:,2,1) 611*59599516SKenneth E. Jansen & + rKwall_glob21(:,1,i) * ul(:,1,i) 612*59599516SKenneth E. Jansen & + rKwall_glob22(:,1,i) * ul(:,2,i) 613*59599516SKenneth E. Jansen & + rKwall_glob23(:,1,i) * ul(:,3,i) 614*59599516SKenneth E. Jansen rlKwall(:,2,2) = rlKwall(:,2,2) 615*59599516SKenneth E. Jansen & + rKwall_glob21(:,2,i) * ul(:,1,i) 616*59599516SKenneth E. Jansen & + rKwall_glob22(:,2,i) * ul(:,2,i) 617*59599516SKenneth E. Jansen & + rKwall_glob23(:,2,i) * ul(:,3,i) 618*59599516SKenneth E. Jansen rlKwall(:,2,3) = rlKwall(:,2,3) 619*59599516SKenneth E. Jansen & + rKwall_glob21(:,3,i) * ul(:,1,i) 620*59599516SKenneth E. Jansen & + rKwall_glob22(:,3,i) * ul(:,2,i) 621*59599516SKenneth E. Jansen & + rKwall_glob23(:,3,i) * ul(:,3,i) 622*59599516SKenneth E. Jansen rlKwall(:,3,1) = rlKwall(:,3,1) 623*59599516SKenneth E. Jansen & + rKwall_glob31(:,1,i) * ul(:,1,i) 624*59599516SKenneth E. Jansen & + rKwall_glob32(:,1,i) * ul(:,2,i) 625*59599516SKenneth E. Jansen & + rKwall_glob33(:,1,i) * ul(:,3,i) 626*59599516SKenneth E. Jansen rlKwall(:,3,2) = rlKwall(:,3,2) 627*59599516SKenneth E. Jansen & + rKwall_glob31(:,2,i) * ul(:,1,i) 628*59599516SKenneth E. Jansen & + rKwall_glob32(:,2,i) * ul(:,2,i) 629*59599516SKenneth E. Jansen & + rKwall_glob33(:,2,i) * ul(:,3,i) 630*59599516SKenneth E. Jansen rlKwall(:,3,3) = rlKwall(:,3,3) 631*59599516SKenneth E. Jansen & + rKwall_glob31(:,3,i) * ul(:,1,i) 632*59599516SKenneth E. Jansen & + rKwall_glob32(:,3,i) * ul(:,2,i) 633*59599516SKenneth E. Jansen & + rKwall_glob33(:,3,i) * ul(:,3,i) 634*59599516SKenneth E. Jansen enddo 635*59599516SKenneth E. Jansenc 636*59599516SKenneth E. Jansenc.... --------------> End of Stiffness matrix & residual <----------------- 637*59599516SKenneth E. Jansenc 638*59599516SKenneth E. Jansen 639*59599516SKenneth E. Jansenc 640*59599516SKenneth E. Jansenc.... -----> Wall Stiffness and Mass matrices for implicit LHS <----------- 641*59599516SKenneth E. Jansenc 642*59599516SKenneth E. Jansen 643*59599516SKenneth E. Jansenc.... Here we just add the mass matrix contribution. The stiffness contribution 644*59599516SKenneth E. Jansenc.... is added in e3b 645*59599516SKenneth E. Jansen 646*59599516SKenneth E. Jansenc lhmFct = almi * (one - flmpl) Maybe we have to define flmplW: lumped 647*59599516SKenneth E. Jansen ! mass parameter for the wall 648*59599516SKenneth E. Jansen lhmFctvw = almi * (one - flmpl) 649*59599516SKenneth E. Jansenc 650*59599516SKenneth E. Jansenc.... scale variables for efficiency 651*59599516SKenneth E. Jansenc 652*59599516SKenneth E. Jansen tsFctvw = lhmFctvw * WdetJb * rhovw * thicknessvw 653*59599516SKenneth E. Jansenc 654*59599516SKenneth E. Jansenc.... compute mass and convection terms 655*59599516SKenneth E. Jansenc 656*59599516SKenneth E. Jansenc.... NOTE: the wall mass contributions should only have 3 nodal components 657*59599516SKenneth E. Jansenc.... since the fourth node is an interior node... therefore, the loops should 658*59599516SKenneth E. Jansenc.... be done from 1 to nshlb=3... 659*59599516SKenneth E. Jansen 660*59599516SKenneth E. Jansen do b = 1, nshlb 661*59599516SKenneth E. Jansen do aa = 1, nshlb 662*59599516SKenneth E. Jansen tmp1 = tsFctvw * shpb(:,aa) * shpb(:,b) 663*59599516SKenneth E. Jansenc 664*59599516SKenneth E. Jansenc tmp1=alpha_m*(1-lmp)*WdetJ*N^aN^b*rho*thickness the time term 665*59599516SKenneth E. Jansenc 666*59599516SKenneth E. Jansen xKebe(:,1,aa,b) = xKebe(:,1,aa,b) + tmp1 667*59599516SKenneth E. Jansen xKebe(:,5,aa,b) = xKebe(:,5,aa,b) + tmp1 668*59599516SKenneth E. Jansen xKebe(:,9,aa,b) = xKebe(:,9,aa,b) + tmp1 669*59599516SKenneth E. Jansen enddo 670*59599516SKenneth E. Jansen enddo 671*59599516SKenneth E. Jansen 672*59599516SKenneth E. Jansenc 673*59599516SKenneth E. Jansenc.... assemble the nodal stiffness into the element stiffness matrix rKwall_glob 674*59599516SKenneth E. Jansenc 675*59599516SKenneth E. Jansenc.... We have passed the integer intp to make this operation only once: we are 676*59599516SKenneth E. Jansenc.... not using the gauss points structure to compute the stiffness of the wall 677*59599516SKenneth E. Jansenc.... elements, so we don't want to be redundant and calculate ngaussb times the 678*59599516SKenneth E. Jansenc.... stiffness matrix which is constant for linear triangles... 679*59599516SKenneth E. Jansen 680*59599516SKenneth E. Jansenc.... This is ugly, but I will fix it later... 681*59599516SKenneth E. Jansen 682*59599516SKenneth E. Jansen if (intp.eq.ngaussb) then ! do this only for the last gauss point 683*59599516SKenneth E. Jansen rKwall_glob(:,1,1,1) = rKwall_glob11(:,1,1) 684*59599516SKenneth E. Jansen rKwall_glob(:,2,1,1) = rKwall_glob11(:,1,2) 685*59599516SKenneth E. Jansen rKwall_glob(:,3,1,1) = rKwall_glob11(:,1,3) 686*59599516SKenneth E. Jansen rKwall_glob(:,4,1,1) = rKwall_glob11(:,2,1) 687*59599516SKenneth E. Jansen rKwall_glob(:,5,1,1) = rKwall_glob11(:,2,2) 688*59599516SKenneth E. Jansen rKwall_glob(:,6,1,1) = rKwall_glob11(:,2,3) 689*59599516SKenneth E. Jansen rKwall_glob(:,7,1,1) = rKwall_glob11(:,3,1) 690*59599516SKenneth E. Jansen rKwall_glob(:,8,1,1) = rKwall_glob11(:,3,2) 691*59599516SKenneth E. Jansen rKwall_glob(:,9,1,1) = rKwall_glob11(:,3,3) 692*59599516SKenneth E. Jansen 693*59599516SKenneth E. Jansen rKwall_glob(:,1,1,2) = rKwall_glob12(:,1,1) 694*59599516SKenneth E. Jansen rKwall_glob(:,2,1,2) = rKwall_glob12(:,1,2) 695*59599516SKenneth E. Jansen rKwall_glob(:,3,1,2) = rKwall_glob12(:,1,3) 696*59599516SKenneth E. Jansen rKwall_glob(:,4,1,2) = rKwall_glob12(:,2,1) 697*59599516SKenneth E. Jansen rKwall_glob(:,5,1,2) = rKwall_glob12(:,2,2) 698*59599516SKenneth E. Jansen rKwall_glob(:,6,1,2) = rKwall_glob12(:,2,3) 699*59599516SKenneth E. Jansen rKwall_glob(:,7,1,2) = rKwall_glob12(:,3,1) 700*59599516SKenneth E. Jansen rKwall_glob(:,8,1,2) = rKwall_glob12(:,3,2) 701*59599516SKenneth E. Jansen rKwall_glob(:,9,1,2) = rKwall_glob12(:,3,3) 702*59599516SKenneth E. Jansen 703*59599516SKenneth E. Jansen rKwall_glob(:,1,1,3) = rKwall_glob13(:,1,1) 704*59599516SKenneth E. Jansen rKwall_glob(:,2,1,3) = rKwall_glob13(:,1,2) 705*59599516SKenneth E. Jansen rKwall_glob(:,3,1,3) = rKwall_glob13(:,1,3) 706*59599516SKenneth E. Jansen rKwall_glob(:,4,1,3) = rKwall_glob13(:,2,1) 707*59599516SKenneth E. Jansen rKwall_glob(:,5,1,3) = rKwall_glob13(:,2,2) 708*59599516SKenneth E. Jansen rKwall_glob(:,6,1,3) = rKwall_glob13(:,2,3) 709*59599516SKenneth E. Jansen rKwall_glob(:,7,1,3) = rKwall_glob13(:,3,1) 710*59599516SKenneth E. Jansen rKwall_glob(:,8,1,3) = rKwall_glob13(:,3,2) 711*59599516SKenneth E. Jansen rKwall_glob(:,9,1,3) = rKwall_glob13(:,3,3) 712*59599516SKenneth E. Jansen 713*59599516SKenneth E. Jansen rKwall_glob(:,1,2,1) = rKwall_glob21(:,1,1) 714*59599516SKenneth E. Jansen rKwall_glob(:,2,2,1) = rKwall_glob21(:,1,2) 715*59599516SKenneth E. Jansen rKwall_glob(:,3,2,1) = rKwall_glob21(:,1,3) 716*59599516SKenneth E. Jansen rKwall_glob(:,4,2,1) = rKwall_glob21(:,2,1) 717*59599516SKenneth E. Jansen rKwall_glob(:,5,2,1) = rKwall_glob21(:,2,2) 718*59599516SKenneth E. Jansen rKwall_glob(:,6,2,1) = rKwall_glob21(:,2,3) 719*59599516SKenneth E. Jansen rKwall_glob(:,7,2,1) = rKwall_glob21(:,3,1) 720*59599516SKenneth E. Jansen rKwall_glob(:,8,2,1) = rKwall_glob21(:,3,2) 721*59599516SKenneth E. Jansen rKwall_glob(:,9,2,1) = rKwall_glob21(:,3,3) 722*59599516SKenneth E. Jansen 723*59599516SKenneth E. Jansen rKwall_glob(:,1,2,2) = rKwall_glob22(:,1,1) 724*59599516SKenneth E. Jansen rKwall_glob(:,2,2,2) = rKwall_glob22(:,1,2) 725*59599516SKenneth E. Jansen rKwall_glob(:,3,2,2) = rKwall_glob22(:,1,3) 726*59599516SKenneth E. Jansen rKwall_glob(:,4,2,2) = rKwall_glob22(:,2,1) 727*59599516SKenneth E. Jansen rKwall_glob(:,5,2,2) = rKwall_glob22(:,2,2) 728*59599516SKenneth E. Jansen rKwall_glob(:,6,2,2) = rKwall_glob22(:,2,3) 729*59599516SKenneth E. Jansen rKwall_glob(:,7,2,2) = rKwall_glob22(:,3,1) 730*59599516SKenneth E. Jansen rKwall_glob(:,8,2,2) = rKwall_glob22(:,3,2) 731*59599516SKenneth E. Jansen rKwall_glob(:,9,2,2) = rKwall_glob22(:,3,3) 732*59599516SKenneth E. Jansen 733*59599516SKenneth E. Jansen rKwall_glob(:,1,2,3) = rKwall_glob23(:,1,1) 734*59599516SKenneth E. Jansen rKwall_glob(:,2,2,3) = rKwall_glob23(:,1,2) 735*59599516SKenneth E. Jansen rKwall_glob(:,3,2,3) = rKwall_glob23(:,1,3) 736*59599516SKenneth E. Jansen rKwall_glob(:,4,2,3) = rKwall_glob23(:,2,1) 737*59599516SKenneth E. Jansen rKwall_glob(:,5,2,3) = rKwall_glob23(:,2,2) 738*59599516SKenneth E. Jansen rKwall_glob(:,6,2,3) = rKwall_glob23(:,2,3) 739*59599516SKenneth E. Jansen rKwall_glob(:,7,2,3) = rKwall_glob23(:,3,1) 740*59599516SKenneth E. Jansen rKwall_glob(:,8,2,3) = rKwall_glob23(:,3,2) 741*59599516SKenneth E. Jansen rKwall_glob(:,9,2,3) = rKwall_glob23(:,3,3) 742*59599516SKenneth E. Jansen 743*59599516SKenneth E. Jansen rKwall_glob(:,1,3,1) = rKwall_glob31(:,1,1) 744*59599516SKenneth E. Jansen rKwall_glob(:,2,3,1) = rKwall_glob31(:,1,2) 745*59599516SKenneth E. Jansen rKwall_glob(:,3,3,1) = rKwall_glob31(:,1,3) 746*59599516SKenneth E. Jansen rKwall_glob(:,4,3,1) = rKwall_glob31(:,2,1) 747*59599516SKenneth E. Jansen rKwall_glob(:,5,3,1) = rKwall_glob31(:,2,2) 748*59599516SKenneth E. Jansen rKwall_glob(:,6,3,1) = rKwall_glob31(:,2,3) 749*59599516SKenneth E. Jansen rKwall_glob(:,7,3,1) = rKwall_glob31(:,3,1) 750*59599516SKenneth E. Jansen rKwall_glob(:,8,3,1) = rKwall_glob31(:,3,2) 751*59599516SKenneth E. Jansen rKwall_glob(:,9,3,1) = rKwall_glob31(:,3,3) 752*59599516SKenneth E. Jansen 753*59599516SKenneth E. Jansen rKwall_glob(:,1,3,2) = rKwall_glob32(:,1,1) 754*59599516SKenneth E. Jansen rKwall_glob(:,2,3,2) = rKwall_glob32(:,1,2) 755*59599516SKenneth E. Jansen rKwall_glob(:,3,3,2) = rKwall_glob32(:,1,3) 756*59599516SKenneth E. Jansen rKwall_glob(:,4,3,2) = rKwall_glob32(:,2,1) 757*59599516SKenneth E. Jansen rKwall_glob(:,5,3,2) = rKwall_glob32(:,2,2) 758*59599516SKenneth E. Jansen rKwall_glob(:,6,3,2) = rKwall_glob32(:,2,3) 759*59599516SKenneth E. Jansen rKwall_glob(:,7,3,2) = rKwall_glob32(:,3,1) 760*59599516SKenneth E. Jansen rKwall_glob(:,8,3,2) = rKwall_glob32(:,3,2) 761*59599516SKenneth E. Jansen rKwall_glob(:,9,3,2) = rKwall_glob32(:,3,3) 762*59599516SKenneth E. Jansen 763*59599516SKenneth E. Jansen rKwall_glob(:,1,3,3) = rKwall_glob33(:,1,1) 764*59599516SKenneth E. Jansen rKwall_glob(:,2,3,3) = rKwall_glob33(:,1,2) 765*59599516SKenneth E. Jansen rKwall_glob(:,3,3,3) = rKwall_glob33(:,1,3) 766*59599516SKenneth E. Jansen rKwall_glob(:,4,3,3) = rKwall_glob33(:,2,1) 767*59599516SKenneth E. Jansen rKwall_glob(:,5,3,3) = rKwall_glob33(:,2,2) 768*59599516SKenneth E. Jansen rKwall_glob(:,6,3,3) = rKwall_glob33(:,2,3) 769*59599516SKenneth E. Jansen rKwall_glob(:,7,3,3) = rKwall_glob33(:,3,1) 770*59599516SKenneth E. Jansen rKwall_glob(:,8,3,3) = rKwall_glob33(:,3,2) 771*59599516SKenneth E. Jansen rKwall_glob(:,9,3,3) = rKwall_glob33(:,3,3) 772*59599516SKenneth E. Jansen 773*59599516SKenneth E. Jansen rKwall_glob = rKwall_glob*betai*Delt(itseq)*Delt(itseq)*alfi 774*59599516SKenneth E. Jansen 775*59599516SKenneth E. Jansen else 776*59599516SKenneth E. Jansenc.... nothing happens 777*59599516SKenneth E. Jansen goto 123 778*59599516SKenneth E. Jansen endif 779*59599516SKenneth E. Jansen 780*59599516SKenneth E. Jansen123 continue 781*59599516SKenneth E. Jansen 782*59599516SKenneth E. Jansen endif 783*59599516SKenneth E. Jansenc 784*59599516SKenneth E. Jansenc.... return 785*59599516SKenneth E. Jansenc 786*59599516SKenneth E. Jansen return 787*59599516SKenneth E. Jansen end 788*59599516SKenneth E. Jansen 789*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 790*59599516SKenneth E. Jansenc 791*59599516SKenneth E. Jansenc variables for boundary elements 792*59599516SKenneth E. Jansenc 793*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 794*59599516SKenneth E. Jansen subroutine e3bvarSclr (yl, shdrv, xlb, 795*59599516SKenneth E. Jansen & shape, WdetJb, bnorm, 796*59599516SKenneth E. Jansen & flux, dwl ) 797*59599516SKenneth E. Jansen 798*59599516SKenneth E. Jansen include "common.h" 799*59599516SKenneth E. Jansenc 800*59599516SKenneth E. Jansen dimension yl(npro,nshl,ndof), shdrv(npro,nsd,nshl), 801*59599516SKenneth E. Jansen & xlb(npro,nenl,nsd), shape(npro,nshl), 802*59599516SKenneth E. Jansen & WdetJb(npro), bnorm(npro,nsd), 803*59599516SKenneth E. Jansen & flux(npro) 804*59599516SKenneth E. Jansenc 805*59599516SKenneth E. Jansen dimension dxdxib(npro,nsd,nsd), 806*59599516SKenneth E. Jansen & dxidxb(npro,nsd,nsd), temp(npro), 807*59599516SKenneth E. Jansen & temp1(npro), temp2(npro), 808*59599516SKenneth E. Jansen & temp3(npro), 809*59599516SKenneth E. Jansen & v1(npro,nsd), v2(npro,nsd), 810*59599516SKenneth E. Jansen & gradSl(npro,nsd), gradS(npro,nsd) 811*59599516SKenneth E. Jansen 812*59599516SKenneth E. Jansen real*8 diffus(npro), dwl(npro,nshl) 813*59599516SKenneth E. Jansen 814*59599516SKenneth E. Jansen call getdiffsclr(shape,dwl,yl,diffus) 815*59599516SKenneth E. Jansenc 816*59599516SKenneth E. Jansenc.... ----------------------> Element Metrics <----------------------- 817*59599516SKenneth E. Jansenc 818*59599516SKenneth E. Jansenc.... compute the deformation gradient 819*59599516SKenneth E. Jansenc 820*59599516SKenneth E. Jansen dxdxib = zero 821*59599516SKenneth E. Jansenc 822*59599516SKenneth E. Jansen do n = 1, nenl 823*59599516SKenneth E. Jansen dxdxib(:,1,1) = dxdxib(:,1,1) + xlb(:,n,1) * shdrv(:,1,n) 824*59599516SKenneth E. Jansen dxdxib(:,1,2) = dxdxib(:,1,2) + xlb(:,n,1) * shdrv(:,2,n) 825*59599516SKenneth E. Jansen dxdxib(:,1,3) = dxdxib(:,1,3) + xlb(:,n,1) * shdrv(:,3,n) 826*59599516SKenneth E. Jansen dxdxib(:,2,1) = dxdxib(:,2,1) + xlb(:,n,2) * shdrv(:,1,n) 827*59599516SKenneth E. Jansen dxdxib(:,2,2) = dxdxib(:,2,2) + xlb(:,n,2) * shdrv(:,2,n) 828*59599516SKenneth E. Jansen dxdxib(:,2,3) = dxdxib(:,2,3) + xlb(:,n,2) * shdrv(:,3,n) 829*59599516SKenneth E. Jansen dxdxib(:,3,1) = dxdxib(:,3,1) + xlb(:,n,3) * shdrv(:,1,n) 830*59599516SKenneth E. Jansen dxdxib(:,3,2) = dxdxib(:,3,2) + xlb(:,n,3) * shdrv(:,2,n) 831*59599516SKenneth E. Jansen dxdxib(:,3,3) = dxdxib(:,3,3) + xlb(:,n,3) * shdrv(:,3,n) 832*59599516SKenneth E. Jansen enddo 833*59599516SKenneth E. Jansenc 834*59599516SKenneth E. Jansenc.... compute the normal to the boundary. This is achieved by taking 835*59599516SKenneth E. Jansenc the cross product of two vectors in the plane of the 2-d 836*59599516SKenneth E. Jansenc boundary face. 837*59599516SKenneth E. Jansenc 838*59599516SKenneth E. Jansen v1 = xlb(:,2,:) - xlb(:,1,:) 839*59599516SKenneth E. Jansen v2 = xlb(:,3,:) - xlb(:,1,:) 840*59599516SKenneth E. Jansen 841*59599516SKenneth E. Jansenc 842*59599516SKenneth E. Jansenc.....The following are done in order to correct temp1..3 843*59599516SKenneth E. Jansenc based on the results from compressible code. This is done only 844*59599516SKenneth E. Jansenc for wedges, depending on the bounary face.(tri or quad) 845*59599516SKenneth E. Jansenc 846*59599516SKenneth E. Jansen if (lcsyst .eq. 4) then 847*59599516SKenneth E. Jansen temp1 = dxdxib(:,2,1) * dxdxib(:,3,3) - 848*59599516SKenneth E. Jansen & dxdxib(:,2,3) * dxdxib(:,3,1) 849*59599516SKenneth E. Jansen temp2 = dxdxib(:,3,1) * dxdxib(:,1,3) - 850*59599516SKenneth E. Jansen & dxdxib(:,3,3) * dxdxib(:,1,1) 851*59599516SKenneth E. Jansen temp3 = dxdxib(:,1,1) * dxdxib(:,2,3) - 852*59599516SKenneth E. Jansen & dxdxib(:,1,3) * dxdxib(:,2,1) 853*59599516SKenneth E. Jansen 854*59599516SKenneth E. Jansen elseif (lcsyst .eq. 1) then 855*59599516SKenneth E. Jansen temp1 = v1(:,2) * v2(:,3) - v2(:,2) * v1(:,3) 856*59599516SKenneth E. Jansen temp2 = v2(:,1) * v1(:,3) - v1(:,1) * v2(:,3) 857*59599516SKenneth E. Jansen temp3 = v1(:,1) * v2(:,2) - v2(:,1) * v1(:,2) 858*59599516SKenneth E. Jansen else 859*59599516SKenneth E. Jansen temp1 = - v1(:,2) * v2(:,3) + v2(:,2) * v1(:,3) 860*59599516SKenneth E. Jansen temp2 = - v2(:,1) * v1(:,3) + v1(:,1) * v2(:,3) 861*59599516SKenneth E. Jansen temp3 = - v1(:,1) * v2(:,2) + v2(:,1) * v1(:,2) 862*59599516SKenneth E. Jansen endif 863*59599516SKenneth E. Jansenc 864*59599516SKenneth E. Jansen temp = one / sqrt ( temp1**2 + temp2**2 + temp3**2 ) 865*59599516SKenneth E. Jansen bnorm(:,1) = temp1 * temp 866*59599516SKenneth E. Jansen bnorm(:,2) = temp2 * temp 867*59599516SKenneth E. Jansen bnorm(:,3) = temp3 * temp 868*59599516SKenneth E. Jansenc 869*59599516SKenneth E. Jansen 870*59599516SKenneth E. Jansen if (lcsyst .eq. 3) then 871*59599516SKenneth E. Jansen WdetJb = (1 - Qwtb(lcsyst,intp)) / (four*temp) 872*59599516SKenneth E. Jansen elseif (lcsyst .eq. 4) then 873*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / temp 874*59599516SKenneth E. Jansen else 875*59599516SKenneth E. Jansen WdetJb = Qwtb(lcsyst,intp) / (four*temp) 876*59599516SKenneth E. Jansen endif 877*59599516SKenneth E. Jansenc 878*59599516SKenneth E. Jansenc.... --------------------------> Grad-V <---------------------------- 879*59599516SKenneth E. Jansenc 880*59599516SKenneth E. Jansenc.... compute grad-v for Navier-Stokes terms 881*59599516SKenneth E. Jansenc 882*59599516SKenneth E. Jansen if (Navier .eq. 1) then 883*59599516SKenneth E. Jansenc 884*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 885*59599516SKenneth E. Jansenc 886*59599516SKenneth E. Jansen dxidxb(:,1,1) = dxdxib(:,2,2) * dxdxib(:,3,3) 887*59599516SKenneth E. Jansen & - dxdxib(:,3,2) * dxdxib(:,2,3) 888*59599516SKenneth E. Jansen dxidxb(:,1,2) = dxdxib(:,3,2) * dxdxib(:,1,3) 889*59599516SKenneth E. Jansen & - dxdxib(:,1,2) * dxdxib(:,3,3) 890*59599516SKenneth E. Jansen dxidxb(:,1,3) = dxdxib(:,1,2) * dxdxib(:,2,3) 891*59599516SKenneth E. Jansen & - dxdxib(:,1,3) * dxdxib(:,2,2) 892*59599516SKenneth E. Jansen temp = one / ( dxidxb(:,1,1) * dxdxib(:,1,1) 893*59599516SKenneth E. Jansen & + dxidxb(:,1,2) * dxdxib(:,2,1) 894*59599516SKenneth E. Jansen & + dxidxb(:,1,3) * dxdxib(:,3,1) ) 895*59599516SKenneth E. Jansen dxidxb(:,1,1) = dxidxb(:,1,1) * temp 896*59599516SKenneth E. Jansen dxidxb(:,1,2) = dxidxb(:,1,2) * temp 897*59599516SKenneth E. Jansen dxidxb(:,1,3) = dxidxb(:,1,3) * temp 898*59599516SKenneth E. Jansen dxidxb(:,2,1) = (dxdxib(:,2,3) * dxdxib(:,3,1) 899*59599516SKenneth E. Jansen & - dxdxib(:,2,1) * dxdxib(:,3,3)) * temp 900*59599516SKenneth E. Jansen dxidxb(:,2,2) = (dxdxib(:,1,1) * dxdxib(:,3,3) 901*59599516SKenneth E. Jansen & - dxdxib(:,3,1) * dxdxib(:,1,3)) * temp 902*59599516SKenneth E. Jansen dxidxb(:,2,3) = (dxdxib(:,2,1) * dxdxib(:,1,3) 903*59599516SKenneth E. Jansen & - dxdxib(:,1,1) * dxdxib(:,2,3)) * temp 904*59599516SKenneth E. Jansen dxidxb(:,3,1) = (dxdxib(:,2,1) * dxdxib(:,3,2) 905*59599516SKenneth E. Jansen & - dxdxib(:,2,2) * dxdxib(:,3,1)) * temp 906*59599516SKenneth E. Jansen dxidxb(:,3,2) = (dxdxib(:,3,1) * dxdxib(:,1,2) 907*59599516SKenneth E. Jansen & - dxdxib(:,1,1) * dxdxib(:,3,2)) * temp 908*59599516SKenneth E. Jansen dxidxb(:,3,3) = (dxdxib(:,1,1) * dxdxib(:,2,2) 909*59599516SKenneth E. Jansen & - dxdxib(:,1,2) * dxdxib(:,2,1)) * temp 910*59599516SKenneth E. Jansenc 911*59599516SKenneth E. Jansenc.... compute local-grad-Y 912*59599516SKenneth E. Jansenc 913*59599516SKenneth E. Jansenc 914*59599516SKenneth E. Jansen gradSl = zero 915*59599516SKenneth E. Jansen isc=5+isclr 916*59599516SKenneth E. Jansen do n = 1, nshl 917*59599516SKenneth E. Jansen gradSl(:,1) = gradSl(:,1) + shdrv(:,1,n) * yl(:,n,isc) 918*59599516SKenneth E. Jansen gradSl(:,2) = gradSl(:,2) + shdrv(:,2,n) * yl(:,n,isc) 919*59599516SKenneth E. Jansen gradSl(:,3) = gradSl(:,3) + shdrv(:,3,n) * yl(:,n,isc) 920*59599516SKenneth E. Jansen enddo 921*59599516SKenneth E. Jansenc 922*59599516SKenneth E. Jansenc.... convert local-grads to global-grads 923*59599516SKenneth E. Jansenc 924*59599516SKenneth E. Jansen gradS(:,1) = dxidxb(:,1,1) * gradSl(:,1) + 925*59599516SKenneth E. Jansen & dxidxb(:,2,1) * gradSl(:,2) + 926*59599516SKenneth E. Jansen & dxidxb(:,3,1) * gradSl(:,3) 927*59599516SKenneth E. Jansen 928*59599516SKenneth E. Jansenc 929*59599516SKenneth E. Jansen gradS(:,2) = dxidxb(:,1,2) * gradSl(:,1) + 930*59599516SKenneth E. Jansen & dxidxb(:,2,2) * gradSl(:,2) + 931*59599516SKenneth E. Jansen & dxidxb(:,3,2) * gradSl(:,3) 932*59599516SKenneth E. Jansen 933*59599516SKenneth E. Jansen gradS(:,3) = dxidxb(:,1,3) * gradSl(:,1) + 934*59599516SKenneth E. Jansen & dxidxb(:,2,3) * gradSl(:,2) + 935*59599516SKenneth E. Jansen & dxidxb(:,3,3) * gradSl(:,3) 936*59599516SKenneth E. Jansenc 937*59599516SKenneth E. Jansenc.... end grad-T 938*59599516SKenneth E. Jansenc 939*59599516SKenneth E. Jansen endif 940*59599516SKenneth E. Jansen 941*59599516SKenneth E. Jansen flux = diffus * ( gradS(:,1) * bnorm(:,1) 942*59599516SKenneth E. Jansen & + gradS(:,2) * bnorm(:,2) 943*59599516SKenneth E. Jansen & + gradS(:,3) * bnorm(:,3) ) 944*59599516SKenneth E. Jansenc 945*59599516SKenneth E. Jansenc.... return 946*59599516SKenneth E. Jansenc 947*59599516SKenneth E. Jansen return 948*59599516SKenneth E. Jansen end 949*59599516SKenneth E. Jansen 950*59599516SKenneth E. Jansen 951*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 952*59599516SKenneth E. Jansenc 953*59599516SKenneth E. Jansenc rotates the local nodal stiffnesses to the goblal frame 954*59599516SKenneth E. Jansenc 955*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 956*59599516SKenneth E. Jansen subroutine rotatestiff(rKlocal, rotation, 957*59599516SKenneth E. Jansen & rKglobal) 958*59599516SKenneth E. Jansen 959*59599516SKenneth E. Jansen include "common.h" 960*59599516SKenneth E. Jansen 961*59599516SKenneth E. Jansen dimension rKlocal(npro,nsd,nsd), rotation(npro,nsd,nsd), 962*59599516SKenneth E. Jansen & rKglobal(npro,nsd,nsd) 963*59599516SKenneth E. Jansen 964*59599516SKenneth E. Jansen dimension tempm(npro,nsd,nsd) 965*59599516SKenneth E. Jansen 966*59599516SKenneth E. Jansen tempm = zero 967*59599516SKenneth E. Jansen do i = 1, 3 968*59599516SKenneth E. Jansen do j = 1, 3 969*59599516SKenneth E. Jansen do k = 1, 3 970*59599516SKenneth E. Jansen tempm(:,i,j) = tempm(:,i,j) 971*59599516SKenneth E. Jansen & + rKlocal(:,i,k) * rotation(:,k,j) 972*59599516SKenneth E. Jansen enddo 973*59599516SKenneth E. Jansen enddo 974*59599516SKenneth E. Jansen enddo 975*59599516SKenneth E. Jansen 976*59599516SKenneth E. Jansen rKglobal = zero 977*59599516SKenneth E. Jansen do i = 1, 3 978*59599516SKenneth E. Jansen do j = 1, 3 979*59599516SKenneth E. Jansen do k = 1, 3 980*59599516SKenneth E. Jansen rKglobal(:,i,j) = rKglobal(:,i,j) 981*59599516SKenneth E. Jansen & + rotation(:,k,i) * tempm(:,k,j) 982*59599516SKenneth E. Jansen enddo 983*59599516SKenneth E. Jansen enddo 984*59599516SKenneth E. Jansen enddo 985*59599516SKenneth E. Jansen 986*59599516SKenneth E. Jansen return 987*59599516SKenneth E. Jansen end 988