1*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc This file contains functions for dealing with higher order shape 4*59599516SKenneth E. Jansenc functions at the element level. 5*59599516SKenneth E. Jansenc 6*59599516SKenneth E. Jansenc Christian Whiting, Winter 1999 7*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 8*59599516SKenneth E. Jansen 9*59599516SKenneth E. Jansen subroutine getsgn(ien, sgn) 10*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 11*59599516SKenneth E. Jansenc returns the matrix of mode signs used for negating higher order 12*59599516SKenneth E. Jansenc basis functions. Connectivity array is assumed to have negative 13*59599516SKenneth E. Jansenc signs on all modes to be negated. 14*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 15*59599516SKenneth E. Jansen include "common.h" 16*59599516SKenneth E. Jansen 17*59599516SKenneth E. Jansen dimension ien(npro,nshl), sgn(npro,nshl) 18*59599516SKenneth E. Jansen 19*59599516SKenneth E. Jansen do i=nenl+1,nshl 20*59599516SKenneth E. Jansen where ( ien(:,i) < 0 ) 21*59599516SKenneth E. Jansen sgn(:,i) = -one 22*59599516SKenneth E. Jansen elsewhere 23*59599516SKenneth E. Jansen sgn(:,i) = one 24*59599516SKenneth E. Jansen endwhere 25*59599516SKenneth E. Jansen enddo 26*59599516SKenneth E. Jansen 27*59599516SKenneth E. Jansen return 28*59599516SKenneth E. Jansen end 29*59599516SKenneth E. Jansen 30*59599516SKenneth E. Jansen subroutine getshp(shp, shgl, sgn, shape, shdrv) 31*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 32*59599516SKenneth E. Jansenc returns the matrix of element shape functions with the higher 33*59599516SKenneth E. Jansenc order modes correctly negated at the current quadrature point. 34*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 35*59599516SKenneth E. Jansen include "common.h" 36*59599516SKenneth E. Jansen 37*59599516SKenneth E. Jansen dimension shp(nshl,ngauss), shgl(nsd,nshl,ngauss), 38*59599516SKenneth E. Jansen & sgn(npro,nshl), shape(npro,nshl), 39*59599516SKenneth E. Jansen & shdrv(npro,nsd,nshl) 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansen 42*59599516SKenneth E. Jansen do i=1,nenl 43*59599516SKenneth E. Jansen shape(:,i) = shp(i,intp) 44*59599516SKenneth E. Jansen do j=1,3 45*59599516SKenneth E. Jansen shdrv(:,j,i) = shgl(j,i,intp) 46*59599516SKenneth E. Jansen enddo 47*59599516SKenneth E. Jansen enddo 48*59599516SKenneth E. Jansen if ( ipord > 1 ) then 49*59599516SKenneth E. Jansen do i=nenl+1,nshl 50*59599516SKenneth E. Jansen shape(:,i) = sgn(:,i) * shp(i,intp) 51*59599516SKenneth E. Jansen do j=1,3 52*59599516SKenneth E. Jansen shdrv(:,j,i) = shgl(j,i,intp)*sgn(:,i) 53*59599516SKenneth E. Jansen enddo 54*59599516SKenneth E. Jansen enddo 55*59599516SKenneth E. Jansen endif 56*59599516SKenneth E. Jansen 57*59599516SKenneth E. Jansen return 58*59599516SKenneth E. Jansen end 59*59599516SKenneth E. Jansen 60*59599516SKenneth E. Jansen subroutine getshpb(shp, shgl, sgn, shape, shdrv) 61*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 62*59599516SKenneth E. Jansenc returns the matrix of element shape functions with the higher 63*59599516SKenneth E. Jansenc order modes correctly negated at the current quadrature point. 64*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 65*59599516SKenneth E. Jansen include "common.h" 66*59599516SKenneth E. Jansen 67*59599516SKenneth E. Jansen dimension shp(nshl,ngaussb), shgl(nsd,nshl,ngaussb), 68*59599516SKenneth E. Jansen & sgn(npro,nshl), shape(npro,nshl), 69*59599516SKenneth E. Jansen & shdrv(npro,nsd,nshl) 70*59599516SKenneth E. Jansen 71*59599516SKenneth E. Jansen 72*59599516SKenneth E. Jansen do i=1,nenl 73*59599516SKenneth E. Jansen shape(:,i) = shp(i,intp) 74*59599516SKenneth E. Jansen do j=1,3 75*59599516SKenneth E. Jansen shdrv(:,j,i) = shgl(j,i,intp) 76*59599516SKenneth E. Jansen enddo 77*59599516SKenneth E. Jansen enddo 78*59599516SKenneth E. Jansen if ( ipord > 1 ) then 79*59599516SKenneth E. Jansen do i=nenl+1,nshl 80*59599516SKenneth E. Jansen shape(:,i) = sgn(:,i) * shp(i,intp) 81*59599516SKenneth E. Jansen do j=1,3 82*59599516SKenneth E. Jansen shdrv(:,j,i) = shgl(j,i,intp)*sgn(:,i) 83*59599516SKenneth E. Jansen enddo 84*59599516SKenneth E. Jansen enddo 85*59599516SKenneth E. Jansen endif 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen return 88*59599516SKenneth E. Jansen end 89*59599516SKenneth E. Jansen 90*59599516SKenneth E. Jansen subroutine getbnodes(lnode) 91*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 92*59599516SKenneth E. Jansenc compute the higher order modes that lie on the boundary of the 93*59599516SKenneth E. Jansenc element. 94*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 95*59599516SKenneth E. Jansen include "common.h" 96*59599516SKenneth E. Jansen 97*59599516SKenneth E. Jansen dimension lnode(27) 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansenc 100*59599516SKenneth E. Jansenc.... boundary triangle of tet element 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansen if (lcsyst .eq. 1) then 103*59599516SKenneth E. Jansen do n = 1, nenbl 104*59599516SKenneth E. Jansen lnode(n) = n 105*59599516SKenneth E. Jansen enddo 106*59599516SKenneth E. Jansen if( ipord>1 ) then 107*59599516SKenneth E. Jansen nem = ipord-1 108*59599516SKenneth E. Jansen do n=1,3*nem 109*59599516SKenneth E. Jansen lnode(nenbl+n) = nenbl+1+n 110*59599516SKenneth E. Jansen enddo 111*59599516SKenneth E. Jansen endif 112*59599516SKenneth E. Jansen if( ipord>2 ) then 113*59599516SKenneth E. Jansen nfm = (ipord-2)*(ipord-1)/2 114*59599516SKenneth E. Jansen do n=1,nfm 115*59599516SKenneth E. Jansen lnode(3+3*nem+n) = 4+6*nem+n 116*59599516SKenneth E. Jansen enddo 117*59599516SKenneth E. Jansen endif 118*59599516SKenneth E. Jansenc 119*59599516SKenneth E. Jansenc.....boundary quadrilateral for a hex element 120*59599516SKenneth E. Jansenc 121*59599516SKenneth E. Jansen else if(lcsyst .eq. 2) then 122*59599516SKenneth E. Jansen do n = 1, nenbl 123*59599516SKenneth E. Jansen lnode(n) = n 124*59599516SKenneth E. Jansen enddo 125*59599516SKenneth E. Jansen if( ipord > 1) then 126*59599516SKenneth E. Jansen nem = ipord -1 127*59599516SKenneth E. Jansen do n=1,4*nem 128*59599516SKenneth E. Jansen lnode(nenbl+n) = 8+n 129*59599516SKenneth E. Jansen enddo 130*59599516SKenneth E. Jansen endif 131*59599516SKenneth E. Jansen 132*59599516SKenneth E. Jansen if( ipord > 3) then 133*59599516SKenneth E. Jansen nfm = (ipord-2)*(ipord-3)/2 134*59599516SKenneth E. Jansen do n=1,nfm 135*59599516SKenneth E. Jansen lnode(4+4*nem+n) = 8+12*nem+n 136*59599516SKenneth E. Jansen enddo 137*59599516SKenneth E. Jansen endif 138*59599516SKenneth E. Jansenc 139*59599516SKenneth E. Jansenc 140*59599516SKenneth E. Jansenc.... This renumbers the boundary nodes for a wedge element when the 141*59599516SKenneth E. Jansenc boundary element is a quad face. From lnode = [1 2 3 4] 142*59599516SKenneth E. Jansenc to lnode = [1 4 5 2] 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansen else if(lcsyst .eq. 3) then 145*59599516SKenneth E. Jansen do n = 1, nenbl 146*59599516SKenneth E. Jansen lnode(n) = n 147*59599516SKenneth E. Jansen enddo 148*59599516SKenneth E. Jansenc 149*59599516SKenneth E. Jansenc Need to implement for cubic, this valid only for ipord=2 150*59599516SKenneth E. Jansenc 151*59599516SKenneth E. Jansen if( ipord>1 ) then 152*59599516SKenneth E. Jansen nem = ipord-1 153*59599516SKenneth E. Jansen do n=1,3*nem 154*59599516SKenneth E. Jansen lnode(nenbl+n) = 6+n 155*59599516SKenneth E. Jansen enddo 156*59599516SKenneth E. Jansen endif 157*59599516SKenneth E. Jansenc 158*59599516SKenneth E. Jansenc Boundary quad of wedge element 159*59599516SKenneth E. Jansenc 160*59599516SKenneth E. Jansen else if(lcsyst .eq. 4) then 161*59599516SKenneth E. Jansen lnode(1) = 1 162*59599516SKenneth E. Jansen lnode(2) = 4 163*59599516SKenneth E. Jansen lnode(3) = 5 164*59599516SKenneth E. Jansen lnode(4) = 2 165*59599516SKenneth E. Jansenc$$$c 166*59599516SKenneth E. Jansenc$$$c Need to implement for cubic, this valid only for ipord=2 167*59599516SKenneth E. Jansenc$$$c 168*59599516SKenneth E. Jansenc$$$ if( ipord > 1) then 169*59599516SKenneth E. Jansenc$$$ lnode(5) = 9 170*59599516SKenneth E. Jansenc$$$ lnode(6) = 15 171*59599516SKenneth E. Jansenc$$$ lnode(7) = 12 172*59599516SKenneth E. Jansenc$$$ lnode(8) = 13 173*59599516SKenneth E. Jansenc$$$ nem = ipord -1 174*59599516SKenneth E. Jansenc$$$ do n=1,4*nem 175*59599516SKenneth E. Jansenc$$$ lnode(nenbl+n) = 6+n 176*59599516SKenneth E. Jansenc$$$ enddo 177*59599516SKenneth E. Jansenc$$$ endif 178*59599516SKenneth E. Jansenc 179*59599516SKenneth E. Jansenc Boundary quad of pyramid element 180*59599516SKenneth E. Jansenc 181*59599516SKenneth E. Jansen else if(lcsyst .eq. 5) then 182*59599516SKenneth E. Jansen lnode(1) = 1 183*59599516SKenneth E. Jansen lnode(2) = 2 184*59599516SKenneth E. Jansen lnode(3) = 3 185*59599516SKenneth E. Jansen lnode(4) = 4 186*59599516SKenneth E. Jansenc$$$ c 187*59599516SKenneth E. Jansenc$$$ c Need to implement for cubic, this valid only for ipord=2 188*59599516SKenneth E. Jansenc$$$ c 189*59599516SKenneth E. Jansenc$$$ if( ipord > 1) then 190*59599516SKenneth E. Jansenc$$$ lnode(5) = 9 191*59599516SKenneth E. Jansenc$$$ lnode(6) = 15 192*59599516SKenneth E. Jansenc$$$ lnode(7) = 12 193*59599516SKenneth E. Jansenc$$$ lnode(8) = 13 194*59599516SKenneth E. Jansenc$$$ nem = ipord -1 195*59599516SKenneth E. Jansenc$$$ do n=1,4*nem 196*59599516SKenneth E. Jansenc$$$ lnode(nenbl+n) = 6+n 197*59599516SKenneth E. Jansenc$$$ enddo 198*59599516SKenneth E. Jansenc$$$ endif 199*59599516SKenneth E. Jansenc 200*59599516SKenneth E. Jansenc Boundary triangle of pyramid element 201*59599516SKenneth E. Jansenc 202*59599516SKenneth E. Jansen else if(lcsyst .eq. 6) then 203*59599516SKenneth E. Jansen lnode(1) = 1 204*59599516SKenneth E. Jansen lnode(2) = 5 205*59599516SKenneth E. Jansen lnode(3) = 2 206*59599516SKenneth E. Jansenc$$$c 207*59599516SKenneth E. Jansenc$$$c Need to implement for cubic, this valid only for ipord=2 208*59599516SKenneth E. Jansenc$$$c 209*59599516SKenneth E. Jansenc$$$ if( ipord > 1) then 210*59599516SKenneth E. Jansenc$$$ lnode(5) = 9 211*59599516SKenneth E. Jansenc$$$ lnode(6) = 15 212*59599516SKenneth E. Jansenc$$$ lnode(7) = 12 213*59599516SKenneth E. Jansenc$$$ lnode(8) = 13 214*59599516SKenneth E. Jansenc$$$ nem = ipord -1 215*59599516SKenneth E. Jansenc$$$ do n=1,4*nem 216*59599516SKenneth E. Jansenc$$$ lnode(nenbl+n) = 6+n 217*59599516SKenneth E. Jansenc$$$ enddo 218*59599516SKenneth E. Jansenc$$$ endif 219*59599516SKenneth E. Jansenc 220*59599516SKenneth E. Jansenc.... other element types need to be implemented 221*59599516SKenneth E. Jansenc 222*59599516SKenneth E. Jansen else 223*59599516SKenneth E. Jansen write (*,*) 'Boundary element not implemented for lcyst=' 224*59599516SKenneth E. Jansen & ,lcsyst 225*59599516SKenneth E. Jansen stop 226*59599516SKenneth E. Jansen endif 227*59599516SKenneth E. Jansen 228*59599516SKenneth E. Jansen return 229*59599516SKenneth E. Jansen end 230*59599516SKenneth E. Jansen 231*59599516SKenneth E. Jansenc----------------------------------------------------------------------- 232*59599516SKenneth E. Jansenc 233*59599516SKenneth E. Jansenc Evaluate coefficient vector at its interpolation points 234*59599516SKenneth E. Jansenc 235*59599516SKenneth E. Jansenc----------------------------------------------------------------------- 236*59599516SKenneth E. Jansen subroutine evalAtInterp( ycoeff, yvals, x, nvars, npts ) 237*59599516SKenneth E. Jansen 238*59599516SKenneth E. Jansen use pointer_data 239*59599516SKenneth E. Jansen include "common.h" 240*59599516SKenneth E. Jansen 241*59599516SKenneth E. Jansen integer nvars, npts, nHits(nshg) 242*59599516SKenneth E. Jansen 243*59599516SKenneth E. Jansen real*8 ycoeff(nshg,ndof), yvals(nshg,nvars), 244*59599516SKenneth E. Jansen & shp(nshl,npts), shgl(nsd,nshl,npts), 245*59599516SKenneth E. Jansen & intpnt(3,npts), x(numnp,nsd) 246*59599516SKenneth E. Jansen 247*59599516SKenneth E. Jansen real*8, allocatable :: ycl(:,:,:) 248*59599516SKenneth E. Jansen real*8, allocatable :: xl(:,:,:) 249*59599516SKenneth E. Jansen real*8, allocatable :: yvl(:,:,:) 250*59599516SKenneth E. Jansen real*8, allocatable :: sgn(:,:) 251*59599516SKenneth E. Jansen 252*59599516SKenneth E. Jansen yvals = zero 253*59599516SKenneth E. Jansenc 254*59599516SKenneth E. Jansenc.... generate the shape functions at the interpolation points 255*59599516SKenneth E. Jansenc 256*59599516SKenneth E. Jansen call getIntPnts(intpnt,npts) 257*59599516SKenneth E. Jansen do i=1,npts 258*59599516SKenneth E. Jansen call shpTet(ipord,intpnt(:,i),shp(:,i),shgl(:,:,i)) 259*59599516SKenneth E. Jansen enddo 260*59599516SKenneth E. Jansenc 261*59599516SKenneth E. Jansenc.... loop over element blocks 262*59599516SKenneth E. Jansenc 263*59599516SKenneth E. Jansen nHits = 0 264*59599516SKenneth E. Jansen do iblk = 1, nelblk 265*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 266*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 267*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 268*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 269*59599516SKenneth E. Jansen ndofl = lcblk(8,iblk) 270*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 271*59599516SKenneth E. Jansen 272*59599516SKenneth E. Jansen allocate ( ycl(npro,nshl,ndof ) ) 273*59599516SKenneth E. Jansen allocate ( yvl(npro,nshl,nvars) ) 274*59599516SKenneth E. Jansen allocate ( xl(npro,nenl,nsd ) ) 275*59599516SKenneth E. Jansen allocate ( sgn(npro,nshl) ) 276*59599516SKenneth E. Jansen 277*59599516SKenneth E. Jansen call getsgn(mien(iblk)%p,sgn) 278*59599516SKenneth E. Jansen 279*59599516SKenneth E. Jansen call localy( ycoeff, ycl, mien(iblk)%p, ndof, 'gather ') 280*59599516SKenneth E. Jansen call localx( x, xl, mien(iblk)%p, nsd, 'gather ') 281*59599516SKenneth E. Jansen 282*59599516SKenneth E. Jansen call eval ( xl, ycl, yvl, 283*59599516SKenneth E. Jansen & shp, shgl, sgn, 284*59599516SKenneth E. Jansen & nvars, npts ) 285*59599516SKenneth E. Jansen 286*59599516SKenneth E. Jansenc 287*59599516SKenneth E. Jansenc.... average coefficients since stresses may be discontinuous 288*59599516SKenneth E. Jansenc 289*59599516SKenneth E. Jansen call localSum( yvals, yvl, mien(iblk)%p, 290*59599516SKenneth E. Jansen & nHits, nVars) 291*59599516SKenneth E. Jansen 292*59599516SKenneth E. Jansen 293*59599516SKenneth E. Jansen deallocate ( ycl ) 294*59599516SKenneth E. Jansen deallocate ( yvl ) 295*59599516SKenneth E. Jansen deallocate ( sgn ) 296*59599516SKenneth E. Jansen deallocate ( xl ) 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansen enddo 299*59599516SKenneth E. Jansen 300*59599516SKenneth E. Jansenc 301*59599516SKenneth E. Jansenc.... average the global values 302*59599516SKenneth E. Jansenc 303*59599516SKenneth E. Jansen do i = 1, nshg 304*59599516SKenneth E. Jansen do j = 1, nvars 305*59599516SKenneth E. Jansen yvals(i,j) = yvals(i,j)/nHits(i) !(real(nHits(i),8)) 306*59599516SKenneth E. Jansen enddo 307*59599516SKenneth E. Jansen enddo 308*59599516SKenneth E. Jansen 309*59599516SKenneth E. Jansen return 310*59599516SKenneth E. Jansen end 311*59599516SKenneth E. Jansen 312*59599516SKenneth E. Jansenc----------------------------------------------------------------------- 313*59599516SKenneth E. Jansenc 314*59599516SKenneth E. Jansenc evaluate in element coordinate system 315*59599516SKenneth E. Jansenc 316*59599516SKenneth E. Jansenc----------------------------------------------------------------------- 317*59599516SKenneth E. Jansen subroutine eval( xl, ycl, yvl, 318*59599516SKenneth E. Jansen & shp, shgl, sgn, 319*59599516SKenneth E. Jansen & nvars, npts ) 320*59599516SKenneth E. Jansen 321*59599516SKenneth E. Jansen include "common.h" 322*59599516SKenneth E. Jansen 323*59599516SKenneth E. Jansen integer nvars 324*59599516SKenneth E. Jansenc 325*59599516SKenneth E. Jansen real*8 ycl(npro,nshl,ndof), yvl(npro,nshl,nvars), 326*59599516SKenneth E. Jansen & sgn(npro,nshl), shape(npro,nshl), 327*59599516SKenneth E. Jansen & shdrv(npro,nsd,nshl), shp(nshl,npts), 328*59599516SKenneth E. Jansen & shgl(nsd,nshl,npts), xl(npro,nenl,nsd), 329*59599516SKenneth E. Jansen & shg(npro,nshl,nsd), gradV(npro,nsd,nsd), 330*59599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), tmp(npro), wtmp 331*59599516SKenneth E. Jansen 332*59599516SKenneth E. Jansen yvl = zero 333*59599516SKenneth E. Jansenc 334*59599516SKenneth E. Jansenc.... loop over interpolation points 335*59599516SKenneth E. Jansenc 336*59599516SKenneth E. Jansen do intp = 1, npts 337*59599516SKenneth E. Jansen call getshp(shp, shgl, sgn, 338*59599516SKenneth E. Jansen & shape, shdrv) 339*59599516SKenneth E. Jansen 340*59599516SKenneth E. Jansenc 341*59599516SKenneth E. Jansenc.... pressure and velocity 342*59599516SKenneth E. Jansenc 343*59599516SKenneth E. Jansen do i = 1, nshl 344*59599516SKenneth E. Jansen do j = 1, 4 345*59599516SKenneth E. Jansen yvl(:,intp,j) = yvl(:,intp,j) + shape(:,i) * ycl(:,i,j) 346*59599516SKenneth E. Jansen enddo 347*59599516SKenneth E. Jansen enddo 348*59599516SKenneth E. Jansenc 349*59599516SKenneth E. Jansenc.... viscous stress 350*59599516SKenneth E. Jansenc 351*59599516SKenneth E. Jansen call e3metric( xl, shdrv, dxidx, 352*59599516SKenneth E. Jansen & shg, tmp) 353*59599516SKenneth E. Jansen 354*59599516SKenneth E. Jansen gradV = zero 355*59599516SKenneth E. Jansen do n = 1, nshl 356*59599516SKenneth E. Jansen gradV(:,1,1) = gradV(:,1,1) + shg(:,n,1) * ycl(:,n,2) 357*59599516SKenneth E. Jansen gradV(:,2,1) = gradV(:,2,1) + shg(:,n,1) * ycl(:,n,3) 358*59599516SKenneth E. Jansen gradV(:,3,1) = gradV(:,3,1) + shg(:,n,1) * ycl(:,n,4) 359*59599516SKenneth E. Jansenc 360*59599516SKenneth E. Jansen gradV(:,1,2) = gradV(:,1,2) + shg(:,n,2) * ycl(:,n,2) 361*59599516SKenneth E. Jansen gradV(:,2,2) = gradV(:,2,2) + shg(:,n,2) * ycl(:,n,3) 362*59599516SKenneth E. Jansen gradV(:,3,2) = gradV(:,3,2) + shg(:,n,2) * ycl(:,n,4) 363*59599516SKenneth E. Jansenc 364*59599516SKenneth E. Jansen gradV(:,1,3) = gradV(:,1,3) + shg(:,n,3) * ycl(:,n,2) 365*59599516SKenneth E. Jansen gradV(:,2,3) = gradV(:,2,3) + shg(:,n,3) * ycl(:,n,3) 366*59599516SKenneth E. Jansen gradV(:,3,3) = gradV(:,3,3) + shg(:,n,3) * ycl(:,n,4) 367*59599516SKenneth E. Jansen enddo 368*59599516SKenneth E. Jansen 369*59599516SKenneth E. Jansen rmu = datmat(1,2,1) 370*59599516SKenneth E. Jansen 371*59599516SKenneth E. Jansen yvl(:,intp,6 ) = two * rmu * gradV(:,1,1) 372*59599516SKenneth E. Jansen yvl(:,intp,7 ) = two * rmu * gradV(:,2,2) 373*59599516SKenneth E. Jansen yvl(:,intp,8 ) = two * rmu * gradV(:,3,3) 374*59599516SKenneth E. Jansen 375*59599516SKenneth E. Jansen yvl(:,intp,9 ) = rmu * ( gradV(:,1,2) + gradV(:,2,1) ) 376*59599516SKenneth E. Jansen yvl(:,intp,10) = rmu * ( gradV(:,1,3) + gradV(:,3,1) ) 377*59599516SKenneth E. Jansen yvl(:,intp,11) = rmu * ( gradV(:,2,3) + gradV(:,3,2) ) 378*59599516SKenneth E. Jansen 379*59599516SKenneth E. Jansenc 380*59599516SKenneth E. Jansenc.... loop over interpolation points 381*59599516SKenneth E. Jansenc 382*59599516SKenneth E. Jansen enddo 383*59599516SKenneth E. Jansen 384*59599516SKenneth E. Jansen return 385*59599516SKenneth E. Jansen end 386*59599516SKenneth E. Jansen 387*59599516SKenneth E. Jansen 388*59599516SKenneth E. Jansen 389