159599516SKenneth E. Jansen subroutine hfilterC (y, x, ien, hfres, shgl, shp, Qwtf) 259599516SKenneth E. Jansen 359599516SKenneth E. Jansenc... The filter operator used here uses the generalized box 459599516SKenneth E. Jansenc... kernel 559599516SKenneth E. Jansen 659599516SKenneth E. Jansen 759599516SKenneth E. Jansen include "common.h" 859599516SKenneth E. Jansen 959599516SKenneth E. Jansen dimension y(nshg,5), hfres(nshg,16) 1059599516SKenneth E. Jansen dimension x(numnp,3), xl(npro,nenl,3) 1159599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,5), 1259599516SKenneth E. Jansen & fresl(npro,16), WdetJ(npro), 1359599516SKenneth E. Jansen & u1(npro), u2(npro), 1459599516SKenneth E. Jansen & u3(npro), 1559599516SKenneth E. Jansen & S11(npro), S22(npro), 1659599516SKenneth E. Jansen & S33(npro), S12(npro), 1759599516SKenneth E. Jansen & S13(npro), S23(npro), 1859599516SKenneth E. Jansen & dxdxi(npro,nsd,nsd), dxidx(npro,nsd,nsd), 1959599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), shg(npro,nshl,nsd), 2059599516SKenneth E. Jansen & shp(nshl,ngauss), 2159599516SKenneth E. Jansen & fresli(npro,16), Qwtf(ngaussf) 2259599516SKenneth E. Jansen 2359599516SKenneth E. Jansen dimension tmp(npro) 2459599516SKenneth E. Jansen 2559599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 2659599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 2759599516SKenneth E. Jansenc 2859599516SKenneth E. Jansen 2959599516SKenneth E. Jansen fresl = zero 3059599516SKenneth E. Jansen 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansen do intp = 1, ngaussf ! Loop over quadrature points 3359599516SKenneth E. Jansen 3459599516SKenneth E. Jansenc calculate the metrics 3559599516SKenneth E. Jansenc 3659599516SKenneth E. Jansenc 3759599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 3859599516SKenneth E. Jansenc 3959599516SKenneth E. Jansenc.... compute the deformation gradient 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansen dxdxi = zero 4259599516SKenneth E. Jansenc 4359599516SKenneth E. Jansen do n = 1, nenl 4459599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 4559599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 4659599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 4759599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 4859599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 4959599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 5059599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 5159599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 5259599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 5359599516SKenneth E. Jansen enddo 5459599516SKenneth E. Jansenc 5559599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 5659599516SKenneth E. Jansenc 5759599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 5859599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 5959599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 6059599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 6159599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 6259599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 6359599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 6459599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 6559599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 6659599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 6759599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 6859599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 6959599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 7059599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 7159599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 7259599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 7359599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 7459599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 7559599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 7659599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 7759599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 7859599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 7959599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 8059599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 8159599516SKenneth E. Jansenc 8259599516SKenneth E. Jansenc wght=Qwt(lcsyst,intp) ! may be different now 8359599516SKenneth E. Jansen wght=Qwtf(intp) 8459599516SKenneth E. Jansen WdetJ(:) = wght / tmp(:) 8559599516SKenneth E. Jansen 8659599516SKenneth E. Jansen 8759599516SKenneth E. Jansenc... compute the gradient of shape functions at the quad. point. 8859599516SKenneth E. Jansen 8959599516SKenneth E. Jansen 9059599516SKenneth E. Jansen do n = 1,nshl 9159599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 9259599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 9359599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 9459599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 9559599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 9659599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 9759599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 9859599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 9959599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 10059599516SKenneth E. Jansen enddo 10159599516SKenneth E. Jansen 10259599516SKenneth E. Jansen 10359599516SKenneth E. Jansenc... compute the velocities and the strain rate tensor at the quad. point 10459599516SKenneth E. Jansen 10559599516SKenneth E. Jansen 10659599516SKenneth E. Jansen u1 = zero 10759599516SKenneth E. Jansen u2 = zero 10859599516SKenneth E. Jansen u3 = zero 10959599516SKenneth E. Jansen S11 = zero 11059599516SKenneth E. Jansen S22 = zero 11159599516SKenneth E. Jansen S33 = zero 11259599516SKenneth E. Jansen S12 = zero 11359599516SKenneth E. Jansen S13 = zero 11459599516SKenneth E. Jansen S23 = zero 11559599516SKenneth E. Jansen do i=1,nshl 11659599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*yl(:,i,2) 11759599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*yl(:,i,3) 11859599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*yl(:,i,4) 11959599516SKenneth E. Jansen 12059599516SKenneth E. Jansen S11 = S11 + shg(:,i,1)*yl(:,i,2) 12159599516SKenneth E. Jansen S22 = S22 + shg(:,i,2)*yl(:,i,3) 12259599516SKenneth E. Jansen S33 = S33 + shg(:,i,3)*yl(:,i,4) 12359599516SKenneth E. Jansen 12459599516SKenneth E. Jansen S12 = S12 + shg(:,i,2)*yl(:,i,2) 12559599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,3) 12659599516SKenneth E. Jansen S13 = S13 + shg(:,i,3)*yl(:,i,2) 12759599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,4) 12859599516SKenneth E. Jansen S23 = S23 + shg(:,i,3)*yl(:,i,3) 12959599516SKenneth E. Jansen & +shg(:,i,2)*yl(:,i,4) 13059599516SKenneth E. Jansen enddo 13159599516SKenneth E. Jansen S12 = pt5 * S12 13259599516SKenneth E. Jansen S13 = pt5 * S13 13359599516SKenneth E. Jansen S23 = pt5 * S23 13459599516SKenneth E. Jansen 13559599516SKenneth E. Jansen 13659599516SKenneth E. Jansen fresli(:,1) = WdetJ * u1 !G * u1 * WdetJ 13759599516SKenneth E. Jansen fresli(:,2) = WdetJ * u2 !G * u2 * WdetJ 13859599516SKenneth E. Jansen fresli(:,3) = WdetJ * u3 !G * u3 * WdetJ 13959599516SKenneth E. Jansen 14059599516SKenneth E. Jansen fresli(:,4) = WdetJ * u1 * u1 ! G*u1*u1*WdetJ 14159599516SKenneth E. Jansen fresli(:,5) = WdetJ * u2 * u2 ! G*u2*u2*WdetJ 14259599516SKenneth E. Jansen fresli(:,6) = WdetJ * u3 * u3 ! G*u3*u3*WdetJ 14359599516SKenneth E. Jansen fresli(:,7) = WdetJ * u1 * u2 ! G*u1*u2*WdetJ 14459599516SKenneth E. Jansen fresli(:,8) = WdetJ * u1 * u3 ! G*u1*u3*WdetJ 14559599516SKenneth E. Jansen fresli(:,9) = WdetJ * u2 * u3 ! G*u2*u3*WdetJ 14659599516SKenneth E. Jansen 14759599516SKenneth E. Jansen fresli(:,10) = S11 * WdetJ ! G*S_{1,1}*WdetJ 14859599516SKenneth E. Jansen fresli(:,11) = S22 * WdetJ ! G*S_{2,2}*WdetJ 14959599516SKenneth E. Jansen fresli(:,12) = S33 * WdetJ ! G*S_{3,3}*WdetJ 15059599516SKenneth E. Jansen fresli(:,13) = S12 * WdetJ ! G*S_{1,1}*WdetJ 15159599516SKenneth E. Jansen fresli(:,14) = S13 * WdetJ ! G*S_{1,3}*WdetJ 15259599516SKenneth E. Jansen fresli(:,15) = S23 * WdetJ ! G*S_{2,3}*WdetJ 15359599516SKenneth E. Jansen 15459599516SKenneth E. Jansen fresli(:,16) = WdetJ !Integral of filter kernel, G, 15559599516SKenneth E. Jansenc over the element 15659599516SKenneth E. Jansen 15759599516SKenneth E. Jansen do i = 1, 16 ! Add contribution of each quad. point 15859599516SKenneth E. Jansen fresl(:,i) = fresl(:,i) + fresli(:,i) 15959599516SKenneth E. Jansen enddo 16059599516SKenneth E. Jansen 16159599516SKenneth E. Jansen enddo !end of loop over integration points 16259599516SKenneth E. Jansenc 16359599516SKenneth E. Jansen 16459599516SKenneth E. Jansen do j = 1,nshl 16559599516SKenneth E. Jansen do nel = 1,npro 16659599516SKenneth E. Jansen hfres(ien(nel,j),:) = hfres(ien(nel,j),:) + fresl(nel,:) 16759599516SKenneth E. Jansen enddo 16859599516SKenneth E. Jansen enddo 16959599516SKenneth E. Jansen 17059599516SKenneth E. Jansen 17159599516SKenneth E. Jansen return 17259599516SKenneth E. Jansen end 17359599516SKenneth E. Jansen 17459599516SKenneth E. Jansenc... Here, the filter operation (denoted w/ a tilde) uses the generalized 17559599516SKenneth E. Jansenc... box kernel. 17659599516SKenneth E. Jansen 17759599516SKenneth E. Jansen subroutine twohfilterB (y, x, strnrm, ien, fres, 17859599516SKenneth E. Jansen & hfres, shgl, shp, Qwtf) 17959599516SKenneth E. Jansen 18059599516SKenneth E. Jansen include "common.h" 18159599516SKenneth E. Jansen 18259599516SKenneth E. Jansen dimension y(nshg,ndof), fres(nshg,33) 18359599516SKenneth E. Jansen dimension x(numnp,nsd), xl(npro,nenl,nsd) 18459599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,ndof), 18559599516SKenneth E. Jansen & fresl(npro,33), WdetJ(npro), 18659599516SKenneth E. Jansen & u1(npro), u2(npro), 18759599516SKenneth E. Jansen & u3(npro), dxdxi(npro,nsd,nsd), 18859599516SKenneth E. Jansen & strnrm(npro,ngauss), dxidx(npro,nsd,nsd), 18959599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), shg(npro,nshl,nsd), 19059599516SKenneth E. Jansen & shp(nshl,ngauss), 19159599516SKenneth E. Jansen & fresli(npro,33), Qwtf(ngaussf), 19259599516SKenneth E. Jansen & hfres(nshg,16), hfresl(npro,nshl,16), 19359599516SKenneth E. Jansen & S(npro,nshl), SS11(npro,nshl), 19459599516SKenneth E. Jansen & SS22(npro,nshl), SS33(npro,nshl), 19559599516SKenneth E. Jansen & SS12(npro,nshl), SS13(npro,nshl), 19659599516SKenneth E. Jansen & SS23(npro,nshl), 19759599516SKenneth E. Jansen & S11p(npro), S22p(npro), 19859599516SKenneth E. Jansen & S33p(npro), S12p(npro), 19959599516SKenneth E. Jansen & S13p(npro), S23p(npro) 20059599516SKenneth E. Jansen 20159599516SKenneth E. Jansen dimension tmp(npro) 20259599516SKenneth E. Jansen 20359599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 20459599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 20559599516SKenneth E. Jansen call local (hfres, hfresl, ien, 16, 'gather ') 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen S(:,:) = sqrt( 20859599516SKenneth E. Jansen & two*(hfresl(:,:,10)**2 + hfresl(:,:,11)**2 + 20959599516SKenneth E. Jansen & hfresl(:,:,12)**2) + four*( 21059599516SKenneth E. Jansen & hfresl(:,:,13)**2 + hfresl(:,:,14)**2 + 21159599516SKenneth E. Jansen & hfresl(:,:,15)**2) ) 21259599516SKenneth E. Jansen 21359599516SKenneth E. Jansen SS11(:,:) = S(:,:)*hfresl(:,:,10) 21459599516SKenneth E. Jansen SS22(:,:) = S(:,:)*hfresl(:,:,11) 21559599516SKenneth E. Jansen SS33(:,:) = S(:,:)*hfresl(:,:,12) 21659599516SKenneth E. Jansen SS12(:,:) = S(:,:)*hfresl(:,:,13) 21759599516SKenneth E. Jansen SS13(:,:) = S(:,:)*hfresl(:,:,14) 21859599516SKenneth E. Jansen SS23(:,:) = S(:,:)*hfresl(:,:,15) 21959599516SKenneth E. Jansen 22059599516SKenneth E. Jansen fresl = zero 22159599516SKenneth E. Jansen 22259599516SKenneth E. Jansen do intp = 1, ngauss 22359599516SKenneth E. Jansen 22459599516SKenneth E. Jansen 22559599516SKenneth E. Jansenc calculate the metrics 22659599516SKenneth E. Jansenc 22759599516SKenneth E. Jansenc 22859599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 22959599516SKenneth E. Jansenc 23059599516SKenneth E. Jansenc.... compute the deformation gradient 23159599516SKenneth E. Jansenc 23259599516SKenneth E. Jansen dxdxi = zero 23359599516SKenneth E. Jansenc 23459599516SKenneth E. Jansen do n = 1, nenl 23559599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 23659599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 23759599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 23859599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 23959599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 24059599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 24159599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 24259599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 24359599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 24459599516SKenneth E. Jansen enddo 24559599516SKenneth E. Jansenc 24659599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 24759599516SKenneth E. Jansenc 24859599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 24959599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 25059599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 25159599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 25259599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 25359599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 25459599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 25559599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 25659599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 25759599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 25859599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 25959599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 26059599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 26159599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 26259599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 26359599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 26459599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 26559599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 26659599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 26759599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 26859599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 26959599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 27059599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 27159599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 27259599516SKenneth E. Jansenc 27359599516SKenneth E. Jansen wght=Qwt(lcsyst,intp) ! may be different now 27459599516SKenneth E. Jansenc wght=Qwtf(intp) 27559599516SKenneth E. Jansen WdetJ = wght / tmp 27659599516SKenneth E. Jansenc 27759599516SKenneth E. Jansen 27859599516SKenneth E. Jansen do n = 1,nshl 27959599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 28059599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 28159599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 28259599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 28359599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 28459599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 28559599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 28659599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 28759599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 28859599516SKenneth E. Jansen enddo 28959599516SKenneth E. Jansen 29059599516SKenneth E. Jansenc... compute filtered quantities at the hat level evaluated at the quad. pt. 29159599516SKenneth E. Jansenc... This should really 29259599516SKenneth E. Jansenc... be the bar-hat level, but the bar filter is implicit so we don't 29359599516SKenneth E. Jansenc... bother to mention it. 29459599516SKenneth E. Jansen 29559599516SKenneth E. Jansen fresli = zero 29659599516SKenneth E. Jansen S11p = zero 29759599516SKenneth E. Jansen S22p = zero 29859599516SKenneth E. Jansen S33p = zero 29959599516SKenneth E. Jansen S12p = zero 30059599516SKenneth E. Jansen S13p = zero 30159599516SKenneth E. Jansen S23p = zero 30259599516SKenneth E. Jansen 30359599516SKenneth E. Jansen do i = 1, nenl 30459599516SKenneth E. Jansen fresli(:,1) = fresli(:,1) + shp(i,intp)*hfresl(:,i,1) ! hat{u1} 30559599516SKenneth E. Jansen fresli(:,2) = fresli(:,2) + shp(i,intp)*hfresl(:,i,2) ! hat{u2} 30659599516SKenneth E. Jansen fresli(:,3) = fresli(:,3) + shp(i,intp)*hfresl(:,i,3) ! hat{u3} 30759599516SKenneth E. Jansen 30859599516SKenneth E. Jansen fresli(:,4) = fresli(:,4) + shp(i,intp)*hfresl(:,i,1)* 30959599516SKenneth E. Jansen & hfresl(:,i,1) ! hat{u1}*hat{u1} 31059599516SKenneth E. Jansen fresli(:,5) = fresli(:,5) + shp(i,intp)*hfresl(:,i,2)* 31159599516SKenneth E. Jansen & hfresl(:,i,2) ! hat{u2}*hat{u2} 31259599516SKenneth E. Jansen fresli(:,6) = fresli(:,6) + shp(i,intp)*hfresl(:,i,3)* 31359599516SKenneth E. Jansen & hfresl(:,i,3) ! hat{u3}*hat{u3} 31459599516SKenneth E. Jansen fresli(:,7) = fresli(:,7) + shp(i,intp)*hfresl(:,i,1)* 31559599516SKenneth E. Jansen & hfresl(:,i,2) ! hat{u1}*hat{u2} 31659599516SKenneth E. Jansen fresli(:,8) = fresli(:,8) + shp(i,intp)*hfresl(:,i,1)* 31759599516SKenneth E. Jansen & hfresl(:,i,3) ! hat{u1}*hat{u3} 31859599516SKenneth E. Jansen fresli(:,9) = fresli(:,9) + shp(i,intp)*hfresl(:,i,2)* 31959599516SKenneth E. Jansen & hfresl(:,i,3) ! hat{u2}*hat{u3} 32059599516SKenneth E. Jansen 32159599516SKenneth E. Jansen fresli(:,10) = fresli(:,10) + shp(i,intp)*hfresl(:,i,10) ! hat{S11} 32259599516SKenneth E. Jansen fresli(:,11) = fresli(:,11) + shp(i,intp)*hfresl(:,i,11) ! hat{S22} 32359599516SKenneth E. Jansen fresli(:,12) = fresli(:,12) + shp(i,intp)*hfresl(:,i,12) ! hat{S33} 32459599516SKenneth E. Jansen fresli(:,13) = fresli(:,13) + shp(i,intp)*hfresl(:,i,13) ! hat{S12} 32559599516SKenneth E. Jansen fresli(:,14) = fresli(:,14) + shp(i,intp)*hfresl(:,i,14) ! hat{S13} 32659599516SKenneth E. Jansen fresli(:,15) = fresli(:,15) + shp(i,intp)*hfresl(:,i,15) ! hat{S23} 32759599516SKenneth E. Jansen 32859599516SKenneth E. Jansen S11p = S11p + shg(:,i,1)*hfresl(:,i,1) 32959599516SKenneth E. Jansen S22p = S22p + shg(:,i,2)*hfresl(:,i,2) 33059599516SKenneth E. Jansen S33p = S33p + shg(:,i,3)*hfresl(:,i,3) 33159599516SKenneth E. Jansen 33259599516SKenneth E. Jansen S12p = S12p + shg(:,i,2)*hfresl(:,i,1) + 33359599516SKenneth E. Jansen & shg(:,i,1)*hfresl(:,i,2) 33459599516SKenneth E. Jansen S13p = S13p + shg(:,i,3)*hfresl(:,i,1) + 33559599516SKenneth E. Jansen & shg(:,i,1)*hfresl(:,i,3) 33659599516SKenneth E. Jansen S23p = S23p + shg(:,i,3)*hfresl(:,i,2) + 33759599516SKenneth E. Jansen & shg(:,i,2)*hfresl(:,i,3) 33859599516SKenneth E. Jansen 33959599516SKenneth E. Jansen enddo 34059599516SKenneth E. Jansen 34159599516SKenneth E. Jansenc... get the strain rate tensor norm at the quad. pt. 34259599516SKenneth E. Jansen 34359599516SKenneth E. Jansenc strnrm(:,intp) = sqrt( 34459599516SKenneth E. Jansenc & two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2) 34559599516SKenneth E. Jansenc & + four * ( fresli(:,13)**2 + fresli(:,14)**2 + 34659599516SKenneth E. Jansenc & fresli(:,15)**2 ) ) 34759599516SKenneth E. Jansen 34859599516SKenneth E. Jansenc strnrm2(:,intp) = zero 34959599516SKenneth E. Jansenc do i = 1, nenl 35059599516SKenneth E. Jansenc strnrm2(:,intp) = strnrm2(:,intp) + S(:,i)*shp(i,intp) 35159599516SKenneth E. Jansenc enddo 35259599516SKenneth E. Jansen 35359599516SKenneth E. Jansenc strnrm3(:,intp) = sqrt( 35459599516SKenneth E. Jansenc & two * (S11p(:)**2 + S22p(:)**2 + S33p(:)**2) 35559599516SKenneth E. Jansenc & + four * ( S12p(:)**2 + S13p(:)**2 + S23p(:)**2) ) 35659599516SKenneth E. Jansen 35759599516SKenneth E. Jansenc... compute |hat{S}| * hat{Sij} 35859599516SKenneth E. Jansen 35959599516SKenneth E. Jansen do i = 1, nenl 36059599516SKenneth E. Jansen fresli(:,16) =fresli(:,16)+shp(i,intp)*SS11(:,i)! |hat{S}|*hat{S11} 36159599516SKenneth E. Jansen fresli(:,17) =fresli(:,17)+shp(i,intp)*SS22(:,i)! |hat{S}|*hat{S22} 36259599516SKenneth E. Jansen fresli(:,18) =fresli(:,18)+shp(i,intp)*SS33(:,i)! |hat{S}|*hat{S33} 36359599516SKenneth E. Jansen fresli(:,19) =fresli(:,19)+shp(i,intp)*SS12(:,i)! |hat{S}|*hat{S12} 36459599516SKenneth E. Jansen fresli(:,20) =fresli(:,20)+shp(i,intp)*SS13(:,i)! |hat{S}|*hat{S13} 36559599516SKenneth E. Jansen fresli(:,21) =fresli(:,21)+shp(i,intp)*SS23(:,i)! |hat{S}|*hat{S23} 36659599516SKenneth E. Jansen enddo 36759599516SKenneth E. Jansen 36859599516SKenneth E. Jansenc... multiply fresli by WdetJ so that when we finish looping over 36959599516SKenneth E. Jansenc... quad. pts. and add the contributions from all the quad. points 37059599516SKenneth E. Jansenc... we get filtered quantities at the hat-tilde level, secretly the 37159599516SKenneth E. Jansenc... bar-hat-tilde level. 37259599516SKenneth E. Jansen 37359599516SKenneth E. Jansen do j = 1, 21 37459599516SKenneth E. Jansen fresli(:,j) = fresli(:,j)*WdetJ(:) 37559599516SKenneth E. Jansen enddo 37659599516SKenneth E. Jansen 37759599516SKenneth E. Jansenc... compute volume of box kernel 37859599516SKenneth E. Jansen 37959599516SKenneth E. Jansen fresli(:,22) = WdetJ 38059599516SKenneth E. Jansen 38159599516SKenneth E. Jansenc... add contributions from each quad pt to current element 38259599516SKenneth E. Jansen 38359599516SKenneth E. Jansen do i = 1, 22 38459599516SKenneth E. Jansen fresl(:,i) = fresl(:,i) + fresli(:,i) 38559599516SKenneth E. Jansen enddo 38659599516SKenneth E. Jansen 38759599516SKenneth E. Jansen enddo ! end of loop over integration points 38859599516SKenneth E. Jansen 38959599516SKenneth E. Jansen 39059599516SKenneth E. Jansenc... scatter locally filtered quantities to the global nodes 39159599516SKenneth E. Jansen 39259599516SKenneth E. Jansen do j = 1,nshl 39359599516SKenneth E. Jansen do nel = 1,npro 39459599516SKenneth E. Jansen fres(ien(nel,j),:) = fres(ien(nel,j),:) + fresl(nel,:) 39559599516SKenneth E. Jansen enddo 39659599516SKenneth E. Jansen enddo 39759599516SKenneth E. Jansen 39859599516SKenneth E. Jansen return 39959599516SKenneth E. Jansen end 40059599516SKenneth E. Jansen 40159599516SKenneth E. Jansenc... The filter operator used here uses the generalized box 40259599516SKenneth E. Jansenc... kernel 40359599516SKenneth E. Jansen 40459599516SKenneth E. Jansen subroutine hfilterCC (y, x, ien, hfres, shgl, shp, Qwtf) 40559599516SKenneth E. Jansen 40659599516SKenneth E. Jansen include "common.h" 40759599516SKenneth E. Jansen 40859599516SKenneth E. Jansen dimension y(nshg,5), hfres(nshg,22) 40959599516SKenneth E. Jansen dimension x(numnp,3), xl(npro,nenl,3) 41059599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,5), 41159599516SKenneth E. Jansen & fresl(npro,22), WdetJ(npro), 41259599516SKenneth E. Jansen & u1(npro), u2(npro), 41359599516SKenneth E. Jansen & u3(npro), 41459599516SKenneth E. Jansen & S11(npro), S22(npro), 41559599516SKenneth E. Jansen & S33(npro), S12(npro), 41659599516SKenneth E. Jansen & S13(npro), S23(npro), 41759599516SKenneth E. Jansen & dxdxi(npro,nsd,nsd), dxidx(npro,nsd,nsd), 41859599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), shg(npro,nshl,nsd), 41959599516SKenneth E. Jansen & shp(nshl,ngauss), 42059599516SKenneth E. Jansen & fresli(npro,22), Qwtf(ngaussf), 42159599516SKenneth E. Jansen & strnrmi(npro) 42259599516SKenneth E. Jansen 42359599516SKenneth E. Jansen dimension tmp(npro) 42459599516SKenneth E. Jansen 42559599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 42659599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 42759599516SKenneth E. Jansenc 42859599516SKenneth E. Jansen 42959599516SKenneth E. Jansen fresl = zero 43059599516SKenneth E. Jansen 43159599516SKenneth E. Jansenc 43259599516SKenneth E. Jansen do intp = 1, ngaussf ! Loop over quadrature points 43359599516SKenneth E. Jansen 43459599516SKenneth E. Jansenc calculate the metrics 43559599516SKenneth E. Jansenc 43659599516SKenneth E. Jansenc 43759599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 43859599516SKenneth E. Jansenc 43959599516SKenneth E. Jansenc.... compute the deformation gradient 44059599516SKenneth E. Jansenc 44159599516SKenneth E. Jansen dxdxi = zero 44259599516SKenneth E. Jansenc 44359599516SKenneth E. Jansen do n = 1, nenl 44459599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 44559599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 44659599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 44759599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 44859599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 44959599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 45059599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 45159599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 45259599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 45359599516SKenneth E. Jansen enddo 45459599516SKenneth E. Jansenc 45559599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 45659599516SKenneth E. Jansenc 45759599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 45859599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 45959599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 46059599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 46159599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 46259599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 46359599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 46459599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 46559599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 46659599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 46759599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 46859599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 46959599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 47059599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 47159599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 47259599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 47359599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 47459599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 47559599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 47659599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 47759599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 47859599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 47959599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 48059599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 48159599516SKenneth E. Jansenc 48259599516SKenneth E. Jansenc wght=Qwt(lcsyst,intp) ! may be different now 48359599516SKenneth E. Jansen wght=Qwtf(intp) 48459599516SKenneth E. Jansen WdetJ(:) = wght / tmp(:) 48559599516SKenneth E. Jansen 48659599516SKenneth E. Jansen 48759599516SKenneth E. Jansenc... compute the gradient of shape functions at the quad. point. 48859599516SKenneth E. Jansen 48959599516SKenneth E. Jansen 49059599516SKenneth E. Jansen do n = 1,nshl 49159599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 49259599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 49359599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 49459599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 49559599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 49659599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 49759599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 49859599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 49959599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 50059599516SKenneth E. Jansen enddo 50159599516SKenneth E. Jansen 50259599516SKenneth E. Jansen 50359599516SKenneth E. Jansenc... compute the velocities and the strain rate tensor at the quad. point 50459599516SKenneth E. Jansen 50559599516SKenneth E. Jansen 50659599516SKenneth E. Jansen u1 = zero 50759599516SKenneth E. Jansen u2 = zero 50859599516SKenneth E. Jansen u3 = zero 50959599516SKenneth E. Jansen S11 = zero 51059599516SKenneth E. Jansen S22 = zero 51159599516SKenneth E. Jansen S33 = zero 51259599516SKenneth E. Jansen S12 = zero 51359599516SKenneth E. Jansen S13 = zero 51459599516SKenneth E. Jansen S23 = zero 51559599516SKenneth E. Jansen do i=1,nshl 51659599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*yl(:,i,2) 51759599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*yl(:,i,3) 51859599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*yl(:,i,4) 51959599516SKenneth E. Jansen 52059599516SKenneth E. Jansen S11 = S11 + shg(:,i,1)*yl(:,i,2) 52159599516SKenneth E. Jansen S22 = S22 + shg(:,i,2)*yl(:,i,3) 52259599516SKenneth E. Jansen S33 = S33 + shg(:,i,3)*yl(:,i,4) 52359599516SKenneth E. Jansen 52459599516SKenneth E. Jansen S12 = S12 + shg(:,i,2)*yl(:,i,2) 52559599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,3) 52659599516SKenneth E. Jansen S13 = S13 + shg(:,i,3)*yl(:,i,2) 52759599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,4) 52859599516SKenneth E. Jansen S23 = S23 + shg(:,i,3)*yl(:,i,3) 52959599516SKenneth E. Jansen & +shg(:,i,2)*yl(:,i,4) 53059599516SKenneth E. Jansen enddo 53159599516SKenneth E. Jansen S12 = pt5 * S12 53259599516SKenneth E. Jansen S13 = pt5 * S13 53359599516SKenneth E. Jansen S23 = pt5 * S23 53459599516SKenneth E. Jansen 53559599516SKenneth E. Jansenc... Get the strain rate norm at the quad pts 53659599516SKenneth E. Jansen 53759599516SKenneth E. Jansen strnrmi = sqrt( two*(S11**2 + S22**2 + S33**2) 53859599516SKenneth E. Jansen & + four*(S12**2 + S13**2 + S23**2) ) 53959599516SKenneth E. Jansen 54059599516SKenneth E. Jansen 54159599516SKenneth E. Jansenc... Multiply quantities to be filtered by the box kernel 54259599516SKenneth E. Jansen 54359599516SKenneth E. Jansen fresli(:,1) = WdetJ * u1 !G * u1 * WdetJ 54459599516SKenneth E. Jansen fresli(:,2) = WdetJ * u2 !G * u2 * WdetJ 54559599516SKenneth E. Jansen fresli(:,3) = WdetJ * u3 !G * u3 * WdetJ 54659599516SKenneth E. Jansen 54759599516SKenneth E. Jansen fresli(:,4) = WdetJ * u1 * u1 ! G*u1*u1*WdetJ 54859599516SKenneth E. Jansen fresli(:,5) = WdetJ * u2 * u2 ! G*u2*u2*WdetJ 54959599516SKenneth E. Jansen fresli(:,6) = WdetJ * u3 * u3 ! G*u3*u3*WdetJ 55059599516SKenneth E. Jansen fresli(:,7) = WdetJ * u1 * u2 ! G*u1*u2*WdetJ 55159599516SKenneth E. Jansen fresli(:,8) = WdetJ * u1 * u3 ! G*u1*u3*WdetJ 55259599516SKenneth E. Jansen fresli(:,9) = WdetJ * u2 * u3 ! G*u2*u3*WdetJ 55359599516SKenneth E. Jansen 55459599516SKenneth E. Jansen fresli(:,10) = S11 * WdetJ ! G*S_{1,1}*WdetJ 55559599516SKenneth E. Jansen fresli(:,11) = S22 * WdetJ ! G*S_{2,2}*WdetJ 55659599516SKenneth E. Jansen fresli(:,12) = S33 * WdetJ ! G*S_{3,3}*WdetJ 55759599516SKenneth E. Jansen fresli(:,13) = S12 * WdetJ ! G*S_{1,1}*WdetJ 55859599516SKenneth E. Jansen fresli(:,14) = S13 * WdetJ ! G*S_{1,3}*WdetJ 55959599516SKenneth E. Jansen fresli(:,15) = S23 * WdetJ ! G*S_{2,3}*WdetJ 56059599516SKenneth E. Jansen 56159599516SKenneth E. Jansen fresli(:,16) = WdetJ !Integral of filter kernel, G, 56259599516SKenneth E. Jansenc over the element 56359599516SKenneth E. Jansen 56459599516SKenneth E. Jansen fresli(:,17) = S11 * strnrmi * WdetJ 56559599516SKenneth E. Jansen fresli(:,18) = S22 * strnrmi * WdetJ 56659599516SKenneth E. Jansen fresli(:,19) = S33 * strnrmi * WdetJ 56759599516SKenneth E. Jansen fresli(:,20) = S12 * strnrmi * WdetJ 56859599516SKenneth E. Jansen fresli(:,21) = S13 * strnrmi * WdetJ 56959599516SKenneth E. Jansen fresli(:,22) = S23 * strnrmi * WdetJ 57059599516SKenneth E. Jansen 57159599516SKenneth E. Jansen 57259599516SKenneth E. Jansen do i = 1, 22 ! Add contribution of each quad. point 57359599516SKenneth E. Jansen fresl(:,i) = fresl(:,i) + fresli(:,i) 57459599516SKenneth E. Jansen enddo 57559599516SKenneth E. Jansen 57659599516SKenneth E. Jansen enddo !end of loop over integration points 57759599516SKenneth E. Jansenc 57859599516SKenneth E. Jansen 57959599516SKenneth E. Jansen do j = 1,nshl 58059599516SKenneth E. Jansen do nel = 1,npro 58159599516SKenneth E. Jansen hfres(ien(nel,j),:) = hfres(ien(nel,j),:) + fresl(nel,:) 58259599516SKenneth E. Jansen enddo 58359599516SKenneth E. Jansen enddo 58459599516SKenneth E. Jansen 58559599516SKenneth E. Jansen 58659599516SKenneth E. Jansen return 58759599516SKenneth E. Jansen end 58859599516SKenneth E. Jansen 58959599516SKenneth E. Jansen 59059599516SKenneth E. Jansenc... Here, the filter operation (denoted w/ a tilde) uses the generalized 59159599516SKenneth E. Jansenc... box kernel. 59259599516SKenneth E. Jansen 59359599516SKenneth E. Jansen subroutine twohfilterBB (y, x, strnrm, ien, fres, 59459599516SKenneth E. Jansen & hfres, shgl, shp, Qwtf) 59559599516SKenneth E. Jansen 59659599516SKenneth E. Jansen include "common.h" 59759599516SKenneth E. Jansen 59859599516SKenneth E. Jansen dimension y(nshg,ndof), fres(nshg,33) 59959599516SKenneth E. Jansen dimension x(numnp,nsd), xl(npro,nenl,nsd) 60059599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,ndof), 60159599516SKenneth E. Jansen & fresl(npro,33), WdetJ(npro), 60259599516SKenneth E. Jansen & u1(npro), u2(npro), 60359599516SKenneth E. Jansen & u3(npro), dxdxi(npro,nsd,nsd), 60459599516SKenneth E. Jansen & strnrm(npro,ngauss), dxidx(npro,nsd,nsd), 60559599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), shg(npro,nshl,nsd), 60659599516SKenneth E. Jansen & shp(nshl,ngauss), 60759599516SKenneth E. Jansen & fresli(npro,33), Qwtf(ngaussf), 60859599516SKenneth E. Jansen & hfres(nshg,22), hfresl(npro,nshl,22), 60959599516SKenneth E. Jansen & S(npro,nshl), SS11(npro,nshl), 61059599516SKenneth E. Jansen & SS22(npro,nshl), SS33(npro,nshl), 61159599516SKenneth E. Jansen & SS12(npro,nshl), SS13(npro,nshl), 61259599516SKenneth E. Jansen & SS23(npro,nshl) 61359599516SKenneth E. Jansen 61459599516SKenneth E. Jansen dimension tmp(npro) 61559599516SKenneth E. Jansen 61659599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 61759599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 61859599516SKenneth E. Jansen call local (hfres, hfresl, ien, 22, 'gather ') 61959599516SKenneth E. Jansen 62059599516SKenneth E. Jansen S(:,:) = sqrt( 62159599516SKenneth E. Jansen & two*(hfresl(:,:,10)**2 + hfresl(:,:,11)**2 + 62259599516SKenneth E. Jansen & hfresl(:,:,12)**2) + four*( 62359599516SKenneth E. Jansen & hfresl(:,:,13)**2 + hfresl(:,:,14)**2 + 62459599516SKenneth E. Jansen & hfresl(:,:,15)**2) ) 62559599516SKenneth E. Jansen 62659599516SKenneth E. Jansen SS11(:,:) = S(:,:)*hfresl(:,:,10) 62759599516SKenneth E. Jansen SS22(:,:) = S(:,:)*hfresl(:,:,11) 62859599516SKenneth E. Jansen SS33(:,:) = S(:,:)*hfresl(:,:,12) 62959599516SKenneth E. Jansen SS12(:,:) = S(:,:)*hfresl(:,:,13) 63059599516SKenneth E. Jansen SS13(:,:) = S(:,:)*hfresl(:,:,14) 63159599516SKenneth E. Jansen SS23(:,:) = S(:,:)*hfresl(:,:,15) 63259599516SKenneth E. Jansen 63359599516SKenneth E. Jansen fresl = zero 63459599516SKenneth E. Jansen 63559599516SKenneth E. Jansen do intp = 1, ngaussf 63659599516SKenneth E. Jansen 63759599516SKenneth E. Jansen 63859599516SKenneth E. Jansenc calculate the metrics 63959599516SKenneth E. Jansenc 64059599516SKenneth E. Jansenc 64159599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 64259599516SKenneth E. Jansenc 64359599516SKenneth E. Jansenc.... compute the deformation gradient 64459599516SKenneth E. Jansenc 64559599516SKenneth E. Jansen dxdxi = zero 64659599516SKenneth E. Jansenc 64759599516SKenneth E. Jansen do n = 1, nenl 64859599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 64959599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 65059599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 65159599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 65259599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 65359599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 65459599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 65559599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 65659599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 65759599516SKenneth E. Jansen enddo 65859599516SKenneth E. Jansenc 65959599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 66059599516SKenneth E. Jansenc 66159599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 66259599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 66359599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 66459599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 66559599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 66659599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 66759599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 66859599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 66959599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 67059599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 67159599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 67259599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 67359599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 67459599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 67559599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 67659599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 67759599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 67859599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 67959599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 68059599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 68159599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 68259599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 68359599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 68459599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 68559599516SKenneth E. Jansenc 68659599516SKenneth E. Jansenc wght=Qwt(lcsyst,intp) ! may be different now 68759599516SKenneth E. Jansen wght=Qwtf(intp) 68859599516SKenneth E. Jansen WdetJ = wght / tmp 68959599516SKenneth E. Jansenc 69059599516SKenneth E. Jansen 69159599516SKenneth E. Jansen do n = 1,nshl 69259599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 69359599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 69459599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 69559599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 69659599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 69759599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 69859599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 69959599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 70059599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 70159599516SKenneth E. Jansen enddo 70259599516SKenneth E. Jansen 70359599516SKenneth E. Jansenc... compute filtered quantities at the hat level evaluated at the quad. pt. 70459599516SKenneth E. Jansenc... This should really 70559599516SKenneth E. Jansenc... be the bar-hat level, but the bar filter is implicit so we don't 70659599516SKenneth E. Jansenc... bother to mention it. 70759599516SKenneth E. Jansen 70859599516SKenneth E. Jansen fresli = zero 70959599516SKenneth E. Jansen S11p = zero 71059599516SKenneth E. Jansen S22p = zero 71159599516SKenneth E. Jansen S33p = zero 71259599516SKenneth E. Jansen S12p = zero 71359599516SKenneth E. Jansen S13p = zero 71459599516SKenneth E. Jansen S23p = zero 71559599516SKenneth E. Jansen 71659599516SKenneth E. Jansen do i = 1, nenl 71759599516SKenneth E. Jansen fresli(:,1) = fresli(:,1) + shp(i,intp)*hfresl(:,i,1) ! hat{u1} 71859599516SKenneth E. Jansen fresli(:,2) = fresli(:,2) + shp(i,intp)*hfresl(:,i,2) ! hat{u2} 71959599516SKenneth E. Jansen fresli(:,3) = fresli(:,3) + shp(i,intp)*hfresl(:,i,3) ! hat{u3} 72059599516SKenneth E. Jansen 72159599516SKenneth E. Jansen fresli(:,4) = fresli(:,4) + shp(i,intp)*hfresl(:,i,4) ! hat{u1*u1} 72259599516SKenneth E. Jansen fresli(:,5) = fresli(:,5) + shp(i,intp)*hfresl(:,i,5) ! hat{u2*u2} 72359599516SKenneth E. Jansen fresli(:,6) = fresli(:,6) + shp(i,intp)*hfresl(:,i,6) ! hat{u3*u3} 72459599516SKenneth E. Jansen fresli(:,7) = fresli(:,7) + shp(i,intp)*hfresl(:,i,7) ! hat{u1*u2} 72559599516SKenneth E. Jansen fresli(:,8) = fresli(:,8) + shp(i,intp)*hfresl(:,i,8) ! hat{u1*u3} 72659599516SKenneth E. Jansen fresli(:,9) = fresli(:,9) + shp(i,intp)*hfresl(:,i,9) ! hat{u2*u3} 72759599516SKenneth E. Jansen 72859599516SKenneth E. Jansen fresli(:,10) = fresli(:,10) + shp(i,intp)*hfresl(:,i,10) ! hat{S11} 72959599516SKenneth E. Jansen fresli(:,11) = fresli(:,11) + shp(i,intp)*hfresl(:,i,11) ! hat{S22} 73059599516SKenneth E. Jansen fresli(:,12) = fresli(:,12) + shp(i,intp)*hfresl(:,i,12) ! hat{S33} 73159599516SKenneth E. Jansen fresli(:,13) = fresli(:,13) + shp(i,intp)*hfresl(:,i,13) ! hat{S12} 73259599516SKenneth E. Jansen fresli(:,14) = fresli(:,14) + shp(i,intp)*hfresl(:,i,14) ! hat{S13} 73359599516SKenneth E. Jansen fresli(:,15) = fresli(:,15) + shp(i,intp)*hfresl(:,i,15) ! hat{S23} 73459599516SKenneth E. Jansen 73559599516SKenneth E. Jansen fresli(:,16) = fresli(:,16) +shp(i,intp)*hfresl(:,i,17)! hat{S11*|S|} 73659599516SKenneth E. Jansen fresli(:,17) = fresli(:,17) +shp(i,intp)*hfresl(:,i,18)! hat{S22*|S|} 73759599516SKenneth E. Jansen fresli(:,18) = fresli(:,18) +shp(i,intp)*hfresl(:,i,19)! hat{S33*|S|} 73859599516SKenneth E. Jansen fresli(:,19) = fresli(:,19) +shp(i,intp)*hfresl(:,i,20)! hat{S12*|S|} 73959599516SKenneth E. Jansen fresli(:,20) = fresli(:,20) +shp(i,intp)*hfresl(:,i,21)! hat{S13*|S|} 74059599516SKenneth E. Jansen fresli(:,21) = fresli(:,21) +shp(i,intp)*hfresl(:,i,22)! hat{S23*|S|} 74159599516SKenneth E. Jansen 74259599516SKenneth E. Jansen 74359599516SKenneth E. Jansen enddo 74459599516SKenneth E. Jansen 74559599516SKenneth E. Jansenc... multiply fresli by WdetJ so that when we finish looping over 74659599516SKenneth E. Jansenc... quad. pts. and add the contributions from all the quad. points 74759599516SKenneth E. Jansenc... we get filtered quantities at the hat-tilde level, secretly the 74859599516SKenneth E. Jansenc... bar-hat-tilde level. 74959599516SKenneth E. Jansen 75059599516SKenneth E. Jansen do j = 1, 21 75159599516SKenneth E. Jansen fresli(:,j) = fresli(:,j)*WdetJ(:) 75259599516SKenneth E. Jansen enddo 75359599516SKenneth E. Jansen 75459599516SKenneth E. Jansenc... compute volume of box kernel 75559599516SKenneth E. Jansen 75659599516SKenneth E. Jansen fresli(:,22) = WdetJ 75759599516SKenneth E. Jansen 75859599516SKenneth E. Jansenc... add contributions from each quad pt to current element 75959599516SKenneth E. Jansen 76059599516SKenneth E. Jansen do i = 1, 22 76159599516SKenneth E. Jansen fresl(:,i) = fresl(:,i) + fresli(:,i) 76259599516SKenneth E. Jansen enddo 76359599516SKenneth E. Jansen 76459599516SKenneth E. Jansen enddo ! end of loop over integration points 76559599516SKenneth E. Jansen 76659599516SKenneth E. Jansen 76759599516SKenneth E. Jansenc... scatter locally filtered quantities to the global nodes 76859599516SKenneth E. Jansen 76959599516SKenneth E. Jansen do j = 1,nshl 77059599516SKenneth E. Jansen do nel = 1,npro 77159599516SKenneth E. Jansen fres(ien(nel,j),:) = fres(ien(nel,j),:) + fresl(nel,:) 77259599516SKenneth E. Jansen enddo 77359599516SKenneth E. Jansen enddo 77459599516SKenneth E. Jansen 77559599516SKenneth E. Jansen return 77659599516SKenneth E. Jansen end 77759599516SKenneth E. Jansen 77859599516SKenneth E. Jansen 77959599516SKenneth E. Jansenc... The filter operator used here uses the generalized hat (witch hat) 78059599516SKenneth E. Jansenc... kernel 78159599516SKenneth E. Jansen 78259599516SKenneth E. Jansen subroutine hfilterBB (y, x, ien, hfres, shgl, shp, Qwtf) 78359599516SKenneth E. Jansen 78459599516SKenneth E. Jansen include "common.h" 78559599516SKenneth E. Jansen 78659599516SKenneth E. Jansen dimension y(nshg,5), hfres(nshg,24) 78759599516SKenneth E. Jansen dimension x(numnp,3), xl(npro,nenl,3) 78859599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,5), 78959599516SKenneth E. Jansen & fresl(npro,nshl,24), WdetJ(npro), 79059599516SKenneth E. Jansen & u1(npro), u2(npro), 79159599516SKenneth E. Jansen & u3(npro), rho(npro), 79259599516SKenneth E. Jansen & S11(npro), S22(npro), 79359599516SKenneth E. Jansen & S33(npro), S12(npro), 79459599516SKenneth E. Jansen & S13(npro), S23(npro), 79559599516SKenneth E. Jansen & dxdxi(npro,nsd,nsd), dxidx(npro,nsd,nsd), 79659599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), shg(npro,nshl,nsd), 79759599516SKenneth E. Jansen & shp(nshl,ngauss), 79859599516SKenneth E. Jansen & fresli(npro,nshl,24), Qwtf(ngaussf), 79959599516SKenneth E. Jansen & strnrmi(npro) 80059599516SKenneth E. Jansen 80159599516SKenneth E. Jansen 80259599516SKenneth E. Jansen dimension tmp(npro) 80359599516SKenneth E. Jansen 80459599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 80559599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 80659599516SKenneth E. Jansenc 80759599516SKenneth E. Jansen 80859599516SKenneth E. Jansen fresl = zero 80959599516SKenneth E. Jansen 81059599516SKenneth E. Jansenc 81159599516SKenneth E. Jansen do intp = 1, ngaussf ! Loop over quadrature points 81259599516SKenneth E. Jansen 81359599516SKenneth E. Jansenc calculate the metrics 81459599516SKenneth E. Jansenc 81559599516SKenneth E. Jansenc 81659599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 81759599516SKenneth E. Jansenc 81859599516SKenneth E. Jansenc.... compute the deformation gradient 81959599516SKenneth E. Jansenc 82059599516SKenneth E. Jansen dxdxi = zero 82159599516SKenneth E. Jansenc 82259599516SKenneth E. Jansen do n = 1, nenl 82359599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 82459599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 82559599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 82659599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 82759599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 82859599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 82959599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 83059599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 83159599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 83259599516SKenneth E. Jansen enddo 83359599516SKenneth E. Jansenc 83459599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 83559599516SKenneth E. Jansenc 83659599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 83759599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 83859599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 83959599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 84059599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 84159599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 84259599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 84359599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 84459599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 84559599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 84659599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 84759599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 84859599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 84959599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 85059599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 85159599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 85259599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 85359599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 85459599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 85559599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 85659599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 85759599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 85859599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 85959599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 86059599516SKenneth E. Jansenc 86159599516SKenneth E. Jansenc wght=Qwt(lcsyst,intp) ! may be different now 86259599516SKenneth E. Jansen wght=Qwtf(intp) 86359599516SKenneth E. Jansen WdetJ(:) = wght / tmp(:) 86459599516SKenneth E. Jansen 86559599516SKenneth E. Jansen 86659599516SKenneth E. Jansenc... compute the gradient of shape functions at the quad. point. 86759599516SKenneth E. Jansen 86859599516SKenneth E. Jansen 86959599516SKenneth E. Jansen do n = 1,nshl 87059599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 87159599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 87259599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 87359599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 87459599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 87559599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 87659599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 87759599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 87859599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 87959599516SKenneth E. Jansen enddo 88059599516SKenneth E. Jansen 88159599516SKenneth E. Jansen 88259599516SKenneth E. Jansenc... compute the velocities and the strain rate tensor at the quad. point 88359599516SKenneth E. Jansen 88459599516SKenneth E. Jansen 88559599516SKenneth E. Jansen u1 = zero 88659599516SKenneth E. Jansen u2 = zero 88759599516SKenneth E. Jansen u3 = zero 88859599516SKenneth E. Jansen S11 = zero 88959599516SKenneth E. Jansen S22 = zero 89059599516SKenneth E. Jansen S33 = zero 89159599516SKenneth E. Jansen S12 = zero 89259599516SKenneth E. Jansen S13 = zero 89359599516SKenneth E. Jansen S23 = zero 89459599516SKenneth E. Jansen do i=1,nshl 89559599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*yl(:,i,2) 89659599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*yl(:,i,3) 89759599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*yl(:,i,4) 89859599516SKenneth E. Jansen 89959599516SKenneth E. Jansen S11 = S11 + shg(:,i,1)*yl(:,i,2) 90059599516SKenneth E. Jansen S22 = S22 + shg(:,i,2)*yl(:,i,3) 90159599516SKenneth E. Jansen S33 = S33 + shg(:,i,3)*yl(:,i,4) 90259599516SKenneth E. Jansen 90359599516SKenneth E. Jansen S12 = S12 + shg(:,i,2)*yl(:,i,2) 90459599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,3) 90559599516SKenneth E. Jansen S13 = S13 + shg(:,i,3)*yl(:,i,2) 90659599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,4) 90759599516SKenneth E. Jansen S23 = S23 + shg(:,i,3)*yl(:,i,3) 90859599516SKenneth E. Jansen & +shg(:,i,2)*yl(:,i,4) 90959599516SKenneth E. Jansen enddo 91059599516SKenneth E. Jansen S12 = pt5 * S12 91159599516SKenneth E. Jansen S13 = pt5 * S13 91259599516SKenneth E. Jansen S23 = pt5 * S23 91359599516SKenneth E. Jansen 91459599516SKenneth E. Jansenc... Get the strain rate norm at the quad pts 91559599516SKenneth E. Jansen 91659599516SKenneth E. Jansen strnrmi = sqrt( two*(S11**2 + S22**2 + S33**2) 91759599516SKenneth E. Jansen & + four*(S12**2 + S13**2 + S23**2) ) 91859599516SKenneth E. Jansen 91959599516SKenneth E. Jansen 92059599516SKenneth E. Jansenc... Loop over element nodes and multiply u_{i} and S_{i,j} by the 92159599516SKenneth E. Jansenc... hat kernel and the Jacobian over the current element evaluated at 92259599516SKenneth E. Jansenc... the current quad. point. 92359599516SKenneth E. Jansen 92459599516SKenneth E. Jansen do i = 1, nenl ! Loop over element nodes 92559599516SKenneth E. Jansen 92659599516SKenneth E. Jansen fresli(:,i,1) = WdetJ * u1 * shp(i,intp) !G * u1 * WdetJ 92759599516SKenneth E. Jansen fresli(:,i,2) = WdetJ * u2 * shp(i,intp) !G * u2 * WdetJ 92859599516SKenneth E. Jansen fresli(:,i,3) = WdetJ * u3 * shp(i,intp) !G * u3 * WdetJ 92959599516SKenneth E. Jansen 93059599516SKenneth E. Jansen fresli(:,i,4) = WdetJ * u1 * u1 * shp(i,intp) ! G*u1*u1*WdetJ 93159599516SKenneth E. Jansen fresli(:,i,5) = WdetJ * u2 * u2 * shp(i,intp) ! G*u2*u2*WdetJ 93259599516SKenneth E. Jansen fresli(:,i,6) = WdetJ * u3 * u3 * shp(i,intp) ! G*u3*u3*WdetJ 93359599516SKenneth E. Jansen fresli(:,i,7) = WdetJ * u1 * u2 * shp(i,intp) ! G*u1*u2*WdetJ 93459599516SKenneth E. Jansen fresli(:,i,8) = WdetJ * u1 * u3 * shp(i,intp) ! G*u1*u3*WdetJ 93559599516SKenneth E. Jansen fresli(:,i,9) = WdetJ * u2 * u3 * shp(i,intp) ! G*u2*u3*WdetJ 93659599516SKenneth E. Jansen 93759599516SKenneth E. Jansen fresli(:,i,10) = S11 * shp(i,intp) * WdetJ ! G*S_{1,1}*WdetJ 93859599516SKenneth E. Jansen fresli(:,i,11) = S22 * shp(i,intp) * WdetJ ! G*S_{2,2}*WdetJ 93959599516SKenneth E. Jansen fresli(:,i,12) = S33 * shp(i,intp) * WdetJ ! G*S_{3,3}*WdetJ 94059599516SKenneth E. Jansen fresli(:,i,13) = S12 * shp(i,intp) * WdetJ ! G*S_{1,1}*WdetJ 94159599516SKenneth E. Jansen fresli(:,i,14) = S13 * shp(i,intp) * WdetJ ! G*S_{1,3}*WdetJ 94259599516SKenneth E. Jansen fresli(:,i,15) = S23 * shp(i,intp) * WdetJ ! G*S_{2,3}*WdetJ 94359599516SKenneth E. Jansen 94459599516SKenneth E. Jansen fresli(:,i,22) = WdetJ*shp(i,intp) !Integral of filter kernel, G, 94559599516SKenneth E. Jansenc over the element 94659599516SKenneth E. Jansen 94759599516SKenneth E. Jansenc... Get G*|S|*S_{i,j}*WdetJ 94859599516SKenneth E. Jansen 94959599516SKenneth E. Jansen fresli(:,i,16) = S11 * strnrmi * shp(i,intp) * WdetJ 95059599516SKenneth E. Jansen fresli(:,i,17) = S22 * strnrmi * shp(i,intp) * WdetJ 95159599516SKenneth E. Jansen fresli(:,i,18) = S33 * strnrmi * shp(i,intp) * WdetJ 95259599516SKenneth E. Jansen fresli(:,i,19) = S12 * strnrmi * shp(i,intp) * WdetJ 95359599516SKenneth E. Jansen fresli(:,i,20) = S13 * strnrmi * shp(i,intp) * WdetJ 95459599516SKenneth E. Jansen fresli(:,i,21) = S23 * strnrmi * shp(i,intp) * WdetJ 95559599516SKenneth E. Jansen 95659599516SKenneth E. Jansen do j = 1, 22 ! Add contribution of each quad. point for each 95759599516SKenneth E. Jansenc element node 95859599516SKenneth E. Jansen fresl(:,i,j) = fresl(:,i,j) + fresli(:,i,j) 95959599516SKenneth E. Jansen enddo 96059599516SKenneth E. Jansen 96159599516SKenneth E. Jansen enddo !end loop over element nodes 96259599516SKenneth E. Jansen 96359599516SKenneth E. Jansen enddo !end of loop over integration points 96459599516SKenneth E. Jansen 96559599516SKenneth E. Jansen 96659599516SKenneth E. Jansen call local (hfres, fresl, ien, 24, 'scatter ') 96759599516SKenneth E. Jansen 96859599516SKenneth E. Jansen return 96959599516SKenneth E. Jansen end 97059599516SKenneth E. Jansen 97159599516SKenneth E. Jansen subroutine ediss (y, ac, shgl, 97259599516SKenneth E. Jansen & shp, iper, ilwork, 97359599516SKenneth E. Jansen & nsons, ifath, x, 97459599516SKenneth E. Jansen & iBC, BC, xavegt) 97559599516SKenneth E. Jansen 97659599516SKenneth E. Jansen 97759599516SKenneth E. Jansen use pvsQbi ! brings in NABI 97859599516SKenneth E. Jansen use stats ! 97959599516SKenneth E. Jansen use pointer_data ! brings in the pointers for the blocked arrays 98059599516SKenneth E. Jansen use local_mass 98159599516SKenneth E. Jansen use rlssave ! Use the resolved Leonard stresses at the nodes. 98259599516SKenneth E. Jansen use quadfilt ! This module gives us shglf(maxtp,nsd,maxsh,ngaussf), 98359599516SKenneth E. Jansenc shpf(maxtp,maxsh,ngaussf), and Qwtf(maxtp,ngaussf). 98459599516SKenneth E. Jansenc Shpf and shglf are the shape funciotns and their 98559599516SKenneth E. Jansenc gradient evaluated using the quadrature rule desired 98659599516SKenneth E. Jansenc for computing the dmod. Qwt contains the weights of the 98759599516SKenneth E. Jansenc quad. points. 98859599516SKenneth E. Jansen 98959599516SKenneth E. Jansen 99059599516SKenneth E. Jansen 99159599516SKenneth E. Jansen include "common.h" 99259599516SKenneth E. Jansen include "mpif.h" 99359599516SKenneth E. Jansen include "auxmpi.h" 99459599516SKenneth E. Jansen 99559599516SKenneth E. Jansen 99659599516SKenneth E. Jansen dimension y(nshg,ndof), ac(nshg,ndof), 99759599516SKenneth E. Jansen & ifath(nshg), nsons(nshg), 99859599516SKenneth E. Jansen & iper(nshg), ilwork(nlwork), 99959599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), shp(MAXTOP,maxsh,MAXQPT), 100059599516SKenneth E. Jansen & x(numnp,3), 100159599516SKenneth E. Jansen & qres(nshg,nsd*nsd), rmass(nshg), 100259599516SKenneth E. Jansen & iBC(nshg), BC(nshg,ndofBC), 100359599516SKenneth E. Jansen & cdelsq(nshg), vol(nshg), 100459599516SKenneth E. Jansen & stress(nshg,9), diss(nshg,3), 100559599516SKenneth E. Jansen & xave(nshg,12), xaveg(nfath,12), 100659599516SKenneth E. Jansen & xavegr(nfath,12), xavegt(nfath,12), 100759599516SKenneth E. Jansen & rnum(nfath), rden(nfath) 100859599516SKenneth E. Jansen 100959599516SKenneth E. Jansen 101059599516SKenneth E. Jansenc.... First let us obtain cdelsq at each node in the domain. 101159599516SKenneth E. Jansenc.... We use numNden which lives in the quadfilt module. 101259599516SKenneth E. Jansen 101359599516SKenneth E. Jansen rnum(ifath(:)) = numNden(:,1) 101459599516SKenneth E. Jansen rden(ifath(:)) = numNden(:,2) 101559599516SKenneth E. Jansen 101659599516SKenneth E. Jansenc if (myrank .eq. master) then 101759599516SKenneth E. Jansenc write(*,*) 'rnum25=', rnum(25), rden(25) 101859599516SKenneth E. Jansenc write(*,*) 'rnum26=', rnum(26), rden(26) 101959599516SKenneth E. Jansenc endif 102059599516SKenneth E. Jansen 102159599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2) + 1.d-09) 102259599516SKenneth E. Jansenc cdelsq(:) = zero ! Debugging 102359599516SKenneth E. Jansen 102459599516SKenneth E. Jansen if (istep .eq. 0) then 102559599516SKenneth E. Jansen xavegt = zero ! For averaging dissipations and SUPG stresses 102659599516SKenneth E. Jansen endif 102759599516SKenneth E. Jansen 102859599516SKenneth E. Jansen if (idiff==1 .or. idiff==3) then ! global reconstruction of qdiff 102959599516SKenneth E. Jansenc 103059599516SKenneth E. Jansenc loop over element blocks for the global reconstruction 103159599516SKenneth E. Jansenc of the diffusive flux vector, q, and lumped mass matrix, rmass 103259599516SKenneth E. Jansenc 103359599516SKenneth E. Jansen qres = zero 103459599516SKenneth E. Jansen rmass = zero 103559599516SKenneth E. Jansen 103659599516SKenneth E. Jansen do iblk = 1, nelblk 103759599516SKenneth E. Jansen iel = lcblk(1,iblk) 103859599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 103959599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 104059599516SKenneth E. Jansen iorder = lcblk(4,iblk) 104159599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 104259599516SKenneth E. Jansen nshl = lcblk(10,iblk) 104359599516SKenneth E. Jansen mattyp = lcblk(7,iblk) 104459599516SKenneth E. Jansen ndofl = lcblk(8,iblk) 104559599516SKenneth E. Jansen nsymdl = lcblk(9,iblk) 104659599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 104759599516SKenneth E. Jansen ngauss = nint(lcsyst) 104859599516SKenneth E. Jansenc 104959599516SKenneth E. Jansenc.... compute and assemble diffusive flux vector residual, qres, 105059599516SKenneth E. Jansenc and lumped mass matrix, rmass 105159599516SKenneth E. Jansen 105259599516SKenneth E. Jansen call AsIq (y, x, 105359599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:), 105459599516SKenneth E. Jansen & shgl(lcsyst,:,1:nshl,:), 105559599516SKenneth E. Jansen & mien(iblk)%p, mxmudmi(iblk)%p, 105659599516SKenneth E. Jansen & qres, rmass ) 105759599516SKenneth E. Jansen enddo 105859599516SKenneth E. Jansen 105959599516SKenneth E. Jansenc 106059599516SKenneth E. Jansenc.... form the diffusive flux approximation 106159599516SKenneth E. Jansenc 106259599516SKenneth E. Jansen call qpbc( rmass, qres, iBC, BC, iper, ilwork ) 106359599516SKenneth E. Jansenc 106459599516SKenneth E. Jansen endif 106559599516SKenneth E. Jansen 106659599516SKenneth E. Jansen 106759599516SKenneth E. Jansenc.... form the SUPG stresses well as dissipation due to eddy viscosity, 106859599516SKenneth E. Jansenc... and SUPG stabilization. 106959599516SKenneth E. Jansen 107059599516SKenneth E. Jansen 107159599516SKenneth E. Jansen stress = zero 107259599516SKenneth E. Jansen vol = zero 107359599516SKenneth E. Jansen diss = zero 107459599516SKenneth E. Jansen 107559599516SKenneth E. Jansen do iblk = 1,nelblk 107659599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 107759599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 107859599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 107959599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 108059599516SKenneth E. Jansen nenl = lcblk(5,iblk) 108159599516SKenneth E. Jansen nshl = lcblk(10,iblk) 108259599516SKenneth E. Jansen inum = iel + npro - 1 108359599516SKenneth E. Jansen 108459599516SKenneth E. Jansen ngauss = nint(lcsyst) 108559599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 108659599516SKenneth E. Jansen 108759599516SKenneth E. Jansen call SUPGstress (y, ac, x, qres, mien(iblk)%p, mxmudmi(iblk)%p, 108859599516SKenneth E. Jansen & cdelsq, shglf(lcsyst,:,1:nshl,:), 108959599516SKenneth E. Jansen & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf), 109059599516SKenneth E. Jansen & shgl(lcsyst,:,1:nshl,:), shp(lcsyst,1:nshl,:), 109159599516SKenneth E. Jansen & stress, diss, vol) 109259599516SKenneth E. Jansen 109359599516SKenneth E. Jansen enddo 109459599516SKenneth E. Jansen 109559599516SKenneth E. Jansen if(numpe>1) call commu (stress, ilwork, 9, 'in ') 109659599516SKenneth E. Jansen if(numpe>1) call commu (diss, ilwork, 3, 'in ') 109759599516SKenneth E. Jansen if(numpe>1) call commu (vol, ilwork, 1, 'in ') 109859599516SKenneth E. Jansen 109959599516SKenneth E. Jansenc 110059599516SKenneth E. Jansenc account for periodicity 110159599516SKenneth E. Jansenc 110259599516SKenneth E. Jansen do j = 1,nshg 110359599516SKenneth E. Jansen i = iper(j) 110459599516SKenneth E. Jansen if (i .ne. j) then 110559599516SKenneth E. Jansen stress(i,:) = stress(i,:) + stress(j,:) 110659599516SKenneth E. Jansen diss(i,:) = diss(i,:) + diss(j,:) 110759599516SKenneth E. Jansen vol(i) = vol(i) + vol(j) 110859599516SKenneth E. Jansen endif 110959599516SKenneth E. Jansen enddo 111059599516SKenneth E. Jansen 111159599516SKenneth E. Jansen do j = 1,nshg 111259599516SKenneth E. Jansen i = iper(j) 111359599516SKenneth E. Jansen if (i .ne. j) then 111459599516SKenneth E. Jansen stress(j,:) = stress(i,:) 111559599516SKenneth E. Jansen diss(j,:) = diss(i,:) 111659599516SKenneth E. Jansen vol(j) = vol(i) 111759599516SKenneth E. Jansen endif 111859599516SKenneth E. Jansen enddo 111959599516SKenneth E. Jansen 112059599516SKenneth E. Jansen if(numpe>1) call commu (stress, ilwork, 9, 'out ') 112159599516SKenneth E. Jansen if(numpe>1) call commu (diss, ilwork, 3, 'out ') 112259599516SKenneth E. Jansen if(numpe>1) call commu (vol, ilwork, 1, 'out ') 112359599516SKenneth E. Jansen 112459599516SKenneth E. Jansen vol = one / vol 112559599516SKenneth E. Jansen do i = 1, 9 112659599516SKenneth E. Jansen stress(:,i) = stress(:,i)*vol(:) 112759599516SKenneth E. Jansen enddo 112859599516SKenneth E. Jansen do i = 1, 3 112959599516SKenneth E. Jansen diss(:,i) = diss(:,i)*vol(:) 113059599516SKenneth E. Jansen enddo 113159599516SKenneth E. Jansen 113259599516SKenneth E. Jansenc---------- > Begin averaging dissipations and SUPG stress <-------------- 113359599516SKenneth E. Jansen 113459599516SKenneth E. Jansen do i = 1, 9 113559599516SKenneth E. Jansen xave(:,i) = stress(:,i) 113659599516SKenneth E. Jansen enddo 113759599516SKenneth E. Jansen xave(:,10) = diss(:,1) 113859599516SKenneth E. Jansen xave(:,11) = diss(:,2) 113959599516SKenneth E. Jansen xave(:,12) = diss(:,3) 114059599516SKenneth E. Jansen 114159599516SKenneth E. Jansenc zero on processor periodic nodes so that they will not be added twice 114259599516SKenneth E. Jansen do j = 1,numnp 114359599516SKenneth E. Jansen i = iper(j) 114459599516SKenneth E. Jansen if (i .ne. j) then 114559599516SKenneth E. Jansen xave(j,:) = zero 114659599516SKenneth E. Jansen endif 114759599516SKenneth E. Jansen enddo 114859599516SKenneth E. Jansen 114959599516SKenneth E. Jansen if (numpe.gt.1) then 115059599516SKenneth E. Jansen 115159599516SKenneth E. Jansen numtask = ilwork(1) 115259599516SKenneth E. Jansen itkbeg = 1 115359599516SKenneth E. Jansen 115459599516SKenneth E. Jansenc zero the nodes that are "solved" on the other processors 115559599516SKenneth E. Jansen do itask = 1, numtask 115659599516SKenneth E. Jansen 115759599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 115859599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 115959599516SKenneth E. Jansen 116059599516SKenneth E. Jansen if (iacc .eq. 0) then 116159599516SKenneth E. Jansen do is = 1,numseg 116259599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 116359599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 116459599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 116559599516SKenneth E. Jansen xave(isgbeg:isgend,:) = zero 116659599516SKenneth E. Jansen enddo 116759599516SKenneth E. Jansen endif 116859599516SKenneth E. Jansen 116959599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 117059599516SKenneth E. Jansen 117159599516SKenneth E. Jansen enddo 117259599516SKenneth E. Jansen 117359599516SKenneth E. Jansen endif 117459599516SKenneth E. Jansenc 117559599516SKenneth E. Jansen 117659599516SKenneth E. Jansen xaveg = zero 117759599516SKenneth E. Jansen do i = 1,nshg 117859599516SKenneth E. Jansen xaveg(ifath(i),:) = xaveg(ifath(i),:) + xave(i,:) 117959599516SKenneth E. Jansen enddo 118059599516SKenneth E. Jansen 118159599516SKenneth E. Jansen if(numpe .gt. 1)then 118259599516SKenneth E. Jansen call drvAllreduce(xaveg, xavegr,12*nfath) 118359599516SKenneth E. Jansen 118459599516SKenneth E. Jansen do m = 1, 12 118559599516SKenneth E. Jansen xavegr(:,m) = xavegr(:,m)/nsons(:) 118659599516SKenneth E. Jansen enddo 118759599516SKenneth E. Jansen 118859599516SKenneth E. Jansen if (myrank .eq. master) then 118959599516SKenneth E. Jansen write(*,*)'diss=', xavegt(14,11), xavegr(14,11) 119059599516SKenneth E. Jansen endif 119159599516SKenneth E. Jansen 119259599516SKenneth E. Jansen do m = 1, 12 119359599516SKenneth E. Jansen xavegt(:,m) = xavegt(:,m) + xavegr(:,m) 119459599516SKenneth E. Jansen enddo 119559599516SKenneth E. Jansen 119659599516SKenneth E. Jansen else 119759599516SKenneth E. Jansen 119859599516SKenneth E. Jansen do m = 1, 12 119959599516SKenneth E. Jansen xaveg(:,m) = xaveg(:,m)/nsons(:) 120059599516SKenneth E. Jansen enddo 120159599516SKenneth E. Jansen 120259599516SKenneth E. Jansen do m = 1, 12 120359599516SKenneth E. Jansen xavegt(:,m) = xavegt(:,m) + xaveg(:,m) 120459599516SKenneth E. Jansen enddo 120559599516SKenneth E. Jansen 120659599516SKenneth E. Jansen endif 120759599516SKenneth E. Jansen 120859599516SKenneth E. Jansen if (myrank .eq. master) then 120959599516SKenneth E. Jansen write(*,*)'diss=', xavegt(14,11), xavegr(14,11) 121059599516SKenneth E. Jansen endif 121159599516SKenneth E. Jansen 121259599516SKenneth E. Jansen if ( istep .eq. (nstep(1)-1) ) then 121359599516SKenneth E. Jansen if ( myrank .eq. master) then 121459599516SKenneth E. Jansen 121559599516SKenneth E. Jansen do i = 1, nfath 121659599516SKenneth E. Jansen write(376,*)xavegt(i,1),xavegt(i,2),xavegt(i,3) 121759599516SKenneth E. Jansen write(377,*)xavegt(i,4),xavegt(i,5),xavegt(i,6) 121859599516SKenneth E. Jansen write(378,*)xavegt(i,7),xavegt(i,8),xavegt(i,9) 121959599516SKenneth E. Jansen write(379,*)xavegt(i,10),xavegt(i,11),xavegt(i,12) 122059599516SKenneth E. Jansen enddo 122159599516SKenneth E. Jansen 122259599516SKenneth E. Jansen call flush(376) 122359599516SKenneth E. Jansen call flush(377) 122459599516SKenneth E. Jansen call flush(378) 122559599516SKenneth E. Jansen call flush(379) 122659599516SKenneth E. Jansen 122759599516SKenneth E. Jansen endif 122859599516SKenneth E. Jansen endif 122959599516SKenneth E. Jansen 123059599516SKenneth E. Jansen 123159599516SKenneth E. Jansen return 123259599516SKenneth E. Jansen 123359599516SKenneth E. Jansen end 123459599516SKenneth E. Jansen 123559599516SKenneth E. Jansen 123659599516SKenneth E. Jansen subroutine resSij (y, x, ien, hfres, shgl, shp, Qwtf) 123759599516SKenneth E. Jansen 123859599516SKenneth E. Jansen include "common.h" 123959599516SKenneth E. Jansen 124059599516SKenneth E. Jansen dimension y(nshg,5), hfres(nshg,24) 124159599516SKenneth E. Jansen dimension x(numnp,3), xl(npro,nenl,3) 124259599516SKenneth E. Jansen dimension ien(npro,nshl), yl(npro,nshl,5), 124359599516SKenneth E. Jansen & fresl(npro,nshl,24), WdetJ(npro), 124459599516SKenneth E. Jansen & u1(npro), u2(npro), 124559599516SKenneth E. Jansen & u3(npro), rho(npro), 124659599516SKenneth E. Jansen & S11(npro), S22(npro), 124759599516SKenneth E. Jansen & S33(npro), S12(npro), 124859599516SKenneth E. Jansen & S13(npro), S23(npro), 124959599516SKenneth E. Jansen & dxdxi(npro,nsd,nsd), dxidx(npro,nsd,nsd), 125059599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), shg(npro,nshl,nsd), 125159599516SKenneth E. Jansen & shp(nshl,ngauss), 125259599516SKenneth E. Jansen & fresli(npro,nshl,24), Qwtf(ngaussf), 125359599516SKenneth E. Jansen & strnrmi(npro) 125459599516SKenneth E. Jansen 125559599516SKenneth E. Jansen 125659599516SKenneth E. Jansen dimension tmp(npro) 125759599516SKenneth E. Jansen 125859599516SKenneth E. Jansen call local (y, yl, ien, 5, 'gather ') 125959599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 126059599516SKenneth E. Jansenc 126159599516SKenneth E. Jansen 126259599516SKenneth E. Jansen fresl = zero 126359599516SKenneth E. Jansen 126459599516SKenneth E. Jansenc 126559599516SKenneth E. Jansen do intp = 1, ngaussf ! Loop over quadrature points 126659599516SKenneth E. Jansen 126759599516SKenneth E. Jansenc calculate the metrics 126859599516SKenneth E. Jansenc 126959599516SKenneth E. Jansenc 127059599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 127159599516SKenneth E. Jansenc 127259599516SKenneth E. Jansenc.... compute the deformation gradient 127359599516SKenneth E. Jansenc 127459599516SKenneth E. Jansen dxdxi = zero 127559599516SKenneth E. Jansenc 127659599516SKenneth E. Jansen do n = 1, nenl 127759599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 127859599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 127959599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 128059599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 128159599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 128259599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 128359599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 128459599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 128559599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 128659599516SKenneth E. Jansen enddo 128759599516SKenneth E. Jansenc 128859599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 128959599516SKenneth E. Jansenc 129059599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 129159599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 129259599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 129359599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 129459599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 129559599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 129659599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 129759599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 129859599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 129959599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 130059599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 130159599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 130259599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 130359599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 130459599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 130559599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 130659599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 130759599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 130859599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 130959599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 131059599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 131159599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 131259599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 131359599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 131459599516SKenneth E. Jansenc 131559599516SKenneth E. Jansenc wght=Qwt(lcsyst,intp) ! may be different now 131659599516SKenneth E. Jansen wght=Qwtf(intp) 131759599516SKenneth E. Jansen WdetJ(:) = wght / tmp(:) 131859599516SKenneth E. Jansen 131959599516SKenneth E. Jansen 132059599516SKenneth E. Jansenc... compute the gradient of shape functions at the quad. point. 132159599516SKenneth E. Jansen 132259599516SKenneth E. Jansen 132359599516SKenneth E. Jansen do n = 1,nshl 132459599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 132559599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 132659599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 132759599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 132859599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 132959599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 133059599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 133159599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 133259599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 133359599516SKenneth E. Jansen enddo 133459599516SKenneth E. Jansen 133559599516SKenneth E. Jansen 133659599516SKenneth E. Jansenc... compute the velocities and the strain rate tensor at the quad. point 133759599516SKenneth E. Jansen 133859599516SKenneth E. Jansen 133959599516SKenneth E. Jansen u1 = zero 134059599516SKenneth E. Jansen u2 = zero 134159599516SKenneth E. Jansen u3 = zero 134259599516SKenneth E. Jansen S11 = zero 134359599516SKenneth E. Jansen S22 = zero 134459599516SKenneth E. Jansen S33 = zero 134559599516SKenneth E. Jansen S12 = zero 134659599516SKenneth E. Jansen S13 = zero 134759599516SKenneth E. Jansen S23 = zero 134859599516SKenneth E. Jansen do i=1,nshl 134959599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*yl(:,i,2) 135059599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*yl(:,i,3) 135159599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*yl(:,i,4) 135259599516SKenneth E. Jansen 135359599516SKenneth E. Jansen S11 = S11 + shg(:,i,1)*yl(:,i,2) 135459599516SKenneth E. Jansen S22 = S22 + shg(:,i,2)*yl(:,i,3) 135559599516SKenneth E. Jansen S33 = S33 + shg(:,i,3)*yl(:,i,4) 135659599516SKenneth E. Jansen 135759599516SKenneth E. Jansen S12 = S12 + shg(:,i,2)*yl(:,i,2) 135859599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,3) 135959599516SKenneth E. Jansen S13 = S13 + shg(:,i,3)*yl(:,i,2) 136059599516SKenneth E. Jansen & +shg(:,i,1)*yl(:,i,4) 136159599516SKenneth E. Jansen S23 = S23 + shg(:,i,3)*yl(:,i,3) 136259599516SKenneth E. Jansen & +shg(:,i,2)*yl(:,i,4) 136359599516SKenneth E. Jansen enddo 136459599516SKenneth E. Jansen S12 = pt5 * S12 136559599516SKenneth E. Jansen S13 = pt5 * S13 136659599516SKenneth E. Jansen S23 = pt5 * S23 136759599516SKenneth E. Jansen 136859599516SKenneth E. Jansenc... Get the strain rate norm at the quad pts 136959599516SKenneth E. Jansen 137059599516SKenneth E. Jansen strnrmi = sqrt( two*(S11**2 + S22**2 + S33**2) 137159599516SKenneth E. Jansen & + four*(S12**2 + S13**2 + S23**2) ) 137259599516SKenneth E. Jansen 137359599516SKenneth E. Jansen 137459599516SKenneth E. Jansenc... Loop over element nodes and multiply u_{i} and S_{i,j} by the 137559599516SKenneth E. Jansenc... hat kernel and the Jacobian over the current element evaluated at 137659599516SKenneth E. Jansenc... the current quad. point. 137759599516SKenneth E. Jansen 137859599516SKenneth E. Jansen do i = 1, nenl ! Loop over element nodes 137959599516SKenneth E. Jansen 138059599516SKenneth E. Jansen fresli(:,i,1) = WdetJ * u1 * shp(i,intp) !G * u1 * WdetJ 138159599516SKenneth E. Jansen fresli(:,i,2) = WdetJ * u2 * shp(i,intp) !G * u2 * WdetJ 138259599516SKenneth E. Jansen fresli(:,i,3) = WdetJ * u3 * shp(i,intp) !G * u3 * WdetJ 138359599516SKenneth E. Jansen 138459599516SKenneth E. Jansen fresli(:,i,4) = WdetJ * u1 * u1 * shp(i,intp) ! G*u1*u1*WdetJ 138559599516SKenneth E. Jansen fresli(:,i,5) = WdetJ * u2 * u2 * shp(i,intp) ! G*u2*u2*WdetJ 138659599516SKenneth E. Jansen fresli(:,i,6) = WdetJ * u3 * u3 * shp(i,intp) ! G*u3*u3*WdetJ 138759599516SKenneth E. Jansen fresli(:,i,7) = WdetJ * u1 * u2 * shp(i,intp) ! G*u1*u2*WdetJ 138859599516SKenneth E. Jansen fresli(:,i,8) = WdetJ * u1 * u3 * shp(i,intp) ! G*u1*u3*WdetJ 138959599516SKenneth E. Jansen fresli(:,i,9) = WdetJ * u2 * u3 * shp(i,intp) ! G*u2*u3*WdetJ 139059599516SKenneth E. Jansen 139159599516SKenneth E. Jansen fresli(:,i,10) = S11 * shp(i,intp) * WdetJ ! G*S_{1,1}*WdetJ 139259599516SKenneth E. Jansen fresli(:,i,11) = S22 * shp(i,intp) * WdetJ ! G*S_{2,2}*WdetJ 139359599516SKenneth E. Jansen fresli(:,i,12) = S33 * shp(i,intp) * WdetJ ! G*S_{3,3}*WdetJ 139459599516SKenneth E. Jansen fresli(:,i,13) = S12 * shp(i,intp) * WdetJ ! G*S_{1,1}*WdetJ 139559599516SKenneth E. Jansen fresli(:,i,14) = S13 * shp(i,intp) * WdetJ ! G*S_{1,3}*WdetJ 139659599516SKenneth E. Jansen fresli(:,i,15) = S23 * shp(i,intp) * WdetJ ! G*S_{2,3}*WdetJ 139759599516SKenneth E. Jansen 139859599516SKenneth E. Jansen 139959599516SKenneth E. Jansen fresli(:,i,16) = strnrmi*strnrmi*strnrmi*shp(i,intp)*WdetJ 140059599516SKenneth E. Jansen 140159599516SKenneth E. Jansen fresli(:,i,22) = WdetJ*shp(i,intp) !Integral of filter kernel, G, 140259599516SKenneth E. Jansenc over the element 140359599516SKenneth E. Jansen 140459599516SKenneth E. Jansenc... Get G*|S|*S_{i,j}*WdetJ 140559599516SKenneth E. Jansen 140659599516SKenneth E. Jansenc fresli(:,i,16) = S11 * strnrmi * shp(i,intp) * WdetJ 140759599516SKenneth E. Jansen fresli(:,i,17) = S22 * strnrmi * shp(i,intp) * WdetJ 140859599516SKenneth E. Jansen fresli(:,i,18) = S33 * strnrmi * shp(i,intp) * WdetJ 140959599516SKenneth E. Jansen fresli(:,i,19) = S12 * strnrmi * shp(i,intp) * WdetJ 141059599516SKenneth E. Jansen fresli(:,i,20) = S13 * strnrmi * shp(i,intp) * WdetJ 141159599516SKenneth E. Jansen fresli(:,i,21) = S23 * strnrmi * shp(i,intp) * WdetJ 141259599516SKenneth E. Jansen 141359599516SKenneth E. Jansen do j = 1, 22 ! Add contribution of each quad. point for each 141459599516SKenneth E. Jansenc element node 141559599516SKenneth E. Jansen fresl(:,i,j) = fresl(:,i,j) + fresli(:,i,j) 141659599516SKenneth E. Jansen enddo 141759599516SKenneth E. Jansen 141859599516SKenneth E. Jansen enddo !end loop over element nodes 141959599516SKenneth E. Jansen 142059599516SKenneth E. Jansen enddo !end of loop over integration points 142159599516SKenneth E. Jansen 142259599516SKenneth E. Jansen 142359599516SKenneth E. Jansen call local (hfres, fresl, ien, 24, 'scatter ') 142459599516SKenneth E. Jansen 142559599516SKenneth E. Jansen return 142659599516SKenneth E. Jansen end 142759599516SKenneth E. Jansen 142859599516SKenneth E. Jansen 142959599516SKenneth E. Jansen 143059599516SKenneth E. Jansen subroutine sparseCG (rhsorig, trx, lhsM, row, col, iper, 143159599516SKenneth E. Jansen & ilwork, iBC, BC) 143259599516SKenneth E. Jansenc 143359599516SKenneth E. Jansenc------------------------------------------------------------------------ 143459599516SKenneth E. Jansenc 143559599516SKenneth E. Jansenc This subroutine uses Conjugate Gradient, 143659599516SKenneth E. Jansenc to solve the system of equations. 143759599516SKenneth E. Jansenc 143859599516SKenneth E. Jansenc Farzin Shakib, Summer 1987. 143959599516SKenneth E. Jansenc------------------------------------------------------------------------ 144059599516SKenneth E. Jansenc 144159599516SKenneth E. Jansen include "common.h" 144259599516SKenneth E. Jansenc 144359599516SKenneth E. Jansen dimension rhsorig(nshg), trx(nshg) 144459599516SKenneth E. Jansenc 144559599516SKenneth E. Jansen dimension d(nshg), p(nshg), 144659599516SKenneth E. Jansen & q(nshg), ilwork(nlwork), 144759599516SKenneth E. Jansen & Dinv(nshg), rhs(nshg), 144859599516SKenneth E. Jansen & pp(nshg), 144959599516SKenneth E. Jansen & iBC(nshg), 145059599516SKenneth E. Jansen & BC(nshg) 145159599516SKenneth E. Jansen 145259599516SKenneth E. Jansen 145359599516SKenneth E. Jansen integer row(nshg*nnz), col(nshg+1) 145459599516SKenneth E. Jansen integer iBCdumb(nshg), iper(nshg) 145559599516SKenneth E. Jansen 145659599516SKenneth E. Jansen real*8 BCdumb(nshg,ndofBC) 145759599516SKenneth E. Jansen 145859599516SKenneth E. Jansen real*8 lhsM(nnz*nshg) 145959599516SKenneth E. Jansenc 146059599516SKenneth E. Jansen data nitercf / 100 / 146159599516SKenneth E. Jansenc 146259599516SKenneth E. Jansenc 146359599516SKenneth E. Jansen BCdumb = one 146459599516SKenneth E. Jansen iBCdumb = 1 146559599516SKenneth E. Jansenc 146659599516SKenneth E. Jansen rhs(:)=rhsorig(:) 146759599516SKenneth E. Jansenc 146859599516SKenneth E. Jansenc.... Calculate the inverse of the diagonal of the mass matrix 146959599516SKenneth E. Jansenc 147059599516SKenneth E. Jansenc call CFDinv (Dinv, emass) 147159599516SKenneth E. Jansenc 147259599516SKenneth E. Jansenc.... Left precondition the mass matrix and the RHS 147359599516SKenneth E. Jansenc 147459599516SKenneth E. Jansenc call CFPre (Dinv, emass, rhs) 147559599516SKenneth E. Jansenc 147659599516SKenneth E. Jansenc Initialize. We have a system Ax=b We have made A as 147759599516SKenneth E. Jansenc well conditionedand as we're willing to go. Since 147859599516SKenneth E. Jansenc we used left preconditioning (on the old A and old b), 147959599516SKenneth E. Jansenc we don't need to do any back-preconditioning later. 148059599516SKenneth E. Jansenc 148159599516SKenneth E. Jansen rr = 0 148259599516SKenneth E. Jansen do n = 1, nshg 148359599516SKenneth E. Jansen rr = rr + rhs(n)*rhs(n) 148459599516SKenneth E. Jansen enddo 148559599516SKenneth E. Jansenc 148659599516SKenneth E. Jansenc if parallel the above is only this processors part of the dot product. 148759599516SKenneth E. Jansenc get the total result 148859599516SKenneth E. Jansenc 148959599516SKenneth E. Jansen dotTot=zero 149059599516SKenneth E. Jansen call drvAllreduce(rr,dotTot,1) 149159599516SKenneth E. Jansen rr=dotTot 149259599516SKenneth E. Jansen rr0 = rr 149359599516SKenneth E. Jansenc 149459599516SKenneth E. Jansen trx(:) = zero ! x_{0}=0 149559599516SKenneth E. Jansenc ! r_{0}=b 149659599516SKenneth E. Jansenc 149759599516SKenneth E. Jansenc ! beta_{1}=0 149859599516SKenneth E. Jansen p(:) = rhs(:) ! p_{1}=r_{0}=b 149959599516SKenneth E. Jansenc 150059599516SKenneth E. Jansenc.... Iterate 150159599516SKenneth E. Jansenc 150259599516SKenneth E. Jansen do iter = 1, nitercf ! 15 ! nitercf 150359599516SKenneth E. Jansenc 150459599516SKenneth E. Jansenc.... calculate alpha 150559599516SKenneth E. Jansenc 150659599516SKenneth E. Jansen pp=p ! make a vector that we can copy masters onto slaves 150759599516SKenneth E. Jansen ! and thereby make ready for an accurate Ap product 150859599516SKenneth E. Jansen 1509*79f1763eSKenneth E. Jansen#ifdef HAVE_LESLIB 151059599516SKenneth E. Jansen call commOut(pp, ilwork, 1,iper,iBCdumb,BCdumb) !slaves= master 151159599516SKenneth E. Jansen 151259599516SKenneth E. Jansen call fLesSparseApSclr( col, row, lhsM, 151359599516SKenneth E. Jansen & pp, q, nshg, 151459599516SKenneth E. Jansen & nnz) 151559599516SKenneth E. Jansen 151659599516SKenneth E. Jansen call commIn(q, ilwork, 1,iper,iBC,BC) ! masters=masters+slaves 151759599516SKenneth E. Jansen ! slaves zeroed 1518*79f1763eSKenneth E. Jansen#else 1519*79f1763eSKenneth E. Jansen if(myrank.eq.0) write(*,*) 'need alt solver in filter.f' 1520*79f1763eSKenneth E. Jansen call error('filter ','noleslib',1) 1521*79f1763eSKenneth E. Jansen#endif 152259599516SKenneth E. Jansenc call CFAp (p, q) ! put Ap product in q 152359599516SKenneth E. Jansen 152459599516SKenneth E. Jansenc if(nump>1) call commu (q, ilwork, 1, 'in ') 152559599516SKenneth E. Jansen 152659599516SKenneth E. Jansenc do j = 1,nshg 152759599516SKenneth E. Jansenc i = iper(j) 152859599516SKenneth E. Jansenc if (i .ne. j) then 152959599516SKenneth E. Jansenc q(i) = q(i) + q(j) 153059599516SKenneth E. Jansenc endif 153159599516SKenneth E. Jansenc enddo 153259599516SKenneth E. Jansen 153359599516SKenneth E. Jansenc do j = 1,nshg 153459599516SKenneth E. Jansenc i = iper(j) 153559599516SKenneth E. Jansenc if (i .ne. j) then 153659599516SKenneth E. Jansenc q(j) = zero 153759599516SKenneth E. Jansenc endif 153859599516SKenneth E. Jansenc enddo 153959599516SKenneth E. Jansen 154059599516SKenneth E. Jansenc Need to zero off-processor slaves as well. 154159599516SKenneth E. Jansen 154259599516SKenneth E. Jansenc if (numpe.gt.1 .and. nsons(1).gt.1) then 154359599516SKenneth E. Jansen 154459599516SKenneth E. Jansenc numtask = ilwork(1) 154559599516SKenneth E. Jansenc itkbeg = 1 154659599516SKenneth E. Jansen 154759599516SKenneth E. Jansenc zero the nodes that are "solved" on the other processors 154859599516SKenneth E. Jansen 154959599516SKenneth E. Jansenc do itask = 1, numtask 155059599516SKenneth E. Jansen 155159599516SKenneth E. Jansenc iacc = ilwork (itkbeg + 2) 155259599516SKenneth E. Jansenc numseg = ilwork (itkbeg + 4) 155359599516SKenneth E. Jansen 155459599516SKenneth E. Jansenc if (iacc .eq. 0) then 155559599516SKenneth E. Jansenc do is = 1,numseg 155659599516SKenneth E. Jansenc isgbeg = ilwork (itkbeg + 3 + 2*is) 155759599516SKenneth E. Jansenc lenseg = ilwork (itkbeg + 4 + 2*is) 155859599516SKenneth E. Jansenc isgend = isgbeg + lenseg - 1 155959599516SKenneth E. Jansenc q(isgbeg:isgend) = zero 156059599516SKenneth E. Jansenc enddo 156159599516SKenneth E. Jansenc endif 156259599516SKenneth E. Jansen 156359599516SKenneth E. Jansenc itkbeg = itkbeg + 4 + 2*numseg 156459599516SKenneth E. Jansen 156559599516SKenneth E. Jansenc enddo 156659599516SKenneth E. Jansen 156759599516SKenneth E. Jansenc endif 156859599516SKenneth E. Jansen 156959599516SKenneth E. Jansen 157059599516SKenneth E. Jansen 157159599516SKenneth E. Jansen pap = 0 157259599516SKenneth E. Jansen do n = 1, nshg 157359599516SKenneth E. Jansen pap = pap + p(n) * q(n) 157459599516SKenneth E. Jansen enddo 157559599516SKenneth E. Jansenc 157659599516SKenneth E. Jansenc if parallel the above is only this processors part of the dot product. 157759599516SKenneth E. Jansenc get the total result 157859599516SKenneth E. Jansenc 157959599516SKenneth E. Jansen dotTot=zero 158059599516SKenneth E. Jansen call drvAllreduce(pap,dotTot,1) 158159599516SKenneth E. Jansen pap=dotTot 158259599516SKenneth E. Jansen alpha = rr / pap 158359599516SKenneth E. Jansenc 158459599516SKenneth E. Jansenc.... calculate the next guess 158559599516SKenneth E. Jansenc 158659599516SKenneth E. Jansen trx(:) = trx(:) + alpha * p(:) 158759599516SKenneth E. Jansenc 158859599516SKenneth E. Jansenc.... calculate the new residual 158959599516SKenneth E. Jansenc 159059599516SKenneth E. Jansenc 159159599516SKenneth E. Jansen rhs(:) = rhs(:) - alpha * q(:) 159259599516SKenneth E. Jansen tmp = rr 159359599516SKenneth E. Jansen rr = 0 159459599516SKenneth E. Jansen do n = 1, nshg 159559599516SKenneth E. Jansen rr = rr + rhs(n)*rhs(n) 159659599516SKenneth E. Jansen enddo 159759599516SKenneth E. Jansenc 159859599516SKenneth E. Jansenc if parallel the above is only this processors part of the dot product. 159959599516SKenneth E. Jansenc get the total result 160059599516SKenneth E. Jansenc 160159599516SKenneth E. Jansen dotTot=zero 160259599516SKenneth E. Jansen call drvAllreduce(rr,dotTot,1) 160359599516SKenneth E. Jansen rr=dotTot 160459599516SKenneth E. Jansenc 160559599516SKenneth E. Jansenc.... check for convergence 160659599516SKenneth E. Jansenc 160759599516SKenneth E. Jansen if(rr.lt.100.*epsM**2) goto 6000 160859599516SKenneth E. Jansenc 160959599516SKenneth E. Jansenc.... calculate a new search direction 161059599516SKenneth E. Jansenc 161159599516SKenneth E. Jansen beta = rr / tmp 161259599516SKenneth E. Jansen p(:) = rhs(:) + beta * p(:) 161359599516SKenneth E. Jansenc 161459599516SKenneth E. Jansenc.... end of iteration 161559599516SKenneth E. Jansenc 161659599516SKenneth E. Jansen enddo 161759599516SKenneth E. Jansenc 161859599516SKenneth E. Jansenc.... if converged 161959599516SKenneth E. Jansenc 162059599516SKenneth E. Jansen6000 continue 162159599516SKenneth E. Jansen 162259599516SKenneth E. Jansenc need a commu(out) on solution (TRX) to get slaves the correct solution AND 162359599516SKenneth E. Jansenc on processor slaves = on processor masters 162459599516SKenneth E. Jansen 162559599516SKenneth E. Jansen if(numpe>1) call commu (trx, ilwork, 1, 'out ') 162659599516SKenneth E. Jansen trx(:) = trx(iper(:)) 162759599516SKenneth E. Jansen 162859599516SKenneth E. Jansenc 162959599516SKenneth E. Jansen write(*,9000) iter, rr / rr0 163059599516SKenneth E. Jansenc write(16,9000) iter, rr / rr0 163159599516SKenneth E. Jansenc 163259599516SKenneth E. Jansenc.... return 163359599516SKenneth E. Jansenc 163459599516SKenneth E. Jansen return 163559599516SKenneth E. Jansen9000 format(20x,' number of iterations:', i10,/, 163659599516SKenneth E. Jansen & 20x,' residual reduction:', 2x,e10.2) 163759599516SKenneth E. Jansen end 163859599516SKenneth E. Jansen 163959599516SKenneth E. Jansen subroutine stdfdmc (y, shgl, shp, 164059599516SKenneth E. Jansen & iper, ilwork, 164159599516SKenneth E. Jansen & nsons, ifath, x) 164259599516SKenneth E. Jansen 164359599516SKenneth E. Jansen use pointer_data 164459599516SKenneth E. Jansen 164559599516SKenneth E. Jansen use quadfilt ! This module gives us shglf(maxtp,nsd,maxsh,ngaussf), 164659599516SKenneth E. Jansenc shpf(maxtp,maxsh,ngaussf), and Qwtf(maxtp,ngaussf). 164759599516SKenneth E. Jansenc Shpf and shglf are the shape funciotns and their 164859599516SKenneth E. Jansenc gradient evaluated using the quadrature rule desired 164959599516SKenneth E. Jansenc for computing the dmod. Qwt contains the weights of the 165059599516SKenneth E. Jansenc quad. points. 165159599516SKenneth E. Jansen 165259599516SKenneth E. Jansen 165359599516SKenneth E. Jansen 165459599516SKenneth E. Jansen include "common.h" 165559599516SKenneth E. Jansen include "mpif.h" 165659599516SKenneth E. Jansen include "auxmpi.h" 165759599516SKenneth E. Jansen 165859599516SKenneth E. Jansenc 165959599516SKenneth E. Jansen dimension fres(nshg,24), fwr(nshg), 166059599516SKenneth E. Jansen & strnrm(nshg), cdelsq(nshg), 166159599516SKenneth E. Jansen & cdelsq2(nshg), 166259599516SKenneth E. Jansen & xnum(nshg), xden(nshg), 166359599516SKenneth E. Jansen & xmij(nshg,6), xlij(nshg,6), 166459599516SKenneth E. Jansen & xnude(nfath,2), xnuder(nfath,2), 166559599516SKenneth E. Jansen & ynude(nfath,6), ynuder(nfath,6) 166659599516SKenneth E. Jansen dimension ui(nfath,3), snorm(nfath), 166759599516SKenneth E. Jansen & uir(nfath,3), snormr(nfath), 166859599516SKenneth E. Jansen & xm(nfath,6), xl(nfath,6), 166959599516SKenneth E. Jansen & xl1(nfath,6), xl2(nfath,6), 167059599516SKenneth E. Jansen & xl1r(nfath,6), xl2r(nfath,6), 167159599516SKenneth E. Jansen & xmr(nfath,6), xlr(nfath,6), 167259599516SKenneth E. Jansen & nsons(nshg), 167359599516SKenneth E. Jansen & strl(numel,ngauss) 167459599516SKenneth E. Jansen dimension y(nshg,5), yold(nshg,5), 167559599516SKenneth E. Jansen & ifath(nshg), iper(nshg), 167659599516SKenneth E. Jansen & ilwork(nlwork),! xmudmi(numel,ngauss), 167759599516SKenneth E. Jansen & x(numnp,3), 167859599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), shp(MAXTOP,maxsh,MAXQPT), 167959599516SKenneth E. Jansen & xnutf(nfath), xfac(nshg,5) 168059599516SKenneth E. Jansen 168159599516SKenneth E. Jansen character*10 cname 168259599516SKenneth E. Jansen character*30 fname1, fname2, fname3, fname4, fname5, fname6, 168359599516SKenneth E. Jansen & fname0 168459599516SKenneth E. Jansenc 168559599516SKenneth E. Jansenc 168659599516SKenneth E. Jansenc setup the weights for time averaging of cdelsq (now in quadfilt module) 168759599516SKenneth E. Jansenc 168859599516SKenneth E. Jansen denom=max(1.0d0*(lstep),one) 168959599516SKenneth E. Jansen if(dtavei.lt.0) then 169059599516SKenneth E. Jansen wcur=one/denom 169159599516SKenneth E. Jansen else 169259599516SKenneth E. Jansen wcur=dtavei 169359599516SKenneth E. Jansen endif 169459599516SKenneth E. Jansen whist=1.0-wcur 169559599516SKenneth E. Jansen 169659599516SKenneth E. Jansen if (istep .eq. 0) then 169759599516SKenneth E. Jansen xnd = zero 169859599516SKenneth E. Jansen xmodcomp = zero 169959599516SKenneth E. Jansen xmcomp = zero 170059599516SKenneth E. Jansen xlcomp = zero 170159599516SKenneth E. Jansen xl1comp = zero 170259599516SKenneth E. Jansen xl2comp = zero 170359599516SKenneth E. Jansen ucomp = zero 170459599516SKenneth E. Jansen scomp = zero 170559599516SKenneth E. Jansen endif 170659599516SKenneth E. Jansen 170759599516SKenneth E. Jansen 170859599516SKenneth E. Jansen fres = zero 170959599516SKenneth E. Jansen yold(:,1)=y(:,4) 171059599516SKenneth E. Jansen yold(:,2:4)=y(:,1:3) 171159599516SKenneth E. Jansenc 171259599516SKenneth E. Jansen 171359599516SKenneth E. Jansenc 171459599516SKenneth E. Jansenc hack in an interesting velocity field (uncomment to test dmod) 171559599516SKenneth E. Jansenc 171659599516SKenneth E. Jansenc yold(:,5) = 1.0 ! Debugging 171759599516SKenneth E. Jansenc yold(:,2) = 2.0*x(:,1) - 3.0*x(:,2) 171859599516SKenneth E. Jansenc yold(:,2) = 2.0 171959599516SKenneth E. Jansenc yold(:,3) = 3.0*x(:,1) + 4.0*x(:,2) 172059599516SKenneth E. Jansenc yold(:,3) = 3.0 172159599516SKenneth E. Jansenc yold(:,4) = 4.0*x(:,1) + x(:,2) + x(:,3) 172259599516SKenneth E. Jansenc yold(:,4) = 4.0 172359599516SKenneth E. Jansenc yold(:,1) = Rgas * yold(:,5) ! Necessary to make model suitable 172459599516SKenneth E. Jansenc suitable for the 172559599516SKenneth E. Jansen 172659599516SKenneth E. Jansen 172759599516SKenneth E. Jansen 172859599516SKenneth E. Jansen intrul=intg(1,itseq) 172959599516SKenneth E. Jansen intind=intpt(intrul) 173059599516SKenneth E. Jansen 173159599516SKenneth E. Jansen do iblk = 1,nelblk 173259599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 173359599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 173459599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 173559599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 173659599516SKenneth E. Jansen nenl = lcblk(5,iblk) 173759599516SKenneth E. Jansen nshl = lcblk(10,iblk) 173859599516SKenneth E. Jansen inum = iel + npro - 1 173959599516SKenneth E. Jansen 174059599516SKenneth E. Jansen ngauss = nint(lcsyst) 174159599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 174259599516SKenneth E. Jansen 174359599516SKenneth E. Jansen call asithf (yold, x, strl(iel:inum,:), mien(iblk)%p, fres, 174459599516SKenneth E. Jansen & shglf(lcsyst,:,1:nshl,:), 174559599516SKenneth E. Jansen & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 174659599516SKenneth E. Jansen 174759599516SKenneth E. Jansen enddo 174859599516SKenneth E. Jansenc 174959599516SKenneth E. Jansen 175059599516SKenneth E. Jansenc if (ngaussf .ne. ngauss) then 175159599516SKenneth E. Jansen do iblk = 1,nelblk 175259599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 175359599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 175459599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 175559599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 175659599516SKenneth E. Jansen nenl = lcblk(5,iblk) 175759599516SKenneth E. Jansen nshl = lcblk(10,iblk) 175859599516SKenneth E. Jansen inum = iel + npro - 1 175959599516SKenneth E. Jansen 176059599516SKenneth E. Jansen ngauss = nint(lcsyst) 176159599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 176259599516SKenneth E. Jansen 176359599516SKenneth E. Jansen if (ngaussf .ne. ngauss) then 176459599516SKenneth E. Jansen 176559599516SKenneth E. Jansen call getstrl (yold, x, mien(iblk)%p, 176659599516SKenneth E. Jansen & strl(iel:inum,:), shgl(lcsyst,:,1:nshl,:), 176759599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:)) 176859599516SKenneth E. Jansen 176959599516SKenneth E. Jansen endif 177059599516SKenneth E. Jansen 177159599516SKenneth E. Jansen enddo 177259599516SKenneth E. Jansenc endif 177359599516SKenneth E. Jansenc 177459599516SKenneth E. Jansenc 177559599516SKenneth E. JansenC must fix for abc and dynamic model 177659599516SKenneth E. Jansenc if(iabc==1) !are there any axisym bc's 177759599516SKenneth E. Jansenc & call rotabc(res, iBC, BC,nflow, 'in ') 177859599516SKenneth E. Jansenc 177959599516SKenneth E. Jansen if(numpe>1) call commu (fres, ilwork, 24, 'in ') 178059599516SKenneth E. Jansenc 178159599516SKenneth E. Jansenc account for periodicity in filtered variables 178259599516SKenneth E. Jansenc 178359599516SKenneth E. Jansen do j = 1,nshg 178459599516SKenneth E. Jansen i = iper(j) 178559599516SKenneth E. Jansen if (i .ne. j) then 178659599516SKenneth E. Jansen fres(i,:) = fres(i,:) + fres(j,:) 178759599516SKenneth E. Jansen endif 178859599516SKenneth E. Jansen enddo 178959599516SKenneth E. Jansen do j = 1,nshg 179059599516SKenneth E. Jansen i = iper(j) 179159599516SKenneth E. Jansen if (i .ne. j) then 179259599516SKenneth E. Jansen fres(j,:) = fres(i,:) 179359599516SKenneth E. Jansen endif 179459599516SKenneth E. Jansen enddo 179559599516SKenneth E. Jansen 179659599516SKenneth E. Jansen if(numpe>1) call commu (fres, ilwork, 24, 'out') 179759599516SKenneth E. Jansen 179859599516SKenneth E. Jansen fres(:,23) = one / fres(:,23) 179959599516SKenneth E. Jansen do j = 1,22 180059599516SKenneth E. Jansen fres(:,j) = fres(:,j) * fres(:,23) 180159599516SKenneth E. Jansen enddo 180259599516SKenneth E. Jansenc fres(:,24) = fres(:,24) * fres(:,23) 180359599516SKenneth E. Jansenc 180459599516SKenneth E. Jansenc.....at this point fres is really all of our filtered quantities 180559599516SKenneth E. Jansenc at the nodes 180659599516SKenneth E. Jansenc 180759599516SKenneth E. Jansen 180859599516SKenneth E. Jansen strnrm = sqrt( 180959599516SKenneth E. Jansen & two * (fres(:,10)**2 + fres(:,11)**2 + fres(:,12)**2) 181059599516SKenneth E. Jansen & + four * ( fres(:,13)**2 + fres(:,14)**2 + fres(:,15)**2 ) ) 181159599516SKenneth E. Jansen 181259599516SKenneth E. Jansen fwr = fwr1 * fres(:,22) * strnrm 181359599516SKenneth E. Jansen 181459599516SKenneth E. Jansen xmij(:,1) = -fwr 181559599516SKenneth E. Jansen & * fres(:,10) + fres(:,16) 181659599516SKenneth E. Jansen xmij(:,2) = -fwr 181759599516SKenneth E. Jansen & * fres(:,11) + fres(:,17) 181859599516SKenneth E. Jansen xmij(:,3) = -fwr 181959599516SKenneth E. Jansen & * fres(:,12) + fres(:,18) 182059599516SKenneth E. Jansen 182159599516SKenneth E. Jansen xmij(:,4) = -fwr * fres(:,13) + fres(:,19) 182259599516SKenneth E. Jansen xmij(:,5) = -fwr * fres(:,14) + fres(:,20) 182359599516SKenneth E. Jansen xmij(:,6) = -fwr * fres(:,15) + fres(:,21) 182459599516SKenneth E. Jansen 182559599516SKenneth E. Jansen fres(:,22) = one / fres(:,22) 182659599516SKenneth E. Jansen 182759599516SKenneth E. Jansen xlij(:,1) = fres(:,4) - fres(:,1) * fres(:,1) * fres(:,22) 182859599516SKenneth E. Jansen xlij(:,2) = fres(:,5) - fres(:,2) * fres(:,2) * fres(:,22) 182959599516SKenneth E. Jansen xlij(:,3) = fres(:,6) - fres(:,3) * fres(:,3) * fres(:,22) 183059599516SKenneth E. Jansen xlij(:,4) = fres(:,7) - fres(:,1) * fres(:,2) * fres(:,22) 183159599516SKenneth E. Jansen xlij(:,5) = fres(:,8) - fres(:,1) * fres(:,3) * fres(:,22) 183259599516SKenneth E. Jansen xlij(:,6) = fres(:,9) - fres(:,2) * fres(:,3) * fres(:,22) 183359599516SKenneth E. Jansen 183459599516SKenneth E. Jansen xnum = xlij(:,1) * xmij(:,1) + xlij(:,2) * xmij(:,2) 183559599516SKenneth E. Jansen & + xlij(:,3) * xmij(:,3) 183659599516SKenneth E. Jansen & + two * (xlij(:,4) * xmij(:,4) + xlij(:,5) * xmij(:,5) 183759599516SKenneth E. Jansen & + xlij(:,6) * xmij(:,6)) 183859599516SKenneth E. Jansen xden = xmij(:,1) * xmij(:,1) + xmij(:,2) * xmij(:,2) 183959599516SKenneth E. Jansen & + xmij(:,3) * xmij(:,3) 184059599516SKenneth E. Jansen & + two * (xmij(:,4) * xmij(:,4) + xmij(:,5) * xmij(:,5) 184159599516SKenneth E. Jansen & + xmij(:,6) * xmij(:,6)) 184259599516SKenneth E. Jansen xden = two * xden 184359599516SKenneth E. Jansen 184459599516SKenneth E. Jansenc... For collectection of statistics on dyn. model components 184559599516SKenneth E. Jansen 184659599516SKenneth E. Jansen xfac(:,1) = strnrm*strnrm*( fres(:,10)**2 + fres(:,11)**2 + 184759599516SKenneth E. Jansen & fres(:,12)**2 184859599516SKenneth E. Jansen & + two*( fres(:,13)**2 + fres(:,14)**2 + fres(:,15)**2 ) ) 184959599516SKenneth E. Jansen 185059599516SKenneth E. Jansen xfac(:,2) = strnrm*( xlij(:,1)*fres(:,10) + xlij(:,2)*fres(:,11) 185159599516SKenneth E. Jansen & + xlij(:,3)*fres(:,12) + 185259599516SKenneth E. Jansen & two*(xlij(:,4)*fres(:,13) + xlij(:,5)*fres(:,14) + 185359599516SKenneth E. Jansen & xlij(:,6)*fres(:,15)) ) 185459599516SKenneth E. Jansen 185559599516SKenneth E. Jansen xfac(:,3) = strnrm*( fres(:,10)*fres(:,16) + fres(:,11)*fres(:,17) 185659599516SKenneth E. Jansen & + fres(:,12)*fres(:,18) + 185759599516SKenneth E. Jansen & two*(fres(:,13)*fres(:,19) + fres(:,14)*fres(:,20) + 185859599516SKenneth E. Jansen & fres(:,15)*fres(:,21)) ) 185959599516SKenneth E. Jansen 186059599516SKenneth E. Jansen xfac(:,4) = xlij(:,1)*fres(:,16) + xlij(:,2)*fres(:,17) 186159599516SKenneth E. Jansen & + xlij(:,3)*fres(:,18) + 186259599516SKenneth E. Jansen & two*(xlij(:,4)*fres(:,19) + xlij(:,5)*fres(:,20) + 186359599516SKenneth E. Jansen & xlij(:,6)*fres(:,21)) 186459599516SKenneth E. Jansen 186559599516SKenneth E. Jansen xfac(:,5) = fres(:,16)*fres(:,16) + fres(:,17)*fres(:,17) 186659599516SKenneth E. Jansen & + fres(:,18)*fres(:,18) + 186759599516SKenneth E. Jansen & two*(fres(:,19)*fres(:,19) + fres(:,20)*fres(:,20) + 186859599516SKenneth E. Jansen & fres(:,21)*fres(:,21)) 186959599516SKenneth E. Jansen 187059599516SKenneth E. Jansenc zero on processor periodic nodes so that they will not be added twice 187159599516SKenneth E. Jansen do j = 1,numnp 187259599516SKenneth E. Jansen i = iper(j) 187359599516SKenneth E. Jansen if (i .ne. j) then 187459599516SKenneth E. Jansen xnum(j) = zero 187559599516SKenneth E. Jansen xden(j) = zero 187659599516SKenneth E. Jansen xfac(j,:) = zero 187759599516SKenneth E. Jansen xmij(j,:) = zero 187859599516SKenneth E. Jansen xlij(j,:) = zero 187959599516SKenneth E. Jansen fres(j,:) = zero 188059599516SKenneth E. Jansen strnrm(j) = zero 188159599516SKenneth E. Jansen endif 188259599516SKenneth E. Jansen enddo 188359599516SKenneth E. Jansen 188459599516SKenneth E. Jansen if (numpe.gt.1) then 188559599516SKenneth E. Jansen 188659599516SKenneth E. Jansen numtask = ilwork(1) 188759599516SKenneth E. Jansen itkbeg = 1 188859599516SKenneth E. Jansen 188959599516SKenneth E. Jansenc zero the nodes that are "solved" on the other processors 189059599516SKenneth E. Jansen do itask = 1, numtask 189159599516SKenneth E. Jansen 189259599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 189359599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 189459599516SKenneth E. Jansen 189559599516SKenneth E. Jansen if (iacc .eq. 0) then 189659599516SKenneth E. Jansen do is = 1,numseg 189759599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 189859599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 189959599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 190059599516SKenneth E. Jansen xnum(isgbeg:isgend) = zero 190159599516SKenneth E. Jansen xden(isgbeg:isgend) = zero 190259599516SKenneth E. Jansen strnrm(isgbeg:isgend) = zero 190359599516SKenneth E. Jansen xfac(isgbeg:isgend,:) = zero 190459599516SKenneth E. Jansen xmij(isgbeg:isgend,:) = zero 190559599516SKenneth E. Jansen xlij(isgbeg:isgend,:) = zero 190659599516SKenneth E. Jansen fres(isgbeg:isgend,:) = zero 190759599516SKenneth E. Jansen enddo 190859599516SKenneth E. Jansen endif 190959599516SKenneth E. Jansen 191059599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 191159599516SKenneth E. Jansen 191259599516SKenneth E. Jansen enddo 191359599516SKenneth E. Jansen 191459599516SKenneth E. Jansen endif 191559599516SKenneth E. Jansenc 191659599516SKenneth E. Jansenc Description of arrays. Each processor has an array of length equal 191759599516SKenneth E. Jansenc to the total number of fathers times 2 xnude(nfathers,2). One to collect 191859599516SKenneth E. Jansenc the numerator and one to collect the denominator. There is also an array 191959599516SKenneth E. Jansenc of length nshg on each processor which tells the father number of each 192059599516SKenneth E. Jansenc on processor node, ifath(nnshg). Finally, there is an arry of length 192159599516SKenneth E. Jansenc nfathers to tell the total (on all processors combined) number of sons 192259599516SKenneth E. Jansenc for each father. 192359599516SKenneth E. Jansenc 192459599516SKenneth E. Jansenc Now loop over nodes and accumlate the numerator and the denominator 192559599516SKenneth E. Jansenc to the father nodes. Only on processor addition at this point. 192659599516SKenneth E. Jansenc Note that serrogate fathers are collect some for the case where some 192759599516SKenneth E. Jansenc sons are on another processor 192859599516SKenneth E. Jansenc 192959599516SKenneth E. Jansen xnude = zero 193059599516SKenneth E. Jansen ynude = zero 193159599516SKenneth E. Jansen xm = zero 193259599516SKenneth E. Jansen xl = zero 193359599516SKenneth E. Jansen xl1 = zero 193459599516SKenneth E. Jansen xl2 = zero 193559599516SKenneth E. Jansen ui = zero 193659599516SKenneth E. Jansen snorm = zero 193759599516SKenneth E. Jansen 193859599516SKenneth E. Jansen do i = 1,nshg 193959599516SKenneth E. Jansen xnude(ifath(i),1) = xnude(ifath(i),1) + xnum(i) 194059599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + xden(i) 194159599516SKenneth E. Jansen 194259599516SKenneth E. Jansen ynude(ifath(i),1) = ynude(ifath(i),1) + xfac(i,1) 194359599516SKenneth E. Jansen ynude(ifath(i),2) = ynude(ifath(i),2) + xfac(i,2) 194459599516SKenneth E. Jansen ynude(ifath(i),3) = ynude(ifath(i),3) + xfac(i,3) 194559599516SKenneth E. Jansen ynude(ifath(i),4) = ynude(ifath(i),4) + xfac(i,4) 194659599516SKenneth E. Jansen ynude(ifath(i),5) = ynude(ifath(i),5) + xfac(i,5) 194759599516SKenneth E. Jansen 194859599516SKenneth E. Jansen xm(ifath(i),1) = xm(ifath(i),1) + xmij(i,1) 194959599516SKenneth E. Jansen xm(ifath(i),2) = xm(ifath(i),2) + xmij(i,2) 195059599516SKenneth E. Jansen xm(ifath(i),3) = xm(ifath(i),3) + xmij(i,3) 195159599516SKenneth E. Jansen xm(ifath(i),4) = xm(ifath(i),4) + xmij(i,4) 195259599516SKenneth E. Jansen xm(ifath(i),5) = xm(ifath(i),5) + xmij(i,5) 195359599516SKenneth E. Jansen xm(ifath(i),6) = xm(ifath(i),6) + xmij(i,6) 195459599516SKenneth E. Jansen 195559599516SKenneth E. Jansen xl(ifath(i),1) = xl(ifath(i),1) + xlij(i,1) 195659599516SKenneth E. Jansen xl(ifath(i),2) = xl(ifath(i),2) + xlij(i,2) 195759599516SKenneth E. Jansen xl(ifath(i),3) = xl(ifath(i),3) + xlij(i,3) 195859599516SKenneth E. Jansen xl(ifath(i),4) = xl(ifath(i),4) + xlij(i,4) 195959599516SKenneth E. Jansen xl(ifath(i),5) = xl(ifath(i),5) + xlij(i,5) 196059599516SKenneth E. Jansen xl(ifath(i),6) = xl(ifath(i),6) + xlij(i,6) 196159599516SKenneth E. Jansen 196259599516SKenneth E. Jansen xl1(ifath(i),1) = xl1(ifath(i),1) + fres(i,4) 196359599516SKenneth E. Jansen xl1(ifath(i),2) = xl1(ifath(i),2) + fres(i,5) 196459599516SKenneth E. Jansen xl1(ifath(i),3) = xl1(ifath(i),3) + fres(i,6) 196559599516SKenneth E. Jansen xl1(ifath(i),4) = xl1(ifath(i),4) + fres(i,7) 196659599516SKenneth E. Jansen xl1(ifath(i),5) = xl1(ifath(i),5) + fres(i,8) 196759599516SKenneth E. Jansen xl1(ifath(i),6) = xl1(ifath(i),6) + fres(i,9) 196859599516SKenneth E. Jansen 196959599516SKenneth E. Jansen xl2(ifath(i),1) = xl2(ifath(i),1) + fres(i,1)*fres(i,1) 197059599516SKenneth E. Jansen xl2(ifath(i),2) = xl2(ifath(i),2) + fres(i,2)*fres(i,2) 197159599516SKenneth E. Jansen xl2(ifath(i),3) = xl2(ifath(i),3) + fres(i,3)*fres(i,3) 197259599516SKenneth E. Jansen xl2(ifath(i),4) = xl2(ifath(i),4) + fres(i,1)*fres(i,2) 197359599516SKenneth E. Jansen xl2(ifath(i),5) = xl2(ifath(i),5) + fres(i,1)*fres(i,3) 197459599516SKenneth E. Jansen xl2(ifath(i),6) = xl2(ifath(i),6) + fres(i,2)*fres(i,3) 197559599516SKenneth E. Jansen 197659599516SKenneth E. Jansen ui(ifath(i),1) = ui(ifath(i),1) + fres(i,1) 197759599516SKenneth E. Jansen ui(ifath(i),2) = ui(ifath(i),2) + fres(i,2) 197859599516SKenneth E. Jansen ui(ifath(i),3) = ui(ifath(i),3) + fres(i,3) 197959599516SKenneth E. Jansen 198059599516SKenneth E. Jansen snorm(ifath(i)) = snorm(ifath(i)) + strnrm(i) 198159599516SKenneth E. Jansen 198259599516SKenneth E. Jansen enddo 198359599516SKenneth E. Jansen 198459599516SKenneth E. Jansenc 198559599516SKenneth E. Jansenc Now the true fathers and serrogates combine results and update 198659599516SKenneth E. Jansenc each other. 198759599516SKenneth E. Jansenc 198859599516SKenneth E. Jansen if(numpe .gt. 1)then 198959599516SKenneth E. Jansen call drvAllreduce(xnude, xnuder,2*nfath) 199059599516SKenneth E. Jansen call drvAllreduce(ynude, ynuder,6*nfath) 199159599516SKenneth E. Jansen call drvAllreduce(xm, xmr,6*nfath) 199259599516SKenneth E. Jansen call drvAllreduce(xl, xlr,6*nfath) 199359599516SKenneth E. Jansen call drvAllreduce(xl1, xl1r,6*nfath) 199459599516SKenneth E. Jansen call drvAllreduce(xl2, xl2r,6*nfath) 199559599516SKenneth E. Jansen call drvAllreduce(ui, uir,3*nfath) 199659599516SKenneth E. Jansen call drvAllreduce(snorm, snormr,nfath) 199759599516SKenneth E. Jansen 199859599516SKenneth E. Jansen do i = 1, nfath 199959599516SKenneth E. Jansen ynuder(i,6) = ( ynuder(i,4) - fwr1*ynuder(i,2) ) / 200059599516SKenneth E. Jansen & ( two*ynuder(i,5) - four*fwr1*ynuder(i,3) 200159599516SKenneth E. Jansen & + two*fwr1*fwr1*ynuder(i,1) ) 200259599516SKenneth E. Jansen enddo 200359599516SKenneth E. Jansen 200459599516SKenneth E. Jansen cdelsq2(:) = ynuder(ifath(:),6) ! For comparison w/ cdelsq 200559599516SKenneth E. Jansenc 200659599516SKenneth E. Jansenc xnude is the sum of the sons for each father on this processor 200759599516SKenneth E. Jansenc 200859599516SKenneth E. Jansenc xnuder is the sum of the sons for each father on all processor combined 200959599516SKenneth E. Jansenc (the same as if we had not partitioned the mesh for each processor) 201059599516SKenneth E. Jansenc 201159599516SKenneth E. Jansenc For each father we have precomputed the number of sons (including 201259599516SKenneth E. Jansenc the sons off processor). 201359599516SKenneth E. Jansenc 201459599516SKenneth E. Jansenc Now divide by number of sons to get the average (not really necessary 201559599516SKenneth E. Jansenc for dynamic model since ratio will cancel nsons at each father) 201659599516SKenneth E. Jansenc 201759599516SKenneth E. Jansen xnuder(:,1) = xnuder(:,1) / nsons(:) 201859599516SKenneth E. Jansen xnuder(:,2) = xnuder(:,2) / nsons(:) 201959599516SKenneth E. Jansen 202059599516SKenneth E. Jansen do m = 1, 5 202159599516SKenneth E. Jansen ynuder(:,m) = ynuder(:,m)/nsons(:) 202259599516SKenneth E. Jansen enddo 202359599516SKenneth E. Jansen do m = 1,6 202459599516SKenneth E. Jansen xmr(:,m) = xmr(:,m)/nsons(:) 202559599516SKenneth E. Jansen xlr(:,m) = xlr(:,m)/nsons(:) 202659599516SKenneth E. Jansen xl1r(:,m) = xl1r(:,m)/nsons(:) 202759599516SKenneth E. Jansen xl2r(:,m) = xl2r(:,m)/nsons(:) 202859599516SKenneth E. Jansen enddo 202959599516SKenneth E. Jansen 203059599516SKenneth E. Jansen uir(:,1) = uir(:,1)/nsons(:) 203159599516SKenneth E. Jansen uir(:,2) = uir(:,2)/nsons(:) 203259599516SKenneth E. Jansen uir(:,3) = uir(:,3)/nsons(:) 203359599516SKenneth E. Jansen 203459599516SKenneth E. Jansen snormr(:) = snormr(:)/nsons(:) 203559599516SKenneth E. Jansenc 203659599516SKenneth E. Jansencc the next line is c \Delta^2 203759599516SKenneth E. Jansencc 203859599516SKenneth E. Jansencc xnuder(:,1) = xnuder(:,1) / (xnuder(:,2) + 1.d-09) 203959599516SKenneth E. Jansencc do i = 1,nshg 204059599516SKenneth E. Jansencc cdelsq(i) = xnuder(ifath(i),1) 204159599516SKenneth E. Jansencc enddo 204259599516SKenneth E. Jansen 204359599516SKenneth E. Jansen numNden(:,1) = whist*numNden(:,1)+wcur*xnuder(ifath(:),1) 204459599516SKenneth E. Jansen numNden(:,2) = whist*numNden(:,2)+wcur*xnuder(ifath(:),2) 204559599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2) + 1.d-09) 204659599516SKenneth E. Jansen 204759599516SKenneth E. Jansenc cdelsq(:) = xnuder(ifath(:),1)/(xnuder(ifath(:),2)+1.d-09) 204859599516SKenneth E. Jansen 204959599516SKenneth E. Jansen xnd(:,1) = xnd(:,1) + xnuder(:,1) 205059599516SKenneth E. Jansen xnd(:,2) = xnd(:,2) + xnuder(:,2) 205159599516SKenneth E. Jansen 205259599516SKenneth E. Jansen xmodcomp(:,1) = xmodcomp(:,1)+ynuder(:,1) 205359599516SKenneth E. Jansen xmodcomp(:,2) = xmodcomp(:,2)+ynuder(:,2) 205459599516SKenneth E. Jansen xmodcomp(:,3) = xmodcomp(:,3)+ynuder(:,3) 205559599516SKenneth E. Jansen xmodcomp(:,4) = xmodcomp(:,4)+ynuder(:,4) 205659599516SKenneth E. Jansen xmodcomp(:,5) = xmodcomp(:,5)+ynuder(:,5) 205759599516SKenneth E. Jansen 205859599516SKenneth E. Jansen xmcomp(:,:) = xmcomp(:,:)+xmr(:,:) 205959599516SKenneth E. Jansen xlcomp(:,:) = xlcomp(:,:)+xlr(:,:) 206059599516SKenneth E. Jansen 206159599516SKenneth E. Jansen xl1comp(:,:) = xl1comp(:,:)+xl1r(:,:) 206259599516SKenneth E. Jansen xl2comp(:,:) = xl2comp(:,:)+xl2r(:,:) 206359599516SKenneth E. Jansen 206459599516SKenneth E. Jansen ucomp(:,:) = ucomp(:,:)+uir(:,:) 206559599516SKenneth E. Jansen u1 = uir(32,1) 206659599516SKenneth E. Jansen scomp(:) = scomp(:)+snormr(:) 206759599516SKenneth E. Jansen 206859599516SKenneth E. Jansen else 206959599516SKenneth E. Jansen 207059599516SKenneth E. Jansen xnude(:,1) = xnude(:,1)/nsons(:) 207159599516SKenneth E. Jansen xnude(:,2) = xnude(:,2)/nsons(:) 207259599516SKenneth E. Jansen 207359599516SKenneth E. Jansen do m = 1, 5 207459599516SKenneth E. Jansen ynude(:,m) = ynude(:,m)/nsons(:) 207559599516SKenneth E. Jansen enddo 207659599516SKenneth E. Jansen do m = 1,6 207759599516SKenneth E. Jansen xm(:,m) = xm(:,m)/nsons(:) 207859599516SKenneth E. Jansen xl(:,m) = xl(:,m)/nsons(:) 207959599516SKenneth E. Jansen xl1(:,m) = xl1(:,m)/nsons(:) 208059599516SKenneth E. Jansen xl2(:,m) = xl2(:,m)/nsons(:) 208159599516SKenneth E. Jansen enddo 208259599516SKenneth E. Jansen 208359599516SKenneth E. Jansen ui(:,1) = ui(:,1)/nsons(:) 208459599516SKenneth E. Jansen ui(:,2) = ui(:,2)/nsons(:) 208559599516SKenneth E. Jansen ui(:,3) = ui(:,3)/nsons(:) 208659599516SKenneth E. Jansen 208759599516SKenneth E. Jansen snorm(:) = snorm(:)/nsons(:) 208859599516SKenneth E. Jansen 208959599516SKenneth E. Jansenc 209059599516SKenneth E. Jansenc the next line is c \Delta^2, not nu_T but we want to save the 209159599516SKenneth E. Jansenc memory 209259599516SKenneth E. Jansenc 209359599516SKenneth E. Jansen 209459599516SKenneth E. Jansencc xnude(:,1) = xnude(:,1) / (xnude(:,2) + 1.d-09) 209559599516SKenneth E. Jansencc do i = 1,nshg 209659599516SKenneth E. Jansencc cdelsq(i) = xnude(ifath(i),1) 209759599516SKenneth E. Jansencc enddo 209859599516SKenneth E. Jansencc endif 209959599516SKenneth E. Jansen 210059599516SKenneth E. Jansen do i = 1, nfath 210159599516SKenneth E. Jansen ynude(i,6) = ( ynude(i,4) - fwr1*ynude(i,2) ) / 210259599516SKenneth E. Jansen & ( two*ynude(i,5) - four*fwr1*ynude(i,3) 210359599516SKenneth E. Jansen & + fwr1*fwr1*ynude(i,1) ) 210459599516SKenneth E. Jansen enddo 210559599516SKenneth E. Jansen 210659599516SKenneth E. Jansen numNden(:,1) = whist*numNden(:,1)+wcur*xnude(ifath(:),1) 210759599516SKenneth E. Jansen numNden(:,2) = whist*numNden(:,2)+wcur*xnude(ifath(:),2) 210859599516SKenneth E. Jansen 210959599516SKenneth E. Jansen xnd(:,1) = xnd(:,1)+xnude(:,1) 211059599516SKenneth E. Jansen xnd(:,2) = xnd(:,2)+xnude(:,2) 211159599516SKenneth E. Jansen 211259599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2) + 1.d-09) 211359599516SKenneth E. Jansen 211459599516SKenneth E. Jansenc cdelsq(:) = xnude(ifath(:),1)/(xnude(ifath(:),2))!+1.d-09) 211559599516SKenneth E. Jansen 211659599516SKenneth E. Jansen 211759599516SKenneth E. Jansen cdelsq2(:) = ynude(ifath(:),6) ! For comparison w/ cdelsq 211859599516SKenneth E. Jansen 211959599516SKenneth E. Jansen xmodcomp(:,1) = xmodcomp(:,1)+ynude(:,1) 212059599516SKenneth E. Jansen xmodcomp(:,2) = xmodcomp(:,2)+ynude(:,2) 212159599516SKenneth E. Jansen xmodcomp(:,3) = xmodcomp(:,3)+ynude(:,3) 212259599516SKenneth E. Jansen xmodcomp(:,4) = xmodcomp(:,4)+ynude(:,4) 212359599516SKenneth E. Jansen xmodcomp(:,5) = xmodcomp(:,5)+ynude(:,5) 212459599516SKenneth E. Jansen 212559599516SKenneth E. Jansen xmcomp(:,:) = xmcomp(:,:)+xm(:,:) 212659599516SKenneth E. Jansen xlcomp(:,:) = xlcomp(:,:)+xl(:,:) 212759599516SKenneth E. Jansen 212859599516SKenneth E. Jansen xl1comp(:,:) = xl1comp(:,:)+xl1(:,:) 212959599516SKenneth E. Jansen xl2comp(:,:) = xl2comp(:,:)+xl2(:,:) 213059599516SKenneth E. Jansen 213159599516SKenneth E. Jansen ucomp(:,:) = ucomp(:,:)+ui(:,:) 213259599516SKenneth E. Jansen scomp(:) = scomp(:)+snorm(:) 213359599516SKenneth E. Jansen 213459599516SKenneth E. Jansen endif 213559599516SKenneth E. Jansen 213659599516SKenneth E. Jansenc do i = 1, nfath 213759599516SKenneth E. Jansenc xmodcomp(i,:) = xmodcomp(i,:)/nsons(i) 213859599516SKenneth E. Jansenc xmcomp(i,:) = xmcomp(i,:)/nsons(i) 213959599516SKenneth E. Jansenc xlcomp(i,:) = xlcomp(i,:)/nsons(i) 214059599516SKenneth E. Jansenc xl2comp(i,:) = xl2comp(i,:)/nsons(i) 214159599516SKenneth E. Jansenc xl1comp(i,:) = xl1comp(i,:)/nsons(i) 214259599516SKenneth E. Jansenc xnd(i,:) = xnd(i,:)/nsons(i) 214359599516SKenneth E. Jansenc scomp(i) = scomp(i)/nsons(i) 214459599516SKenneth E. Jansenc ucomp(i,:) = ucomp(i,:)/nsons(i) 214559599516SKenneth E. Jansenc enddo 214659599516SKenneth E. Jansen 214759599516SKenneth E. Jansen if (myrank .eq. master) then 214859599516SKenneth E. Jansen write(*,*)'istep, nstep=', istep, nstep(1) 214959599516SKenneth E. Jansen endif 215059599516SKenneth E. Jansen 215159599516SKenneth E. Jansen if ( istep .eq. (nstep(1)-1) ) then 215259599516SKenneth E. Jansen if ( myrank .eq. master) then 215359599516SKenneth E. Jansen 215459599516SKenneth E. Jansen do i = 1, nfath 215559599516SKenneth E. Jansen write(365,*)xmodcomp(i,1),xmodcomp(i,2),xmodcomp(i,3), 215659599516SKenneth E. Jansen & xmodcomp(i,4),xmodcomp(i,5) 215759599516SKenneth E. Jansen 215859599516SKenneth E. Jansen write(366,*)xmcomp(i,1),xmcomp(i,2),xmcomp(i,3) 215959599516SKenneth E. Jansen write(367,*)xmcomp(i,4),xmcomp(i,5),xmcomp(i,6) 216059599516SKenneth E. Jansen 216159599516SKenneth E. Jansen write(368,*)xlcomp(i,1),xlcomp(i,2),xlcomp(i,3) 216259599516SKenneth E. Jansen write(369,*)xlcomp(i,4),xlcomp(i,5),xlcomp(i,6) 216359599516SKenneth E. Jansen 216459599516SKenneth E. Jansen write(370,*)xl1comp(i,1),xl1comp(i,2),xl1comp(i,3) 216559599516SKenneth E. Jansen write(371,*)xl1comp(i,4),xl1comp(i,5),xl1comp(i,6) 216659599516SKenneth E. Jansen 216759599516SKenneth E. Jansen write(372,*)xl2comp(i,1),xl2comp(i,2),xl2comp(i,3) 216859599516SKenneth E. Jansen write(373,*)xl2comp(i,4),xl2comp(i,5),xl2comp(i,6) 216959599516SKenneth E. Jansen 217059599516SKenneth E. Jansen write(374,*)xnd(i,1),xnd(i,2),scomp(i) 217159599516SKenneth E. Jansen write(375,*)ucomp(i,1),ucomp(i,2),ucomp(i,3) 217259599516SKenneth E. Jansen enddo 217359599516SKenneth E. Jansen 217459599516SKenneth E. Jansen call flush(365) 217559599516SKenneth E. Jansen call flush(366) 217659599516SKenneth E. Jansen call flush(367) 217759599516SKenneth E. Jansen call flush(368) 217859599516SKenneth E. Jansen call flush(369) 217959599516SKenneth E. Jansen call flush(370) 218059599516SKenneth E. Jansen call flush(371) 218159599516SKenneth E. Jansen call flush(372) 218259599516SKenneth E. Jansen call flush(373) 218359599516SKenneth E. Jansen call flush(374) 218459599516SKenneth E. Jansen call flush(375) 218559599516SKenneth E. Jansen 218659599516SKenneth E. Jansenc close(852) 218759599516SKenneth E. Jansenc close(853) 218859599516SKenneth E. Jansenc close(854) 218959599516SKenneth E. Jansen 219059599516SKenneth E. Jansen endif 219159599516SKenneth E. Jansen endif 219259599516SKenneth E. Jansen 219359599516SKenneth E. Jansen if (myrank .eq. master) then 219459599516SKenneth E. Jansen write(*,*)'uit uic=', ucomp(32,1),u1 219559599516SKenneth E. Jansen endif 219659599516SKenneth E. Jansen 219759599516SKenneth E. Jansen 555 format(e14.7,4(2x,e14.7)) 219859599516SKenneth E. Jansen 556 format(e14.7,5(2x,e14.7)) 219959599516SKenneth E. Jansen 220059599516SKenneth E. Jansen 220159599516SKenneth E. Jansen 220259599516SKenneth E. Jansen 220359599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 220459599516SKenneth E. Jansen tmp1 = MINVAL(cdelsq) 220559599516SKenneth E. Jansen tmp2 = MAXVAL(cdelsq) 220659599516SKenneth E. Jansen if(numpe>1) then 220759599516SKenneth E. Jansen call MPI_REDUCE (tmp1, tmp3, 1,MPI_DOUBLE_PRECISION, 220859599516SKenneth E. Jansen & MPI_MIN, master, MPI_COMM_WORLD, ierr) 220959599516SKenneth E. Jansen call MPI_REDUCE (tmp2, tmp4, 1, MPI_DOUBLE_PRECISION, 221059599516SKenneth E. Jansen & MPI_MAX, master, MPI_COMM_WORLD, ierr) 221159599516SKenneth E. Jansen tmp1=tmp3 221259599516SKenneth E. Jansen tmp2=tmp4 221359599516SKenneth E. Jansen endif 221459599516SKenneth E. Jansen if (myrank .EQ. master) then !print CDelta^2 range 221559599516SKenneth E. Jansen write(34,*)lstep,tmp1,tmp2 221659599516SKenneth E. Jansen call flush(34) 221759599516SKenneth E. Jansen endif 221859599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 221959599516SKenneth E. Jansen 222059599516SKenneth E. Jansen if (myrank .eq. master) then 222159599516SKenneth E. Jansen write(*,*) 'cdelsq=', cdelsq(1),cdelsq(2) 222259599516SKenneth E. Jansen write(*,*) 'cdelsq=', cdelsq2(1),cdelsq2(2) 222359599516SKenneth E. Jansen write(22,*) lstep, cdelsq(1) 222459599516SKenneth E. Jansen call flush(22) 222559599516SKenneth E. Jansen endif 222659599516SKenneth E. Jansen 222759599516SKenneth E. Jansen do iblk = 1,nelblk 222859599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 222959599516SKenneth E. Jansen iel = lcblk(1,iblk) 223059599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 223159599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 223259599516SKenneth E. Jansen inum = iel + npro - 1 223359599516SKenneth E. Jansen 223459599516SKenneth E. Jansen ngauss = nint(lcsyst) 223559599516SKenneth E. Jansen 223659599516SKenneth E. Jansen call scatnu (mien(iblk)%p, strl(iel:inum,:), 223759599516SKenneth E. Jansen & mxmudmi(iblk)%p,cdelsq,shp(lcsyst,1:nshl,:)) 223859599516SKenneth E. Jansen enddo 223959599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 224059599516SKenneth E. Jansenc$$$ tmp1 = MINVAL(xmudmi) 224159599516SKenneth E. Jansenc$$$ tmp2 = MAXVAL(xmudmi) 224259599516SKenneth E. Jansenc$$$ if(numpe>1) then 224359599516SKenneth E. Jansenc$$$ call MPI_REDUCE (tmp1, tmp3, 1, MPI_DOUBLE_PRECISION, 224459599516SKenneth E. Jansenc$$$ & MPI_MIN, master, MPI_COMM_WORLD, ierr) 224559599516SKenneth E. Jansenc$$$ call MPI_REDUCE (tmp2, tmp4, 1, MPI_DOUBLE_PRECISION, 224659599516SKenneth E. Jansenc$$$ & MPI_MAX, master, MPI_COMM_WORLD, ierr) 224759599516SKenneth E. Jansenc$$$ tmp1=tmp3 224859599516SKenneth E. Jansenc$$$ tmp2=tmp4 224959599516SKenneth E. Jansenc$$$ endif 225059599516SKenneth E. Jansenc$$$ if (myrank .EQ. master) then 225159599516SKenneth E. Jansenc$$$ write(35,*) lstep,tmp1,tmp2 225259599516SKenneth E. Jansenc$$$ call flush(35) 225359599516SKenneth E. Jansenc$$$ endif 225459599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 225559599516SKenneth E. Jansen 225659599516SKenneth E. Jansenc 225759599516SKenneth E. Jansenc if flag set, write a restart file with info (reuse xmij's memory) 225859599516SKenneth E. Jansenc 225959599516SKenneth E. Jansen if(irs.eq.11) then 226059599516SKenneth E. Jansen lstep=999 226159599516SKenneth E. Jansen xmij(:,1)=xnum(:) 226259599516SKenneth E. Jansen xmij(:,2)=xden(:) 226359599516SKenneth E. Jansen xmij(:,3)=cdelsq(:) 226459599516SKenneth E. Jansen xmij(:,5)=xlij(:,4) !leave M_{12} in 4 and put L_{12} here 226559599516SKenneth E. Jansen call restar('out ',xmij,xlij) !also dump all of L_{ij} in ac 226659599516SKenneth E. Jansen stop 226759599516SKenneth E. Jansen endif 226859599516SKenneth E. Jansenc 226959599516SKenneth E. Jansenc local clipping moved to scatnu with the creation of mxmudmi pointers 227059599516SKenneth E. Jansenc 227159599516SKenneth E. Jansenc$$$ rmu=datmat(1,2,1) 227259599516SKenneth E. Jansenc$$$ xmudmi=min(xmudmi,1000.0*rmu) !don't let it get larger than 1000 mu 227359599516SKenneth E. Jansenc$$$ xmudmi=max(xmudmi, -rmu) ! don't let (xmudmi + mu) < 0 227459599516SKenneth E. Jansenc stop !uncomment to test dmod 227559599516SKenneth E. Jansenc 227659599516SKenneth E. Jansen 227759599516SKenneth E. Jansen 227859599516SKenneth E. Jansenc write out the nodal values of xnut (estimate since we don't calc strain 227959599516SKenneth E. Jansenc there and must use the filtered strain). 228059599516SKenneth E. Jansenc 228159599516SKenneth E. Jansen 228259599516SKenneth E. Jansen if ((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) then 228359599516SKenneth E. Jansenc 228459599516SKenneth E. Jansenc collect the average strain into xnude(2) 228559599516SKenneth E. Jansenc 228659599516SKenneth E. Jansen xnude(:,2) = zero 228759599516SKenneth E. Jansen do i = 1,numnp 228859599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + strnrm(i) 228959599516SKenneth E. Jansen enddo 229059599516SKenneth E. Jansen 229159599516SKenneth E. Jansen if(numpe .gt. 1) then 229259599516SKenneth E. Jansen call drvAllreduce(xnude(:,2), xnuder(:,2),nfath) 229359599516SKenneth E. Jansen else 229459599516SKenneth E. Jansen xnuder=xnude 229559599516SKenneth E. Jansen endif 229659599516SKenneth E. Jansenc 229759599516SKenneth E. Jansenc nut= cdelsq * |S| 229859599516SKenneth E. Jansenc 229959599516SKenneth E. Jansen xnutf=xnuder(:,1)*xnuder(:,2)/nsons(:) 230059599516SKenneth E. Jansenc 230159599516SKenneth E. Jansenc collect the x and y coords into xnude 230259599516SKenneth E. Jansenc 230359599516SKenneth E. Jansen xnude = zero 230459599516SKenneth E. Jansen do i = 1,numnp 230559599516SKenneth E. Jansen xnude(ifath(i),1) = xnude(ifath(i),1) + x(i,1) 230659599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + x(i,2) 230759599516SKenneth E. Jansen enddo 230859599516SKenneth E. Jansen 230959599516SKenneth E. Jansen if(numpe .gt. 1) 231059599516SKenneth E. Jansen & call drvAllreduce(xnude, xnuder,2*nfath) 231159599516SKenneth E. Jansen xnuder(:,1)=xnuder(:,1)/nsons(:) 231259599516SKenneth E. Jansen xnuder(:,2)=xnuder(:,2)/nsons(:) 231359599516SKenneth E. Jansenc 231459599516SKenneth E. Jansenc xnude is the sum of the sons for each father on this processor 231559599516SKenneth E. Jansenc 231659599516SKenneth E. Jansen if((myrank.eq.master)) then 231759599516SKenneth E. Jansen do i=1,nfath ! cdelsq * |S| 231859599516SKenneth E. Jansen write(444,*) xnuder(i,1),xnuder(i,2),xnutf(i) 231959599516SKenneth E. Jansen enddo 232059599516SKenneth E. Jansen call flush(444) 232159599516SKenneth E. Jansen endif 232259599516SKenneth E. Jansen endif 232359599516SKenneth E. Jansen 232459599516SKenneth E. Jansen return 232559599516SKenneth E. Jansen end 232659599516SKenneth E. Jansen subroutine widefdmc (y, shgl, shp, 232759599516SKenneth E. Jansen & iper, ilwork, 232859599516SKenneth E. Jansen & nsons, ifath, x) 232959599516SKenneth E. Jansen 233059599516SKenneth E. Jansen use pointer_data 233159599516SKenneth E. Jansen 233259599516SKenneth E. Jansen use quadfilt ! This module gives us shglf(maxtp,nsd,maxsh,ngaussf), 233359599516SKenneth E. Jansenc shpf(maxtp,maxsh,ngaussf), and Qwtf(maxtp,ngaussf). 233459599516SKenneth E. Jansenc Shpf and shglf are the shape funciotns and their 233559599516SKenneth E. Jansenc gradient evaluated using the quadrature rule desired 233659599516SKenneth E. Jansenc for computing the dmod. Qwtf contains the weights of the 233759599516SKenneth E. Jansenc quad. points. 233859599516SKenneth E. Jansen 233959599516SKenneth E. Jansen include "common.h" 234059599516SKenneth E. Jansen include "mpif.h" 234159599516SKenneth E. Jansen include "auxmpi.h" 234259599516SKenneth E. Jansen 234359599516SKenneth E. Jansenc 234459599516SKenneth E. Jansen dimension fres(nshg,33), fwr(nshg), 234559599516SKenneth E. Jansen & strnrm(nshg), cdelsq(nshg), 234659599516SKenneth E. Jansen & cdelsq2(nshg), 234759599516SKenneth E. Jansen & xnum(nshg), xden(nshg), 234859599516SKenneth E. Jansen & xmij(nshg,6), xlij(nshg,6), 234959599516SKenneth E. Jansen & xnude(nfath,2), xnuder(nfath,2), 235059599516SKenneth E. Jansen & ynude(nfath,6), ynuder(nfath,6), 235159599516SKenneth E. Jansen & ui(nfath,3), snorm(nfath), 235259599516SKenneth E. Jansen & uir(nfath,3), snormr(nfath) 235359599516SKenneth E. Jansen dimension xm(nfath,6), xl(nfath,6), 235459599516SKenneth E. Jansen & xl1(nfath,6), xl2(nfath,6), 235559599516SKenneth E. Jansen & xl1r(nfath,6), xl2r(nfath,6), 235659599516SKenneth E. Jansen & xmr(nfath,6), xlr(nfath,6), 235759599516SKenneth E. Jansen & nsons(nshg), 235859599516SKenneth E. Jansen & strl(numel,ngauss), 235959599516SKenneth E. Jansen & y(nshg,5), yold(nshg,5), 236059599516SKenneth E. Jansen & ifath(nshg), iper(nshg), 236159599516SKenneth E. Jansen & ilwork(nlwork), 236259599516SKenneth E. Jansen & x(numnp,3) 236359599516SKenneth E. Jansen dimension shgl(MAXTOP,nsd,maxsh,MAXQPT), shp(MAXTOP,maxsh,MAXQPT), 236459599516SKenneth E. Jansen & xnutf(nfath), 236559599516SKenneth E. Jansen & hfres(nshg,22), 236659599516SKenneth E. Jansen & xfac(nshg,5) 236759599516SKenneth E. Jansen 236859599516SKenneth E. Jansen character*10 cname 236959599516SKenneth E. Jansen character*30 fname1, fname2, fname3, fname4, fname5, fname6 237059599516SKenneth E. Jansenc 237159599516SKenneth E. Jansen 237259599516SKenneth E. Jansenc 237359599516SKenneth E. Jansenc 237459599516SKenneth E. Jansenc setup the weights for time averaging of cdelsq (now in quadfilt module) 237559599516SKenneth E. Jansenc 237659599516SKenneth E. Jansen 237759599516SKenneth E. Jansen denom=max(1.0d0*(lstep),one) 237859599516SKenneth E. Jansen if(dtavei.lt.0) then 237959599516SKenneth E. Jansen wcur=one/denom 238059599516SKenneth E. Jansen else 238159599516SKenneth E. Jansen wcur=dtavei 238259599516SKenneth E. Jansen endif 238359599516SKenneth E. Jansen whist=1.0-wcur 238459599516SKenneth E. Jansen 238559599516SKenneth E. Jansen if (myrank .eq. master) then 238659599516SKenneth E. Jansen write(*,*)'istep=', istep 238759599516SKenneth E. Jansen endif 238859599516SKenneth E. Jansen 238959599516SKenneth E. Jansen if (istep .eq. 0) then 239059599516SKenneth E. Jansen xnd = zero 239159599516SKenneth E. Jansen xmodcomp = zero 239259599516SKenneth E. Jansen xmcomp = zero 239359599516SKenneth E. Jansen xlcomp = zero 239459599516SKenneth E. Jansen xl1comp = zero 239559599516SKenneth E. Jansen xl2comp = zero 239659599516SKenneth E. Jansen ucomp = zero 239759599516SKenneth E. Jansen scomp = zero 239859599516SKenneth E. Jansen endif 239959599516SKenneth E. Jansen 240059599516SKenneth E. Jansen 240159599516SKenneth E. Jansen fres = zero 240259599516SKenneth E. Jansen hfres = zero 240359599516SKenneth E. Jansen 240459599516SKenneth E. Jansen yold(:,1)=y(:,4) 240559599516SKenneth E. Jansen yold(:,2:4)=y(:,1:3) 240659599516SKenneth E. Jansen 240759599516SKenneth E. Jansenc 240859599516SKenneth E. Jansenc hack in an interesting velocity field (uncomment to test dmod) 240959599516SKenneth E. Jansenc 241059599516SKenneth E. Jansenc yold(:,5) = 1.0 ! Debugging 241159599516SKenneth E. Jansenc yold(:,2) = 2.0*x(:,1) - 3.0*x(:,2) 241259599516SKenneth E. Jansenc yold(:,3) = 3.0*x(:,1) + 4.0*x(:,2) 241359599516SKenneth E. Jansenc yold(:,4) = 4.0*x(:,1) + x(:,2) + x(:,3) 241459599516SKenneth E. Jansenc yold(:,1) = Rgas * yold(:,5) ! Necessary to make model suitable 241559599516SKenneth E. Jansenc suitable for the 241659599516SKenneth E. Jansen 241759599516SKenneth E. Jansen do iblk = 1,nelblk 241859599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 241959599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 242059599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 242159599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 242259599516SKenneth E. Jansen nenl = lcblk(5,iblk) 242359599516SKenneth E. Jansen nshl = lcblk(10,iblk) 242459599516SKenneth E. Jansen inum = iel + npro - 1 242559599516SKenneth E. Jansen 242659599516SKenneth E. Jansen ngauss = nint(lcsyst) 242759599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 242859599516SKenneth E. Jansen 242959599516SKenneth E. Jansenc call hfilterBB (yold, x, mien(iblk)%p, hfres, 243059599516SKenneth E. Jansenc & shglf(lcsyst,:,1:nshl,:), 243159599516SKenneth E. Jansenc & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 243259599516SKenneth E. Jansen 243359599516SKenneth E. Jansen call hfilterCC (yold, x, mien(iblk)%p, hfres, 243459599516SKenneth E. Jansen & shglf(lcsyst,:,1:nshl,:), 243559599516SKenneth E. Jansen & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 243659599516SKenneth E. Jansen 243759599516SKenneth E. Jansen enddo 243859599516SKenneth E. Jansen 243959599516SKenneth E. Jansen if(numpe>1) call commu (hfres, ilwork, 22, 'in ') 244059599516SKenneth E. Jansenc 244159599516SKenneth E. Jansenc... account for periodicity in filtered variables 244259599516SKenneth E. Jansenc 244359599516SKenneth E. Jansen do j = 1,nshg ! Add on-processor slave contribution to masters 244459599516SKenneth E. Jansen i = iper(j) 244559599516SKenneth E. Jansen if (i .ne. j) then 244659599516SKenneth E. Jansen hfres(i,:) = hfres(i,:) + hfres(j,:) 244759599516SKenneth E. Jansen endif 244859599516SKenneth E. Jansen enddo 244959599516SKenneth E. Jansen do j = 1,nshg ! Set on-processor slaves to be the same as masters 245059599516SKenneth E. Jansen i = iper(j) 245159599516SKenneth E. Jansen if (i .ne. j) then 245259599516SKenneth E. Jansen hfres(j,:) = hfres(i,:) 245359599516SKenneth E. Jansen endif 245459599516SKenneth E. Jansen enddo 245559599516SKenneth E. Jansen 245659599516SKenneth E. Jansenc... Set off-processor slaves to be the same as their masters 245759599516SKenneth E. Jansen 245859599516SKenneth E. Jansen if(numpe>1) call commu (hfres, ilwork, 22, 'out') 245959599516SKenneth E. Jansen 246059599516SKenneth E. Jansen 246159599516SKenneth E. Jansen hfres(:,16) = one / hfres(:,16) ! one/(volume filter kernel) 246259599516SKenneth E. Jansen 246359599516SKenneth E. Jansen do j = 1, 15 246459599516SKenneth E. Jansen hfres(:,j) = hfres(:,j) * hfres(:,16) 246559599516SKenneth E. Jansen enddo 246659599516SKenneth E. Jansen do j = 17, 22 246759599516SKenneth E. Jansen hfres(:,j) = hfres(:,j) * hfres(:,16) 246859599516SKenneth E. Jansen enddo 246959599516SKenneth E. Jansen 247059599516SKenneth E. Jansenc... For debugging 247159599516SKenneth E. Jansen 247259599516SKenneth E. Jansenc hfres(:,1) = 2.0*x(:,1) - 3.0*x(:,2) 247359599516SKenneth E. Jansenc hfres(:,2) = 3.0*x(:,1) + 4.0*x(:,2) 247459599516SKenneth E. Jansenc hfres(:,3) = 4.0*x(:,1) + x(:,2) + x(:,3) 247559599516SKenneth E. Jansen 247659599516SKenneth E. Jansenc... Done w/ h-filtering. Begin 2h-filtering. 247759599516SKenneth E. Jansen 247859599516SKenneth E. Jansen do iblk = 1,nelblk 247959599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 248059599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 248159599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 248259599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 248359599516SKenneth E. Jansen nenl = lcblk(5,iblk) 248459599516SKenneth E. Jansen nshl = lcblk(10,iblk) 248559599516SKenneth E. Jansen inum = iel + npro - 1 248659599516SKenneth E. Jansen 248759599516SKenneth E. Jansen ngauss = nint(lcsyst) 248859599516SKenneth E. Jansen ngaussf = nintf(lcsyst) 248959599516SKenneth E. Jansen 249059599516SKenneth E. Jansen call twohfilterBB (yold, x, strl(iel:inum,:), mien(iblk)%p, 249159599516SKenneth E. Jansen & fres, hfres, shglf(lcsyst,:,1:nshl,:), 249259599516SKenneth E. Jansen & shpf(lcsyst,1:nshl,:),Qwtf(lcsyst,1:ngaussf)) 249359599516SKenneth E. Jansen 249459599516SKenneth E. Jansen enddo 249559599516SKenneth E. Jansenc 249659599516SKenneth E. Jansen 249759599516SKenneth E. Jansen 249859599516SKenneth E. Jansen if(numpe>1) call commu (fres, ilwork, 33, 'in ') 249959599516SKenneth E. Jansenc 250059599516SKenneth E. Jansenc account for periodicity in filtered variables 250159599516SKenneth E. Jansenc 250259599516SKenneth E. Jansen do j = 1,nshg 250359599516SKenneth E. Jansen i = iper(j) 250459599516SKenneth E. Jansen if (i .ne. j) then 250559599516SKenneth E. Jansen fres(i,:) = fres(i,:) + fres(j,:) 250659599516SKenneth E. Jansen endif 250759599516SKenneth E. Jansen enddo 250859599516SKenneth E. Jansen 250959599516SKenneth E. Jansen do j = 1,nshg 251059599516SKenneth E. Jansen i = iper(j) 251159599516SKenneth E. Jansen if (i .ne. j) then 251259599516SKenneth E. Jansen fres(j,:) = fres(i,:) 251359599516SKenneth E. Jansen endif 251459599516SKenneth E. Jansen enddo 251559599516SKenneth E. Jansen 251659599516SKenneth E. Jansen if(numpe>1)then 251759599516SKenneth E. Jansen call commu (fres, ilwork, 33, 'out') 251859599516SKenneth E. Jansen endif 251959599516SKenneth E. Jansen 252059599516SKenneth E. Jansen fres(:,22) = one / fres(:,22) 252159599516SKenneth E. Jansen do j = 1,21 252259599516SKenneth E. Jansen fres(:,j) = fres(:,j) * fres(:,22) 252359599516SKenneth E. Jansen enddo 252459599516SKenneth E. Jansen do j = 23,33 252559599516SKenneth E. Jansen fres(:,j) = fres(:,j) * fres(:,22) 252659599516SKenneth E. Jansen enddo 252759599516SKenneth E. Jansen 252859599516SKenneth E. Jansen 252959599516SKenneth E. Jansen do iblk = 1,nelblk 253059599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 253159599516SKenneth E. Jansen iel = lcblk(1,iblk) !Element number where this block begins 253259599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 253359599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 253459599516SKenneth E. Jansen nenl = lcblk(5,iblk) 253559599516SKenneth E. Jansen nshl = lcblk(10,iblk) 253659599516SKenneth E. Jansen inum = iel + npro - 1 253759599516SKenneth E. Jansen 253859599516SKenneth E. Jansen ngauss = nint(lcsyst) 253959599516SKenneth E. Jansen 254059599516SKenneth E. Jansen call getstrl (yold, x, mien(iblk)%p, 254159599516SKenneth E. Jansen & strl(iel:inum,:), shgl(lcsyst,:,1:nshl,:), 254259599516SKenneth E. Jansen & shp(lcsyst,1:nshl,:)) 254359599516SKenneth E. Jansen 254459599516SKenneth E. Jansen enddo 254559599516SKenneth E. Jansen 254659599516SKenneth E. Jansenc 254759599516SKenneth E. Jansenc... Obtain the hat-tilde strain rate norm at the nodes 254859599516SKenneth E. Jansenc 254959599516SKenneth E. Jansen 255059599516SKenneth E. Jansen strnrm = sqrt( 255159599516SKenneth E. Jansen & two * (fres(:,10)**2 + fres(:,11)**2 + fres(:,12)**2) 255259599516SKenneth E. Jansen & + four * ( fres(:,13)**2 + fres(:,14)**2 + fres(:,15)**2 ) ) 255359599516SKenneth E. Jansen 255459599516SKenneth E. Jansen fwr = fwr1 * strnrm 255559599516SKenneth E. Jansen 255659599516SKenneth E. Jansen xmij(:,1) = -fwr 255759599516SKenneth E. Jansen & * fres(:,10) + fres(:,16) 255859599516SKenneth E. Jansen xmij(:,2) = -fwr 255959599516SKenneth E. Jansen & * fres(:,11) + fres(:,17) 256059599516SKenneth E. Jansen xmij(:,3) = -fwr 256159599516SKenneth E. Jansen & * fres(:,12) + fres(:,18) 256259599516SKenneth E. Jansen 256359599516SKenneth E. Jansen xmij(:,4) = -fwr * fres(:,13) + fres(:,19) 256459599516SKenneth E. Jansen xmij(:,5) = -fwr * fres(:,14) + fres(:,20) 256559599516SKenneth E. Jansen xmij(:,6) = -fwr * fres(:,15) + fres(:,21) 256659599516SKenneth E. Jansen 256759599516SKenneth E. Jansen 256859599516SKenneth E. Jansen xlij(:,1) = fres(:,4) - fres(:,1) * fres(:,1) 256959599516SKenneth E. Jansen xlij(:,2) = fres(:,5) - fres(:,2) * fres(:,2) 257059599516SKenneth E. Jansen xlij(:,3) = fres(:,6) - fres(:,3) * fres(:,3) 257159599516SKenneth E. Jansen xlij(:,4) = fres(:,7) - fres(:,1) * fres(:,2) 257259599516SKenneth E. Jansen xlij(:,5) = fres(:,8) - fres(:,1) * fres(:,3) 257359599516SKenneth E. Jansen xlij(:,6) = fres(:,9) - fres(:,2) * fres(:,3) 257459599516SKenneth E. Jansen 257559599516SKenneth E. Jansen xnum = xlij(:,1) * xmij(:,1) + xlij(:,2) * xmij(:,2) 257659599516SKenneth E. Jansen & + xlij(:,3) * xmij(:,3) 257759599516SKenneth E. Jansen & + two * (xlij(:,4) * xmij(:,4) + xlij(:,5) * xmij(:,5) 257859599516SKenneth E. Jansen & + xlij(:,6) * xmij(:,6)) 257959599516SKenneth E. Jansen xden = xmij(:,1) * xmij(:,1) + xmij(:,2) * xmij(:,2) 258059599516SKenneth E. Jansen & + xmij(:,3) * xmij(:,3) 258159599516SKenneth E. Jansen & + two * (xmij(:,4) * xmij(:,4) + xmij(:,5) * xmij(:,5) 258259599516SKenneth E. Jansen & + xmij(:,6) * xmij(:,6)) 258359599516SKenneth E. Jansen xden = two * xden 258459599516SKenneth E. Jansen 258559599516SKenneth E. Jansenc... For collectection of statistics on dyn. model components 258659599516SKenneth E. Jansen 258759599516SKenneth E. Jansen xfac(:,1) = strnrm*strnrm*( fres(:,10)**2 + fres(:,11)**2 + 258859599516SKenneth E. Jansen & fres(:,12)**2 258959599516SKenneth E. Jansen & + two*( fres(:,13)**2 + fres(:,14)**2 + fres(:,15)**2 ) ) 259059599516SKenneth E. Jansen 259159599516SKenneth E. Jansen xfac(:,2) = strnrm*( xlij(:,1)*fres(:,10) + xlij(:,2)*fres(:,11) 259259599516SKenneth E. Jansen & + xlij(:,3)*fres(:,12) + 259359599516SKenneth E. Jansen & two*(xlij(:,4)*fres(:,13) + xlij(:,5)*fres(:,14) + 259459599516SKenneth E. Jansen & xlij(:,6)*fres(:,15)) ) 259559599516SKenneth E. Jansen 259659599516SKenneth E. Jansen xfac(:,3) = strnrm*( fres(:,10)*fres(:,16) + fres(:,11)*fres(:,17) 259759599516SKenneth E. Jansen & + fres(:,12)*fres(:,18) + 259859599516SKenneth E. Jansen & two*(fres(:,13)*fres(:,19) + fres(:,14)*fres(:,20) + 259959599516SKenneth E. Jansen & fres(:,15)*fres(:,21)) ) 260059599516SKenneth E. Jansen 260159599516SKenneth E. Jansen xfac(:,4) = xlij(:,1)*fres(:,16) + xlij(:,2)*fres(:,17) 260259599516SKenneth E. Jansen & + xlij(:,3)*fres(:,18) + 260359599516SKenneth E. Jansen & two*(xlij(:,4)*fres(:,19) + xlij(:,5)*fres(:,20) + 260459599516SKenneth E. Jansen & xlij(:,6)*fres(:,21)) 260559599516SKenneth E. Jansen 260659599516SKenneth E. Jansen xfac(:,5) = fres(:,16)*fres(:,16) + fres(:,17)*fres(:,17) 260759599516SKenneth E. Jansen & + fres(:,18)*fres(:,18) + 260859599516SKenneth E. Jansen & two*(fres(:,19)*fres(:,19) + fres(:,20)*fres(:,20) + 260959599516SKenneth E. Jansen & fres(:,21)*fres(:,21)) 261059599516SKenneth E. Jansen 261159599516SKenneth E. Jansenc zero on processor periodic nodes so that they will not be added twice 261259599516SKenneth E. Jansen do j = 1,numnp 261359599516SKenneth E. Jansen i = iper(j) 261459599516SKenneth E. Jansen if (i .ne. j) then 261559599516SKenneth E. Jansen xnum(j) = zero 261659599516SKenneth E. Jansen xden(j) = zero 261759599516SKenneth E. Jansen xfac(j,:) = zero 261859599516SKenneth E. Jansen xmij(j,:) = zero 261959599516SKenneth E. Jansen xlij(j,:) = zero 262059599516SKenneth E. Jansen fres(j,:) = zero 262159599516SKenneth E. Jansen strnrm(j) = zero 262259599516SKenneth E. Jansen endif 262359599516SKenneth E. Jansen enddo 262459599516SKenneth E. Jansen 262559599516SKenneth E. Jansen if (numpe.gt.1) then 262659599516SKenneth E. Jansen 262759599516SKenneth E. Jansen numtask = ilwork(1) 262859599516SKenneth E. Jansen itkbeg = 1 262959599516SKenneth E. Jansen 263059599516SKenneth E. Jansenc zero the nodes that are "solved" on the other processors 263159599516SKenneth E. Jansen do itask = 1, numtask 263259599516SKenneth E. Jansen 263359599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 263459599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 263559599516SKenneth E. Jansen 263659599516SKenneth E. Jansen if (iacc .eq. 0) then 263759599516SKenneth E. Jansen do is = 1,numseg 263859599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 263959599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 264059599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 264159599516SKenneth E. Jansen xnum(isgbeg:isgend) = zero 264259599516SKenneth E. Jansen xden(isgbeg:isgend) = zero 264359599516SKenneth E. Jansen strnrm(isgbeg:isgend) = zero 264459599516SKenneth E. Jansen xfac(isgbeg:isgend,:) = zero 264559599516SKenneth E. Jansen xmij(isgbeg:isgend,:) = zero 264659599516SKenneth E. Jansen xlij(isgbeg:isgend,:) = zero 264759599516SKenneth E. Jansen fres(isgbeg:isgend,:) = zero 264859599516SKenneth E. Jansen enddo 264959599516SKenneth E. Jansen endif 265059599516SKenneth E. Jansen 265159599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 265259599516SKenneth E. Jansen 265359599516SKenneth E. Jansen enddo 265459599516SKenneth E. Jansen 265559599516SKenneth E. Jansen endif 265659599516SKenneth E. Jansenc 265759599516SKenneth E. Jansenc Description of arrays. Each processor has an array of length equal 265859599516SKenneth E. Jansenc to the total number of fathers times 2 xnude(nfathers,2). One to collect 265959599516SKenneth E. Jansenc the numerator and one to collect the denominator. There is also an array 266059599516SKenneth E. Jansenc of length nshg on each processor which tells the father number of each 266159599516SKenneth E. Jansenc on processor node, ifath(nnshg). Finally, there is an arry of length 266259599516SKenneth E. Jansenc nfathers to tell the total (on all processors combined) number of sons 266359599516SKenneth E. Jansenc for each father. 266459599516SKenneth E. Jansenc 266559599516SKenneth E. Jansenc Now loop over nodes and accumlate the numerator and the denominator 266659599516SKenneth E. Jansenc to the father nodes. Only on processor addition at this point. 266759599516SKenneth E. Jansenc Note that serrogate fathers are collect some for the case where some 266859599516SKenneth E. Jansenc sons are on another processor 266959599516SKenneth E. Jansenc 267059599516SKenneth E. Jansen xnude = zero 267159599516SKenneth E. Jansen ynude = zero 267259599516SKenneth E. Jansen xm = zero 267359599516SKenneth E. Jansen xl = zero 267459599516SKenneth E. Jansen xl1 = zero 267559599516SKenneth E. Jansen xl2 = zero 267659599516SKenneth E. Jansen ui = zero 267759599516SKenneth E. Jansen snorm = zero 267859599516SKenneth E. Jansen 267959599516SKenneth E. Jansen do i = 1,nshg 268059599516SKenneth E. Jansen xnude(ifath(i),1) = xnude(ifath(i),1) + xnum(i) 268159599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + xden(i) 268259599516SKenneth E. Jansen 268359599516SKenneth E. Jansen ynude(ifath(i),1) = ynude(ifath(i),1) + xfac(i,1) 268459599516SKenneth E. Jansen ynude(ifath(i),2) = ynude(ifath(i),2) + xfac(i,2) 268559599516SKenneth E. Jansen ynude(ifath(i),3) = ynude(ifath(i),3) + xfac(i,3) 268659599516SKenneth E. Jansen ynude(ifath(i),4) = ynude(ifath(i),4) + xfac(i,4) 268759599516SKenneth E. Jansen ynude(ifath(i),5) = ynude(ifath(i),5) + xfac(i,5) 268859599516SKenneth E. Jansen 268959599516SKenneth E. Jansen xm(ifath(i),1) = xm(ifath(i),1) + xmij(i,1) 269059599516SKenneth E. Jansen xm(ifath(i),2) = xm(ifath(i),2) + xmij(i,2) 269159599516SKenneth E. Jansen xm(ifath(i),3) = xm(ifath(i),3) + xmij(i,3) 269259599516SKenneth E. Jansen xm(ifath(i),4) = xm(ifath(i),4) + xmij(i,4) 269359599516SKenneth E. Jansen xm(ifath(i),5) = xm(ifath(i),5) + xmij(i,5) 269459599516SKenneth E. Jansen xm(ifath(i),6) = xm(ifath(i),6) + xmij(i,6) 269559599516SKenneth E. Jansen 269659599516SKenneth E. Jansen xl(ifath(i),1) = xl(ifath(i),1) + xlij(i,1) 269759599516SKenneth E. Jansen xl(ifath(i),2) = xl(ifath(i),2) + xlij(i,2) 269859599516SKenneth E. Jansen xl(ifath(i),3) = xl(ifath(i),3) + xlij(i,3) 269959599516SKenneth E. Jansen xl(ifath(i),4) = xl(ifath(i),4) + xlij(i,4) 270059599516SKenneth E. Jansen xl(ifath(i),5) = xl(ifath(i),5) + xlij(i,5) 270159599516SKenneth E. Jansen xl(ifath(i),6) = xl(ifath(i),6) + xlij(i,6) 270259599516SKenneth E. Jansen 270359599516SKenneth E. Jansen xl1(ifath(i),1) = xl1(ifath(i),1) + fres(i,4) 270459599516SKenneth E. Jansen xl1(ifath(i),2) = xl1(ifath(i),2) + fres(i,5) 270559599516SKenneth E. Jansen xl1(ifath(i),3) = xl1(ifath(i),3) + fres(i,6) 270659599516SKenneth E. Jansen xl1(ifath(i),4) = xl1(ifath(i),4) + fres(i,7) 270759599516SKenneth E. Jansen xl1(ifath(i),5) = xl1(ifath(i),5) + fres(i,8) 270859599516SKenneth E. Jansen xl1(ifath(i),6) = xl1(ifath(i),6) + fres(i,9) 270959599516SKenneth E. Jansen 271059599516SKenneth E. Jansen xl2(ifath(i),1) = xl2(ifath(i),1) + fres(i,1)*fres(i,1) 271159599516SKenneth E. Jansen xl2(ifath(i),2) = xl2(ifath(i),2) + fres(i,2)*fres(i,2) 271259599516SKenneth E. Jansen xl2(ifath(i),3) = xl2(ifath(i),3) + fres(i,3)*fres(i,3) 271359599516SKenneth E. Jansen xl2(ifath(i),4) = xl2(ifath(i),4) + fres(i,1)*fres(i,2) 271459599516SKenneth E. Jansen xl2(ifath(i),5) = xl2(ifath(i),5) + fres(i,1)*fres(i,3) 271559599516SKenneth E. Jansen xl2(ifath(i),6) = xl2(ifath(i),6) + fres(i,2)*fres(i,3) 271659599516SKenneth E. Jansen 271759599516SKenneth E. Jansen ui(ifath(i),1) = ui(ifath(i),1) + fres(i,1) 271859599516SKenneth E. Jansen ui(ifath(i),2) = ui(ifath(i),2) + fres(i,2) 271959599516SKenneth E. Jansen ui(ifath(i),3) = ui(ifath(i),3) + fres(i,3) 272059599516SKenneth E. Jansen 272159599516SKenneth E. Jansen snorm(ifath(i)) = snorm(ifath(i)) + strnrm(i) 272259599516SKenneth E. Jansen 272359599516SKenneth E. Jansen enddo 272459599516SKenneth E. Jansen 272559599516SKenneth E. Jansenc 272659599516SKenneth E. Jansenc Now the true fathers and serrogates combine results and update 272759599516SKenneth E. Jansenc each other. 272859599516SKenneth E. Jansenc 272959599516SKenneth E. Jansen if(numpe .gt. 1)then 273059599516SKenneth E. Jansen call drvAllreduce(xnude, xnuder,2*nfath) 273159599516SKenneth E. Jansen call drvAllreduce(ynude, ynuder,6*nfath) 273259599516SKenneth E. Jansen call drvAllreduce(xm, xmr,6*nfath) 273359599516SKenneth E. Jansen call drvAllreduce(xl, xlr,6*nfath) 273459599516SKenneth E. Jansen call drvAllreduce(xl1, xl1r,6*nfath) 273559599516SKenneth E. Jansen call drvAllreduce(xl2, xl2r,6*nfath) 273659599516SKenneth E. Jansen call drvAllreduce(ui, uir,3*nfath) 273759599516SKenneth E. Jansen call drvAllreduce(snorm, snormr,nfath) 273859599516SKenneth E. Jansen 273959599516SKenneth E. Jansen do i = 1, nfath 274059599516SKenneth E. Jansen ynuder(i,6) = ( ynuder(i,4) - fwr1*ynuder(i,2) ) / 274159599516SKenneth E. Jansen & ( two*ynuder(i,5) - four*fwr1*ynuder(i,3) 274259599516SKenneth E. Jansen & + two*fwr1*fwr1*ynuder(i,1) ) 274359599516SKenneth E. Jansen enddo 274459599516SKenneth E. Jansen 274559599516SKenneth E. Jansen cdelsq2(:) = ynuder(ifath(:),6) ! For comparison w/ cdelsq 274659599516SKenneth E. Jansenc 274759599516SKenneth E. Jansenc xnude is the sum of the sons for each father on this processor 274859599516SKenneth E. Jansenc 274959599516SKenneth E. Jansenc xnuder is the sum of the sons for each father on all processor combined 275059599516SKenneth E. Jansenc (the same as if we had not partitioned the mesh for each processor) 275159599516SKenneth E. Jansenc 275259599516SKenneth E. Jansenc For each father we have precomputed the number of sons (including 275359599516SKenneth E. Jansenc the sons off processor). 275459599516SKenneth E. Jansenc 275559599516SKenneth E. Jansenc Now divide by number of sons to get the average (not really necessary 275659599516SKenneth E. Jansenc for dynamic model since ratio will cancel nsons at each father) 275759599516SKenneth E. Jansenc 275859599516SKenneth E. Jansen xnuder(:,1) = xnuder(:,1) / nsons(:) 275959599516SKenneth E. Jansen xnuder(:,2) = xnuder(:,2) / nsons(:) 276059599516SKenneth E. Jansen 276159599516SKenneth E. Jansen do m = 1, 5 276259599516SKenneth E. Jansen ynuder(:,m) = ynuder(:,m)/nsons(:) 276359599516SKenneth E. Jansen enddo 276459599516SKenneth E. Jansen do m = 1,6 276559599516SKenneth E. Jansen xmr(:,m) = xmr(:,m)/nsons(:) 276659599516SKenneth E. Jansen xlr(:,m) = xlr(:,m)/nsons(:) 276759599516SKenneth E. Jansen xl1r(:,m) = xl1r(:,m)/nsons(:) 276859599516SKenneth E. Jansen xl2r(:,m) = xl2r(:,m)/nsons(:) 276959599516SKenneth E. Jansen enddo 277059599516SKenneth E. Jansen 277159599516SKenneth E. Jansen uir(:,1) = uir(:,1)/nsons(:) 277259599516SKenneth E. Jansen uir(:,2) = uir(:,2)/nsons(:) 277359599516SKenneth E. Jansen uir(:,3) = uir(:,3)/nsons(:) 277459599516SKenneth E. Jansen 277559599516SKenneth E. Jansen snormr(:) = snormr(:)/nsons(:) 277659599516SKenneth E. Jansen 277759599516SKenneth E. Jansenc 277859599516SKenneth E. Jansencc the next line is c \Delta^2 277959599516SKenneth E. Jansencc 278059599516SKenneth E. Jansencc xnuder(:,1) = xnuder(:,1) / (xnuder(:,2) + 1.d-09) 278159599516SKenneth E. Jansencc do i = 1,nshg 278259599516SKenneth E. Jansencc cdelsq(i) = xnuder(ifath(i),1) 278359599516SKenneth E. Jansencc enddo 278459599516SKenneth E. Jansen 278559599516SKenneth E. Jansen numNden(:,1) = whist*numNden(:,1)+wcur*xnuder(ifath(:),1) 278659599516SKenneth E. Jansen numNden(:,2) = whist*numNden(:,2)+wcur*xnuder(ifath(:),2) 278759599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2) + 1.d-09) 278859599516SKenneth E. Jansen 278959599516SKenneth E. Jansenc cdelsq(:) = xnuder(ifath(:),1)/(xnuder(ifath(:),2)+1.d-09) 279059599516SKenneth E. Jansen 279159599516SKenneth E. Jansen xnd(:,1) = xnd(:,1) + xnuder(:,1) 279259599516SKenneth E. Jansen xnd(:,2) = xnd(:,2) + xnuder(:,2) 279359599516SKenneth E. Jansen 279459599516SKenneth E. Jansen xmodcomp(:,1) = xmodcomp(:,1)+ynuder(:,1) 279559599516SKenneth E. Jansen xmodcomp(:,2) = xmodcomp(:,2)+ynuder(:,2) 279659599516SKenneth E. Jansen xmodcomp(:,3) = xmodcomp(:,3)+ynuder(:,3) 279759599516SKenneth E. Jansen xmodcomp(:,4) = xmodcomp(:,4)+ynuder(:,4) 279859599516SKenneth E. Jansen xmodcomp(:,5) = xmodcomp(:,5)+ynuder(:,5) 279959599516SKenneth E. Jansen 280059599516SKenneth E. Jansen xmcomp(:,:) = xmcomp(:,:)+xmr(:,:) 280159599516SKenneth E. Jansen xlcomp(:,:) = xlcomp(:,:)+xlr(:,:) 280259599516SKenneth E. Jansen 280359599516SKenneth E. Jansen xl1comp(:,:) = xl1comp(:,:)+xl1r(:,:) 280459599516SKenneth E. Jansen xl2comp(:,:) = xl2comp(:,:)+xl2r(:,:) 280559599516SKenneth E. Jansen 280659599516SKenneth E. Jansen ucomp(:,:) = ucomp(:,:)+uir(:,:) 280759599516SKenneth E. Jansen u1 = uir(32,1) 280859599516SKenneth E. Jansen scomp(:) = scomp(:)+snormr(:) 280959599516SKenneth E. Jansen 281059599516SKenneth E. Jansen else 281159599516SKenneth E. Jansen 281259599516SKenneth E. Jansen xnude(:,1) = xnude(:,1)/nsons(:) 281359599516SKenneth E. Jansen xnude(:,2) = xnude(:,2)/nsons(:) 281459599516SKenneth E. Jansen 281559599516SKenneth E. Jansen do m = 1, 5 281659599516SKenneth E. Jansen ynude(:,m) = ynude(:,m)/nsons(:) 281759599516SKenneth E. Jansen enddo 281859599516SKenneth E. Jansen do m = 1,6 281959599516SKenneth E. Jansen xm(:,m) = xm(:,m)/nsons(:) 282059599516SKenneth E. Jansen xl(:,m) = xl(:,m)/nsons(:) 282159599516SKenneth E. Jansen xl1(:,m) = xl1(:,m)/nsons(:) 282259599516SKenneth E. Jansen xl2(:,m) = xl2(:,m)/nsons(:) 282359599516SKenneth E. Jansen enddo 282459599516SKenneth E. Jansen 282559599516SKenneth E. Jansen ui(:,1) = ui(:,1)/nsons(:) 282659599516SKenneth E. Jansen ui(:,2) = ui(:,2)/nsons(:) 282759599516SKenneth E. Jansen ui(:,3) = ui(:,3)/nsons(:) 282859599516SKenneth E. Jansen 282959599516SKenneth E. Jansen snorm(:) = snorm(:)/nsons(:) 283059599516SKenneth E. Jansenc 283159599516SKenneth E. Jansenc the next line is c \Delta^2, not nu_T but we want to save the 283259599516SKenneth E. Jansenc memory 283359599516SKenneth E. Jansenc 283459599516SKenneth E. Jansen 283559599516SKenneth E. Jansencc xnude(:,1) = xnude(:,1) / (xnude(:,2) + 1.d-09) 283659599516SKenneth E. Jansencc do i = 1,nshg 283759599516SKenneth E. Jansencc cdelsq(i) = xnude(ifath(i),1) 283859599516SKenneth E. Jansencc enddo 283959599516SKenneth E. Jansencc endif 284059599516SKenneth E. Jansen 284159599516SKenneth E. Jansen do i = 1, nfath 284259599516SKenneth E. Jansen ynude(i,6) = ( ynude(i,4) - fwr1*ynude(i,2) ) / 284359599516SKenneth E. Jansen & ( two*ynude(i,5) - four*fwr1*ynude(i,3) 284459599516SKenneth E. Jansen & + fwr1*fwr1*ynude(i,1) ) 284559599516SKenneth E. Jansen enddo 284659599516SKenneth E. Jansen 284759599516SKenneth E. Jansen numNden(:,1) = whist*numNden(:,1)+wcur*xnude(ifath(:),1) 284859599516SKenneth E. Jansen numNden(:,2) = whist*numNden(:,2)+wcur*xnude(ifath(:),2) 284959599516SKenneth E. Jansen 285059599516SKenneth E. Jansen xnd(:,1) = xnd(:,1)+xnude(:,1) 285159599516SKenneth E. Jansen xnd(:,2) = xnd(:,2)+xnude(:,2) 285259599516SKenneth E. Jansen 285359599516SKenneth E. Jansen cdelsq(:) = numNden(:,1) / (numNden(:,2)) ! + 1.d-09) 285459599516SKenneth E. Jansen 285559599516SKenneth E. Jansenc cdelsq(:) = xnude(ifath(:),1)/(xnude(ifath(:),2))!+1.d-09) 285659599516SKenneth E. Jansen 285759599516SKenneth E. Jansen 285859599516SKenneth E. Jansen cdelsq2(:) = ynude(ifath(:),6) ! For comparison w/ cdelsq 285959599516SKenneth E. Jansen 286059599516SKenneth E. Jansen xmodcomp(:,1) = xmodcomp(:,1)+ynude(:,1) 286159599516SKenneth E. Jansen xmodcomp(:,2) = xmodcomp(:,2)+ynude(:,2) 286259599516SKenneth E. Jansen xmodcomp(:,3) = xmodcomp(:,3)+ynude(:,3) 286359599516SKenneth E. Jansen xmodcomp(:,4) = xmodcomp(:,4)+ynude(:,4) 286459599516SKenneth E. Jansen xmodcomp(:,5) = xmodcomp(:,5)+ynude(:,5) 286559599516SKenneth E. Jansen 286659599516SKenneth E. Jansen xmcomp(:,:) = xmcomp(:,:)+xm(:,:) 286759599516SKenneth E. Jansen xlcomp(:,:) = xlcomp(:,:)+xl(:,:) 286859599516SKenneth E. Jansen 286959599516SKenneth E. Jansen xl1comp(:,:) = xl1comp(:,:)+xl1(:,:) 287059599516SKenneth E. Jansen xl2comp(:,:) = xl2comp(:,:)+xl2(:,:) 287159599516SKenneth E. Jansen 287259599516SKenneth E. Jansen ucomp(:,:) = ucomp(:,:)+ui(:,:) 287359599516SKenneth E. Jansen u1 = ui(32,1) 287459599516SKenneth E. Jansen scomp(:) = scomp(:)+snorm(:) 287559599516SKenneth E. Jansen 287659599516SKenneth E. Jansen endif 287759599516SKenneth E. Jansen 287859599516SKenneth E. Jansen 287959599516SKenneth E. Jansenc do i = 1, nfath 288059599516SKenneth E. Jansenc xmodcomp(i,:) = xmodcomp(i,:)/nsons(i) 288159599516SKenneth E. Jansenc xmcomp(i,:) = xmcomp(i,:)/nsons(i) 288259599516SKenneth E. Jansenc xlcomp(i,:) = xlcomp(i,:)/nsons(i) 288359599516SKenneth E. Jansenc xl2comp(i,:) = xl2comp(i,:)/nsons(i) 288459599516SKenneth E. Jansenc xl1comp(i,:) = xl1comp(i,:)/nsons(i) 288559599516SKenneth E. Jansenc xnd(i,:) = xnd(i,:)/nsons(i) 288659599516SKenneth E. Jansenc scomp(i) = scomp(i)/nsons(i) 288759599516SKenneth E. Jansenc ucomp(i,:) = ucomp(i,:)/nsons(i) 288859599516SKenneth E. Jansenc enddo 288959599516SKenneth E. Jansen 289059599516SKenneth E. Jansen if ( istep .eq. (nstep(1)-1) ) then 289159599516SKenneth E. Jansen if ( myrank .eq. master) then 289259599516SKenneth E. Jansen 289359599516SKenneth E. Jansen do i = 1, nfath 289459599516SKenneth E. Jansen write(365,*)xmodcomp(i,1),xmodcomp(i,2),xmodcomp(i,3), 289559599516SKenneth E. Jansen & xmodcomp(i,4),xmodcomp(i,5) 289659599516SKenneth E. Jansen 289759599516SKenneth E. Jansen write(366,*)xmcomp(i,1),xmcomp(i,2),xmcomp(i,3) 289859599516SKenneth E. Jansen write(367,*)xmcomp(i,4),xmcomp(i,5),xmcomp(i,6) 289959599516SKenneth E. Jansen 290059599516SKenneth E. Jansen write(368,*)xlcomp(i,1),xlcomp(i,2),xlcomp(i,3) 290159599516SKenneth E. Jansen write(369,*)xlcomp(i,4),xlcomp(i,5),xlcomp(i,6) 290259599516SKenneth E. Jansen 290359599516SKenneth E. Jansen write(370,*)xl1comp(i,1),xl1comp(i,2),xl1comp(i,3) 290459599516SKenneth E. Jansen write(371,*)xl1comp(i,4),xl1comp(i,5),xl1comp(i,6) 290559599516SKenneth E. Jansen 290659599516SKenneth E. Jansen write(372,*)xl2comp(i,1),xl2comp(i,2),xl2comp(i,3) 290759599516SKenneth E. Jansen write(373,*)xl2comp(i,4),xl2comp(i,5),xl2comp(i,6) 290859599516SKenneth E. Jansen 290959599516SKenneth E. Jansen write(374,*)xnd(i,1),xnd(i,2),scomp(i) 291059599516SKenneth E. Jansen write(375,*)ucomp(i,1),ucomp(i,2),ucomp(i,3) 291159599516SKenneth E. Jansen 291259599516SKenneth E. Jansenc write(*,*)'uit uic=', ucomp(32,1),u1 291359599516SKenneth E. Jansen enddo 291459599516SKenneth E. Jansen 291559599516SKenneth E. Jansen 291659599516SKenneth E. Jansen call flush(365) 291759599516SKenneth E. Jansen call flush(366) 291859599516SKenneth E. Jansen call flush(367) 291959599516SKenneth E. Jansen call flush(368) 292059599516SKenneth E. Jansen call flush(369) 292159599516SKenneth E. Jansen call flush(370) 292259599516SKenneth E. Jansen call flush(371) 292359599516SKenneth E. Jansen call flush(372) 292459599516SKenneth E. Jansen call flush(373) 292559599516SKenneth E. Jansen call flush(374) 292659599516SKenneth E. Jansen call flush(375) 292759599516SKenneth E. Jansen 292859599516SKenneth E. Jansenc if (myrank .eq. master) then 292959599516SKenneth E. Jansenc write(*,*)'uit uic=', ucomp(32,1),u1 293059599516SKenneth E. Jansenc endif 293159599516SKenneth E. Jansen 293259599516SKenneth E. Jansen 293359599516SKenneth E. Jansenc close(852) 293459599516SKenneth E. Jansenc close(853) 293559599516SKenneth E. Jansenc close(854) 293659599516SKenneth E. Jansen 293759599516SKenneth E. Jansen endif 293859599516SKenneth E. Jansen endif 293959599516SKenneth E. Jansen 294059599516SKenneth E. Jansen if (myrank .eq. master) then 294159599516SKenneth E. Jansen write(*,*)'uit uic=', ucomp(32,1),u1 294259599516SKenneth E. Jansen endif 294359599516SKenneth E. Jansen 294459599516SKenneth E. Jansen 294559599516SKenneth E. Jansen 555 format(e14.7,4(2x,e14.7)) 294659599516SKenneth E. Jansen 556 format(e14.7,5(2x,e14.7)) 294759599516SKenneth E. Jansen 294859599516SKenneth E. Jansenc close(849) 294959599516SKenneth E. Jansenc close(850) 295059599516SKenneth E. Jansenc close(851) 295159599516SKenneth E. Jansenc close(852) 295259599516SKenneth E. Jansenc close(853) 295359599516SKenneth E. Jansenc close(854) 295459599516SKenneth E. Jansen 295559599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 295659599516SKenneth E. Jansen tmp1 = MINVAL(cdelsq) 295759599516SKenneth E. Jansen tmp2 = MAXVAL(cdelsq) 295859599516SKenneth E. Jansen if(numpe>1) then 295959599516SKenneth E. Jansen call MPI_REDUCE (tmp1, tmp3, 1,MPI_DOUBLE_PRECISION, 296059599516SKenneth E. Jansen & MPI_MIN, master, MPI_COMM_WORLD, ierr) 296159599516SKenneth E. Jansen call MPI_REDUCE (tmp2, tmp4, 1, MPI_DOUBLE_PRECISION, 296259599516SKenneth E. Jansen & MPI_MAX, master, MPI_COMM_WORLD, ierr) 296359599516SKenneth E. Jansen tmp1=tmp3 296459599516SKenneth E. Jansen tmp2=tmp4 296559599516SKenneth E. Jansen endif 296659599516SKenneth E. Jansen if (myrank .EQ. master) then !print CDelta^2 range 296759599516SKenneth E. Jansen write(34,*)lstep,tmp1,tmp2 296859599516SKenneth E. Jansen call flush(34) 296959599516SKenneth E. Jansen endif 297059599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 297159599516SKenneth E. Jansen 297259599516SKenneth E. Jansen if (myrank .eq. master) then 297359599516SKenneth E. Jansen write(*,*) 'cdelsq=', cdelsq(1),cdelsq(2) 297459599516SKenneth E. Jansen write(*,*) 'cdelsq=', cdelsq2(1),cdelsq2(2) 297559599516SKenneth E. Jansen write(22,*) lstep, cdelsq(1) 297659599516SKenneth E. Jansen call flush(22) 297759599516SKenneth E. Jansen endif 297859599516SKenneth E. Jansen 297959599516SKenneth E. Jansen do iblk = 1,nelblk 298059599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 298159599516SKenneth E. Jansen iel = lcblk(1,iblk) 298259599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 298359599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 298459599516SKenneth E. Jansen inum = iel + npro - 1 298559599516SKenneth E. Jansen 298659599516SKenneth E. Jansen ngauss = nint(lcsyst) 298759599516SKenneth E. Jansen 298859599516SKenneth E. Jansen call scatnu (mien(iblk)%p, strl(iel:inum,:), 298959599516SKenneth E. Jansen & mxmudmi(iblk)%p,cdelsq,shp(lcsyst,1:nshl,:)) 299059599516SKenneth E. Jansen enddo 299159599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 299259599516SKenneth E. Jansenc$$$ tmp1 = MINVAL(xmudmi) 299359599516SKenneth E. Jansenc$$$ tmp2 = MAXVAL(xmudmi) 299459599516SKenneth E. Jansenc$$$ if(numpe>1) then 299559599516SKenneth E. Jansenc$$$ call MPI_REDUCE (tmp1, tmp3, 1, MPI_DOUBLE_PRECISION, 299659599516SKenneth E. Jansenc$$$ & MPI_MIN, master, MPI_COMM_WORLD, ierr) 299759599516SKenneth E. Jansenc$$$ call MPI_REDUCE (tmp2, tmp4, 1, MPI_DOUBLE_PRECISION, 299859599516SKenneth E. Jansenc$$$ & MPI_MAX, master, MPI_COMM_WORLD, ierr) 299959599516SKenneth E. Jansenc$$$ tmp1=tmp3 300059599516SKenneth E. Jansenc$$$ tmp2=tmp4 300159599516SKenneth E. Jansenc$$$ endif 300259599516SKenneth E. Jansenc$$$ if (myrank .EQ. master) then 300359599516SKenneth E. Jansenc$$$ write(35,*) lstep,tmp1,tmp2 300459599516SKenneth E. Jansenc$$$ call flush(35) 300559599516SKenneth E. Jansenc$$$ endif 300659599516SKenneth E. Jansenc $$$$$$$$$$$$$$$$$$$$$$$$$$$ 300759599516SKenneth E. Jansen 300859599516SKenneth E. Jansenc 300959599516SKenneth E. Jansenc if flag set, write a restart file with info (reuse xmij's memory) 301059599516SKenneth E. Jansenc 301159599516SKenneth E. Jansen if(irs.eq.11) then 301259599516SKenneth E. Jansen lstep=999 301359599516SKenneth E. Jansen xmij(:,1)=xnum(:) 301459599516SKenneth E. Jansen xmij(:,2)=xden(:) 301559599516SKenneth E. Jansen xmij(:,3)=cdelsq(:) 301659599516SKenneth E. Jansen xmij(:,5)=xlij(:,4) !leave M_{12} in 4 and put L_{12} here 301759599516SKenneth E. Jansen call restar('out ',xmij,xlij) !also dump all of L_{ij} in ac 301859599516SKenneth E. Jansen stop 301959599516SKenneth E. Jansen endif 302059599516SKenneth E. Jansenc 302159599516SKenneth E. Jansenc local clipping moved to scatnu with the creation of mxmudmi pointers 302259599516SKenneth E. Jansenc 302359599516SKenneth E. Jansenc$$$ rmu=datmat(1,2,1) 302459599516SKenneth E. Jansenc$$$ xmudmi=min(xmudmi,1000.0*rmu) !don't let it get larger than 1000 mu 302559599516SKenneth E. Jansenc$$$ xmudmi=max(xmudmi, -rmu) ! don't let (xmudmi + mu) < 0 302659599516SKenneth E. Jansenc stop !uncomment to test dmod 302759599516SKenneth E. Jansenc 302859599516SKenneth E. Jansen 302959599516SKenneth E. Jansen 303059599516SKenneth E. Jansenc write out the nodal values of xnut (estimate since we don't calc strain 303159599516SKenneth E. Jansenc there and must use the filtered strain). 303259599516SKenneth E. Jansenc 303359599516SKenneth E. Jansen 303459599516SKenneth E. Jansen if ((irs .ge. 1) .and. (mod(lstep, ntout) .eq. 0)) then 303559599516SKenneth E. Jansenc 303659599516SKenneth E. Jansenc collect the average strain into xnude(2) 303759599516SKenneth E. Jansenc 303859599516SKenneth E. Jansen xnude(:,2) = zero 303959599516SKenneth E. Jansen do i = 1,numnp 304059599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + strnrm(i) 304159599516SKenneth E. Jansen enddo 304259599516SKenneth E. Jansen 304359599516SKenneth E. Jansen if(numpe .gt. 1) then 304459599516SKenneth E. Jansen call drvAllreduce(xnude(:,2), xnuder(:,2),nfath) 304559599516SKenneth E. Jansen else 304659599516SKenneth E. Jansen xnuder=xnude 304759599516SKenneth E. Jansen endif 304859599516SKenneth E. Jansenc 304959599516SKenneth E. Jansenc nut= cdelsq * |S| 305059599516SKenneth E. Jansenc 305159599516SKenneth E. Jansen xnutf=xnuder(:,1)*xnuder(:,2)/nsons(:) 305259599516SKenneth E. Jansenc 305359599516SKenneth E. Jansenc collect the x and y coords into xnude 305459599516SKenneth E. Jansenc 305559599516SKenneth E. Jansen xnude = zero 305659599516SKenneth E. Jansen do i = 1,numnp 305759599516SKenneth E. Jansen xnude(ifath(i),1) = xnude(ifath(i),1) + x(i,1) 305859599516SKenneth E. Jansen xnude(ifath(i),2) = xnude(ifath(i),2) + x(i,2) 305959599516SKenneth E. Jansen enddo 306059599516SKenneth E. Jansen 306159599516SKenneth E. Jansen if(numpe .gt. 1) 306259599516SKenneth E. Jansen & call drvAllreduce(xnude, xnuder,2*nfath) 306359599516SKenneth E. Jansen xnuder(:,1)=xnuder(:,1)/nsons(:) 306459599516SKenneth E. Jansen xnuder(:,2)=xnuder(:,2)/nsons(:) 306559599516SKenneth E. Jansenc 306659599516SKenneth E. Jansenc xnude is the sum of the sons for each father on this processor 306759599516SKenneth E. Jansenc 306859599516SKenneth E. Jansen if((myrank.eq.master)) then 306959599516SKenneth E. Jansen do i=1,nfath ! cdelsq * |S| 307059599516SKenneth E. Jansen write(444,*) xnuder(i,1),xnuder(i,2),xnutf(i) 307159599516SKenneth E. Jansen enddo 307259599516SKenneth E. Jansen call flush(444) 307359599516SKenneth E. Jansen endif 307459599516SKenneth E. Jansen endif 307559599516SKenneth E. Jansen 307659599516SKenneth E. Jansen return 307759599516SKenneth E. Jansen end 3078