1*59599516SKenneth E. Jansen subroutine hessian ( y, x, 2*59599516SKenneth E. Jansen & shp, shgl, iBC, 3*59599516SKenneth E. Jansen & shpb, shglb, iper, 4*59599516SKenneth E. Jansen & ilwork, uhess, gradu ) 5*59599516SKenneth E. Jansen use pointer_data ! brings in the pointers for the blocked arrays 6*59599516SKenneth E. Jansen 7*59599516SKenneth E. Jansen include "common.h" 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansen dimension y(nshg,ndof), 10*59599516SKenneth E. Jansen & x(numnp,nsd), iBC(nshg), 11*59599516SKenneth E. Jansen & iper(nshg) 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 14*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 15*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 16*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 17*59599516SKenneth E. Jansenc 18*59599516SKenneth E. Jansen dimension gradu(nshg,9), rmass(nshg), 19*59599516SKenneth E. Jansen & uhess(nshg,27) 20*59599516SKenneth E. Jansenc 21*59599516SKenneth E. Jansen dimension ilwork(nlwork) 22*59599516SKenneth E. Jansen 23*59599516SKenneth E. Jansenc 24*59599516SKenneth E. Jansen gradu = zero 25*59599516SKenneth E. Jansen rmass = zero 26*59599516SKenneth E. Jansen 27*59599516SKenneth E. Jansen do iblk = 1, nelblk 28*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 29*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 30*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 31*59599516SKenneth E. Jansen iorder = lcblk(4,iblk) 32*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 33*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 34*59599516SKenneth E. Jansen mattyp = lcblk(7,iblk) 35*59599516SKenneth E. Jansen ndofl = lcblk(8,iblk) 36*59599516SKenneth E. Jansen nsymdl = lcblk(9,iblk) 37*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 38*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 39*59599516SKenneth E. Jansenc 40*59599516SKenneth E. Jansen call velocity_gradient ( y, 41*59599516SKenneth E. Jansen & x, 42*59599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:), 43*59599516SKenneth E. Jansen & shgl(lcsyst,:,1:nshl,:), 44*59599516SKenneth E. Jansen & mien(iblk)%p, 45*59599516SKenneth E. Jansen & gradu, 46*59599516SKenneth E. Jansen & rmass ) 47*59599516SKenneth E. Jansen 48*59599516SKenneth E. Jansen end do 49*59599516SKenneth E. Jansen 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansen call reconstruct( rmass, gradu, iBC, iper, ilwork, 9 ) 52*59599516SKenneth E. Jansen 53*59599516SKenneth E. Jansen uhess = zero 54*59599516SKenneth E. Jansen rmass = zero 55*59599516SKenneth E. Jansen 56*59599516SKenneth E. Jansen do iblk = 1, nelblk 57*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 58*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 59*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 60*59599516SKenneth E. Jansen iorder = lcblk(4,iblk) 61*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 62*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 63*59599516SKenneth E. Jansen mattyp = lcblk(7,iblk) 64*59599516SKenneth E. Jansen ndofl = lcblk(8,iblk) 65*59599516SKenneth E. Jansen nsymdl = lcblk(9,iblk) 66*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 67*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 68*59599516SKenneth E. Jansenc 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansen call velocity_hessian ( gradu, 71*59599516SKenneth E. Jansen & x, 72*59599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:), 73*59599516SKenneth E. Jansen & shgl(lcsyst,:,1:nshl,:), 74*59599516SKenneth E. Jansen & mien(iblk)%p, 75*59599516SKenneth E. Jansen & uhess, 76*59599516SKenneth E. Jansen & rmass ) 77*59599516SKenneth E. Jansen end do 78*59599516SKenneth E. Jansen 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen call reconstruct( rmass, uhess, iBC, iper, ilwork, 27 ) 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansen return 83*59599516SKenneth E. Jansen end 84*59599516SKenneth E. Jansen 85*59599516SKenneth E. Jansenc----------------------------------------------------------------------------- 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen subroutine velocity_gradient ( y, x, shp, shgl, 88*59599516SKenneth E. Jansen & ien, gradu, rmass ) 89*59599516SKenneth E. Jansen 90*59599516SKenneth E. Jansen include "common.h" 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen dimension y(nshg,ndof), x(numnp,nsd), 93*59599516SKenneth E. Jansen & shp(nshl,ngauss), shgl(nsd,nshl,ngauss), 94*59599516SKenneth E. Jansen & ien(npro,nshl), gradu(nshg,9), 95*59599516SKenneth E. Jansen & shdrv(npro,nsd,nshl), shape( npro, nshl ), 96*59599516SKenneth E. Jansen & gradul(npro,9) , rmass( nshg ) 97*59599516SKenneth E. Jansenc 98*59599516SKenneth E. Jansen dimension yl(npro,nshl,ndof), xl(npro,nenl,nsd), 99*59599516SKenneth E. Jansen & ql(npro,nshl,9), dxidx(npro,nsd,nsd), 100*59599516SKenneth E. Jansen & WdetJ(npro), rmassl(npro,nshl) 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansenc 103*59599516SKenneth E. Jansen dimension sgn(npro,nshl) 104*59599516SKenneth E. Jansenc 105*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis 106*59599516SKenneth E. Jansenc functions. 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansen do i=1,nshl 109*59599516SKenneth E. Jansen where ( ien(:,i) < 0 ) 110*59599516SKenneth E. Jansen sgn(:,i) = -one 111*59599516SKenneth E. Jansen elsewhere 112*59599516SKenneth E. Jansen sgn(:,i) = one 113*59599516SKenneth E. Jansen endwhere 114*59599516SKenneth E. Jansen enddo 115*59599516SKenneth E. Jansen 116*59599516SKenneth E. Jansenc 117*59599516SKenneth E. Jansenc.... gather the variables 118*59599516SKenneth E. Jansenc 119*59599516SKenneth E. Jansen 120*59599516SKenneth E. Jansen call localy (y, yl, ien, ndof, 'gather ') 121*59599516SKenneth E. Jansen call localx (x, xl, ien, nsd, 'gather ') 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansenc.... get the element residuals 124*59599516SKenneth E. Jansenc 125*59599516SKenneth E. Jansen ql = zero 126*59599516SKenneth E. Jansen rmassl = zero 127*59599516SKenneth E. Jansen 128*59599516SKenneth E. Jansen do intp = 1, ngauss 129*59599516SKenneth E. Jansen 130*59599516SKenneth E. Jansen if ( Qwt( lcsyst, intp ) .eq. zero ) cycle 131*59599516SKenneth E. Jansen 132*59599516SKenneth E. Jansen gradul = zero 133*59599516SKenneth E. Jansen call getshp( shp, shgl, sgn, shape, shdrv ) 134*59599516SKenneth E. Jansen call local_gradient( yl(:,:,2:4), 3, shdrv, xl, 135*59599516SKenneth E. Jansen & gradul , dxidx, WdetJ ) 136*59599516SKenneth E. Jansen 137*59599516SKenneth E. Jansenc.... assemble contribution of gradu to each element node 138*59599516SKenneth E. Jansenc 139*59599516SKenneth E. Jansen do i=1,nshl 140*59599516SKenneth E. Jansen do j = 1, 9 141*59599516SKenneth E. Jansen ql(:,i,j) = ql(:,i,j)+shape(:,i)*WdetJ*gradul(:,j) 142*59599516SKenneth E. Jansen end do 143*59599516SKenneth E. Jansen 144*59599516SKenneth E. Jansen rmassl(:,i) = rmassl(:,i) + shape(:,i)*WdetJ 145*59599516SKenneth E. Jansen 146*59599516SKenneth E. Jansen end do 147*59599516SKenneth E. Jansen 148*59599516SKenneth E. Jansen end do 149*59599516SKenneth E. Jansenc 150*59599516SKenneth E. Jansenc 151*59599516SKenneth E. Jansen call local (gradu, ql, ien, 9, 'scatter ') 152*59599516SKenneth E. Jansen call local (rmass, rmassl, ien, 1, 'scatter ') 153*59599516SKenneth E. Jansenc 154*59599516SKenneth E. Jansenc.... end 155*59599516SKenneth E. Jansenc 156*59599516SKenneth E. Jansen return 157*59599516SKenneth E. Jansen end 158*59599516SKenneth E. Jansen 159*59599516SKenneth E. Jansen 160*59599516SKenneth E. Jansenc----------------------------------------------------------------------------- 161*59599516SKenneth E. Jansen 162*59599516SKenneth E. Jansen subroutine velocity_hessian ( gradu, x, shp, shgl, 163*59599516SKenneth E. Jansen & ien, uhess, rmass ) 164*59599516SKenneth E. Jansen 165*59599516SKenneth E. Jansen include "common.h" 166*59599516SKenneth E. Jansenc 167*59599516SKenneth E. Jansen dimension gradu(nshg,9), x(numnp,nsd), 168*59599516SKenneth E. Jansen & shp(nshl,ngauss), shgl(nsd,nshl,ngauss), 169*59599516SKenneth E. Jansen & ien(npro,nshl), uhess(nshg,27), 170*59599516SKenneth E. Jansen & shdrv(npro,nsd,nshl), shape( npro, nshl ), 171*59599516SKenneth E. Jansen & uhessl(npro,27), rmass( nshg ) 172*59599516SKenneth E. Jansenc 173*59599516SKenneth E. Jansen dimension gradul(npro,nshl,9), xl(npro,nenl,nsd), 174*59599516SKenneth E. Jansen & ql(npro,nshl,27), dxidx(npro,nsd,nsd), 175*59599516SKenneth E. Jansen & WdetJ(npro), rmassl(npro, nshl) 176*59599516SKenneth E. Jansenc 177*59599516SKenneth E. Jansenc 178*59599516SKenneth E. Jansen dimension sgn(npro,nshl) 179*59599516SKenneth E. Jansenc 180*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis 181*59599516SKenneth E. Jansenc functions. 182*59599516SKenneth E. Jansenc 183*59599516SKenneth E. Jansen do i=1,nshl 184*59599516SKenneth E. Jansen where ( ien(:,i) < 0 ) 185*59599516SKenneth E. Jansen sgn(:,i) = -one 186*59599516SKenneth E. Jansen elsewhere 187*59599516SKenneth E. Jansen sgn(:,i) = one 188*59599516SKenneth E. Jansen endwhere 189*59599516SKenneth E. Jansen enddo 190*59599516SKenneth E. Jansen 191*59599516SKenneth E. Jansenc 192*59599516SKenneth E. Jansenc.... gather the variables 193*59599516SKenneth E. Jansenc 194*59599516SKenneth E. Jansen 195*59599516SKenneth E. Jansen call local (gradu, gradul, ien, 9 , 'gather ') 196*59599516SKenneth E. Jansen call localx (x, xl, ien, nsd, 'gather ') 197*59599516SKenneth E. Jansenc 198*59599516SKenneth E. Jansenc.... get the element residuals 199*59599516SKenneth E. Jansenc 200*59599516SKenneth E. Jansen ql = zero 201*59599516SKenneth E. Jansen rmassl = zero 202*59599516SKenneth E. Jansen 203*59599516SKenneth E. Jansen do intp = 1, ngauss 204*59599516SKenneth E. Jansen 205*59599516SKenneth E. Jansen if ( Qwt( lcsyst, intp ) .eq. zero ) cycle 206*59599516SKenneth E. Jansen 207*59599516SKenneth E. Jansen uhessl = zero 208*59599516SKenneth E. Jansen call getshp( shp, shgl, sgn, shape, shdrv ) 209*59599516SKenneth E. Jansen call local_gradient( gradul, 9, shdrv, xl, 210*59599516SKenneth E. Jansen & uhessl , dxidx, WdetJ ) 211*59599516SKenneth E. Jansen 212*59599516SKenneth E. Jansenc.... assemble contribution of gradu ., 213*59599516SKenneth E. Jansenc 214*59599516SKenneth E. Jansen do i=1,nshl 215*59599516SKenneth E. Jansen do j = 1,27 216*59599516SKenneth E. Jansen ql(:,i,j)=ql(:,i,j)+shape(:,i)*WdetJ*uhessl(:,j ) 217*59599516SKenneth E. Jansen end do 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansen rmassl(:,i) = rmassl(:,i) + shape(:,i)*WdetJ 220*59599516SKenneth E. Jansen end do 221*59599516SKenneth E. Jansen 222*59599516SKenneth E. Jansen end do 223*59599516SKenneth E. Jansenc 224*59599516SKenneth E. Jansenc 225*59599516SKenneth E. Jansen call local (uhess, ql, ien, 27, 'scatter ') 226*59599516SKenneth E. Jansen call local (rmass, rmassl, ien, 1, 'scatter ') 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansenc.... end 229*59599516SKenneth E. Jansenc 230*59599516SKenneth E. Jansen return 231*59599516SKenneth E. Jansen end 232*59599516SKenneth E. Jansen 233*59599516SKenneth E. Jansen 234*59599516SKenneth E. Jansenc-------------------------------------------------------------------- 235*59599516SKenneth E. Jansen subroutine reconstruct( rmass, qres, iBC, iper, ilwork, vsize ) 236*59599516SKenneth E. Jansen 237*59599516SKenneth E. Jansen include "common.h" 238*59599516SKenneth E. Jansen 239*59599516SKenneth E. Jansen integer vsize 240*59599516SKenneth E. Jansen dimension rmass(nshg), qres( nshg, vsize), 241*59599516SKenneth E. Jansen & iBC(nshg), iper(nshg) 242*59599516SKenneth E. Jansenc 243*59599516SKenneth E. Jansenc 244*59599516SKenneth E. Jansenc.... compute qi for node A, i.e., qres <-- qres/rmass 245*59599516SKenneth E. Jansenc 246*59599516SKenneth E. Jansen if (numpe > 1) then 247*59599516SKenneth E. Jansen call commu ( qres , ilwork, vsize , 'in ') 248*59599516SKenneth E. Jansen call commu ( rmass , ilwork, 1 , 'in ') 249*59599516SKenneth E. Jansen endif 250*59599516SKenneth E. Jansenc 251*59599516SKenneth E. Jansenc take care of periodic boundary conditions 252*59599516SKenneth E. Jansenc 253*59599516SKenneth E. Jansen do j= 1,nshg 254*59599516SKenneth E. Jansen if ((btest(iBC(j),10))) then 255*59599516SKenneth E. Jansen i = iper(j) 256*59599516SKenneth E. Jansen rmass(i) = rmass(i) + rmass(j) 257*59599516SKenneth E. Jansen qres(i,:) = qres(i,:) + qres(j,:) 258*59599516SKenneth E. Jansen endif 259*59599516SKenneth E. Jansen enddo 260*59599516SKenneth E. Jansen 261*59599516SKenneth E. Jansen do j= 1,nshg 262*59599516SKenneth E. Jansen if ((btest(iBC(j),10))) then 263*59599516SKenneth E. Jansen i = iper(j) 264*59599516SKenneth E. Jansen rmass(j) = rmass(i) 265*59599516SKenneth E. Jansen qres(j,:) = qres(i,:) 266*59599516SKenneth E. Jansen endif 267*59599516SKenneth E. Jansen enddo 268*59599516SKenneth E. Jansenc 269*59599516SKenneth E. Jansenc.... invert the diagonal mass matrix and find q 270*59599516SKenneth E. Jansenc 271*59599516SKenneth E. Jansen rmass = one/rmass 272*59599516SKenneth E. Jansen 273*59599516SKenneth E. Jansen do i=1,vsize 274*59599516SKenneth E. Jansen qres(:,i) = rmass*qres(:,i) 275*59599516SKenneth E. Jansen enddo 276*59599516SKenneth E. Jansen 277*59599516SKenneth E. Jansen if(numpe > 1) then 278*59599516SKenneth E. Jansen call commu (qres, ilwork, vsize, 'out') 279*59599516SKenneth E. Jansen endif 280*59599516SKenneth E. Jansen 281*59599516SKenneth E. Jansenc.... return 282*59599516SKenneth E. Jansenc 283*59599516SKenneth E. Jansen return 284*59599516SKenneth E. Jansen end 285*59599516SKenneth E. Jansen 286*59599516SKenneth E. Jansenc------------------------------------------------------------------------- 287*59599516SKenneth E. Jansen 288*59599516SKenneth E. Jansen subroutine local_gradient ( vector, vsize, shgl, xl, 289*59599516SKenneth E. Jansen & gradient, dxidx, WdetJ ) 290*59599516SKenneth E. Jansenc 291*59599516SKenneth E. Jansenc 292*59599516SKenneth E. Jansen include "common.h" 293*59599516SKenneth E. Jansenc 294*59599516SKenneth E. Jansenc passed arrays 295*59599516SKenneth E. Jansen 296*59599516SKenneth E. Jansen integer vsize 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansen dimension vector(npro,nshl,vsize), 299*59599516SKenneth E. Jansen & shgl(npro,nsd,nshl), xl(npro,nenl,nsd), 300*59599516SKenneth E. Jansen & gradient(npro,vsize*3), shg(npro,nshl,nsd), 301*59599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), WdetJ(npro) 302*59599516SKenneth E. Jansenc 303*59599516SKenneth E. Jansenc local arrays 304*59599516SKenneth E. Jansenc 305*59599516SKenneth E. Jansen dimension tmp(npro), dxdxi(npro,nsd,nsd) 306*59599516SKenneth E. Jansen 307*59599516SKenneth E. Jansenc 308*59599516SKenneth E. Jansenc.... compute the deformation gradient 309*59599516SKenneth E. Jansenc 310*59599516SKenneth E. Jansen dxdxi = zero 311*59599516SKenneth E. Jansenc 312*59599516SKenneth E. Jansen do n = 1, nenl 313*59599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(:,1,n) 314*59599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(:,2,n) 315*59599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(:,3,n) 316*59599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(:,1,n) 317*59599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(:,2,n) 318*59599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(:,3,n) 319*59599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(:,1,n) 320*59599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(:,2,n) 321*59599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(:,3,n) 322*59599516SKenneth E. Jansen enddo 323*59599516SKenneth E. Jansenc 324*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 325*59599516SKenneth E. Jansenc 326*59599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 327*59599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 328*59599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 329*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 330*59599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 331*59599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 332*59599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 333*59599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 334*59599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 335*59599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 336*59599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 337*59599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 338*59599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 339*59599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 340*59599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 341*59599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 342*59599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 343*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 344*59599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 345*59599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 346*59599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 347*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 348*59599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 349*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 350*59599516SKenneth E. Jansenc 351*59599516SKenneth E. Jansen WdetJ = Qwt(lcsyst,intp)/ tmp 352*59599516SKenneth E. Jansen 353*59599516SKenneth E. Jansenc 354*59599516SKenneth E. Jansenc.... ---------------------> Global Gradients <----------------------- 355*59599516SKenneth E. Jansenc 356*59599516SKenneth E. Jansen gradient = zero 357*59599516SKenneth E. Jansenc 358*59599516SKenneth E. Jansenc 359*59599516SKenneth E. Jansen do n = 1, nshl 360*59599516SKenneth E. Jansenc 361*59599516SKenneth E. Jansenc.... compute the global gradient of shape-function 362*59599516SKenneth E. Jansenc 363*59599516SKenneth E. Jansenc ! N_{a,x_i}= N_{a,xi_i} xi_{i,x_j} 364*59599516SKenneth E. Jansenc 365*59599516SKenneth E. Jansen shg(:,n,1) = shgl(:,1,n) * dxidx(:,1,1) + 366*59599516SKenneth E. Jansen & shgl(:,2,n) * dxidx(:,2,1) + 367*59599516SKenneth E. Jansen & shgl(:,3,n) * dxidx(:,3,1) 368*59599516SKenneth E. Jansen shg(:,n,2) = shgl(:,1,n) * dxidx(:,1,2) + 369*59599516SKenneth E. Jansen & shgl(:,2,n) * dxidx(:,2,2) + 370*59599516SKenneth E. Jansen & shgl(:,3,n) * dxidx(:,3,2) 371*59599516SKenneth E. Jansen shg(:,n,3) = shgl(:,1,n) * dxidx(:,1,3) + 372*59599516SKenneth E. Jansen & shgl(:,2,n) * dxidx(:,2,3) + 373*59599516SKenneth E. Jansen & shgl(:,3,n) * dxidx(:,3,3) 374*59599516SKenneth E. Jansenc 375*59599516SKenneth E. Jansenc 376*59599516SKenneth E. Jansenc Y_{,x_i}=SUM_{a=1}^nenl (N_{a,x_i}(int) Ya) 377*59599516SKenneth E. Jansenc 378*59599516SKenneth E. Jansen do i = 1, 3 379*59599516SKenneth E. Jansen do j = 1, vsize 380*59599516SKenneth E. Jansen k = (i-1)*vsize+j 381*59599516SKenneth E. Jansen gradient(:,k) = gradient(:,k) + shg(:,n,i)*vector(:,n,j) 382*59599516SKenneth E. Jansen end do 383*59599516SKenneth E. Jansen end do 384*59599516SKenneth E. Jansen 385*59599516SKenneth E. Jansen end do 386*59599516SKenneth E. Jansen 387*59599516SKenneth E. Jansenc 388*59599516SKenneth E. Jansenc.... return 389*59599516SKenneth E. Jansenc 390*59599516SKenneth E. Jansen return 391*59599516SKenneth E. Jansen end 392