1*59599516SKenneth E. Jansen subroutine asithf (y, x, strnrm, ien, fres, shgl, shp, Qwtf) 2*59599516SKenneth E. Jansen 3*59599516SKenneth E. Jansen include "common.h" 4*59599516SKenneth E. Jansen 5*59599516SKenneth E. Jansen dimension y(nshg,ndof), fres(nshg,24) 6*59599516SKenneth E. Jansen dimension x(numnp,nsd), xl(npro,nenl,nsd) 7*59599516SKenneth E. Jansen dimension ien(npro,nshl), ycl(npro,nshl,ndof), 8*59599516SKenneth E. Jansen & fresl(npro,24), WdetJ(npro), 9*59599516SKenneth E. Jansen & u1(npro), u2(npro), 10*59599516SKenneth E. Jansen & u3(npro), dxdxi(npro,nsd,nsd), 11*59599516SKenneth E. Jansen & strnrm(npro,maxsh), dxidx(npro,nsd,nsd), 12*59599516SKenneth E. Jansen & shgl(nsd,nshl,maxsh), shg(npro,nshl,nsd), 13*59599516SKenneth E. Jansen & shp(nshl,maxsh), 14*59599516SKenneth E. Jansen & fresli(npro,24), Qwtf(ngaussf) 15*59599516SKenneth E. Jansen 16*59599516SKenneth E. Jansen dimension tmp(npro) 17*59599516SKenneth E. Jansen 18*59599516SKenneth E. Jansen call localy (y, ycl, ien, 5, 'gather ') 19*59599516SKenneth E. Jansen call localx (x, xl, ien, 3, 'gather ') 20*59599516SKenneth E. Jansenc 21*59599516SKenneth E. Jansen 22*59599516SKenneth E. Jansen if(matflg(1,1).eq.0) then ! compressible 23*59599516SKenneth E. Jansen ycl (:,:,1) = ycl(:,:,1) / (Rgas * ycl(:,:,5)) !get density 24*59599516SKenneth E. Jansen else 25*59599516SKenneth E. Jansen ycl(:,:,1) = one ! Even if density non unity, it would cancel out 26*59599516SKenneth E. Jansen endif 27*59599516SKenneth E. Jansen 28*59599516SKenneth E. Jansen fresl = zero 29*59599516SKenneth E. Jansen 30*59599516SKenneth E. Jansen do intp = 1, ngaussf 31*59599516SKenneth E. Jansen 32*59599516SKenneth E. Jansen 33*59599516SKenneth E. Jansenc calculate the metrics 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansenc 36*59599516SKenneth E. Jansenc.... ---------------------> Element Metrics <----------------------- 37*59599516SKenneth E. Jansenc 38*59599516SKenneth E. Jansenc.... compute the deformation gradient 39*59599516SKenneth E. Jansenc 40*59599516SKenneth E. Jansen dxdxi = zero 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansen do n = 1, nenl 43*59599516SKenneth E. Jansen dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp) 44*59599516SKenneth E. Jansen dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp) 45*59599516SKenneth E. Jansen dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp) 46*59599516SKenneth E. Jansen dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp) 47*59599516SKenneth E. Jansen dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp) 48*59599516SKenneth E. Jansen dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp) 49*59599516SKenneth E. Jansen dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp) 50*59599516SKenneth E. Jansen dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp) 51*59599516SKenneth E. Jansen dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp) 52*59599516SKenneth E. Jansen enddo 53*59599516SKenneth E. Jansenc 54*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient 55*59599516SKenneth E. Jansenc 56*59599516SKenneth E. Jansen dxidx(:,1,1) = dxdxi(:,2,2) * dxdxi(:,3,3) 57*59599516SKenneth E. Jansen & - dxdxi(:,3,2) * dxdxi(:,2,3) 58*59599516SKenneth E. Jansen dxidx(:,1,2) = dxdxi(:,3,2) * dxdxi(:,1,3) 59*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,3,3) 60*59599516SKenneth E. Jansen dxidx(:,1,3) = dxdxi(:,1,2) * dxdxi(:,2,3) 61*59599516SKenneth E. Jansen & - dxdxi(:,1,3) * dxdxi(:,2,2) 62*59599516SKenneth E. Jansen tmp = one / ( dxidx(:,1,1) * dxdxi(:,1,1) 63*59599516SKenneth E. Jansen & + dxidx(:,1,2) * dxdxi(:,2,1) 64*59599516SKenneth E. Jansen & + dxidx(:,1,3) * dxdxi(:,3,1) ) 65*59599516SKenneth E. Jansen dxidx(:,1,1) = dxidx(:,1,1) * tmp 66*59599516SKenneth E. Jansen dxidx(:,1,2) = dxidx(:,1,2) * tmp 67*59599516SKenneth E. Jansen dxidx(:,1,3) = dxidx(:,1,3) * tmp 68*59599516SKenneth E. Jansen dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1) 69*59599516SKenneth E. Jansen & - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp 70*59599516SKenneth E. Jansen dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3) 71*59599516SKenneth E. Jansen & - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp 72*59599516SKenneth E. Jansen dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3) 73*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp 74*59599516SKenneth E. Jansen dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2) 75*59599516SKenneth E. Jansen & - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp 76*59599516SKenneth E. Jansen dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2) 77*59599516SKenneth E. Jansen & - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp 78*59599516SKenneth E. Jansen dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2) 79*59599516SKenneth E. Jansen & - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansenc wght=Qwt(lcsyst,intp) ! may be different now 82*59599516SKenneth E. Jansen wght=Qwtf(intp) 83*59599516SKenneth E. Jansen WdetJ = wght / tmp 84*59599516SKenneth E. Jansenc 85*59599516SKenneth E. Jansen fresli=zero 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansen if(matflg(1,1).eq.0) then ! compressible 88*59599516SKenneth E. Jansen do i=1,nshl 89*59599516SKenneth E. Jansen fresli(:,22) = fresli(:,22)+shp(i,intp)*ycl(:,i,1) !density at 90*59599516SKenneth E. Jansen !qpt 91*59599516SKenneth E. Jansen enddo 92*59599516SKenneth E. Jansen else ! incompressible, set density 93*59599516SKenneth E. Jansen fresli(:,22)= one ! reduce comp2incompr regardless of rho datmat(1,1,1) 94*59599516SKenneth E. Jansen endif 95*59599516SKenneth E. Jansenc 96*59599516SKenneth E. Jansen do n = 1,nshl 97*59599516SKenneth E. Jansen shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1) 98*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,1) 99*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,1)) 100*59599516SKenneth E. Jansen shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2) 101*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,2) 102*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,2)) 103*59599516SKenneth E. Jansen shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3) 104*59599516SKenneth E. Jansen & + shgl(2,n,intp) * dxidx(:,2,3) 105*59599516SKenneth E. Jansen & + shgl(3,n,intp) * dxidx(:,3,3)) 106*59599516SKenneth E. Jansen enddo 107*59599516SKenneth E. Jansen 108*59599516SKenneth E. Jansen do j=10,12 ! normal strainrate u_{i,i} no sum on i 109*59599516SKenneth E. Jansen ig=j-9 110*59599516SKenneth E. Jansen iv=j-8 111*59599516SKenneth E. Jansen do i=1,nshl 112*59599516SKenneth E. Jansen fresli(:,j) = fresli(:,j)+shg(:,i,ig)*ycl(:,i,iv) 113*59599516SKenneth E. Jansen enddo 114*59599516SKenneth E. Jansen enddo 115*59599516SKenneth E. Jansen 116*59599516SKenneth E. Jansenc shear stresses NOTE there may be faster ways to do this 117*59599516SKenneth E. Jansenc check agains CM5 code for speed WTP 118*59599516SKenneth E. Jansen 119*59599516SKenneth E. Jansen do i=1,nshl 120*59599516SKenneth E. Jansen fresli(:,13) = fresli(:,13)+shg(:,i,2)*ycl(:,i,2) 121*59599516SKenneth E. Jansen & +shg(:,i,1)*ycl(:,i,3) 122*59599516SKenneth E. Jansen fresli(:,14) = fresli(:,14)+shg(:,i,3)*ycl(:,i,2) 123*59599516SKenneth E. Jansen & +shg(:,i,1)*ycl(:,i,4) 124*59599516SKenneth E. Jansen fresli(:,15) = fresli(:,15)+shg(:,i,3)*ycl(:,i,3) 125*59599516SKenneth E. Jansen & +shg(:,i,2)*ycl(:,i,4) 126*59599516SKenneth E. Jansen enddo 127*59599516SKenneth E. Jansen 128*59599516SKenneth E. Jansen fresli(:,13) = pt5 * fresli(:,13) 129*59599516SKenneth E. Jansen fresli(:,14) = pt5 * fresli(:,14) 130*59599516SKenneth E. Jansen fresli(:,15) = pt5 * fresli(:,15) 131*59599516SKenneth E. Jansen 132*59599516SKenneth E. Jansen strnrm(:,intp) = fresli(:,22) * sqrt( 133*59599516SKenneth E. Jansen & two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2) 134*59599516SKenneth E. Jansen & + four * ( fresli(:,13)**2 + fresli(:,14)**2 + 135*59599516SKenneth E. Jansen & fresli(:,15)**2 ) ) 136*59599516SKenneth E. Jansen 137*59599516SKenneth E. Jansenc 138*59599516SKenneth E. Jansenc S_ij 139*59599516SKenneth E. Jansenc 140*59599516SKenneth E. Jansen 141*59599516SKenneth E. Jansen fresli(:,10) = fresli(:,10) * WdetJ ! u_{1,1}*WdetJ 142*59599516SKenneth E. Jansen fresli(:,11) = fresli(:,11) * WdetJ ! u_{2,2}*WdetJ 143*59599516SKenneth E. Jansen fresli(:,12) = fresli(:,12) * WdetJ ! u_{3,3}*WdetJ 144*59599516SKenneth E. Jansen fresli(:,13) = fresli(:,13) * WdetJ ! (1/2)*(u_{1,2}+u_{2,1})*WdetJ 145*59599516SKenneth E. Jansen fresli(:,14) = fresli(:,14) * WdetJ ! (1/2)*(u_{1,3}+u_{3,1})*WdetJ 146*59599516SKenneth E. Jansen fresli(:,15) = fresli(:,15) * WdetJ ! (1/2)*(u_{2,3}+u_{3,2})*WdetJ 147*59599516SKenneth E. Jansen 148*59599516SKenneth E. Jansen fresli(:,22) = fresli(:,22) * WdetJ !rho * WdetJ 149*59599516SKenneth E. Jansenc fresli(:,24) = fresli(:,24) * WdetJ 150*59599516SKenneth E. Jansen 151*59599516SKenneth E. Jansen u1=zero 152*59599516SKenneth E. Jansen u2=zero 153*59599516SKenneth E. Jansen u3=zero 154*59599516SKenneth E. Jansen do i=1,nshl 155*59599516SKenneth E. Jansen u1 = u1 + shp(i,intp)*ycl(:,i,2) 156*59599516SKenneth E. Jansen u2 = u2 + shp(i,intp)*ycl(:,i,3) 157*59599516SKenneth E. Jansen u3 = u3 + shp(i,intp)*ycl(:,i,4) 158*59599516SKenneth E. Jansen enddo 159*59599516SKenneth E. Jansen 160*59599516SKenneth E. Jansen fresli(:,1) = fresli(:,22) * u1 !rho u1 * WdetJ 161*59599516SKenneth E. Jansen fresli(:,2) = fresli(:,22) * u2 !rho u2 * WdetJ 162*59599516SKenneth E. Jansen fresli(:,3) = fresli(:,22) * u3 !rho u3 * WdetJ 163*59599516SKenneth E. Jansen 164*59599516SKenneth E. Jansen fresli(:,4) = fresli(:,1) * u1 !rho u1 u1 *WdetJ 165*59599516SKenneth E. Jansen fresli(:,5) = fresli(:,2) * u2 !rho u2 u2 *WdetJ 166*59599516SKenneth E. Jansen fresli(:,6) = fresli(:,3) * u3 !rho u3 u3 *WdetJ 167*59599516SKenneth E. Jansen fresli(:,7) = fresli(:,1) * u2 !rho u1 u2 *WdetJ 168*59599516SKenneth E. Jansen fresli(:,8) = fresli(:,1) * u3 !rho u1 u3 *WdetJ 169*59599516SKenneth E. Jansen fresli(:,9) = fresli(:,2) * u3 !rho u2 u3 *WdetJ 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansen fresli(:,16) = strnrm(:,intp) * fresli(:,10) ! rho *|Eps| *Eps11 *WdetJ 172*59599516SKenneth E. Jansen fresli(:,17) = strnrm(:,intp) * fresli(:,11) ! rho *|Eps| *Eps22 *WdetJ 173*59599516SKenneth E. Jansen fresli(:,18) = strnrm(:,intp) * fresli(:,12) ! rho *|Eps| *Eps33 *WdetJ 174*59599516SKenneth E. Jansen fresli(:,19) = strnrm(:,intp) * fresli(:,13) ! rho *|Eps| *Eps12 *WdetJ 175*59599516SKenneth E. Jansen fresli(:,20) = strnrm(:,intp) * fresli(:,14) ! rho *|Eps| *Eps13 *WdetJ 176*59599516SKenneth E. Jansen fresli(:,21) = strnrm(:,intp) * fresli(:,15) ! rho *|Eps| *Eps23 *WdetJ 177*59599516SKenneth E. Jansen 178*59599516SKenneth E. Jansen fresli(:,23) = WdetJ ! Integral of 1 over the element 179*59599516SKenneth E. Jansenc 180*59599516SKenneth E. Jansen do i = 1, 23 181*59599516SKenneth E. Jansen fresl(:,i) = fresl(:,i) + fresli(:,i) 182*59599516SKenneth E. Jansen enddo 183*59599516SKenneth E. Jansen 184*59599516SKenneth E. Jansen enddo !end of loop over integration points 185*59599516SKenneth E. Jansenc 186*59599516SKenneth E. Jansen do j = 1,nshl 187*59599516SKenneth E. Jansen do nel = 1,npro 188*59599516SKenneth E. Jansen fres(ien(nel,j),:) = fres(ien(nel,j),:) + fresl(nel,:) 189*59599516SKenneth E. Jansen enddo 190*59599516SKenneth E. Jansen enddo 191*59599516SKenneth E. Jansen 192*59599516SKenneth E. Jansen return 193*59599516SKenneth E. Jansen end 194*59599516SKenneth E. Jansen 195*59599516SKenneth E. Jansen 196*59599516SKenneth E. Jansen 197*59599516SKenneth E. Jansen 198*59599516SKenneth E. Jansen 199*59599516SKenneth E. Jansen 200*59599516SKenneth E. Jansen 201*59599516SKenneth E. Jansen 202*59599516SKenneth E. Jansen 203