1*59599516SKenneth E. Jansen module rlssave 2*59599516SKenneth E. Jansen 3*59599516SKenneth E. Jansen real*8, allocatable :: rls(:,:) 4*59599516SKenneth E. Jansen 5*59599516SKenneth E. Jansen end module 6*59599516SKenneth E. Jansen 7*59599516SKenneth E. Jansenc----------------------------------------------------------------------------- 8*59599516SKenneth E. Jansen 9*59599516SKenneth E. Jansen 10*59599516SKenneth E. Jansen 11*59599516SKenneth E. Jansenc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 12*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 13*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 14*59599516SKenneth E. Jansen 15*59599516SKenneth E. Jansen 16*59599516SKenneth E. Jansen 17*59599516SKenneth E. Jansen 18*59599516SKenneth E. Jansen subroutine setrls 19*59599516SKenneth E. Jansen 20*59599516SKenneth E. Jansen use rlssave 21*59599516SKenneth E. Jansen 22*59599516SKenneth E. Jansen include "common.h" 23*59599516SKenneth E. Jansen 24*59599516SKenneth E. Jansen allocate ( rls(nshg,6) ) 25*59599516SKenneth E. Jansen 26*59599516SKenneth E. Jansen return 27*59599516SKenneth E. Jansen 28*59599516SKenneth E. Jansen end 29*59599516SKenneth E. Jansen 30*59599516SKenneth E. Jansen 31*59599516SKenneth E. Jansen 32*59599516SKenneth E. Jansen 33*59599516SKenneth E. Jansenc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 34*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 35*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 36*59599516SKenneth E. Jansen 37*59599516SKenneth E. Jansen 38*59599516SKenneth E. Jansen 39*59599516SKenneth E. Jansen 40*59599516SKenneth E. Jansen subroutine bardmc (y, shgl, shp, 41*59599516SKenneth E. Jansen & iper, ilwork, 42*59599516SKenneth E. Jansen & nsons, ifath, x) 43*59599516SKenneth E. Jansen 44*59599516SKenneth E. Jansen use pointer_data 45*59599516SKenneth E. Jansen use rlssave ! rls(nshg,6) is retrieved and modified here. 46*59599516SKenneth E. Jansen 47*59599516SKenneth E. Jansen use quadfilt ! This module gives us shglf(maxtp,nsd,maxsh,ngaussf), 48*59599516SKenneth E. Jansenc shpf(maxtp,maxsh,ngaussf), and Qwtf(maxtp,ngaussf). 49*59599516SKenneth E. Jansenc Shpf and shglf are the shape funciotns and their 50*59599516SKenneth E. Jansenc gradient evaluated using the quadrature rule desired 51*59599516SKenneth E. Jansenc for computing the dmod. Qwtf contains the weights of the 52*59599516SKenneth E. Jansenc quad. points. 53*59599516SKenneth E. Jansen 54*59599516SKenneth E. Jansen include "common.h" 55*59599516SKenneth E. Jansen include "mpif.h" 56*59599516SKenneth E. Jansen include "auxmpi.h" 57*59599516SKenneth E. Jansen 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansen dimension fres(nshg,33), fwr(nshg), 60*59599516SKenneth E. Jansen & strnrm(nshg), cdelsq(nshg), 61*59599516SKenneth E. Jansen & xnum(nshg), xden(nshg), 62*59599516SKenneth E. Jansen & xmij(nshg,6), xlij(nshg,6), 63*59599516SKenneth E. Jansen & xrij(nshg,6), xhij(nshg,6), 64*59599516SKenneth E. Jansen & xnude(nfath,2), xnuder(nfath,2), 65*59599516SKenneth E. Jansen & nsons(nfath), 66*59599516SKenneth E. Jansen & strl(numel,maxnint), 67*59599516SKenneth E. Jansen & y(nshg,5), yold(nshg,5), 68*59599516SKenneth E. Jansen & ifath(nshg), iper(nshg), 69*59599516SKenneth E. Jansen & ilwork(nlwork), 70*59599516SKenneth E. Jansen & x(numnp,3), 71*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), shp(MAXTOP,maxsh,MAXQPT), 72*59599516SKenneth E. Jansen & xnutf(nfath), 73*59599516SKenneth E. Jansen & hfres(nshg,11), 74*59599516SKenneth E. Jansen & rho(nshg), 75*59599516SKenneth E. Jansen & eps(3), epst(3), 76*59599516SKenneth E. Jansen & tracerls(nshg) 77*59599516SKenneth E. Jansen 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansenc 80*59599516SKenneth E. Jansenc setup the weights for time averaging of cdelsq (now in quadfilt module) 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansen denom=max((one*lstep),one) 83*59599516SKenneth E. Jansen if(dtavei.lt.0) then 84*59599516SKenneth E. Jansen wcur=one/denom 85*59599516SKenneth E. Jansen else 86*59599516SKenneth E. Jansen wcur=dtavei 87*59599516SKenneth E. Jansen endif 88*59599516SKenneth E. Jansen whist=1.0-wcur 89*59599516SKenneth E. Jansen 90*59599516SKenneth E. Jansen fres = zero 91*59599516SKenneth E. Jansen hfres = zero 92*59599516SKenneth E. Jansen 93*59599516SKenneth E. Jansen yold(:,1)=y(:,4) 94*59599516SKenneth E. Jansen yold(:,2:4)=y(:,1:3) 95*59599516SKenneth E. Jansen yold(:,5) = y(:,5) 96*59599516SKenneth E. Jansen 97*59599516SKenneth E. Jansen if(matflg(1,1).eq.0) then ! compressible 98*59599516SKenneth E. Jansen rho(:) = yold(:,1) / (Rgas * yold(:,5)) ! get density at nodes. 99*59599516SKenneth E. Jansen else 100*59599516SKenneth E. Jansen rho(:) = one ! unit density 101*59599516SKenneth E. Jansen endif 102*59599516SKenneth E. Jansen 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansenc hack in an interesting velocity field (uncomment to test dmod) 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansenc yold(:,5) = 1.0 ! Debugging 107*59599516SKenneth E. Jansenc yold(:,2) = 2.0*x(:,1) - 3*x(:,2) 108*59599516SKenneth E. Jansenc yold(:,3) = 3.0*x(:,1) + 4.0*x(:,2) 109*59599516SKenneth E. Jansenc yold(:,4) = 4.0*x(:,1) + x(:,2) + x(:,3) 110*59599516SKenneth E. Jansenc yold(:,1) = Rgas * yold(:,5) ! Necessary to make model suitable 111*59599516SKenneth E. Jansenc suitable for the 112*59599516SKenneth E. Jansen 113*59599516SKenneth E. Jansen do iblk = 1,nelblk 114*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 115*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 116*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 117*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 118*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 119*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 120*59599516SKenneth E. Jansen inum = iel + npro - 1 121*59599516SKenneth E. Jansen 122*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 123*59599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen call hfilter (yold, x, mien(iblk)%p, hfres, 126*59599516SKenneth E. Jansen & shglf(lcsyst,:,1:nshl,:), 127*59599516SKenneth E. Jansen & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 128*59599516SKenneth E. Jansen 129*59599516SKenneth E. Jansen enddo 130*59599516SKenneth E. Jansen 131*59599516SKenneth E. Jansen if(numpe>1) call commu (hfres, ilwork, 11, 'in ') 132*59599516SKenneth E. Jansenc 133*59599516SKenneth E. Jansenc... account for periodicity in filtered variables 134*59599516SKenneth E. Jansenc 135*59599516SKenneth E. Jansen do j = 1,nshg ! Add on-processor slave contribution to masters 136*59599516SKenneth E. Jansen i = iper(j) 137*59599516SKenneth E. Jansen if (i .ne. j) then 138*59599516SKenneth E. Jansen hfres(i,:) = hfres(i,:) + hfres(j,:) 139*59599516SKenneth E. Jansen endif 140*59599516SKenneth E. Jansen enddo 141*59599516SKenneth E. Jansen do j = 1,nshg ! Set on-processor slaves to be the same as masters 142*59599516SKenneth E. Jansen i = iper(j) 143*59599516SKenneth E. Jansen if (i .ne. j) then 144*59599516SKenneth E. Jansen hfres(j,:) = hfres(i,:) 145*59599516SKenneth E. Jansen endif 146*59599516SKenneth E. Jansen enddo 147*59599516SKenneth E. Jansen 148*59599516SKenneth E. Jansenc... Set off-processor slaves to be the same as their masters 149*59599516SKenneth E. Jansen 150*59599516SKenneth E. Jansen if(numpe>1) call commu (hfres, ilwork, 11, 'out') 151*59599516SKenneth E. Jansen 152*59599516SKenneth E. Jansen 153*59599516SKenneth E. Jansen hfres(:,5) = one / hfres(:,5) ! one/(volume of hat filter kernel) 154*59599516SKenneth E. Jansen 155*59599516SKenneth E. Jansen do j = 1, 4 156*59599516SKenneth E. Jansen hfres(:,j) = hfres(:,j) * hfres(:,5) 157*59599516SKenneth E. Jansen enddo 158*59599516SKenneth E. Jansen do j = 6, 11 159*59599516SKenneth E. Jansen hfres(:,j) = hfres(:,j) * hfres(:,5) 160*59599516SKenneth E. Jansen enddo 161*59599516SKenneth E. Jansen 162*59599516SKenneth E. Jansenc Uncomment to test dmod 163*59599516SKenneth E. Jansen 164*59599516SKenneth E. Jansenc do j = 1, 11 165*59599516SKenneth E. Jansenc do i = 1, numnp 166*59599516SKenneth E. Jansenc hfres(i,j) = hfres(14,j) 167*59599516SKenneth E. Jansenc enddo 168*59599516SKenneth E. Jansenc enddo 169*59599516SKenneth E. Jansen 170*59599516SKenneth E. Jansenc End of dmod test 171*59599516SKenneth E. Jansen 172*59599516SKenneth E. Jansenc... Form the resolved Leonard stress (rls) at each node. 173*59599516SKenneth E. Jansen 174*59599516SKenneth E. Jansen rls(:,1) = hfres(:,6) - hfres(:,1)*hfres(:,1)/rho(:) 175*59599516SKenneth E. Jansen rls(:,2) = hfres(:,7) - hfres(:,2)*hfres(:,2)/rho(:) 176*59599516SKenneth E. Jansen rls(:,3) = hfres(:,8) - hfres(:,3)*hfres(:,3)/rho(:) 177*59599516SKenneth E. Jansen 178*59599516SKenneth E. Jansen tracerls=(rls(:,1)+rls(:,2)+rls(:,3))/three 179*59599516SKenneth E. Jansen 180*59599516SKenneth E. Jansen rls(:,1) = rls(:,1) - tracerls 181*59599516SKenneth E. Jansen rls(:,2) = rls(:,2) - tracerls 182*59599516SKenneth E. Jansen rls(:,3) = rls(:,3) - tracerls 183*59599516SKenneth E. Jansen 184*59599516SKenneth E. Jansen rls(:,4) = hfres(:,9) - hfres(:,1)*hfres(:,2)/rho(:) 185*59599516SKenneth E. Jansen rls(:,5) = hfres(:,10) - hfres(:,1)*hfres(:,3)/rho(:) 186*59599516SKenneth E. Jansen rls(:,6) = hfres(:,11) - hfres(:,2)*hfres(:,3)/rho(:) 187*59599516SKenneth E. Jansen 188*59599516SKenneth E. Jansenc rls(:,1) = 4.0d0 ! Debugging 189*59599516SKenneth E. Jansenc rls(:,2) = 5.0d0 190*59599516SKenneth E. Jansenc rls(:,3) = 1.0d0 191*59599516SKenneth E. Jansenc rls(:,4) = 2.1d0 192*59599516SKenneth E. Jansenc rls(:,5) = 1.5d0 193*59599516SKenneth E. Jansenc rls(:,6) = 3.0d0 194*59599516SKenneth E. Jansen 195*59599516SKenneth E. Jansenc... Stored the resolved Leonard stresses in a module. 196*59599516SKenneth E. Jansen 197*59599516SKenneth E. Jansenc... Compute dissipation of resolved kinetic energy (u_{i} u_{i}) 198*59599516SKenneth E. Jansenc... due to molecular stresses (epst(3)), to modeled residual stresses 199*59599516SKenneth E. Jansenc... (epst(1)), and to resolved Leonard stresses (epst(2)). 200*59599516SKenneth E. Jansen 201*59599516SKenneth E. Jansenc if (lstep .gt. 0) then 202*59599516SKenneth E. Jansen 203*59599516SKenneth E. Jansenc eps = zero 204*59599516SKenneth E. Jansenc do iblk = 1,nelblk 205*59599516SKenneth E. Jansenc lcsyst = lcblk(3,iblk) 206*59599516SKenneth E. Jansenc iel = lcblk(1,iblk) !Element number where this block begins 207*59599516SKenneth E. Jansenc npro = lcblk(1,iblk+1) - iel 208*59599516SKenneth E. Jansenc lelCat = lcblk(2,iblk) 209*59599516SKenneth E. Jansenc nenl = lcblk(5,iblk) 210*59599516SKenneth E. Jansenc nshl = lcblk(10,iblk) 211*59599516SKenneth E. Jansenc inum = iel + npro - 1 212*59599516SKenneth E. Jansen 213*59599516SKenneth E. Jansenc ngauss = nint(lcsyst) 214*59599516SKenneth E. Jansen 215*59599516SKenneth E. Jansenc call disPtion ( yold, x, mien(iblk)%p, 216*59599516SKenneth E. Jansenc & shgl(lcsyst,:,1:nshl,:), shp(lcsyst,1:nshl,:), 217*59599516SKenneth E. Jansenc & eps, mxmudmi(iblk)%p ) 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansenc enddo 220*59599516SKenneth E. Jansen 221*59599516SKenneth E. Jansenc if(numpe.gt.1)then 222*59599516SKenneth E. Jansenc call drvAllreduce( eps, epst, 3 ) 223*59599516SKenneth E. Jansenc else 224*59599516SKenneth E. Jansenc epst = eps 225*59599516SKenneth E. Jansenc endif 226*59599516SKenneth E. Jansen 227*59599516SKenneth E. Jansenc if (myrank .eq. master) then 228*59599516SKenneth E. Jansenc write(22,*) one*(lstep+1), epst(1), epst(2) 229*59599516SKenneth E. Jansenc call flush(22) 230*59599516SKenneth E. Jansenc endif 231*59599516SKenneth E. Jansen 232*59599516SKenneth E. Jansenc endif 233*59599516SKenneth E. Jansen 234*59599516SKenneth E. Jansen 235*59599516SKenneth E. Jansenc... Done w/ h-filtering. Begin 2h-filtering. 236*59599516SKenneth E. Jansen 237*59599516SKenneth E. Jansen do iblk = 1,nelblk 238*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 239*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 240*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 241*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 242*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 243*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 244*59599516SKenneth E. Jansen inum = iel + npro - 1 245*59599516SKenneth E. Jansen 246*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 247*59599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 248*59599516SKenneth E. Jansen 249*59599516SKenneth E. Jansen call twohfilter (yold, x, strl(iel:inum,:), mien(iblk)%p, 250*59599516SKenneth E. Jansen & fres, hfres, shgl(lcsyst,:,1:nshl,:), 251*59599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 252*59599516SKenneth E. Jansen 253*59599516SKenneth E. Jansen enddo 254*59599516SKenneth E. Jansenc 255*59599516SKenneth E. Jansen 256*59599516SKenneth E. Jansen do iblk = 1,nelblk 257*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 258*59599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 259*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 260*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 261*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) 262*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 263*59599516SKenneth E. Jansen inum = iel + npro - 1 264*59599516SKenneth E. Jansen 265*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 266*59599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 267*59599516SKenneth E. Jansen if (ngauss .ne. ngaussf) then 268*59599516SKenneth E. Jansen call getstrl (yold, x, mien(iblk)%p, 269*59599516SKenneth E. Jansen & strl(iel:inum,:), shgl(lcsyst,:,1:nshl,:), 270*59599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:)) 271*59599516SKenneth E. Jansen endif 272*59599516SKenneth E. Jansen enddo 273*59599516SKenneth E. Jansenc 274*59599516SKenneth E. Jansenc 275*59599516SKenneth E. JansenC must fix for abc and dynamic model 276*59599516SKenneth E. Jansenc if(any(btest(iBC,12))) !are there any axisym bc's 277*59599516SKenneth E. Jansenc & call rotabc(res, iBC, 'in ') 278*59599516SKenneth E. Jansenc 279*59599516SKenneth E. Jansen if(numpe>1) call commu (fres, ilwork, 33, 'in ') 280*59599516SKenneth E. Jansenc 281*59599516SKenneth E. Jansenc account for periodicity in filtered variables 282*59599516SKenneth E. Jansenc 283*59599516SKenneth E. Jansen do j = 1,nshg 284*59599516SKenneth E. Jansen i = iper(j) 285*59599516SKenneth E. Jansen if (i .ne. j) then 286*59599516SKenneth E. Jansen fres(i,:) = fres(i,:) + fres(j,:) 287*59599516SKenneth E. Jansen fres(j,:) = fres(i,:) 288*59599516SKenneth E. Jansen endif 289*59599516SKenneth E. Jansen enddo 290*59599516SKenneth E. Jansen 291*59599516SKenneth E. Jansen if (nfath .eq. 0) then 292*59599516SKenneth E. Jansen fres = fres(iper,:) 293*59599516SKenneth E. Jansen if(numpe>1) call commu (fres, ilwork, 33, 'out') 294*59599516SKenneth E. Jansenc again we will need a call 295*59599516SKenneth E. Jansenc if(any(btest(iBC,12))) !are there any axisym bc's 296*59599516SKenneth E. Jansenc & rotabc(y, iBC, 'out') 297*59599516SKenneth E. Jansen endif 298*59599516SKenneth E. Jansen 299*59599516SKenneth E. Jansen fres(:,23) = one / fres(:,23) 300*59599516SKenneth E. Jansen do j = 1,22 301*59599516SKenneth E. Jansen fres(:,j) = fres(:,j) * fres(:,23) 302*59599516SKenneth E. Jansen enddo 303*59599516SKenneth E. Jansenc fres(:,24) = fres(:,24) * fres(:,23) 304*59599516SKenneth E. Jansen do j = 25,33 305*59599516SKenneth E. Jansen fres(:,j) = fres(:,j) * fres(:,23) 306*59599516SKenneth E. Jansen enddo 307*59599516SKenneth E. Jansenc 308*59599516SKenneth E. Jansenc.....at this point fres is really all of our filtered quantities 309*59599516SKenneth E. Jansenc at the nodes 310*59599516SKenneth E. Jansenc 311*59599516SKenneth E. Jansen 312*59599516SKenneth E. Jansen strnrm = sqrt( 313*59599516SKenneth E. Jansen & two * (fres(:,10)**2 + fres(:,11)**2 + fres(:,12)**2) 314*59599516SKenneth E. Jansen & + four * ( fres(:,13)**2 + fres(:,14)**2 + fres(:,15)**2 ) ) 315*59599516SKenneth E. Jansen 316*59599516SKenneth E. Jansen fwr = fwr1 * fres(:,22) * strnrm 317*59599516SKenneth E. Jansen 318*59599516SKenneth E. Jansen if(matflg(1,1).eq.0) then ! compressible 319*59599516SKenneth E. Jansen 320*59599516SKenneth E. Jansen xmij(:,1) = -fwr 321*59599516SKenneth E. Jansen & * pt33 * (two*fres(:,10) - fres(:,11) - fres(:,12)) 322*59599516SKenneth E. Jansen & + pt33 * (two*fres(:,16) - fres(:,17) - fres(:,18)) 323*59599516SKenneth E. Jansenc 324*59599516SKenneth E. Jansen xmij(:,2) = -fwr 325*59599516SKenneth E. Jansen & * pt33 * (two*fres(:,11) - fres(:,10) - fres(:,12)) 326*59599516SKenneth E. Jansen & + pt33 * (two*fres(:,17) - fres(:,16) - fres(:,18)) 327*59599516SKenneth E. Jansenc 328*59599516SKenneth E. Jansen xmij(:,3) = -fwr 329*59599516SKenneth E. Jansen & * pt33 * (two*fres(:,12) - fres(:,10) - fres(:,11)) 330*59599516SKenneth E. Jansen & + pt33 * (two*fres(:,18) - fres(:,16) - fres(:,17)) 331*59599516SKenneth E. Jansen 332*59599516SKenneth E. Jansen else 333*59599516SKenneth E. Jansen 334*59599516SKenneth E. Jansen xmij(:,1) = -fwr 335*59599516SKenneth E. Jansen & * fres(:,10) + fres(:,16) 336*59599516SKenneth E. Jansen xmij(:,2) = -fwr 337*59599516SKenneth E. Jansen & * fres(:,11) + fres(:,17) 338*59599516SKenneth E. Jansen xmij(:,3) = -fwr 339*59599516SKenneth E. Jansen & * fres(:,12) + fres(:,18) 340*59599516SKenneth E. Jansen 341*59599516SKenneth E. Jansen endif 342*59599516SKenneth E. Jansen 343*59599516SKenneth E. Jansen xmij(:,4) = -fwr * fres(:,13) + fres(:,19) 344*59599516SKenneth E. Jansen xmij(:,5) = -fwr * fres(:,14) + fres(:,20) 345*59599516SKenneth E. Jansen xmij(:,6) = -fwr * fres(:,15) + fres(:,21) 346*59599516SKenneth E. Jansen 347*59599516SKenneth E. Jansen fres(:,22) = one / fres(:,22) 348*59599516SKenneth E. Jansen 349*59599516SKenneth E. Jansen xlij(:,1) = fres(:,4) - fres(:,1) * fres(:,1) * fres(:,22) 350*59599516SKenneth E. Jansen xlij(:,2) = fres(:,5) - fres(:,2) * fres(:,2) * fres(:,22) 351*59599516SKenneth E. Jansen xlij(:,3) = fres(:,6) - fres(:,3) * fres(:,3) * fres(:,22) 352*59599516SKenneth E. Jansen xlij(:,4) = fres(:,7) - fres(:,1) * fres(:,2) * fres(:,22) 353*59599516SKenneth E. Jansen xlij(:,5) = fres(:,8) - fres(:,1) * fres(:,3) * fres(:,22) 354*59599516SKenneth E. Jansen xlij(:,6) = fres(:,9) - fres(:,2) * fres(:,3) * fres(:,22) 355*59599516SKenneth E. Jansen 356*59599516SKenneth E. Jansen xhij(:,1) = fres(:,28) - fres(:,25)*fres(:,25) 357*59599516SKenneth E. Jansen xhij(:,2) = fres(:,29) - fres(:,26)*fres(:,26) 358*59599516SKenneth E. Jansen xhij(:,3) = fres(:,30) - fres(:,27)*fres(:,27) 359*59599516SKenneth E. Jansen xhij(:,4) = fres(:,31) - fres(:,25)*fres(:,26) 360*59599516SKenneth E. Jansen xhij(:,5) = fres(:,32) - fres(:,25)*fres(:,27) 361*59599516SKenneth E. Jansen xhij(:,6) = fres(:,33) - fres(:,26)*fres(:,27) 362*59599516SKenneth E. Jansen 363*59599516SKenneth E. Jansen xrij(:,1) = xlij(:,1) - xhij(:,1) 364*59599516SKenneth E. Jansen xrij(:,2) = xlij(:,2) - xhij(:,2) 365*59599516SKenneth E. Jansen xrij(:,3) = xlij(:,3) - xhij(:,3) 366*59599516SKenneth E. Jansen xrij(:,4) = xlij(:,4) - xhij(:,4) 367*59599516SKenneth E. Jansen xrij(:,5) = xlij(:,5) - xhij(:,5) 368*59599516SKenneth E. Jansen xrij(:,6) = xlij(:,6) - xhij(:,6) 369*59599516SKenneth E. Jansen 370*59599516SKenneth E. Jansen xnum = xrij(:,1) * xmij(:,1) + xrij(:,2) * xmij(:,2) 371*59599516SKenneth E. Jansen & + xrij(:,3) * xmij(:,3) 372*59599516SKenneth E. Jansen & + two * (xrij(:,4) * xmij(:,4) + xrij(:,5) * xmij(:,5) 373*59599516SKenneth E. Jansen & + xrij(:,6) * xmij(:,6)) 374*59599516SKenneth E. Jansen xden = xmij(:,1) * xmij(:,1) + xmij(:,2) * xmij(:,2) 375*59599516SKenneth E. Jansen & + xmij(:,3) * xmij(:,3) 376*59599516SKenneth E. Jansen & + two * (xmij(:,4) * xmij(:,4) + xmij(:,5) * xmij(:,5) 377*59599516SKenneth E. Jansen & + xmij(:,6) * xmij(:,6)) 378*59599516SKenneth E. Jansen xden = two * xden 379*59599516SKenneth E. Jansen 380*59599516SKenneth E. Jansenc zero on processor periodic nodes so that they will not be added twice 381*59599516SKenneth E. Jansen do j = 1,numnp 382*59599516SKenneth E. Jansen i = iper(j) 383*59599516SKenneth E. Jansen if (i .ne. j) then 384*59599516SKenneth E. Jansen xnum(j) = zero 385*59599516SKenneth E. Jansen xden(j) = zero 386*59599516SKenneth E. Jansen endif 387*59599516SKenneth E. Jansen enddo 388*59599516SKenneth E. Jansen 389*59599516SKenneth E. Jansen if (numpe.gt.1 .and. nsons(1).gt.1) then 390*59599516SKenneth E. Jansen 391*59599516SKenneth E. Jansen numtask = ilwork(1) 392*59599516SKenneth E. Jansen itkbeg = 1 393*59599516SKenneth E. Jansen 394*59599516SKenneth E. Jansenc zero the nodes that are "solved" on the other processors 395*59599516SKenneth E. Jansen do itask = 1, numtask 396*59599516SKenneth E. Jansen 397*59599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 398*59599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 399*59599516SKenneth E. Jansen 400*59599516SKenneth E. Jansen if (iacc .eq. 0) then 401*59599516SKenneth E. Jansen do is = 1,numseg 402*59599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 403*59599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 404*59599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 405*59599516SKenneth E. Jansen xnum(isgbeg:isgend) = zero 406*59599516SKenneth E. Jansen xden(isgbeg:isgend) = zero 407*59599516SKenneth E. Jansen enddo 408*59599516SKenneth E. Jansen endif 409*59599516SKenneth E. Jansen 410*59599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 411*59599516SKenneth E. Jansen 412*59599516SKenneth E. Jansen enddo 413*59599516SKenneth E. Jansen 414*59599516SKenneth E. Jansen endif 415*59599516SKenneth E. Jansenc 416*59599516SKenneth E. Jansenc Description of arrays. Each processor has an array of length equal 417*59599516SKenneth E. Jansenc to the total number of fathers times 2 xnude(nfathers,2). One to collect 418*59599516SKenneth E. Jansenc the numerator and one to collect the denominator. There is also an array 419*59599516SKenneth E. Jansenc of length nshg on each processor which tells the father number of each 420*59599516SKenneth E. Jansenc on processor node, ifath(nnshg). Finally, there is an arry of length 421*59599516SKenneth E. Jansenc nfathers to tell the total (on all processors combined) number of sons 422*59599516SKenneth E. Jansenc for each father. 423*59599516SKenneth E. Jansenc 424*59599516SKenneth E. Jansenc Now loop over nodes and accumlate the numerator and the denominator 425*59599516SKenneth E. Jansenc to the father nodes. Only on processor addition at this point. 426*59599516SKenneth E. Jansenc Note that serrogate fathers are collect some for the case where some 427*59599516SKenneth E. Jansenc sons are on another processor 428*59599516SKenneth E. Jansenc 429*59599516SKenneth E. Jansen if(nsons(1) .gt. 1) then 430*59599516SKenneth E. Jansen xnude = zero 431*59599516SKenneth E. Jansen do i = 1,nshg 432*59599516SKenneth E. Jansen xnude(ifath(i),1) = xnude(ifath(i),1) + xnum(i) 433*59599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + xden(i) 434*59599516SKenneth E. Jansen enddo 435*59599516SKenneth E. Jansen else ! no homogeneity assumed 436*59599516SKenneth E. Jansen xnude(:,1)=xnum(:) 437*59599516SKenneth E. Jansen xnude(:,2)=xden(:) 438*59599516SKenneth E. Jansen endif 439*59599516SKenneth E. Jansen 440*59599516SKenneth E. Jansenc 441*59599516SKenneth E. Jansenc Now the true fathers and serrogates combine results and update 442*59599516SKenneth E. Jansenc each other. 443*59599516SKenneth E. Jansenc 444*59599516SKenneth E. Jansenc ONLY DO THIS IF 1) multiprocessors AND 2) homogenous directions exist 445*59599516SKenneth E. Jansen 446*59599516SKenneth E. Jansen if(numpe .gt. 1 .and. nsons(1).ne.1 )then 447*59599516SKenneth E. Jansen call drvAllreduce(xnude, xnuder,2*nfath) 448*59599516SKenneth E. Jansenc 449*59599516SKenneth E. Jansenc xnude is the sum of the sons for each father on this processor 450*59599516SKenneth E. Jansenc 451*59599516SKenneth E. Jansenc xnuder is the sum of the sons for each father on all processor combined 452*59599516SKenneth E. Jansenc (the same as if we had not partitioned the mesh for each processor) 453*59599516SKenneth E. Jansenc 454*59599516SKenneth E. Jansenc For each father we have precomputed the number of sons (including 455*59599516SKenneth E. Jansenc the sons off processor). 456*59599516SKenneth E. Jansenc 457*59599516SKenneth E. Jansenc Now divide by number of sons to get the average (not really necessary 458*59599516SKenneth E. Jansenc for dynamic model since ratio will cancel nsons at each father) 459*59599516SKenneth E. Jansenc 460*59599516SKenneth E. Jansenc xnuder(:,1) = xnuder(:,1) ! / nsons(:) 461*59599516SKenneth E. Jansenc xnuder(:,2) = xnuder(:,2) ! / nsons(:) 462*59599516SKenneth E. Jansenc 463*59599516SKenneth E. Jansenc the next line is c \Delta^2 464*59599516SKenneth E. Jansenc 465*59599516SKenneth E. Jansen numNden(:,1) = whist*numNden(:,1)+wcur*xnuder(ifath(:),1) 466*59599516SKenneth E. Jansen numNden(:,2) = whist*numNden(:,2)+wcur*xnuder(ifath(:),2) 467*59599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2) + 1.d-09) 468*59599516SKenneth E. Jansen else 469*59599516SKenneth E. Jansenc 470*59599516SKenneth E. Jansenc the next line is c \Delta^2, not nu_T but we want to save the 471*59599516SKenneth E. Jansenc memory 472*59599516SKenneth E. Jansenc 473*59599516SKenneth E. Jansenc$$$ 474*59599516SKenneth E. Jansenc$$$ write(400+myrank,555) (numNden(j*500,1),j=1,5) 475*59599516SKenneth E. Jansenc$$$ write(410+myrank,555) (numNden(j*500,2),j=1,5) 476*59599516SKenneth E. Jansenc$$$ write(500+myrank,555) (numNden(j+500,1),j=1,5) 477*59599516SKenneth E. Jansenc$$$ write(510+myrank,555) (numNden(j+500,2),j=1,5) 478*59599516SKenneth E. Jansenc$$$ 479*59599516SKenneth E. Jansenc$$$ write(430+myrank,555) (xnude(j*500,1),j=1,5) 480*59599516SKenneth E. Jansenc$$$ write(440+myrank,555) (xnude(j*500,2),j=1,5) 481*59599516SKenneth E. Jansenc$$$ write(530+myrank,555) (xnude(j+500,1),j=1,5) 482*59599516SKenneth E. Jansenc$$$ write(540+myrank,555) (xnude(j+500,2),j=1,5) 483*59599516SKenneth E. Jansen 484*59599516SKenneth E. Jansen numNden(:,1) = whist*numNden(:,1)+wcur*xnude(ifath(:),1) 485*59599516SKenneth E. Jansen numNden(:,2) = whist*numNden(:,2)+wcur*xnude(ifath(:),2) 486*59599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2) + 1.d-09) 487*59599516SKenneth E. Jansen 488*59599516SKenneth E. Jansenc 489*59599516SKenneth E. Jansenc to get started we hold cdelsq fixed 490*59599516SKenneth E. Jansenc 491*59599516SKenneth E. Jansenc cdelsq(:) = 2.27e-4 492*59599516SKenneth E. Jansen 493*59599516SKenneth E. Jansen 494*59599516SKenneth E. Jansen 495*59599516SKenneth E. Jansenc$$$ write(450+myrank,555) (cdelsq(j*500),j=1,5) 496*59599516SKenneth E. Jansenc$$$ write(460+myrank,555) (y(j*500,1),j=1,5) 497*59599516SKenneth E. Jansenc$$$ write(470+myrank,555) (y(j*500,2),j=1,5) 498*59599516SKenneth E. Jansenc$$$ write(480+myrank,555) (y(j*500,3),j=1,5) 499*59599516SKenneth E. Jansenc$$$ write(490+myrank,555) (strnrm(j*500),j=1,5) 500*59599516SKenneth E. Jansenc$$$ 501*59599516SKenneth E. Jansenc$$$ write(550+myrank,555) (cdelsq(j+500),j=1,5) 502*59599516SKenneth E. Jansenc$$$ write(560+myrank,555) (y(j+500,1),j=1,5) 503*59599516SKenneth E. Jansenc$$$ write(570+myrank,555) (y(j+500,2),j=1,5) 504*59599516SKenneth E. Jansenc$$$ write(580+myrank,555) (y(j+500,3),j=1,5) 505*59599516SKenneth E. Jansenc$$$ write(590+myrank,555) (strnrm(j+500),j=1,5) 506*59599516SKenneth E. Jansenc$$$ 507*59599516SKenneth E. Jansenc$$$ call flush(400+myrank) 508*59599516SKenneth E. Jansenc$$$ call flush(410+myrank) 509*59599516SKenneth E. Jansenc$$$ call flush(430+myrank) 510*59599516SKenneth E. Jansenc$$$ call flush(440+myrank) 511*59599516SKenneth E. Jansenc$$$ call flush(450+myrank) 512*59599516SKenneth E. Jansenc$$$ call flush(460+myrank) 513*59599516SKenneth E. Jansenc$$$ call flush(470+myrank) 514*59599516SKenneth E. Jansenc$$$ call flush(480+myrank) 515*59599516SKenneth E. Jansenc$$$ call flush(490+myrank) 516*59599516SKenneth E. Jansenc$$$ call flush(500+myrank) 517*59599516SKenneth E. Jansenc$$$ call flush(510+myrank) 518*59599516SKenneth E. Jansenc$$$ call flush(530+myrank) 519*59599516SKenneth E. Jansenc$$$ call flush(540+myrank) 520*59599516SKenneth E. Jansenc$$$ call flush(550+myrank) 521*59599516SKenneth E. Jansenc$$$ call flush(560+myrank) 522*59599516SKenneth E. Jansenc$$$ call flush(570+myrank) 523*59599516SKenneth E. Jansenc$$$ call flush(580+myrank) 524*59599516SKenneth E. Jansenc$$$ call flush(590+myrank) 525*59599516SKenneth E. Jansen endif 526*59599516SKenneth E. Jansen 555 format(5(2x,e14.7)) 527*59599516SKenneth E. Jansen 528*59599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 529*59599516SKenneth E. Jansen tmp1 = MINVAL(cdelsq) 530*59599516SKenneth E. Jansen tmp2 = MAXVAL(cdelsq) 531*59599516SKenneth E. Jansen if(numpe>1) then 532*59599516SKenneth E. Jansen call MPI_REDUCE (tmp1, tmp3, 1,MPI_DOUBLE_PRECISION, 533*59599516SKenneth E. Jansen & MPI_MIN, master, MPI_COMM_WORLD, ierr) 534*59599516SKenneth E. Jansen call MPI_REDUCE (tmp2, tmp4, 1, MPI_DOUBLE_PRECISION, 535*59599516SKenneth E. Jansen & MPI_MAX, master, MPI_COMM_WORLD, ierr) 536*59599516SKenneth E. Jansen tmp1=tmp3 537*59599516SKenneth E. Jansen tmp2=tmp4 538*59599516SKenneth E. Jansen endif 539*59599516SKenneth E. Jansen if (myrank .EQ. master) then !print CDelta^2 range 540*59599516SKenneth E. Jansen write(34,*)lstep,tmp1,tmp2 541*59599516SKenneth E. Jansen call flush(34) 542*59599516SKenneth E. Jansen endif 543*59599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 544*59599516SKenneth E. Jansen 545*59599516SKenneth E. Jansen if (myrank .eq. master) then 546*59599516SKenneth E. Jansenc write(*,*)'xnut=',sum(cdelsq)/nshg 547*59599516SKenneth E. Jansen write(*,*)'cdelsq=',cdelsq(1), cdelsq(2) 548*59599516SKenneth E. Jansen endif 549*59599516SKenneth E. Jansen 550*59599516SKenneth E. Jansen cdeslq = zero ! Debugging 551*59599516SKenneth E. Jansen do iblk = 1,nelblk 552*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 553*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 554*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 555*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 556*59599516SKenneth E. Jansen inum = iel + npro - 1 557*59599516SKenneth E. Jansen 558*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 559*59599516SKenneth E. Jansen 560*59599516SKenneth E. Jansen call scatnu (mien(iblk)%p, strl(iel:inum,:), 561*59599516SKenneth E. Jansen & mxmudmi(iblk)%p,cdelsq,shp(lcsyst,1:nshl,:)) 562*59599516SKenneth E. Jansen enddo 563*59599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 564*59599516SKenneth E. Jansenc$$$ tmp1 = MINVAL(xmudmi) 565*59599516SKenneth E. Jansenc$$$ tmp2 = MAXVAL(xmudmi) 566*59599516SKenneth E. Jansenc$$$ if(numpe>1) then 567*59599516SKenneth E. Jansenc$$$ call MPI_REDUCE (tmp1, tmp3, 1, MPI_DOUBLE_PRECISION, 568*59599516SKenneth E. Jansenc$$$ & MPI_MIN, master, MPI_COMM_WORLD, ierr) 569*59599516SKenneth E. Jansenc$$$ call MPI_REDUCE (tmp2, tmp4, 1, MPI_DOUBLE_PRECISION, 570*59599516SKenneth E. Jansenc$$$ & MPI_MAX, master, MPI_COMM_WORLD, ierr) 571*59599516SKenneth E. Jansenc$$$ tmp1=tmp3 572*59599516SKenneth E. Jansenc$$$ tmp2=tmp4 573*59599516SKenneth E. Jansenc$$$ endif 574*59599516SKenneth E. Jansenc$$$ if (myrank .EQ. master) then 575*59599516SKenneth E. Jansenc$$$ write(35,*) lstep,tmp1,tmp2 576*59599516SKenneth E. Jansenc$$$ call flush(35) 577*59599516SKenneth E. Jansenc$$$ endif 578*59599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 579*59599516SKenneth E. Jansen 580*59599516SKenneth E. Jansenc 581*59599516SKenneth E. Jansenc if flag set, write a restart file with info (reuse xmij's memory) 582*59599516SKenneth E. Jansenc 583*59599516SKenneth E. Jansen if(irs.eq.11) then 584*59599516SKenneth E. Jansen lstep=999 585*59599516SKenneth E. Jansen xmij(:,1)=xnum(:) 586*59599516SKenneth E. Jansen xmij(:,2)=xden(:) 587*59599516SKenneth E. Jansen xmij(:,3)=cdelsq(:) 588*59599516SKenneth E. Jansen xmij(:,5)=xlij(:,4) !leave M_{12} in 4 and put L_{12} here 589*59599516SKenneth E. Jansen call restar('out ',xmij,xlij) !also dump all of L_{ij} in ac 590*59599516SKenneth E. Jansen stop 591*59599516SKenneth E. Jansen endif 592*59599516SKenneth E. Jansenc 593*59599516SKenneth E. Jansenc local clipping moved to scatnu with the creation of mxmudmi pointers 594*59599516SKenneth E. Jansenc 595*59599516SKenneth E. Jansenc$$$ rmu=datmat(1,2,1) 596*59599516SKenneth E. Jansenc$$$ xmudmi=min(xmudmi,1000.0*rmu) !don't let it get larger than 1000 mu 597*59599516SKenneth E. Jansenc$$$ xmudmi=max(xmudmi, -rmu) ! don't let (xmudmi + mu) < 0 598*59599516SKenneth E. Jansenc stop !uncomment to test dmod 599*59599516SKenneth E. Jansenc 600*59599516SKenneth E. Jansen 601*59599516SKenneth E. Jansen 602*59599516SKenneth E. Jansenc write out the nodal values of xnut (estimate since we don't calc strain 603*59599516SKenneth E. Jansenc there and must use the filtered strain). 604*59599516SKenneth E. Jansenc 605*59599516SKenneth E. Jansen 606*59599516SKenneth E. Jansenc if ((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) then 607*59599516SKenneth E. Jansenc 608*59599516SKenneth E. Jansenc collect the average strain into xnude(2) 609*59599516SKenneth E. Jansenc 610*59599516SKenneth E. Jansenc xnude(:,2) = zero 611*59599516SKenneth E. Jansenc do i = 1,numnp 612*59599516SKenneth E. Jansenc xnude(ifath(i),2) = xnude(ifath(i),2) + strnrm(i) 613*59599516SKenneth E. Jansenc enddo 614*59599516SKenneth E. Jansen 615*59599516SKenneth E. Jansenc 616*59599516SKenneth E. Jansenc get the instantaneous cdelsq of the fathers 617*59599516SKenneth E. Jansenc 618*59599516SKenneth E. Jansenc xnuder(:,1)=xnuder(:,1)/(xnuder(:,2)+1.0e-9) 619*59599516SKenneth E. Jansen 620*59599516SKenneth E. Jansenc if(numpe .gt. 1 .and. nsons(1).ne.1 )then 621*59599516SKenneth E. Jansenc call drvAllreduce(xnude(:,2), xnuder(:,2),nfath) 622*59599516SKenneth E. Jansenc else 623*59599516SKenneth E. Jansenc xnuder=xnude 624*59599516SKenneth E. Jansenc endif 625*59599516SKenneth E. Jansenc 626*59599516SKenneth E. Jansenc nut= cdelsq * |S| 627*59599516SKenneth E. Jansenc 628*59599516SKenneth E. Jansenc xnutf=xnuder(:,1)*xnuder(:,2)/nsons 629*59599516SKenneth E. Jansenc 630*59599516SKenneth E. Jansenc collect the x and y coords into xnude 631*59599516SKenneth E. Jansenc 632*59599516SKenneth E. Jansenc xnude = zero 633*59599516SKenneth E. Jansenc do i = 1,numnp 634*59599516SKenneth E. Jansenc xnude(ifath(i),1) = xnude(ifath(i),1) + x(i,1) 635*59599516SKenneth E. Jansenc xnude(ifath(i),2) = xnude(ifath(i),2) + x(i,2) 636*59599516SKenneth E. Jansenc enddo 637*59599516SKenneth E. Jansen 638*59599516SKenneth E. Jansenc if(numpe .gt. 1 .and. nsons(1).ne.1 )then 639*59599516SKenneth E. Jansenc call drvAllreduce(xnude, xnuder,2*nfath) 640*59599516SKenneth E. Jansenc xnuder(:,1)=xnuder(:,1)/nsons(:) 641*59599516SKenneth E. Jansenc xnuder(:,2)=xnuder(:,2)/nsons(:) 642*59599516SKenneth E. Jansenc else 643*59599516SKenneth E. Jansenc xnuder=xnude 644*59599516SKenneth E. Jansenc endif 645*59599516SKenneth E. Jansenc 646*59599516SKenneth E. Jansenc xnude is the sum of the sons for each father on this processor 647*59599516SKenneth E. Jansenc 648*59599516SKenneth E. Jansenc if((myrank.eq.master)) then 649*59599516SKenneth E. Jansenc do i=1,nfath ! cdelsq * |S| 650*59599516SKenneth E. Jansenc write(444,*) xnuder(i,1),xnuder(i,2),xnutf(i) 651*59599516SKenneth E. Jansenc enddo 652*59599516SKenneth E. Jansenc call flush(444) 653*59599516SKenneth E. Jansenc endif 654*59599516SKenneth E. Jansenc endif 655*59599516SKenneth E. Jansen 656*59599516SKenneth E. Jansen return 657*59599516SKenneth E. Jansen end 658*59599516SKenneth E. Jansen 659*59599516SKenneth E. Jansen 660*59599516SKenneth E. Jansen 661*59599516SKenneth E. Jansen 662*59599516SKenneth E. Jansen 663*59599516SKenneth E. Jansen 664*59599516SKenneth E. Jansen 665*59599516SKenneth E. Jansenc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 666*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 667*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 668*59599516SKenneth E. Jansen 669*59599516SKenneth E. Jansen 670*59599516SKenneth E. Jansen 671*59599516SKenneth E. Jansen 672*59599516SKenneth E. Jansen subroutine hfilter (y, x, ien, hfres, shgl, shp, Qwtf) 673*59599516SKenneth E. Jansen 674*59599516SKenneth E. Jansen include "common.h" 675*59599516SKenneth E. Jansen 676*59599516SKenneth E. Jansen dimension y(nshg,5), hfres(nshg,11) 677*59599516SKenneth E. Jansen dimension x(numnp,3), xl(npro,nenl,3) 678*59599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,nflow), 679*59599516SKenneth E. Jansen & fresl(npro,nshl,11), WdetJ(npro), 680*59599516SKenneth E. Jansen & u1(npro), u2(npro), 681*59599516SKenneth E. Jansen & u3(npro), rho(npro), 682*59599516SKenneth E. Jansen & dxdxi(npro,nsd,nsd), dxidx(npro,nsd,nsd), 683*59599516SKenneth E. Jansen & shgl(nsd,nshl,maxsh), shg(npro,nshl,nsd), 684*59599516SKenneth E. Jansen & shp(nshl,maxsh), Qwtf(ngaussf), 685*59599516SKenneth E. Jansen & fresli(npro,nshl,11) 686*59599516SKenneth E. Jansen 687*59599516SKenneth E. Jansen dimension tmp(npro) 688*59599516SKenneth E. Jansen 689*59599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 690*59599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 691*59599516SKenneth E. Jansenc 692*59599516SKenneth E. Jansenc 693*59599516SKenneth E. Jansen if(matflg(1,1).eq.0) then ! compressible 694*59599516SKenneth E. Jansen yl (:,:,1) = yl(:,:,1) / (Rgas * yl(:,:,5)) !get density 695*59599516SKenneth E. Jansen else 696*59599516SKenneth E. Jansen yl (:,:,1) = one 697*59599516SKenneth E. Jansen endif 698*59599516SKenneth E. Jansenc 699*59599516SKenneth E. Jansen fresl = zero 700*59599516SKenneth E. Jansenc 701*59599516SKenneth E. Jansen do intp = 1, ngaussf 702*59599516SKenneth E. Jansen 703*59599516SKenneth E. Jansenc calculate the metrics 704*59599516SKenneth E. Jansenc 705*59599516SKenneth E. Jansenc 706*59599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 707*59599516SKenneth E. Jansenc 708*59599516SKenneth E. Jansenc.... compute the deformation gradient 709*59599516SKenneth E. Jansenc 710*59599516SKenneth E. Jansen dxdxi = zero 711*59599516SKenneth E. Jansenc 712*59599516SKenneth E. Jansen do n = 1, nenl 713*59599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 714*59599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 715*59599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 716*59599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 717*59599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 718*59599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 719*59599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 720*59599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 721*59599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 722*59599516SKenneth E. Jansen enddo 723*59599516SKenneth E. Jansenc 724*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 725*59599516SKenneth E. Jansenc 726*59599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 727*59599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 728*59599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 729*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 730*59599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 731*59599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 732*59599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 733*59599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 734*59599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 735*59599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 736*59599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 737*59599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 738*59599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 739*59599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 740*59599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 741*59599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 742*59599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 743*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 744*59599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 745*59599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 746*59599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 747*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 748*59599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 749*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 750*59599516SKenneth E. Jansenc 751*59599516SKenneth E. Jansen wght = Qwtf(intp) 752*59599516SKenneth E. Jansen WdetJ(:) = wght / tmp(:) 753*59599516SKenneth E. Jansen 754*59599516SKenneth E. Jansen rho = zero 755*59599516SKenneth E. Jansen do i=1,nshl 756*59599516SKenneth E. Jansen rho = rho+shp(i,intp)*yl(:,i,1) !density at qpt 757*59599516SKenneth E. Jansen enddo 758*59599516SKenneth E. Jansen 759*59599516SKenneth E. Jansen rho = rho * WdetJ !rho * WdetJ 760*59599516SKenneth E. Jansen 761*59599516SKenneth E. Jansen u1=zero 762*59599516SKenneth E. Jansen u2=zero 763*59599516SKenneth E. Jansen u3=zero 764*59599516SKenneth E. Jansen do i=1,nshl ! velocities at qpt 765*59599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*yl(:,i,2) 766*59599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*yl(:,i,3) 767*59599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*yl(:,i,4) 768*59599516SKenneth E. Jansen enddo 769*59599516SKenneth E. Jansen 770*59599516SKenneth E. Jansen do i = 1, nshl 771*59599516SKenneth E. Jansen 772*59599516SKenneth E. Jansen 773*59599516SKenneth E. Jansen fresli(:,i,1) = rho * u1 * shp(i,intp) !rho * u1 * WdetJ 774*59599516SKenneth E. Jansen fresli(:,i,2) = rho * u2 * shp(i,intp) !rho * u2 * WdetJ 775*59599516SKenneth E. Jansen fresli(:,i,3) = rho * u3 * shp(i,intp) !rho * u3 * WdetJ 776*59599516SKenneth E. Jansen fresli(:,i,4) = rho * shp(i,intp) !rho * WdetJ 777*59599516SKenneth E. Jansen fresli(:,i,5) = WdetJ*shp(i,intp) !Integral of filter kernel 778*59599516SKenneth E. Jansenc over the element 779*59599516SKenneth E. Jansen fresli(:,i,6) = rho * u1 * u1 * shp(i,intp) !rho * u1 * u1 * WdetJ 780*59599516SKenneth E. Jansen fresli(:,i,7) = rho * u2 * u2 * shp(i,intp) !rho * u2 * u2 * WdetJ 781*59599516SKenneth E. Jansen fresli(:,i,8) = rho * u3 * u3 * shp(i,intp) !rho * u3 * u3 * WdetJ 782*59599516SKenneth E. Jansen fresli(:,i,9) = rho * u1 * u2 * shp(i,intp) !rho * u1 * u2 * WdetJ 783*59599516SKenneth E. Jansen fresli(:,i,10)= rho * u1 * u3 * shp(i,intp) !rho * u1 * u3 * WdetJ 784*59599516SKenneth E. Jansen fresli(:,i,11)= rho * u2 * u3 * shp(i,intp) !rho * u2 * u3 * WdetJ 785*59599516SKenneth E. Jansen 786*59599516SKenneth E. Jansen 787*59599516SKenneth E. Jansen do j = 1, 11 788*59599516SKenneth E. Jansen fresl(:,i,j) = fresl(:,i,j) + fresli(:,i,j) 789*59599516SKenneth E. Jansen enddo 790*59599516SKenneth E. Jansen 791*59599516SKenneth E. Jansen enddo !end loop over element nodes 792*59599516SKenneth E. Jansen 793*59599516SKenneth E. Jansen enddo !end of loop over integration points 794*59599516SKenneth E. Jansen 795*59599516SKenneth E. Jansenc do j = 1, n 796*59599516SKenneth E. Jansenc do i = 1, nenl 797*59599516SKenneth E. Jansenc do nel = 1, npro 798*59599516SKenneth E. Jansenc hfres(ien(nel,i),j) = hfres(ien(nel,i),j) + fresl(nel,i,j) 799*59599516SKenneth E. Jansenc enddo 800*59599516SKenneth E. Jansenc enddo 801*59599516SKenneth E. Jansenc enddo 802*59599516SKenneth E. Jansen 803*59599516SKenneth E. Jansen call local (hfres, fresl, ien, 11, 'scatter ') 804*59599516SKenneth E. Jansen 805*59599516SKenneth E. Jansen return 806*59599516SKenneth E. Jansen end 807*59599516SKenneth E. Jansen 808*59599516SKenneth E. Jansen 809*59599516SKenneth E. Jansen 810*59599516SKenneth E. Jansen 811*59599516SKenneth E. Jansen 812*59599516SKenneth E. Jansen 813*59599516SKenneth E. Jansen 814*59599516SKenneth E. Jansenc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 815*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 816*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 817*59599516SKenneth E. Jansen 818*59599516SKenneth E. Jansen 819*59599516SKenneth E. Jansen 820*59599516SKenneth E. Jansen 821*59599516SKenneth E. Jansen 822*59599516SKenneth E. Jansen 823*59599516SKenneth E. Jansen 824*59599516SKenneth E. Jansen 825*59599516SKenneth E. Jansen subroutine twohfilter (y, x, strnrm, ien, fres, 826*59599516SKenneth E. Jansen & hfres, shgl, shp, Qwtf) 827*59599516SKenneth E. Jansen 828*59599516SKenneth E. Jansen include "common.h" 829*59599516SKenneth E. Jansen 830*59599516SKenneth E. Jansen dimension y(nshg,ndof), fres(nshg,33) 831*59599516SKenneth E. Jansen dimension x(numnp,nsd), xl(npro,nenl,nsd) 832*59599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,nflow), 833*59599516SKenneth E. Jansen & fresl(npro,33), WdetJ(npro), 834*59599516SKenneth E. Jansen & u1(npro), u2(npro), 835*59599516SKenneth E. Jansen & u3(npro), dxdxi(npro,nsd,nsd), 836*59599516SKenneth E. Jansen & strnrm(npro,ngauss), dxidx(npro,nsd,nsd), 837*59599516SKenneth E. Jansen & shgl(nsd,nshl,maxsh), shg(npro,nshl,nsd), 838*59599516SKenneth E. Jansen & shp(nshl,maxsh), 839*59599516SKenneth E. Jansen & fresli(npro,33), Qwtf(ngaussf), 840*59599516SKenneth E. Jansen & hfres(nshg,11), hfresl(npro,nshl,11) 841*59599516SKenneth E. Jansen 842*59599516SKenneth E. Jansen dimension tmp(npro) 843*59599516SKenneth E. Jansen 844*59599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 845*59599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 846*59599516SKenneth E. Jansen call local (hfres, hfresl, ien, 11, 'gather ') 847*59599516SKenneth E. Jansenc 848*59599516SKenneth E. Jansen if(matflg(1,1).eq.0) then ! compressible 849*59599516SKenneth E. Jansen yl (:,:,1) = yl(:,:,1) / (Rgas * yl(:,:,5)) !get density 850*59599516SKenneth E. Jansen else 851*59599516SKenneth E. Jansen yl (:,:,1) = one 852*59599516SKenneth E. Jansen endif 853*59599516SKenneth E. Jansenc 854*59599516SKenneth E. Jansen fresl = zero 855*59599516SKenneth E. Jansen 856*59599516SKenneth E. Jansen do intp = 1, ngauss 857*59599516SKenneth E. Jansen 858*59599516SKenneth E. Jansen 859*59599516SKenneth E. Jansenc calculate the metrics 860*59599516SKenneth E. Jansenc 861*59599516SKenneth E. Jansenc 862*59599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 863*59599516SKenneth E. Jansenc 864*59599516SKenneth E. Jansenc.... compute the deformation gradient 865*59599516SKenneth E. Jansenc 866*59599516SKenneth E. Jansen dxdxi = zero 867*59599516SKenneth E. Jansenc 868*59599516SKenneth E. Jansen do n = 1, nenl 869*59599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 870*59599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 871*59599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 872*59599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 873*59599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 874*59599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 875*59599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 876*59599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 877*59599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 878*59599516SKenneth E. Jansen enddo 879*59599516SKenneth E. Jansenc 880*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 881*59599516SKenneth E. Jansenc 882*59599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 883*59599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 884*59599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 885*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 886*59599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 887*59599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 888*59599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 889*59599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 890*59599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 891*59599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 892*59599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 893*59599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 894*59599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 895*59599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 896*59599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 897*59599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 898*59599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 899*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 900*59599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 901*59599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 902*59599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 903*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 904*59599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 905*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 906*59599516SKenneth E. Jansenc 907*59599516SKenneth E. Jansen wght=Qwt(lcsyst,intp) ! may be different now 908*59599516SKenneth E. Jansenc wght=Qwtf(intp) 909*59599516SKenneth E. Jansen WdetJ = wght / tmp 910*59599516SKenneth E. Jansenc 911*59599516SKenneth E. Jansen fresli=zero 912*59599516SKenneth E. Jansenc 913*59599516SKenneth E. Jansen do i=1,nshl 914*59599516SKenneth E. Jansen fresli(:,22) = fresli(:,22)+shp(i,intp)*yl(:,i,1) ! density at qpt 915*59599516SKenneth E. Jansen fresli(:,25) = fresli(:,25)+shp(i,intp)*hfresl(:,i,1) !bar(rho u1) 916*59599516SKenneth E. Jansen fresli(:,26) = fresli(:,26)+shp(i,intp)*hfresl(:,i,2) !bar(rho u2) 917*59599516SKenneth E. Jansen fresli(:,27) = fresli(:,27)+shp(i,intp)*hfresl(:,i,3) !bar(rho u3) 918*59599516SKenneth E. Jansen enddo 919*59599516SKenneth E. Jansenc 920*59599516SKenneth E. Jansenc...fresli(:,28) = WdetJ * bar(rho u1) * bar(rho u1) / rho 921*59599516SKenneth E. Jansenc...fresli(:,29) = WdetJ * bar(rho u2) * bar(rho u2) / rho 922*59599516SKenneth E. Jansenc...fresli(:,30) = WdetJ * bar(rho u3) * bar(rho u3) / rho 923*59599516SKenneth E. Jansenc...fresli(:,31) = WdetJ * bar(rho u1) * bar(rho u2) / rho 924*59599516SKenneth E. Jansenc...fresli(:,32) = WdetJ * bar(rho u1) * bar(rho u3) / rho 925*59599516SKenneth E. Jansenc...fresli(:,33) = WdetJ * bar(rho u2) * bar(rho u3) / rho 926*59599516SKenneth E. Jansen 927*59599516SKenneth E. Jansen fresli(:,28) = WdetJ(:) * fresli(:,25) * 928*59599516SKenneth E. Jansen & fresli(:,25) / fresli(:,22) 929*59599516SKenneth E. Jansen fresli(:,29) = WdetJ(:) * fresli(:,26) * 930*59599516SKenneth E. Jansen & fresli(:,26) / fresli(:,22) 931*59599516SKenneth E. Jansen fresli(:,30) = WdetJ(:) * fresli(:,27) * 932*59599516SKenneth E. Jansen & fresli(:,27) / fresli(:,22) 933*59599516SKenneth E. Jansen fresli(:,31) = WdetJ(:) * fresli(:,25) * 934*59599516SKenneth E. Jansen & fresli(:,26) / fresli(:,22) 935*59599516SKenneth E. Jansen fresli(:,32) = WdetJ(:) * fresli(:,25) * 936*59599516SKenneth E. Jansen & fresli(:,27) / fresli(:,22) 937*59599516SKenneth E. Jansen fresli(:,33) = WdetJ(:) * fresli(:,26) * 938*59599516SKenneth E. Jansen & fresli(:,27) / fresli(:,22) 939*59599516SKenneth E. Jansen 940*59599516SKenneth E. Jansen fresli(:,25) = fresli(:,25) * WdetJ(:) ! WdetJ*bar(rho u1) 941*59599516SKenneth E. Jansen fresli(:,26) = fresli(:,26) * WdetJ(:) ! WdetJ*bar(rho u2) 942*59599516SKenneth E. Jansen fresli(:,27) = fresli(:,27) * WdetJ(:) ! WdetJ*bar(rho u3) 943*59599516SKenneth E. Jansenc 944*59599516SKenneth E. Jansen do n = 1,nshl 945*59599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 946*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 947*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 948*59599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 949*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 950*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 951*59599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 952*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 953*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 954*59599516SKenneth E. Jansen enddo 955*59599516SKenneth E. Jansen 956*59599516SKenneth E. Jansen do j=10,12 ! normal strainrate u_{i,i} no sum on i 957*59599516SKenneth E. Jansen ig=j-9 958*59599516SKenneth E. Jansen iv=j-8 959*59599516SKenneth E. Jansen do i=1,nshl 960*59599516SKenneth E. Jansen fresli(:,j) = fresli(:,j)+shg(:,i,ig)*yl(:,i,iv) 961*59599516SKenneth E. Jansen enddo 962*59599516SKenneth E. Jansen enddo 963*59599516SKenneth E. Jansen 964*59599516SKenneth E. Jansenc shear stresses NOTE there may be faster ways to do this 965*59599516SKenneth E. Jansenc check agains CM5 code for speed WTP 966*59599516SKenneth E. Jansen 967*59599516SKenneth E. Jansen do i=1,nshl 968*59599516SKenneth E. Jansen fresli(:,13) = fresli(:,13)+shg(:,i,2)*yl(:,i,2) 969*59599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,3) 970*59599516SKenneth E. Jansen fresli(:,14) = fresli(:,14)+shg(:,i,3)*yl(:,i,2) 971*59599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,4) 972*59599516SKenneth E. Jansen fresli(:,15) = fresli(:,15)+shg(:,i,3)*yl(:,i,3) 973*59599516SKenneth E. Jansen & +shg(:,i,2)*yl(:,i,4) 974*59599516SKenneth E. Jansen enddo 975*59599516SKenneth E. Jansen 976*59599516SKenneth E. Jansen fresli(:,13) = pt5 * fresli(:,13) 977*59599516SKenneth E. Jansen fresli(:,14) = pt5 * fresli(:,14) 978*59599516SKenneth E. Jansen fresli(:,15) = pt5 * fresli(:,15) 979*59599516SKenneth E. Jansen 980*59599516SKenneth E. Jansen strnrm(:,intp) = fresli(:,22) * sqrt( 981*59599516SKenneth E. Jansen & two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2) 982*59599516SKenneth E. Jansen & + four * ( fresli(:,13)**2 + fresli(:,14)**2 + 983*59599516SKenneth E. Jansen & fresli(:,15)**2 ) ) 984*59599516SKenneth E. Jansen 985*59599516SKenneth E. Jansenc 986*59599516SKenneth E. Jansenc S_ij 987*59599516SKenneth E. Jansenc 988*59599516SKenneth E. Jansen 989*59599516SKenneth E. Jansen fresli(:,10) = fresli(:,10) * WdetJ ! u_{1,1}*WdetJ 990*59599516SKenneth E. Jansen fresli(:,11) = fresli(:,11) * WdetJ ! u_{2,2}*WdetJ 991*59599516SKenneth E. Jansen fresli(:,12) = fresli(:,12) * WdetJ ! u_{3,3}*WdetJ 992*59599516SKenneth E. Jansen fresli(:,13) = fresli(:,13) * WdetJ ! (1/2)*(u_{1,2}+u_{2,1})*WdetJ 993*59599516SKenneth E. Jansen fresli(:,14) = fresli(:,14) * WdetJ ! (1/2)*(u_{1,3}+u_{3,1})*WdetJ 994*59599516SKenneth E. Jansen fresli(:,15) = fresli(:,15) * WdetJ ! (1/2)*(u_{2,3}+u_{3,2})*WdetJ 995*59599516SKenneth E. Jansen 996*59599516SKenneth E. Jansen fresli(:,22) = fresli(:,22) * WdetJ !rho * WdetJ 997*59599516SKenneth E. Jansenc fresli(:,24) = fresli(:,24) * WdetJ 998*59599516SKenneth E. Jansen 999*59599516SKenneth E. Jansen u1=zero 1000*59599516SKenneth E. Jansen u2=zero 1001*59599516SKenneth E. Jansen u3=zero 1002*59599516SKenneth E. Jansen do i=1,nshl 1003*59599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*yl(:,i,2) 1004*59599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*yl(:,i,3) 1005*59599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*yl(:,i,4) 1006*59599516SKenneth E. Jansen enddo 1007*59599516SKenneth E. Jansen 1008*59599516SKenneth E. Jansen fresli(:,1) = fresli(:,22) * u1 !rho u1 * WdetJ 1009*59599516SKenneth E. Jansen fresli(:,2) = fresli(:,22) * u2 !rho u2 * WdetJ 1010*59599516SKenneth E. Jansen fresli(:,3) = fresli(:,22) * u3 !rho u3 * WdetJ 1011*59599516SKenneth E. Jansen 1012*59599516SKenneth E. Jansen fresli(:,4) = fresli(:,1) * u1 !rho u1 u1 *WdetJ 1013*59599516SKenneth E. Jansen fresli(:,5) = fresli(:,2) * u2 !rho u2 u2 *WdetJ 1014*59599516SKenneth E. Jansen fresli(:,6) = fresli(:,3) * u3 !rho u3 u3 *WdetJ 1015*59599516SKenneth E. Jansen fresli(:,7) = fresli(:,1) * u2 !rho u1 u2 *WdetJ 1016*59599516SKenneth E. Jansen fresli(:,8) = fresli(:,1) * u3 !rho u1 u3 *WdetJ 1017*59599516SKenneth E. Jansen fresli(:,9) = fresli(:,2) * u3 !rho u2 u3 *WdetJ 1018*59599516SKenneth E. Jansen 1019*59599516SKenneth E. Jansen fresli(:,16) = strnrm(:,intp) * fresli(:,10) ! rho *|Eps| *Eps11 *WdetJ 1020*59599516SKenneth E. Jansen fresli(:,17) = strnrm(:,intp) * fresli(:,11) ! rho *|Eps| *Eps22 *WdetJ 1021*59599516SKenneth E. Jansen fresli(:,18) = strnrm(:,intp) * fresli(:,12) ! rho *|Eps| *Eps33 *WdetJ 1022*59599516SKenneth E. Jansen fresli(:,19) = strnrm(:,intp) * fresli(:,13) ! rho *|Eps| *Eps12 *WdetJ 1023*59599516SKenneth E. Jansen fresli(:,20) = strnrm(:,intp) * fresli(:,14) ! rho *|Eps| *Eps13 *WdetJ 1024*59599516SKenneth E. Jansen fresli(:,21) = strnrm(:,intp) * fresli(:,15) ! rho *|Eps| *Eps23 *WdetJ 1025*59599516SKenneth E. Jansen 1026*59599516SKenneth E. Jansen fresli(:,23) = WdetJ ! Integral of 1 over the element 1027*59599516SKenneth E. Jansenc 1028*59599516SKenneth E. Jansen do i = 1, 33 1029*59599516SKenneth E. Jansen fresl(:,i) = fresl(:,i) + fresli(:,i) 1030*59599516SKenneth E. Jansen enddo 1031*59599516SKenneth E. Jansen 1032*59599516SKenneth E. Jansen enddo !end of loop over integration points 1033*59599516SKenneth E. Jansenc 1034*59599516SKenneth E. Jansen do j = 1,nshl 1035*59599516SKenneth E. Jansen do nel = 1,npro 1036*59599516SKenneth E. Jansen fres(ien(nel,j),:) = fres(ien(nel,j),:) + fresl(nel,:) 1037*59599516SKenneth E. Jansen enddo 1038*59599516SKenneth E. Jansen enddo 1039*59599516SKenneth E. Jansen 1040*59599516SKenneth E. Jansen return 1041*59599516SKenneth E. Jansen end 1042*59599516SKenneth E. Jansen 1043*59599516SKenneth E. Jansen 1044*59599516SKenneth E. Jansen 1045*59599516SKenneth E. Jansen 1046*59599516SKenneth E. Jansen 1047*59599516SKenneth E. Jansen 1048*59599516SKenneth E. Jansen 1049*59599516SKenneth E. Jansen 1050*59599516SKenneth E. Jansenc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1051*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 1052*59599516SKenneth E. Jansenc||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 1053*59599516SKenneth E. Jansen 1054*59599516SKenneth E. Jansen 1055*59599516SKenneth E. Jansen 1056*59599516SKenneth E. Jansen 1057*59599516SKenneth E. Jansen 1058*59599516SKenneth E. Jansen 1059*59599516SKenneth E. Jansen 1060*59599516SKenneth E. Jansen subroutine disPtion (y, x, ien, shgl, shp, eps, xmudmi) 1061*59599516SKenneth E. Jansen 1062*59599516SKenneth E. Jansen use rlssave ! Use the resolved Leonard stresses at the nodes. 1063*59599516SKenneth E. Jansen 1064*59599516SKenneth E. Jansen include "common.h" 1065*59599516SKenneth E. Jansen 1066*59599516SKenneth E. Jansen dimension xmudmi(npro,ngauss), y(nshg,ndof), 1067*59599516SKenneth E. Jansen & x(numnp,nsd), ien(npro,nshl), 1068*59599516SKenneth E. Jansen & shg(npro,nshl,nsd), 1069*59599516SKenneth E. Jansen & shgl(nsd,nshl,maxsh), shp(nshl,maxsh), 1070*59599516SKenneth E. Jansen & dxdxi(npro,nsd,nsd), dxidx(npro,nsd,nsd), 1071*59599516SKenneth E. Jansen & WdetJ(npro), 1072*59599516SKenneth E. Jansen & eps(3), fresli(npro,33), 1073*59599516SKenneth E. Jansen & epsli(npro,3), epsl(npro,3) 1074*59599516SKenneth E. Jansen 1075*59599516SKenneth E. Jansen dimension yl(npro,nshl,nflow), xl(npro,nenl,nsd), 1076*59599516SKenneth E. Jansen & strnrm(npro,ngauss), rlsl(npro,nshl,6) 1077*59599516SKenneth E. Jansen 1078*59599516SKenneth E. Jansen dimension tmp(npro) 1079*59599516SKenneth E. Jansen 1080*59599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 1081*59599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 1082*59599516SKenneth E. Jansen call local (rls, rlsl, ien, 6, 'gather ') 1083*59599516SKenneth E. Jansen 1084*59599516SKenneth E. Jansen epsl = zero 1085*59599516SKenneth E. Jansen 1086*59599516SKenneth E. Jansen yl (:,:,1) = one ! Unit density 1087*59599516SKenneth E. Jansen 1088*59599516SKenneth E. Jansen do intp = 1, ngauss 1089*59599516SKenneth E. Jansen 1090*59599516SKenneth E. Jansen fresli=zero 1091*59599516SKenneth E. Jansen 1092*59599516SKenneth E. Jansenc calculate the metrics 1093*59599516SKenneth E. Jansenc 1094*59599516SKenneth E. Jansenc 1095*59599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 1096*59599516SKenneth E. Jansenc 1097*59599516SKenneth E. Jansenc.... compute the deformation gradient 1098*59599516SKenneth E. Jansenc 1099*59599516SKenneth E. Jansen dxdxi = zero 1100*59599516SKenneth E. Jansenc 1101*59599516SKenneth E. Jansen do n = 1, nenl 1102*59599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 1103*59599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 1104*59599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 1105*59599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 1106*59599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 1107*59599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 1108*59599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 1109*59599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 1110*59599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 1111*59599516SKenneth E. Jansen enddo 1112*59599516SKenneth E. Jansenc 1113*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 1114*59599516SKenneth E. Jansenc 1115*59599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 1116*59599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 1117*59599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 1118*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 1119*59599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 1120*59599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 1121*59599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 1122*59599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 1123*59599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 1124*59599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 1125*59599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 1126*59599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 1127*59599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 1128*59599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 1129*59599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 1130*59599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 1131*59599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 1132*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 1133*59599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 1134*59599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 1135*59599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 1136*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 1137*59599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 1138*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 1139*59599516SKenneth E. Jansenc 1140*59599516SKenneth E. Jansen wght=Qwt(lcsyst,intp) 1141*59599516SKenneth E. Jansen WdetJ = wght / tmp 1142*59599516SKenneth E. Jansen 1143*59599516SKenneth E. Jansenc 1144*59599516SKenneth E. Jansenc 1145*59599516SKenneth E. Jansen do n = 1,nshl 1146*59599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 1147*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 1148*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 1149*59599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 1150*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 1151*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 1152*59599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 1153*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 1154*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 1155*59599516SKenneth E. Jansen enddo 1156*59599516SKenneth E. Jansen 1157*59599516SKenneth E. Jansen 1158*59599516SKenneth E. Jansenc 1159*59599516SKenneth E. Jansenc 1160*59599516SKenneth E. Jansen do i=1,nshl 1161*59599516SKenneth E. Jansen fresli(:,22) = fresli(:,22)+shp(i,intp) ! unit density at qpt 1162*59599516SKenneth E. Jansen enddo 1163*59599516SKenneth E. Jansen 1164*59599516SKenneth E. Jansenc 1165*59599516SKenneth E. Jansenc 1166*59599516SKenneth E. Jansen do j=10,12 ! normal strainrate u_{i,i} no sum on i 1167*59599516SKenneth E. Jansen ig=j-9 1168*59599516SKenneth E. Jansen iv=j-8 1169*59599516SKenneth E. Jansen do i=1,nshl 1170*59599516SKenneth E. Jansen fresli(:,j) = fresli(:,j)+shg(:,i,ig)*yl(:,i,iv) 1171*59599516SKenneth E. Jansen enddo 1172*59599516SKenneth E. Jansen enddo 1173*59599516SKenneth E. Jansen 1174*59599516SKenneth E. Jansenc shear stresses NOTE there may be faster ways to do this 1175*59599516SKenneth E. Jansenc check agains CM5 code for speed WTP 1176*59599516SKenneth E. Jansen 1177*59599516SKenneth E. Jansen do i=1,nshl 1178*59599516SKenneth E. Jansen fresli(:,13) = fresli(:,13)+shg(:,i,2)*yl(:,i,2) 1179*59599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,3) 1180*59599516SKenneth E. Jansen fresli(:,14) = fresli(:,14)+shg(:,i,3)*yl(:,i,2) 1181*59599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,4) 1182*59599516SKenneth E. Jansen fresli(:,15) = fresli(:,15)+shg(:,i,3)*yl(:,i,3) 1183*59599516SKenneth E. Jansen & +shg(:,i,2)*yl(:,i,4) 1184*59599516SKenneth E. Jansen enddo 1185*59599516SKenneth E. Jansen 1186*59599516SKenneth E. Jansen fresli(:,13) = pt5 * fresli(:,13) 1187*59599516SKenneth E. Jansen fresli(:,14) = pt5 * fresli(:,14) 1188*59599516SKenneth E. Jansen fresli(:,15) = pt5 * fresli(:,15) 1189*59599516SKenneth E. Jansen 1190*59599516SKenneth E. Jansen strnrm(:,intp) = fresli(:,22) * ( 1191*59599516SKenneth E. Jansen & two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2) 1192*59599516SKenneth E. Jansen & + four * ( fresli(:,13)**2 + fresli(:,14)**2 + 1193*59599516SKenneth E. Jansen & fresli(:,15)**2 ) ) 1194*59599516SKenneth E. Jansen 1195*59599516SKenneth E. Jansenc 1196*59599516SKenneth E. Jansenc 1197*59599516SKenneth E. Jansen 1198*59599516SKenneth E. Jansen fresli(:,10) = fresli(:,10) * WdetJ ! u_{1,1}*WdetJ 1199*59599516SKenneth E. Jansen fresli(:,11) = fresli(:,11) * WdetJ ! u_{2,2}*WdetJ 1200*59599516SKenneth E. Jansen fresli(:,12) = fresli(:,12) * WdetJ ! u_{3,3}*WdetJ 1201*59599516SKenneth E. Jansen fresli(:,13) = fresli(:,13) * WdetJ ! (1/2)*(u_{1,2}+u_{2,1})*WdetJ 1202*59599516SKenneth E. Jansen fresli(:,14) = fresli(:,14) * WdetJ ! (1/2)*(u_{1,3}+u_{3,1})*WdetJ 1203*59599516SKenneth E. Jansen fresli(:,15) = fresli(:,15) * WdetJ ! (1/2)*(u_{2,3}+u_{3,2})*WdetJ 1204*59599516SKenneth E. Jansenc 1205*59599516SKenneth E. Jansen strnrm(:,intp) = strnrm(:,intp) * WdetJ ! ( |Eps|^2 )*WdetJ 1206*59599516SKenneth E. Jansen 1207*59599516SKenneth E. Jansen epsli(:,1) = -xmudmi(:,intp)*strnrm(:,intp) 1208*59599516SKenneth E. Jansen 1209*59599516SKenneth E. Jansen epsli(:,2) = rlsl(:,intp,1)*fresli(:,10) + 1210*59599516SKenneth E. Jansen & rlsl(:,intp,2)*fresli(:,11) + 1211*59599516SKenneth E. Jansen & rlsl(:,intp,3)*fresli(:,12) + 1212*59599516SKenneth E. Jansen & two*( rlsl(:,intp,4)*fresli(:,13)+ 1213*59599516SKenneth E. Jansen & rlsl(:,intp,5)*fresli(:,14)+ 1214*59599516SKenneth E. Jansen & rlsl(:,intp,6)*fresli(:,15) ) 1215*59599516SKenneth E. Jansen 1216*59599516SKenneth E. Jansen epsl(:,1) = epsl(:,1) + epsli(:,1) 1217*59599516SKenneth E. Jansen epsl(:,2) = epsl(:,2) + epsli(:,2) 1218*59599516SKenneth E. Jansen 1219*59599516SKenneth E. Jansen enddo ! end loop over integ. pts 1220*59599516SKenneth E. Jansen 1221*59599516SKenneth E. Jansen do i = 1, npro 1222*59599516SKenneth E. Jansen eps(1) = eps(1) + epsl(i,1) 1223*59599516SKenneth E. Jansen eps(2) = eps(2) + epsl(i,2) 1224*59599516SKenneth E. Jansen enddo 1225*59599516SKenneth E. Jansen 1226*59599516SKenneth E. Jansen return 1227*59599516SKenneth E. Jansen end 1228*59599516SKenneth E. Jansen 1229*59599516SKenneth E. Jansen 1230*59599516SKenneth E. Jansen 1231