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