xref: /phasta/phSolver/incompressible/stats.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc     module for time averaged statistics (conservative projection).
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
6*59599516SKenneth E. Jansen      module stats
7*59599516SKenneth E. Jansen
8*59599516SKenneth E. Jansen      integer nResDims, nSolDims, nLhsDims, nTimeStep, stsResFlg
9*59599516SKenneth E. Jansen      integer stsCompFreq, stsWriteFreq, stsResetFreq, step1,
10*59599516SKenneth E. Jansen     &        stsType
11*59599516SKenneth E. Jansen
12*59599516SKenneth E. Jansen      real*8, allocatable :: stsVec(:,:)
13*59599516SKenneth E. Jansen
14*59599516SKenneth E. Jansen      real*8, allocatable :: stsReg(:)
15*59599516SKenneth E. Jansen      real*8, allocatable :: stsMInv(:,:)
16*59599516SKenneth E. Jansen      real*8, allocatable :: stsB(:,:)
17*59599516SKenneth E. Jansen      real*8, allocatable :: stsDInv(:,:)
18*59599516SKenneth E. Jansen      real*8, allocatable :: stsCInv(:,:)
19*59599516SKenneth E. Jansen
20*59599516SKenneth E. Jansen      real*8, allocatable :: stsPres(:), stsPresSqr(:), stsVel(:,:),
21*59599516SKenneth E. Jansen     &                       stsVelSqr(:,:), stsVelReg(:,:),
22*59599516SKenneth E. Jansen     &                       stsStress(:,:)
23*59599516SKenneth E. Jansen
24*59599516SKenneth E. Jansen      end module
25*59599516SKenneth E. Jansen
26*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
27*59599516SKenneth E. Jansenc     create the new statistics arrays
28*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
29*59599516SKenneth E. Jansen      subroutine initStats(x,   iBC,    iper,   ilwork)
30*59599516SKenneth E. Jansen
31*59599516SKenneth E. Jansen      use stats
32*59599516SKenneth E. Jansen      include "common.h"
33*59599516SKenneth E. Jansen
34*59599516SKenneth E. Jansen      real*8  x(numnp,3)
35*59599516SKenneth E. Jansen      integer ilwork(nlwork), iper(nshg), iBC(nshg)
36*59599516SKenneth E. Jansen
37*59599516SKenneth E. Jansen      if (ipord .eq. 1) then
38*59599516SKenneth E. Jansen         stsType      = 1
39*59599516SKenneth E. Jansen      else
40*59599516SKenneth E. Jansen         stsType      = 2
41*59599516SKenneth E. Jansen      endif
42*59599516SKenneth E. Jansen
43*59599516SKenneth E. Jansen      stsWriteFreq = 200
44*59599516SKenneth E. Jansen
45*59599516SKenneth E. Jansen      nResDims = 11
46*59599516SKenneth E. Jansen      nSolDims = 10
47*59599516SKenneth E. Jansen      nLhsDims = 19
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansen      allocate ( stsVec(nshg,nResDims) )
50*59599516SKenneth E. Jansen
51*59599516SKenneth E. Jansen      if (stsType .eq. 1) then
52*59599516SKenneth E. Jansen         allocate ( stsReg(nshg)          )
53*59599516SKenneth E. Jansen         allocate ( stsMInv(nshg,6)       )
54*59599516SKenneth E. Jansen         allocate ( stsB(nshg,3)          )
55*59599516SKenneth E. Jansen         allocate ( stsDInv(nshg,3)       )
56*59599516SKenneth E. Jansen         allocate ( stsCInv(nshg,6)       )
57*59599516SKenneth E. Jansen      endif
58*59599516SKenneth E. Jansen
59*59599516SKenneth E. Jansen      allocate ( stsPres(nshg)         )
60*59599516SKenneth E. Jansen      allocate ( stsPresSqr(nshg)      )
61*59599516SKenneth E. Jansen      allocate ( stsVel(nshg,3)        )
62*59599516SKenneth E. Jansen      allocate ( stsVelSqr(nshg,6)     )
63*59599516SKenneth E. Jansen      allocate ( stsVelReg(nshg,3)     )
64*59599516SKenneth E. Jansen      allocate ( stsStress(nshg,6)     )
65*59599516SKenneth E. Jansen
66*59599516SKenneth E. Jansen      stsPres    = 0.0
67*59599516SKenneth E. Jansen      stsPresSqr = 0.0
68*59599516SKenneth E. Jansen      stsVel     = 0.0
69*59599516SKenneth E. Jansen      stsVelSqr  = 0.0
70*59599516SKenneth E. Jansen      stsVelReg  = 0.0
71*59599516SKenneth E. Jansen      stsStress  = 0.0
72*59599516SKenneth E. Jansen
73*59599516SKenneth E. Jansen      step1      = lstep+1
74*59599516SKenneth E. Jansen      nTimeStep  = 0
75*59599516SKenneth E. Jansen      stsResFlg  = 0
76*59599516SKenneth E. Jansen
77*59599516SKenneth E. Jansen      if (stsType .eq. 1) then
78*59599516SKenneth E. Jansen         call elmStatsLhs( x,   iBC,   iper,   ilwork )
79*59599516SKenneth E. Jansen         call stsInitLhs(  nshg )
80*59599516SKenneth E. Jansen      endif
81*59599516SKenneth E. Jansen
82*59599516SKenneth E. Jansen      return
83*59599516SKenneth E. Jansen      end
84*59599516SKenneth E. Jansen
85*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
86*59599516SKenneth E. Jansenc     compute the Lhs matrices needed for the conservative projection
87*59599516SKenneth E. Jansenc     of the statistics
88*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
89*59599516SKenneth E. Jansen      subroutine stsInitLhs(nshg)
90*59599516SKenneth E. Jansen
91*59599516SKenneth E. Jansen      use     stats
92*59599516SKenneth E. Jansen      integer nshg
93*59599516SKenneth E. Jansen
94*59599516SKenneth E. Jansen      real*8  res(nResDims), reg, det, r0, r1, r2, r3, r4, r5,
95*59599516SKenneth E. Jansen     &        d0, d1, d2, c0, c1, c2, c3, c4, c5
96*59599516SKenneth E. Jansen      integer i
97*59599516SKenneth E. Jansen
98*59599516SKenneth E. Jansenc
99*59599516SKenneth E. Jansenc.... build the regularization
100*59599516SKenneth E. Jansenc
101*59599516SKenneth E. Jansen      do i = 1, nshg
102*59599516SKenneth E. Jansen         res = stsVec(i,:)
103*59599516SKenneth E. Jansen         reg = res(1) * res(2) * res(3)
104*59599516SKenneth E. Jansen         det = res(1) * (res(2) * res(3) - res(5) * res(5))
105*59599516SKenneth E. Jansen     &       + res(4) * (res(5) * res(6) - res(4) * res(3))
106*59599516SKenneth E. Jansen     &       + res(6) * (res(4) * res(5) - res(2) * res(6))
107*59599516SKenneth E. Jansen
108*59599516SKenneth E. Jansen         if ( det .gt. 1.d-10*reg .and. reg .ne. 0 ) then
109*59599516SKenneth E. Jansen	    stsReg(i) = 0
110*59599516SKenneth E. Jansen         else
111*59599516SKenneth E. Jansen	    stsReg(i) = (res(1) + res(2) + res(3)) / 1000.
112*59599516SKenneth E. Jansen         endif
113*59599516SKenneth E. Jansen      enddo
114*59599516SKenneth E. Jansen
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansenc.... form M and factorize
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansen      do i = 1, nshg
119*59599516SKenneth E. Jansen         res   = stsVec(i,:)
120*59599516SKenneth E. Jansen         reg   = stsReg(i)
121*59599516SKenneth E. Jansen         r0    = res(1) + reg
122*59599516SKenneth E. Jansen         r1    = res(2) + reg
123*59599516SKenneth E. Jansen         r2    = res(3) + reg
124*59599516SKenneth E. Jansen         r3    = res(4)
125*59599516SKenneth E. Jansen         r4    = res(5)
126*59599516SKenneth E. Jansen         r5    = res(6)
127*59599516SKenneth E. Jansen
128*59599516SKenneth E. Jansen         det   = r0 * (r1 * r2 - r4 * r4)
129*59599516SKenneth E. Jansen     &         + r3 * (r4 * r5 - r3 * r2)
130*59599516SKenneth E. Jansen     &         + r5 * (r3 * r4 - r1 * r5)
131*59599516SKenneth E. Jansen         det   = 1.0/det
132*59599516SKenneth E. Jansen
133*59599516SKenneth E. Jansen         stsMInv(i,1) = det * (r1 * r2 - r4 * r4)
134*59599516SKenneth E. Jansen         stsMInv(i,2) = det * (r0 * r2 - r5 * r5)
135*59599516SKenneth E. Jansen         stsMInv(i,3) = det * (r0 * r1 - r3 * r3)
136*59599516SKenneth E. Jansen         stsMInv(i,4) = det * (r4 * r5 - r2 * r3)
137*59599516SKenneth E. Jansen         stsMInv(i,5) = det * (r3 * r5 - r0 * r4)
138*59599516SKenneth E. Jansen         stsMInv(i,6) = det * (r3 * r4 - r1 * r5)
139*59599516SKenneth E. Jansen      enddo
140*59599516SKenneth E. Jansen
141*59599516SKenneth E. Jansenc
142*59599516SKenneth E. Jansenc.... form B, DInv and CInv
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansen      do i = 1, nshg
145*59599516SKenneth E. Jansen	res          = stsVec(i,:)
146*59599516SKenneth E. Jansen	reg          = stsReg(i)
147*59599516SKenneth E. Jansen	r0           = res(1)
148*59599516SKenneth E. Jansen	r1           = res(2)
149*59599516SKenneth E. Jansen	r2           = res(3)
150*59599516SKenneth E. Jansen	r3           = res(4)
151*59599516SKenneth E. Jansen	r4           = res(5)
152*59599516SKenneth E. Jansen	r5           = res(6)
153*59599516SKenneth E. Jansen	d0           = 1. / ( reg + r0 )
154*59599516SKenneth E. Jansen	d1           = 1. / ( reg + r1 )
155*59599516SKenneth E. Jansen	d2           = 1. / ( reg + r2 )
156*59599516SKenneth E. Jansen	stsDInv(i,1) = d0
157*59599516SKenneth E. Jansen	stsDInv(i,2) = d1
158*59599516SKenneth E. Jansen	stsDInv(i,3) = d2
159*59599516SKenneth E. Jansen	stsB(i,1)    = r3
160*59599516SKenneth E. Jansen	stsB(i,2)    = r4
161*59599516SKenneth E. Jansen	stsB(i,3)    = r5
162*59599516SKenneth E. Jansen	c0           = r0 + r1 - r3 * r3 * (d0 + d1) + reg
163*59599516SKenneth E. Jansen	c1           = r1 + r2 - r4 * r4 * (d1 + d2) + reg
164*59599516SKenneth E. Jansen	c2           = r2 + r0 - r5 * r5 * (d2 + d0) + reg
165*59599516SKenneth E. Jansen	c3           = r5      - r3 * r4 * d1
166*59599516SKenneth E. Jansen	c4           = r3      - r4 * r5 * d2
167*59599516SKenneth E. Jansen	c5           = r4      - r5 * r3 * d0
168*59599516SKenneth E. Jansen	det          = c0 * (c1 * c2 - c4 * c4)
169*59599516SKenneth E. Jansen     &               + c3 * (c4 * c5 - c3 * c2)
170*59599516SKenneth E. Jansen     &               + c5 * (c3 * c4 - c1 * c5)
171*59599516SKenneth E. Jansen	det          = 1. / det
172*59599516SKenneth E. Jansen	stsCInv(i,1) = det * (c1 * c2 - c4 * c4)
173*59599516SKenneth E. Jansen	stsCInv(i,2) = det * (c0 * c2 - c5 * c5)
174*59599516SKenneth E. Jansen	stsCInv(i,3) = det * (c0 * c1 - c3 * c3)
175*59599516SKenneth E. Jansen	stsCInv(i,4) = det * (c4 * c5 - c2 * c3)
176*59599516SKenneth E. Jansen	stsCInv(i,5) = det * (c3 * c5 - c0 * c4)
177*59599516SKenneth E. Jansen	stsCInv(i,6) = det * (c3 * c4 - c1 * c5)
178*59599516SKenneth E. Jansen      enddo
179*59599516SKenneth E. Jansen
180*59599516SKenneth E. Jansen      return
181*59599516SKenneth E. Jansen      end
182*59599516SKenneth E. Jansen
183*59599516SKenneth E. Jansen
184*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
185*59599516SKenneth E. Jansenc     collect the desired statistics
186*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
187*59599516SKenneth E. Jansen      subroutine stsGetStats( y,      yold,   ac,     acold,
188*59599516SKenneth E. Jansen     &                        u,      uold,   x,
189*59599516SKenneth E. Jansen     &                        shp,    shgl,   shpb,   shglb,
190*59599516SKenneth E. Jansen     &                        iBC,    BC,     iper,   ilwork,
191*59599516SKenneth E. Jansen     &                        rowp,   colm,   lhsK,   lhsP )
192*59599516SKenneth E. Jansen
193*59599516SKenneth E. Jansen      use     stats
194*59599516SKenneth E. Jansen
195*59599516SKenneth E. Jansen      include "common.h"
196*59599516SKenneth E. Jansen
197*59599516SKenneth E. Jansen      real*8  y(nshg,ndof),             yold(nshg,ndof),
198*59599516SKenneth E. Jansen     &        ac(nshg,ndof),            acold(nshg,ndof),
199*59599516SKenneth E. Jansen     &        u(nshg,nsd),              uold(nshg,nsd),
200*59599516SKenneth E. Jansen     &        shp(MAXTOP,maxsh,MAXQPT),  shgl(MAXTOP,nsd,maxsh,MAXQPT),
201*59599516SKenneth E. Jansen     &        shpb(MAXTOP,maxsh,MAXQPT),
202*59599516SKenneth E. Jansen     &        shglb(MAXTOP,nsd,maxsh,MAXQPT),
203*59599516SKenneth E. Jansen     &        BC(nshg,ndofBC),          lhsK(9,nnz_tot),
204*59599516SKenneth E. Jansen     &        lhsP(4,nnz_tot),         x(numnp,nsd)
205*59599516SKenneth E. Jansen
206*59599516SKenneth E. Jansen      integer iBC(nshg),                iper(nshg),
207*59599516SKenneth E. Jansen     &        ilwork(nlwork),           rowp(nshg*nnz),
208*59599516SKenneth E. Jansen     &        colm(nshg+1)
209*59599516SKenneth E. Jansen
210*59599516SKenneth E. Jansen
211*59599516SKenneth E. Jansen      real*8  yAlpha(nshg,ndof),      acAlpha(nshg,ndof),
212*59599516SKenneth E. Jansen     &        uAlpha(nshg,nsd),
213*59599516SKenneth E. Jansen     &        res(nResDims),          MInv(6),
214*59599516SKenneth E. Jansen     &        DInv(3),                B(3),
215*59599516SKenneth E. Jansen     &        CInv(6)
216*59599516SKenneth E. Jansen
217*59599516SKenneth E. Jansen      real*8 u1, u2, u3, r0, r1, r2, r3, r4, r5, t3, t4, t5
218*59599516SKenneth E. Jansen
219*59599516SKenneth E. Jansen      integer i
220*59599516SKenneth E. Jansen
221*59599516SKenneth E. Jansen      nTimeStep = nTimeStep + 1
222*59599516SKenneth E. Jansenc
223*59599516SKenneth E. Jansenc.... compute solution at n+alpha
224*59599516SKenneth E. Jansenc
225*59599516SKenneth E. Jansen      call itrYAlpha( uold,     yold,     acold,
226*59599516SKenneth E. Jansen     &                u,        y,        ac,
227*59599516SKenneth E. Jansen     &                uAlpha,   yAlpha,   acAlpha)
228*59599516SKenneth E. Jansen
229*59599516SKenneth E. Jansenc
230*59599516SKenneth E. Jansenc.... assemble the residual
231*59599516SKenneth E. Jansenc
232*59599516SKenneth E. Jansen      if (stsType .eq. 1) then
233*59599516SKenneth E. Jansen         call elmStatsRes( yAlpha,   acAlpha,     x,       shp,   shgl,
234*59599516SKenneth E. Jansen     &                     shpb,     shglb,       iBC,     BC,
235*59599516SKenneth E. Jansen     &                     iper,     ilwork,      rowp,    colm,
236*59599516SKenneth E. Jansen     &                     lhsK,     lhsP  )
237*59599516SKenneth E. Jansen
238*59599516SKenneth E. Jansenc
239*59599516SKenneth E. Jansenc.... compute the statistics
240*59599516SKenneth E. Jansenc
241*59599516SKenneth E. Jansen         do i = 1, nshg
242*59599516SKenneth E. Jansen            res   = stsVec(i,:)
243*59599516SKenneth E. Jansen            reg   = stsReg(i)
244*59599516SKenneth E. Jansen
245*59599516SKenneth E. Jansen            MInv  = stsMInv(i,:)
246*59599516SKenneth E. Jansen            DInv  = stsDInv(i,:)
247*59599516SKenneth E. Jansen            B     = stsB(i,:)
248*59599516SKenneth E. Jansen            CInv  = stsCInv(i,:)
249*59599516SKenneth E. Jansen
250*59599516SKenneth E. Jansen            u1    = yAlpha(i,1)
251*59599516SKenneth E. Jansen            u2    = yAlpha(i,2)
252*59599516SKenneth E. Jansen            u3    = yAlpha(i,3)
253*59599516SKenneth E. Jansen
254*59599516SKenneth E. Jansen            stsPres(i)    = stsPres(i)    +  y(i,4)
255*59599516SKenneth E. Jansen            stsPresSqr(i) = stsPresSqr(i) +  y(i,4)*y(i,4)
256*59599516SKenneth E. Jansen
257*59599516SKenneth E. Jansen            r0            = res(1) + reg * u1
258*59599516SKenneth E. Jansen            r1            = res(2) + reg * u2
259*59599516SKenneth E. Jansen            r2            = res(3) + reg * u3
260*59599516SKenneth E. Jansen
261*59599516SKenneth E. Jansen            stsVel(i,1)   = stsVel(i,1)
262*59599516SKenneth E. Jansen     &                    + MInv(1) * r0 + MInv(4) * r1 + MInv(6) * r2
263*59599516SKenneth E. Jansen            stsVel(i,2)   = stsVel(i,2)
264*59599516SKenneth E. Jansen     &                    + MInv(4) * r0 + MInv(2) * r1 + MInv(5) * r2
265*59599516SKenneth E. Jansen            stsVel(i,3)   = stsVel(i,3)
266*59599516SKenneth E. Jansen     &                    + MInv(6) * r0 + MInv(5) * r1 + MInv(3) * r2
267*59599516SKenneth E. Jansen
268*59599516SKenneth E. Jansen            stsVelReg(i,1) = stsVelReg(i,1) + u1
269*59599516SKenneth E. Jansen            stsVelReg(i,2) = stsVelReg(i,2) + u2
270*59599516SKenneth E. Jansen            stsVelReg(i,3) = stsVelReg(i,3) + u3
271*59599516SKenneth E. Jansen
272*59599516SKenneth E. Jansen            r0	        = res(1) * u1               + reg * u1 * u1
273*59599516SKenneth E. Jansen            r1		= res(2) * u2               + reg * u2 * u2
274*59599516SKenneth E. Jansen            r2		= res(3) * u3               + reg * u3 * u3
275*59599516SKenneth E. Jansen            r3	        = res(1) * u2 + res(2) * u1 + reg * u2 * u1
276*59599516SKenneth E. Jansen            r4		= res(2) * u3 + res(3) * u2 + reg * u3 * u2
277*59599516SKenneth E. Jansen            r5		= res(3) * u1 + res(1) * u3 + reg * u1 * u3
278*59599516SKenneth E. Jansen            r0          = DInv(1) * r0
279*59599516SKenneth E. Jansen            r1          = DInv(2) * r1
280*59599516SKenneth E. Jansen            r2          = DInv(3) * r2
281*59599516SKenneth E. Jansen            r3          = r3 - B(1) * (r0 + r1)
282*59599516SKenneth E. Jansen            r4          = r4 - B(2) * (r1 + r2)
283*59599516SKenneth E. Jansen            r5          = r5 - B(3) * (r2 + r0)
284*59599516SKenneth E. Jansen            t3          = CInv(1) * r3 + CInv(4) * r4 + CInv(6) * r5
285*59599516SKenneth E. Jansen            t4          = CInv(4) * r3 + CInv(2) * r4 + CInv(5) * r5
286*59599516SKenneth E. Jansen            t5          = CInv(6) * r3 + CInv(5) * r4 + CInv(3) * r5
287*59599516SKenneth E. Jansen
288*59599516SKenneth E. Jansen            stsVelSqr(i,1) = stsVelSqr(i,1)
289*59599516SKenneth E. Jansen     &                  + r0 - DInv(1) * (B(1) * t3 + B(3) * t5)
290*59599516SKenneth E. Jansen            stsVelSqr(i,2) = stsVelSqr(i,2)
291*59599516SKenneth E. Jansen     &                  + r1 - DInv(2) * (B(2) * t4 + B(1) * t3)
292*59599516SKenneth E. Jansen            stsVelSqr(i,3) = stsVelSqr(i,3)
293*59599516SKenneth E. Jansen     &                  + r2 - DInv(3) * (B(3) * t5 + B(2) * t4)
294*59599516SKenneth E. Jansen
295*59599516SKenneth E. Jansen            stsVelSqr(i,4) = stsVelSqr(i,4) + t3
296*59599516SKenneth E. Jansen            stsVelSqr(i,5) = stsVelSqr(i,5) + t4
297*59599516SKenneth E. Jansen            stsVelSqr(i,6) = stsVelSqr(i,6) + t5
298*59599516SKenneth E. Jansen
299*59599516SKenneth E. Jansen            r0	        = res(4)
300*59599516SKenneth E. Jansen            r1		= res(5)
301*59599516SKenneth E. Jansen            r2		= res(6)
302*59599516SKenneth E. Jansen            r3		= res(7)
303*59599516SKenneth E. Jansen            r4		= res(8)
304*59599516SKenneth E. Jansen            r5		= res(9)
305*59599516SKenneth E. Jansen
306*59599516SKenneth E. Jansen            r0          = DInv(1) * r0
307*59599516SKenneth E. Jansen            r1          = DInv(2) * r1
308*59599516SKenneth E. Jansen            r2          = DInv(3) * r2
309*59599516SKenneth E. Jansen
310*59599516SKenneth E. Jansen            r3          = r3 - B(1) * (r0 + r1)
311*59599516SKenneth E. Jansen            r4          = r4 - B(2) * (r1 + r2)
312*59599516SKenneth E. Jansen            r5          = r5 - B(3) * (r2 + r0)
313*59599516SKenneth E. Jansen
314*59599516SKenneth E. Jansen            t3          = CInv(1) * r3 + CInv(4) * r4 + CInv(6) * r5
315*59599516SKenneth E. Jansen            t4          = CInv(4) * r3 + CInv(2) * r4 + CInv(5) * r5
316*59599516SKenneth E. Jansen            t5          = CInv(6) * r3 + CInv(5) * r4 + CInv(3) * r5
317*59599516SKenneth E. Jansen
318*59599516SKenneth E. Jansen            stsStress(i,1) = stsStress(i,1)
319*59599516SKenneth E. Jansen     &                  + r0 - DInv(1) * (B(1) * t3 + B(3) * t5)
320*59599516SKenneth E. Jansen            stsStress(i,2) = stsStress(i,2)
321*59599516SKenneth E. Jansen     &                  + r1 - DInv(2) * (B(2) * t4 + B(1) * t3)
322*59599516SKenneth E. Jansen            stsStress(i,3) = stsStress(i,3)
323*59599516SKenneth E. Jansen     &                  + r2 - DInv(3) * (B(3) * t5 + B(2) * t4)
324*59599516SKenneth E. Jansen            stsStress(i,4) = stsStress(i,4) + t3
325*59599516SKenneth E. Jansen            stsStress(i,5) = stsStress(i,5) + t4
326*59599516SKenneth E. Jansen            stsStress(i,6) = stsStress(i,6) + t5
327*59599516SKenneth E. Jansen         enddo
328*59599516SKenneth E. Jansen      else if (stsType .eq. 2) then
329*59599516SKenneth E. Jansen
330*59599516SKenneth E. Jansen         call evalAtInterp( yAlpha,     stsVec,         x,
331*59599516SKenneth E. Jansen     &                      nResDims,   nshape)
332*59599516SKenneth E. Jansen
333*59599516SKenneth E. Jansen         do i = 1, nshg
334*59599516SKenneth E. Jansen
335*59599516SKenneth E. Jansen            u1    = stsVec(i,1)
336*59599516SKenneth E. Jansen            u2    = stsVec(i,2)
337*59599516SKenneth E. Jansen            u3    = stsVec(i,3)
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansen            stsPres(i)    = stsPres(i)    +  stsVec(i,4)
340*59599516SKenneth E. Jansen            stsPresSqr(i) = stsPresSqr(i) +  stsVec(i,4)*stsVec(i,4)
341*59599516SKenneth E. Jansen
342*59599516SKenneth E. Jansen            stsVel(i,1) = stsVel(i,1) + u1
343*59599516SKenneth E. Jansen            stsVel(i,2) = stsVel(i,2) + u2
344*59599516SKenneth E. Jansen            stsVel(i,3) = stsVel(i,3) + u3
345*59599516SKenneth E. Jansen
346*59599516SKenneth E. Jansen            stsVelSqr(i,1) = stsVelSqr(i,1) + u1*u1
347*59599516SKenneth E. Jansen            stsVelSqr(i,2) = stsVelSqr(i,2) + u2*u2
348*59599516SKenneth E. Jansen            stsVelSqr(i,3) = stsVelSqr(i,3) + u3*u3
349*59599516SKenneth E. Jansen            stsVelSqr(i,4) = stsVelSqr(i,4) + u1*u2
350*59599516SKenneth E. Jansen            stsVelSqr(i,5) = stsVelSqr(i,5) + u2*u3
351*59599516SKenneth E. Jansen            stsVelSqr(i,6) = stsVelSqr(i,6) + u3*u1
352*59599516SKenneth E. Jansen
353*59599516SKenneth E. Jansen            stsStress(i,1) = stsStress(i,1) + stsVec(i,6)
354*59599516SKenneth E. Jansen            stsStress(i,2) = stsStress(i,2) + stsVec(i,7)
355*59599516SKenneth E. Jansen            stsStress(i,3) = stsStress(i,3) + stsVec(i,8)
356*59599516SKenneth E. Jansen            stsStress(i,4) = stsStress(i,4) + stsVec(i,9)
357*59599516SKenneth E. Jansen            stsStress(i,5) = stsStress(i,5) + stsVec(i,10)
358*59599516SKenneth E. Jansen            stsStress(i,6) = stsStress(i,6) + stsVec(i,11)
359*59599516SKenneth E. Jansen
360*59599516SKenneth E. Jansen         enddo
361*59599516SKenneth E. Jansen      endif
362*59599516SKenneth E. Jansen
363*59599516SKenneth E. Jansen      if ( mod(nTimeStep,stsWriteFreq) .eq. 0 .or.
364*59599516SKenneth E. Jansen     &     nTimeStep .eq. nstep(itseq) ) then
365*59599516SKenneth E. Jansen         call stsWriteStats()
366*59599516SKenneth E. Jansen      endif
367*59599516SKenneth E. Jansen
368*59599516SKenneth E. Jansenc$$$      if ( mod( nTimeStep, stsResetFreq) .eq. 0 ) then
369*59599516SKenneth E. Jansenc$$$         stsPres    = 0.0
370*59599516SKenneth E. Jansenc$$$         stsPresSqr = 0.0
371*59599516SKenneth E. Jansenc$$$         stsVel     = 0.0
372*59599516SKenneth E. Jansenc$$$         stsVelSqr  = 0.0
373*59599516SKenneth E. Jansenc$$$         stsVelReg  = 0.0
374*59599516SKenneth E. Jansenc$$$         stsStress  = 0.0
375*59599516SKenneth E. Jansenc$$$
376*59599516SKenneth E. Jansenc$$$         nTimeStep  = 0
377*59599516SKenneth E. Jansenc$$$      endif
378*59599516SKenneth E. Jansen
379*59599516SKenneth E. Jansen      return
380*59599516SKenneth E. Jansen      end
381*59599516SKenneth E. Jansen
382*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
383*59599516SKenneth E. Jansenc     collect the desired statistics
384*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
385*59599516SKenneth E. Jansen      subroutine stsWriteStats()
386*59599516SKenneth E. Jansen
387*59599516SKenneth E. Jansen      use     stats
388*59599516SKenneth E. Jansen      include "common.h"
389*59599516SKenneth E. Jansen
390*59599516SKenneth E. Jansen      integer      iofile, step2, itmp1, itmp,iofile2
391*59599516SKenneth E. Jansen      character*30 fname,  fmt1
392*59599516SKenneth E. Jansen      character*5  cname
393*59599516SKenneth E. Jansen      character*1  dash
394*59599516SKenneth E. Jansen      real*8       outvec(nshg,19)
395*59599516SKenneth E. Jansenc
396*59599516SKenneth E. Jansenc.... open the output file
397*59599516SKenneth E. Jansenc
398*59599516SKenneth E. Jansen      iofile = 39
399*59599516SKenneth E. Jansen      step2 = lstep+1  ! current time step
400*59599516SKenneth E. Jansen      itmp  = 1
401*59599516SKenneth E. Jansen      itmp1 = 1
402*59599516SKenneth E. Jansen      if (step1 .gt. 0) itmp  = int(log10(float(step1)))+1
403*59599516SKenneth E. Jansen      if (step2 .gt. 0) itmp1 = int(log10(float(step2)))+1
404*59599516SKenneth E. Jansen      dash = '-'
405*59599516SKenneth E. Jansen      write (fmt1,
406*59599516SKenneth E. Jansen     &     "('(''stats.'',i',i1,',a1,i',i1,',1x)')")
407*59599516SKenneth E. Jansen     &     itmp,itmp1
408*59599516SKenneth E. Jansen      write (fname,fmt1) step1,dash,step2
409*59599516SKenneth E. Jansen      fname = trim(fname) // cname(myrank+1)
410*59599516SKenneth E. Jansen      open ( unit = iofile, file = fname, status = 'unknown',
411*59599516SKenneth E. Jansen     &       form = 'unformatted')
412*59599516SKenneth E. Jansenc
413*59599516SKenneth E. Jansenc.... write the statistics
414*59599516SKenneth E. Jansenc
415*59599516SKenneth E. Jansen      outvec(:,1)     = stsPres(:)
416*59599516SKenneth E. Jansen      outvec(:,2:4)   = stsVel(:,:)
417*59599516SKenneth E. Jansenc      outvec(:,2:4)   = stsVelReg(:,:)
418*59599516SKenneth E. Jansen      outvec(:,5)     = zero   ! later will be temperature
419*59599516SKenneth E. Jansen      outvec(:,6)     = stsPresSqr(:)
420*59599516SKenneth E. Jansen      outvec(:,7:12)  = stsVelSqr(:,:)
421*59599516SKenneth E. Jansen      outvec(:,13)    = zero   ! later wil be tempSqr
422*59599516SKenneth E. Jansen      outvec(:,14:19) = stsStress(:,:)
423*59599516SKenneth E. Jansen
424*59599516SKenneth E. Jansen      write (iofile) numnp, nshg, nTimeStep
425*59599516SKenneth E. Jansen      write (iofile) outvec(1:nshg,:)
426*59599516SKenneth E. Jansen      close (iofile)
427*59599516SKenneth E. Jansen
428*59599516SKenneth E. Jansenc$$$      write (iofile) numnp, numnp, nTimeStep
429*59599516SKenneth E. Jansenc$$$      write (iofile) outvec(1:numnp,:)
430*59599516SKenneth E. Jansenc$$$      close (iofile)
431*59599516SKenneth E. Jansen
432*59599516SKenneth E. Jansen      iofile2 = 40
433*59599516SKenneth E. Jansenc$$$      open (unit=iofile2,file='stats.asc',status='unknown')
434*59599516SKenneth E. Jansenc$$$c$$$c
435*59599516SKenneth E. Jansenc$$$c$$$c.... pressure, velocity, temperature
436*59599516SKenneth E. Jansenc$$$c$$$c
437*59599516SKenneth E. Jansenc$$$c$$$      write (iofile2) outvec(:,1:5)
438*59599516SKenneth E. Jansenc$$$c$$$c
439*59599516SKenneth E. Jansenc$$$c$$$c.... pressSqr, u_i u_j, tempSqr
440*59599516SKenneth E. Jansenc$$$c$$$c
441*59599516SKenneth E. Jansenc$$$c$$$      write (iofile2) outvec(:,6:13)
442*59599516SKenneth E. Jansenc$$$c$$$c
443*59599516SKenneth E. Jansenc$$$c$$$c.... viscous stress
444*59599516SKenneth E. Jansenc$$$c$$$c
445*59599516SKenneth E. Jansenc$$$c$$$      write (iofile2) outvec(:,14:19)
446*59599516SKenneth E. Jansenc$$$c$$$
447*59599516SKenneth E. Jansenc$$$
448*59599516SKenneth E. Jansenc$$$c
449*59599516SKenneth E. Jansenc$$$c.... write the statistics
450*59599516SKenneth E. Jansenc$$$c
451*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'nNodes ',numnp
452*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'power ',2
453*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'nTimeSteps = ', nTimeStep
454*59599516SKenneth E. Jansenc$$$c
455*59599516SKenneth E. Jansenc$$$c.... velocity
456*59599516SKenneth E. Jansenc$$$c
457*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'vel 3 ',numnp
458*59599516SKenneth E. Jansenc$$$      do i = 1, numnp
459*59599516SKenneth E. Jansenc$$$         write (iofile2,111) stsVel(i,1), stsVel(i,2), stsVel(i,3)
460*59599516SKenneth E. Jansenc$$$      enddo
461*59599516SKenneth E. Jansenc$$$c
462*59599516SKenneth E. Jansenc$$$c.... pressure
463*59599516SKenneth E. Jansenc$$$c
464*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'pres 1 ',numnp
465*59599516SKenneth E. Jansenc$$$      do i = 1, numnp
466*59599516SKenneth E. Jansenc$$$         write (iofile2,112) stsPres(i)
467*59599516SKenneth E. Jansenc$$$      enddo
468*59599516SKenneth E. Jansenc$$$c
469*59599516SKenneth E. Jansenc$$$c.... velSqr
470*59599516SKenneth E. Jansenc$$$c
471*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'velSqr 6 ',numnp
472*59599516SKenneth E. Jansenc$$$      do i = 1, numnp
473*59599516SKenneth E. Jansenc$$$         write (iofile2,113) (stsVelSqr(i,j),j=1,6)
474*59599516SKenneth E. Jansenc$$$      enddo
475*59599516SKenneth E. Jansenc$$$c
476*59599516SKenneth E. Jansenc$$$c.... presSqr
477*59599516SKenneth E. Jansenc$$$c
478*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'presSqr 1 ',numnp
479*59599516SKenneth E. Jansenc$$$      do i = 1, numnp
480*59599516SKenneth E. Jansenc$$$         write (iofile2,112) stsPresSqr(i)
481*59599516SKenneth E. Jansenc$$$      enddo
482*59599516SKenneth E. Jansenc$$$c
483*59599516SKenneth E. Jansenc$$$c.... stress
484*59599516SKenneth E. Jansenc$$$c
485*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'stress 6 ',numnp
486*59599516SKenneth E. Jansenc$$$      do i = 1, numnp
487*59599516SKenneth E. Jansenc$$$         write (iofile2,113) (stsStress(i,j),j=1,6)
488*59599516SKenneth E. Jansenc$$$      enddo
489*59599516SKenneth E. Jansenc$$$c
490*59599516SKenneth E. Jansenc$$$c.... velocity
491*59599516SKenneth E. Jansenc$$$c
492*59599516SKenneth E. Jansenc$$$      write (iofile2,*) 'vel 3 ',numnp
493*59599516SKenneth E. Jansenc$$$      do i = 1, numnp
494*59599516SKenneth E. Jansenc$$$         write (iofile2,111) (stsVelReg(i,j),j=1,3)
495*59599516SKenneth E. Jansenc$$$      enddo
496*59599516SKenneth E. Jansenc$$$
497*59599516SKenneth E. Jansenc$$$      close (iofile2)
498*59599516SKenneth E. Jansen
499*59599516SKenneth E. Jansen 111  format(1p,3e24.16)
500*59599516SKenneth E. Jansen 112  format(1p, e24.16)
501*59599516SKenneth E. Jansen 113  format(1p,6e24.16)
502*59599516SKenneth E. Jansen
503*59599516SKenneth E. Jansen      return
504*59599516SKenneth E. Jansen      end
505