xref: /phasta/phSolver/common/asithf.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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