xref: /phasta/phSolver/common/getstrl.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine getstrl( y, x, ien, strnrm, shgl, shp )
2*59599516SKenneth E. Jansen
3*59599516SKenneth E. Jansen      include "common.h"
4*59599516SKenneth E. Jansen
5*59599516SKenneth E. Jansen      dimension y(nshg,5)
6*59599516SKenneth E. Jansen      dimension x(numnp,3),            xl(npro,nenl,3)
7*59599516SKenneth E. Jansen      dimension ien(npro,nshl),        yl(npro,nshl,5),
8*59599516SKenneth E. Jansen     &          u1(npro),              u2(npro),
9*59599516SKenneth E. Jansen     &          u3(npro),              dxdxi(npro,nsd,nsd),
10*59599516SKenneth E. Jansen     &          strnrm(npro,maxsh),    dxidx(npro,nsd,nsd),
11*59599516SKenneth E. Jansen     &          shgl(nsd,nshl,maxsh),       shg(npro,nshl,nsd),
12*59599516SKenneth E. Jansen     &          shp(nshl,maxsh)
13*59599516SKenneth E. Jansen      dimension tmp(npro),             fresli(npro,24)
14*59599516SKenneth E. Jansen
15*59599516SKenneth E. Jansen      call localy (y,      yl,     ien,    5,  'gather  ')
16*59599516SKenneth E. Jansen      call localx (x,      xl,     ien,    3,  'gather  ')
17*59599516SKenneth E. Jansenc
18*59599516SKenneth E. Jansen
19*59599516SKenneth E. Jansen      if(matflg(1,1).eq.0) then ! compressible
20*59599516SKenneth E. Jansen      yl (:,:,1) = yl(:,:,1) / (Rgas * yl(:,:,5))
21*59599516SKenneth E. Jansen      else
22*59599516SKenneth E. Jansen      yl (:,:,1) = one
23*59599516SKenneth E. Jansen      endif
24*59599516SKenneth E. Jansen
25*59599516SKenneth E. Jansen      do intp = 1, ngauss
26*59599516SKenneth E. Jansen
27*59599516SKenneth E. Jansenc  calculate the metrics
28*59599516SKenneth E. Jansenc
29*59599516SKenneth E. Jansenc
30*59599516SKenneth E. Jansenc.... --------------------->  Element Metrics  <-----------------------
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansenc.... compute the deformation gradient
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansen        dxdxi = zero
35*59599516SKenneth E. Jansenc
36*59599516SKenneth E. Jansen          do n = 1, nenl
37*59599516SKenneth E. Jansen            dxdxi(:,1,1) = dxdxi(:,1,1) + xl(:,n,1) * shgl(1,n,intp)
38*59599516SKenneth E. Jansen            dxdxi(:,1,2) = dxdxi(:,1,2) + xl(:,n,1) * shgl(2,n,intp)
39*59599516SKenneth E. Jansen            dxdxi(:,1,3) = dxdxi(:,1,3) + xl(:,n,1) * shgl(3,n,intp)
40*59599516SKenneth E. Jansen            dxdxi(:,2,1) = dxdxi(:,2,1) + xl(:,n,2) * shgl(1,n,intp)
41*59599516SKenneth E. Jansen            dxdxi(:,2,2) = dxdxi(:,2,2) + xl(:,n,2) * shgl(2,n,intp)
42*59599516SKenneth E. Jansen            dxdxi(:,2,3) = dxdxi(:,2,3) + xl(:,n,2) * shgl(3,n,intp)
43*59599516SKenneth E. Jansen            dxdxi(:,3,1) = dxdxi(:,3,1) + xl(:,n,3) * shgl(1,n,intp)
44*59599516SKenneth E. Jansen            dxdxi(:,3,2) = dxdxi(:,3,2) + xl(:,n,3) * shgl(2,n,intp)
45*59599516SKenneth E. Jansen            dxdxi(:,3,3) = dxdxi(:,3,3) + xl(:,n,3) * shgl(3,n,intp)
46*59599516SKenneth E. Jansen          enddo
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient
49*59599516SKenneth E. Jansenc
50*59599516SKenneth E. Jansen        dxidx(:,1,1) =   dxdxi(:,2,2) * dxdxi(:,3,3)
51*59599516SKenneth E. Jansen     &                 - dxdxi(:,3,2) * dxdxi(:,2,3)
52*59599516SKenneth E. Jansen        dxidx(:,1,2) =   dxdxi(:,3,2) * dxdxi(:,1,3)
53*59599516SKenneth E. Jansen     &                 - dxdxi(:,1,2) * dxdxi(:,3,3)
54*59599516SKenneth E. Jansen        dxidx(:,1,3) =   dxdxi(:,1,2) * dxdxi(:,2,3)
55*59599516SKenneth E. Jansen     &                 - dxdxi(:,1,3) * dxdxi(:,2,2)
56*59599516SKenneth E. Jansen        tmp          = one / ( dxidx(:,1,1) * dxdxi(:,1,1)
57*59599516SKenneth E. Jansen     &                       + dxidx(:,1,2) * dxdxi(:,2,1)
58*59599516SKenneth E. Jansen     &                       + dxidx(:,1,3) * dxdxi(:,3,1) )
59*59599516SKenneth E. Jansen        dxidx(:,1,1) = dxidx(:,1,1) * tmp
60*59599516SKenneth E. Jansen        dxidx(:,1,2) = dxidx(:,1,2) * tmp
61*59599516SKenneth E. Jansen        dxidx(:,1,3) = dxidx(:,1,3) * tmp
62*59599516SKenneth E. Jansen        dxidx(:,2,1) = (dxdxi(:,2,3) * dxdxi(:,3,1)
63*59599516SKenneth E. Jansen     &                - dxdxi(:,2,1) * dxdxi(:,3,3)) * tmp
64*59599516SKenneth E. Jansen        dxidx(:,2,2) = (dxdxi(:,1,1) * dxdxi(:,3,3)
65*59599516SKenneth E. Jansen     &                - dxdxi(:,3,1) * dxdxi(:,1,3)) * tmp
66*59599516SKenneth E. Jansen        dxidx(:,2,3) = (dxdxi(:,2,1) * dxdxi(:,1,3)
67*59599516SKenneth E. Jansen     &                - dxdxi(:,1,1) * dxdxi(:,2,3)) * tmp
68*59599516SKenneth E. Jansen        dxidx(:,3,1) = (dxdxi(:,2,1) * dxdxi(:,3,2)
69*59599516SKenneth E. Jansen     &                - dxdxi(:,2,2) * dxdxi(:,3,1)) * tmp
70*59599516SKenneth E. Jansen        dxidx(:,3,2) = (dxdxi(:,3,1) * dxdxi(:,1,2)
71*59599516SKenneth E. Jansen     &                - dxdxi(:,1,1) * dxdxi(:,3,2)) * tmp
72*59599516SKenneth E. Jansen        dxidx(:,3,3) = (dxdxi(:,1,1) * dxdxi(:,2,2)
73*59599516SKenneth E. Jansen     &                - dxdxi(:,1,2) * dxdxi(:,2,1)) * tmp
74*59599516SKenneth E. Jansenc
75*59599516SKenneth E. Jansen
76*59599516SKenneth E. Jansen      fresli=zero
77*59599516SKenneth E. Jansen      do i=1,nshl
78*59599516SKenneth E. Jansen        fresli(:,22) = fresli(:,22)+shp(i,intp)*yl(:,i,1)  ! density at qpt
79*59599516SKenneth E. Jansenc       fresli(:,24) = fresli(:,24)+shp(i,intp)*yl(:,i,5)  !temperature at qpt
80*59599516SKenneth E. Jansen      enddo
81*59599516SKenneth E. Jansenc
82*59599516SKenneth E. Jansenc
83*59599516SKenneth E. Jansenc     fresli(:,22)=fresli(:,22)*wght
84*59599516SKenneth E. Jansenc     fresli(:,24)=fresli(:,24)*wght
85*59599516SKenneth E. Jansen
86*59599516SKenneth E. Jansen
87*59599516SKenneth E. Jansen      do n = 1,nshl
88*59599516SKenneth E. Jansen        shg(:,n,1) = (shgl(1,n,intp) * dxidx(:,1,1)
89*59599516SKenneth E. Jansen     &              + shgl(2,n,intp) * dxidx(:,2,1)
90*59599516SKenneth E. Jansen     &              + shgl(3,n,intp) * dxidx(:,3,1))
91*59599516SKenneth E. Jansen        shg(:,n,2) = (shgl(1,n,intp) * dxidx(:,1,2)
92*59599516SKenneth E. Jansen     &              + shgl(2,n,intp) * dxidx(:,2,2)
93*59599516SKenneth E. Jansen     &              + shgl(3,n,intp) * dxidx(:,3,2))
94*59599516SKenneth E. Jansen        shg(:,n,3) = (shgl(1,n,intp) * dxidx(:,1,3)
95*59599516SKenneth E. Jansen     &              + shgl(2,n,intp) * dxidx(:,2,3)
96*59599516SKenneth E. Jansen     &              + shgl(3,n,intp) * dxidx(:,3,3))
97*59599516SKenneth E. Jansen      enddo
98*59599516SKenneth E. Jansen
99*59599516SKenneth E. Jansen      do j=10,12  ! normal strainrate u_{i,i} no sum on i
100*59599516SKenneth E. Jansen       ig=j-9
101*59599516SKenneth E. Jansen       iv=j-8
102*59599516SKenneth E. Jansen       do i=1,nshl
103*59599516SKenneth E. Jansen        fresli(:,j) = fresli(:,j)+shg(:,i,ig)*yl(:,i,iv)
104*59599516SKenneth E. Jansen       enddo
105*59599516SKenneth E. Jansen      enddo
106*59599516SKenneth E. Jansen
107*59599516SKenneth E. Jansenc shear stresses  NOTE  there may be faster ways to do this
108*59599516SKenneth E. Jansenc                  check agains CM5 code for speed WTP
109*59599516SKenneth E. Jansen
110*59599516SKenneth E. Jansen       do i=1,nshl
111*59599516SKenneth E. Jansen        fresli(:,13) = fresli(:,13)+shg(:,i,2)*yl(:,i,2)
112*59599516SKenneth E. Jansen     &                             +shg(:,i,1)*yl(:,i,3)
113*59599516SKenneth E. Jansen        fresli(:,14) = fresli(:,14)+shg(:,i,3)*yl(:,i,2)
114*59599516SKenneth E. Jansen     &                             +shg(:,i,1)*yl(:,i,4)
115*59599516SKenneth E. Jansen        fresli(:,15) = fresli(:,15)+shg(:,i,3)*yl(:,i,3)
116*59599516SKenneth E. Jansen     &                             +shg(:,i,2)*yl(:,i,4)
117*59599516SKenneth E. Jansen       enddo
118*59599516SKenneth E. Jansen
119*59599516SKenneth E. Jansen
120*59599516SKenneth E. Jansen      fresli(:,13) = pt5 * fresli(:,13)
121*59599516SKenneth E. Jansen      fresli(:,14) = pt5 * fresli(:,14)
122*59599516SKenneth E. Jansen      fresli(:,15) = pt5 * fresli(:,15)
123*59599516SKenneth E. Jansen
124*59599516SKenneth E. Jansen      strnrm(:,intp) = fresli(:,22) * sqrt(
125*59599516SKenneth E. Jansen     &   two * (fresli(:,10)**2 + fresli(:,11)**2 + fresli(:,12)**2)
126*59599516SKenneth E. Jansen     &  + four * ( fresli(:,13)**2 + fresli(:,14)**2 +
127*59599516SKenneth E. Jansen     &    fresli(:,15)**2 ) )
128*59599516SKenneth E. Jansen
129*59599516SKenneth E. Jansen
130*59599516SKenneth E. Jansen      enddo !end of loop over integration points
131*59599516SKenneth E. Jansen
132*59599516SKenneth E. Jansen
133*59599516SKenneth E. Jansen      return
134*59599516SKenneth E. Jansen      end
135