1*59599516SKenneth E. Jansen subroutine e3q (ycl, shp, shgl, 2*59599516SKenneth E. Jansen & xl, ql, rmassl, 3*59599516SKenneth E. Jansen & xmudmi, sgn) 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc This routine computes the element contribution to the 8*59599516SKenneth E. Jansenc diffusive flux vector and the lumped mass matrix. 9*59599516SKenneth E. Jansenc 10*59599516SKenneth E. Jansenc input: 11*59599516SKenneth E. Jansenc ycl (npro,nshl,ndof) : Y variables 12*59599516SKenneth E. Jansenc shp (nen,ngauss) : element shape-functions 13*59599516SKenneth E. Jansenc shgl (nsd,nen,ngauss) : element local-grad-shape-functions 14*59599516SKenneth E. Jansenc xl (npro,nshl,nsd) : nodal coordinates at current step 15*59599516SKenneth E. Jansenc 16*59599516SKenneth E. Jansenc output: 17*59599516SKenneth E. Jansenc ql (npro,nshl,idflx) : element RHS diffusion residual 18*59599516SKenneth E. Jansenc rmassl (npro,nshl) : element lumped mass matrix 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 21*59599516SKenneth E. Jansenc 22*59599516SKenneth E. Jansen include "common.h" 23*59599516SKenneth E. Jansenc 24*59599516SKenneth E. Jansen dimension ycl(npro,nshl,ndof), 25*59599516SKenneth E. Jansen & shp(nshl,ngauss), 26*59599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), 27*59599516SKenneth E. Jansen & xl(npro,nenl,nsd), 28*59599516SKenneth E. Jansen & ql(npro,nshl,idflx), rmassl(npro,nshl), 29*59599516SKenneth E. Jansen & xmudmi(npro,ngauss) 30*59599516SKenneth E. Jansenc 31*59599516SKenneth E. Jansenc local arrays 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansen dimension g1yi(npro,nflow), g2yi(npro,nflow), 34*59599516SKenneth E. Jansen & g3yi(npro,nflow), shg(npro,nshl,nsd), 35*59599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), WdetJ(npro), 36*59599516SKenneth E. Jansen & T(npro), cp(npro), 37*59599516SKenneth E. Jansen & u1(npro), u2(npro), 38*59599516SKenneth E. Jansen & u3(npro), rmu(npro), 39*59599516SKenneth E. Jansen & rlm(npro), rlm2mu(npro), 40*59599516SKenneth E. Jansen & con(npro), rho(npro) 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansen dimension qdi(npro,idflx),alph1(npro),alph2(npro) 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansen dimension sgn(npro,nshl), shape(npro,nshl), 45*59599516SKenneth E. Jansen & shdrv(npro,nsd,nshl), shpsum(npro) 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansenc.... for surface tension 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansen dimension g1yti(npro), g2yti(npro), 50*59599516SKenneth E. Jansen & g3yti(npro) 51*59599516SKenneth E. Jansen integer idflow 52*59599516SKenneth E. Jansenc 53*59599516SKenneth E. Jansenc.... loop through the integration points 54*59599516SKenneth E. Jansenc 55*59599516SKenneth E. Jansen 56*59599516SKenneth E. Jansen ttim(33) = ttim(33) - secs(0.0) 57*59599516SKenneth E. Jansen 58*59599516SKenneth E. Jansen alph1 = 0.d0 59*59599516SKenneth E. Jansen alph2 = 0.d0 60*59599516SKenneth E. Jansen 61*59599516SKenneth E. Jansen do intp = 1, ngauss 62*59599516SKenneth E. Jansen if (Qwt(lcsyst,intp) .eq. zero) cycle ! precaution 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each 65*59599516SKenneth E. Jansenc element at this quadrature point. These arrays will contain 66*59599516SKenneth E. Jansenc the correct signs for the hierarchic basis 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansen call getshp(shp, shgl, sgn, 69*59599516SKenneth E. Jansen & shape, shdrv) 70*59599516SKenneth E. Jansenc 71*59599516SKenneth E. Jansenc.... initialize 72*59599516SKenneth E. Jansenc 73*59599516SKenneth E. Jansen qdi = zero 74*59599516SKenneth E. Jansenc 75*59599516SKenneth E. Jansenc 76*59599516SKenneth E. Jansenc.... calculate the integration variables necessary for the 77*59599516SKenneth E. Jansenc formation of q 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen call e3qvar (ycl, shape, shdrv, 81*59599516SKenneth E. Jansen & rho, xl, g1yi, 82*59599516SKenneth E. Jansen & g2yi, g3yi, shg, 83*59599516SKenneth E. Jansen & dxidx, WdetJ, T, 84*59599516SKenneth E. Jansen & cp, u1, u2, 85*59599516SKenneth E. Jansen & u3 ) 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansenc.... compute diffusive flux vector at this integration point 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansenc.... get material properties 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen call getDiff (T, cp, rho, ycl, 93*59599516SKenneth E. Jansen & rmu, rlm, rlm2mu, con, shape, 94*59599516SKenneth E. Jansen & xmudmi, xl) 95*59599516SKenneth E. Jansen 96*59599516SKenneth E. Jansen idflow = 0 97*59599516SKenneth E. Jansen if(idiff >= 1) then !so taking care of all the idiff=1,2,3 98*59599516SKenneth E. Jansen idflow = idflow+12 99*59599516SKenneth E. Jansenc 100*59599516SKenneth E. Jansenc.... compute diffusive fluxes 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansenc.... diffusive flux in x1-direction 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansen qdi(:,1) = rlm2mu * g1yi(:,2) 105*59599516SKenneth E. Jansen & + rlm * g2yi(:,3) 106*59599516SKenneth E. Jansen & + rlm * g3yi(:,4) 107*59599516SKenneth E. Jansen qdi(:,2) = rmu * g1yi(:,3) 108*59599516SKenneth E. Jansen & + rmu * g2yi(:,2) 109*59599516SKenneth E. Jansen qdi(:,3) = rmu * g1yi(:,4) 110*59599516SKenneth E. Jansen & + rmu * g3yi(:,2) 111*59599516SKenneth E. Jansen qdi(:,4) = rlm2mu * u1 * g1yi(:,2) + rmu * u2 * g1yi(:,3) 112*59599516SKenneth E. Jansen & + rmu * u3 * g1yi(:,4) 113*59599516SKenneth E. Jansen & + rmu * u2 * g2yi(:,2) + rlm * u1 * g2yi(:,3) 114*59599516SKenneth E. Jansen & + rmu * u3 * g3yi(:,2) + rlm * u1 * g3yi(:,4) 115*59599516SKenneth E. Jansen & + con * g1yi(:,5) 116*59599516SKenneth E. Jansen 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansenc.... diffusive flux in x2-direction 119*59599516SKenneth E. Jansenc 120*59599516SKenneth E. Jansen qdi(:,5) = rmu * g1yi(:,3) 121*59599516SKenneth E. Jansen & + rmu * g2yi(:,2) 122*59599516SKenneth E. Jansen qdi(:,6) = rlm * g1yi(:,2) 123*59599516SKenneth E. Jansen & + rlm2mu * g2yi(:,3) 124*59599516SKenneth E. Jansen & + rlm * g3yi(:,4) 125*59599516SKenneth E. Jansen qdi(:,7) = rmu * g2yi(:,4) 126*59599516SKenneth E. Jansen & + rmu * g3yi(:,3) 127*59599516SKenneth E. Jansen qdi(:,8) = rlm * u2 * g1yi(:,2) + rmu * u1 * g1yi(:,3) 128*59599516SKenneth E. Jansen & + rmu * u1 * g2yi(:,2) + rlm2mu * u2 * g2yi(:,3) 129*59599516SKenneth E. Jansen & + rmu * u3 * g2yi(:,4) 130*59599516SKenneth E. Jansen & + rmu * u3 * g3yi(:,3) + rlm * u2 * g3yi(:,4) 131*59599516SKenneth E. Jansen & + con * g2yi(:,5) 132*59599516SKenneth E. Jansenc 133*59599516SKenneth E. Jansenc.... diffusive flux in x3-direction 134*59599516SKenneth E. Jansenc 135*59599516SKenneth E. Jansen qdi(:,9 ) = rmu * g1yi(:,4) 136*59599516SKenneth E. Jansen & + rmu * g3yi(:,2) 137*59599516SKenneth E. Jansen qdi(:,10) = rmu * g2yi(:,4) 138*59599516SKenneth E. Jansen & + rmu * g3yi(:,3) 139*59599516SKenneth E. Jansen qdi(:,11) = rlm * g1yi(:,2) 140*59599516SKenneth E. Jansen & + rlm * g2yi(:,3) 141*59599516SKenneth E. Jansen & + rlm2mu * g3yi(:,4) 142*59599516SKenneth E. Jansen qdi(:,12) = rlm * u3 * g1yi(:,2) + rmu * u1 * g1yi(:,4) 143*59599516SKenneth E. Jansen & + rlm * u3 * g2yi(:,3) + rmu * u2 * g2yi(:,4) 144*59599516SKenneth E. Jansen & + rmu * u1 * g3yi(:,2) + rmu * u2 * g3yi(:,3) 145*59599516SKenneth E. Jansen & + rlm2mu * u3 * g3yi(:,4) 146*59599516SKenneth E. Jansen & + con * g3yi(:,5) 147*59599516SKenneth E. Jansen 148*59599516SKenneth E. Jansenc 149*59599516SKenneth E. Jansenc 150*59599516SKenneth E. Jansenc.... assemble contribution of qdi to ql,i.e., contribution to 151*59599516SKenneth E. Jansenc each element node 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansen do i=1,nshl 154*59599516SKenneth E. Jansen ql(:,i,1 ) = ql(:,i,1 )+ shape(:,i)*WdetJ*qdi(:,1 ) 155*59599516SKenneth E. Jansen ql(:,i,2 ) = ql(:,i,2 )+ shape(:,i)*WdetJ*qdi(:,2 ) 156*59599516SKenneth E. Jansen ql(:,i,3 ) = ql(:,i,3 )+ shape(:,i)*WdetJ*qdi(:,3 ) 157*59599516SKenneth E. Jansen ql(:,i,4 ) = ql(:,i,4 )+ shape(:,i)*WdetJ*qdi(:,4 ) 158*59599516SKenneth E. Jansen ql(:,i,5 ) = ql(:,i,5 )+ shape(:,i)*WdetJ*qdi(:,5 ) 159*59599516SKenneth E. Jansen ql(:,i,6 ) = ql(:,i,6 )+ shape(:,i)*WdetJ*qdi(:,6 ) 160*59599516SKenneth E. Jansen ql(:,i,7 ) = ql(:,i,7 )+ shape(:,i)*WdetJ*qdi(:,7 ) 161*59599516SKenneth E. Jansen ql(:,i,8 ) = ql(:,i,8 )+ shape(:,i)*WdetJ*qdi(:,8 ) 162*59599516SKenneth E. Jansen ql(:,i,9 ) = ql(:,i,9 )+ shape(:,i)*WdetJ*qdi(:,9 ) 163*59599516SKenneth E. Jansen ql(:,i,10) = ql(:,i,10)+ shape(:,i)*WdetJ*qdi(:,10) 164*59599516SKenneth E. Jansen ql(:,i,11) = ql(:,i,11)+ shape(:,i)*WdetJ*qdi(:,11) 165*59599516SKenneth E. Jansen ql(:,i,12) = ql(:,i,12)+ shape(:,i)*WdetJ*qdi(:,12) 166*59599516SKenneth E. Jansen enddo 167*59599516SKenneth E. Jansenc 168*59599516SKenneth E. Jansenc.... compute and assemble the element contribution to the lumped 169*59599516SKenneth E. Jansenc mass matrix 170*59599516SKenneth E. Jansenc 171*59599516SKenneth E. Jansenc 172*59599516SKenneth E. Jansenc.... row sum technique 173*59599516SKenneth E. Jansenc 174*59599516SKenneth E. Jansen if ( idiff == 1 ) then 175*59599516SKenneth E. Jansen do i=1,nshl 176*59599516SKenneth E. Jansen rmassl(:,i) = rmassl(:,i) + shape(:,i)*WdetJ 177*59599516SKenneth E. Jansen enddo 178*59599516SKenneth E. Jansen endif 179*59599516SKenneth E. Jansenc 180*59599516SKenneth E. Jansenc.... "special lumping technique" (Hughes p. 445) 181*59599516SKenneth E. Jansenc 182*59599516SKenneth E. Jansen if ( idiff == 3 ) then 183*59599516SKenneth E. Jansen shpsum = zero 184*59599516SKenneth E. Jansen do i=1,nshl 185*59599516SKenneth E. Jansen shpsum = shpsum + shape(:,i)*shape(:,i) 186*59599516SKenneth E. Jansen rmassl(:,i)=rmassl(:,i)+shape(:,i)*shape(:,i)*WdetJ 187*59599516SKenneth E. Jansen enddo 188*59599516SKenneth E. Jansen alph1 = alph1+WdetJ 189*59599516SKenneth E. Jansen alph2 = alph2+shpsum*WdetJ 190*59599516SKenneth E. Jansen endif 191*59599516SKenneth E. Jansen endif ! end of idiff=1 .or. 3 192*59599516SKenneth E. Jansenc 193*59599516SKenneth E. Jansen if(isurf .eq. 1) then 194*59599516SKenneth E. Jansenc 195*59599516SKenneth E. Jansenc.... initialize 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansen g1yti = zero 198*59599516SKenneth E. Jansen g2yti = zero 199*59599516SKenneth E. Jansen g3yti = zero 200*59599516SKenneth E. Jansenc 201*59599516SKenneth E. Jansenc.... calculate the integration variables necessary for the 202*59599516SKenneth E. Jansenc formation of q 203*59599516SKenneth E. Jansenc 204*59599516SKenneth E. Jansenc.... compute the global gradient of Yt-variables, assuming 6th entry as 205*59599516SKenneth E. Jansenc.... the phase indicator function 206*59599516SKenneth E. Jansenc 207*59599516SKenneth E. Jansenc Yt_{,x_i}=SUM_{a=1}^nshl (N_{a,x_i}(int) Yta) 208*59599516SKenneth E. Jansenc 209*59599516SKenneth E. Jansen do n = 1, nshl 210*59599516SKenneth E. Jansen g1yti(:) = g1yti(:) + shg(:,n,1) * ycl(:,n,6) 211*59599516SKenneth E. Jansen g2yti(:) = g2yti(:) + shg(:,n,2) * ycl(:,n,6) 212*59599516SKenneth E. Jansen g3yti(:) = g3yti(:) + shg(:,n,3) * ycl(:,n,6) 213*59599516SKenneth E. Jansen enddo 214*59599516SKenneth E. Jansenc 215*59599516SKenneth E. Jansenc computing N_{b}*N_{a,x_i)*yta*WdetJ 216*59599516SKenneth E. Jansenc 217*59599516SKenneth E. Jansen do i=1,nshl 218*59599516SKenneth E. Jansen ql(:,i,idflow+1) = ql(:,i,idflow+1) 219*59599516SKenneth E. Jansen & + shape(:,i)*WdetJ*g1yti 220*59599516SKenneth E. Jansen ql(:,i,idflow+2) = ql(:,i,idflow+2) 221*59599516SKenneth E. Jansen & + shape(:,i)*WdetJ*g2yti 222*59599516SKenneth E. Jansen ql(:,i,idflow+3) = ql(:,i,idflow+3) 223*59599516SKenneth E. Jansen & + shape(:,i)*WdetJ*g3yti 224*59599516SKenneth E. Jansen rmassl(:,i) = rmassl(:,i) + shape(:,i)*WdetJ 225*59599516SKenneth E. Jansen enddo 226*59599516SKenneth E. Jansen endif !end of the isurf 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansenc.... end of the loop over integration points 229*59599516SKenneth E. Jansenc 230*59599516SKenneth E. Jansen enddo 231*59599516SKenneth E. Jansenc 232*59599516SKenneth E. Jansenc.... normalize the mass matrix for idiff == 3 233*59599516SKenneth E. Jansenc 234*59599516SKenneth E. Jansen if ( idiff == 3 ) then 235*59599516SKenneth E. Jansen do i=1,nshl 236*59599516SKenneth E. Jansen rmassl(:,i) = rmassl(:,i)*alph1/alph2 237*59599516SKenneth E. Jansen enddo 238*59599516SKenneth E. Jansen endif 239*59599516SKenneth E. Jansen 240*59599516SKenneth E. Jansen ttim(33) = ttim(33) + secs(0.0) 241*59599516SKenneth E. Jansen 242*59599516SKenneth E. Jansenc 243*59599516SKenneth E. Jansenc.... return 244*59599516SKenneth E. Jansenc 245*59599516SKenneth E. Jansen return 246*59599516SKenneth E. Jansen end 247