xref: /phasta/phSolver/incompressible/solfar.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine SolFlow(y,          ac,         u,
2*59599516SKenneth E. Jansen     &                   yold,       acold,      uold,
3*59599516SKenneth E. Jansen     &                   x,          iBC,
4*59599516SKenneth E. Jansen     &                   BC,         res,
5*59599516SKenneth E. Jansen     &                   nPermDims,  nTmpDims,  aperm,
6*59599516SKenneth E. Jansen     &                   atemp,      iper,
7*59599516SKenneth E. Jansen     &                   ilwork,     shp,        shgl,
8*59599516SKenneth E. Jansen     &                   shpb,       shglb,      rowp,
9*59599516SKenneth E. Jansen     &                   colm,       lhsK,       lhsP,
10*59599516SKenneth E. Jansen     &                   solinc,     rerr,       tcorecp,
11*59599516SKenneth E. Jansen     &                   GradV)
12*59599516SKenneth E. Jansenc
13*59599516SKenneth E. Jansenc----------------------------------------------------------------------
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc This is the 2nd interface routine to the Farzin's linear equation
16*59599516SKenneth E. Jansenc solver library that uses the CGP and GMRES methods.
17*59599516SKenneth E. Jansenc
18*59599516SKenneth E. Jansenc input:
19*59599516SKenneth E. Jansenc  y      (nshg,ndof)           : Y-variables at n+alpha_f
20*59599516SKenneth E. Jansenc  ac     (nshg,ndof)           : Primvar. accel. variable n+alpha_m
21*59599516SKenneth E. Jansenc  yold   (nshg,ndof)           : Y-variables at beginning of step
22*59599516SKenneth E. Jansenc  acold   (nshg,ndof)          : Primvar. accel. at beginning of step
23*59599516SKenneth E. Jansenc  x      (numnp,nsd)            : node coordinates
24*59599516SKenneth E. Jansenc  iBC    (nshg)                : BC codes
25*59599516SKenneth E. Jansenc  BC     (nshg,ndofBC)         : BC constraint parameters
26*59599516SKenneth E. Jansenc  iper   (nshg)                : periodic nodal information
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansenc output:
29*59599516SKenneth E. Jansenc  res    (nshg,nflow)           : preconditioned residual
30*59599516SKenneth E. Jansenc  y      (nshg,ndof)           : Y-variables at n+alpha_f
31*59599516SKenneth E. Jansenc  ac     (nshg,ndof)           : Primvar. accel. variable n+alpha_m
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's
35*59599516SKenneth E. Jansenc solver library.  New way of writing has to be used such as
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansenc          |  K     G | | du |    | Rmom  |
38*59599516SKenneth E. Jansenc          |          | |    | =  |       |
39*59599516SKenneth E. Jansenc          | G^t    C | | dp |    | Rcon  |
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansenc          |     E    | | dT | =  | Rtemp |
42*59599516SKenneth E. Jansenc
43*59599516SKenneth E. Jansenc     where
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansenc      xKebe : K_ab = dRmom_a/du_b    xTe : E_ab = dRtemp_a/dT_b
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansenc              G_ab = dRmom_a/dp_b
48*59599516SKenneth E. Jansenc      xGoC  :
49*59599516SKenneth E. Jansenc              C_ab = dRcon_a/dp_b
50*59599516SKenneth E. Jansenc
51*59599516SKenneth E. Jansenc              resf = Rmon Rcon       rest = Rtemp
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
55*59599516SKenneth E. Jansenc Juin Kim, Summer 1998. (Incompressible flow solver interface)
56*59599516SKenneth E. Jansenc Alberto Figueroa.  CMM-FSI
57*59599516SKenneth E. Jansenc----------------------------------------------------------------------
58*59599516SKenneth E. Jansenc
59*59599516SKenneth E. Jansen      use pointer_data
60*59599516SKenneth E. Jansen#ifdef AMG
61*59599516SKenneth E. Jansen      use ramg_data
62*59599516SKenneth E. Jansen#endif
63*59599516SKenneth E. Jansen
64*59599516SKenneth E. Jansen      include "common.h"
65*59599516SKenneth E. Jansen      include "mpif.h"
66*59599516SKenneth E. Jansen      include "auxmpi.h"
67*59599516SKenneth E. Jansenc
68*59599516SKenneth E. Jansen      real*8    y(nshg,ndof),             ac(nshg,ndof),
69*59599516SKenneth E. Jansen     &          yold(nshg,ndof),          acold(nshg,ndof),
70*59599516SKenneth E. Jansen     &          u(nshg,nsd),              uold(nshg,nsd),
71*59599516SKenneth E. Jansen     &          x(numnp,nsd),             BC(nshg,ndofBC),
72*59599516SKenneth E. Jansen     &          res(nshg,nflow),          tmpres(nshg,nflow),
73*59599516SKenneth E. Jansen     &          flowDiag(nshg,4),
74*59599516SKenneth E. Jansen     &          aperm(nshg,nPermDims),    atemp(nshg,nTmpDims),
75*59599516SKenneth E. Jansen     &          sclrDiag(nshg,1),
76*59599516SKenneth E. Jansen     &          lhsK(9,nnz_tot),          lhsP(4,nnz_tot),
77*59599516SKenneth E. Jansen     &          GradV(nshg,nsdsq)
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansen      real*8    shp(MAXTOP,maxsh,MAXQPT),
80*59599516SKenneth E. Jansen     &          shgl(MAXTOP,nsd,maxsh,MAXQPT),
81*59599516SKenneth E. Jansen     &          shpb(MAXTOP,maxsh,MAXQPT),
82*59599516SKenneth E. Jansen     &          shglb(MAXTOP,nsd,maxsh,MAXQPT)
83*59599516SKenneth E. Jansenc
84*59599516SKenneth E. Jansen      integer   usr(100),                 eqnType,temp,
85*59599516SKenneth E. Jansen     &          rowp(nshg*nnz),           colm(nshg+1),
86*59599516SKenneth E. Jansen     &          iBC(nshg),                ilwork(nlwork),
87*59599516SKenneth E. Jansen     &          iper(nshg)
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansen      real*8    yAlpha(nshg,ndof),        acAlpha(nshg,ndof),
90*59599516SKenneth E. Jansen     &          uAlpha(nshg,nsd),
91*59599516SKenneth E. Jansen     &          lesP(nshg,4),             lesQ(nshg,4),
92*59599516SKenneth E. Jansen     &          solinc(nshg,ndof),        CGsol(nshg)
93*59599516SKenneth E. Jansen
94*59599516SKenneth E. Jansen      real*8     tcorecp(2)
95*59599516SKenneth E. Jansen
96*59599516SKenneth E. Jansen      real*8    rerr(nshg,10),            rtmp(nshg,4),rtemp
97*59599516SKenneth E. Jansen
98*59599516SKenneth E. Jansen      real*8    msum(4),mval(4),cpusec(10)
99*59599516SKenneth E. Jansen
100*59599516SKenneth E. Jansen
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<******************
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansenc
105*59599516SKenneth E. Jansenc.... set the parameters for flux and surface tension calculations
106*59599516SKenneth E. Jansenc
107*59599516SKenneth E. Jansenc
108*59599516SKenneth E. Jansen        temp = npro
109*59599516SKenneth E. Jansen
110*59599516SKenneth E. Jansen
111*59599516SKenneth E. Jansen        idflx = 0
112*59599516SKenneth E. Jansen        if(idiff >= 1 )  idflx= (nflow-1) * nsd
113*59599516SKenneth E. Jansen        if (isurf == 1) idflx=nflow*nsd
114*59599516SKenneth E. Jansenc.... compute solution at n+alpha
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansen      call itrYAlpha( uold,    yold,    acold,
117*59599516SKenneth E. Jansen     &                u,       y,       ac,
118*59599516SKenneth E. Jansen     &                uAlpha,  yAlpha,  acAlpha)
119*59599516SKenneth E. Jansen
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha)
122*59599516SKenneth E. Jansenc
123*59599516SKenneth E. Jansenc      call summary_start()
124*59599516SKenneth E. Jansen      impistat=1
125*59599516SKenneth E. Jansen      impistat2=1
126*59599516SKenneth E. Jansen      telmcp1 = TMRC()
127*59599516SKenneth E. Jansen      call ElmGMR (uAlpha,    yAlpha,     acAlpha,    x,
128*59599516SKenneth E. Jansen     &             shp,       shgl,       iBC,
129*59599516SKenneth E. Jansen     &             BC,        shpb,       shglb,
130*59599516SKenneth E. Jansen     &             res,       iper,       ilwork,
131*59599516SKenneth E. Jansen     &             rowp,      colm,       lhsK,
132*59599516SKenneth E. Jansen     &             lhsP,      rerr,       GradV   )
133*59599516SKenneth E. Jansen      telmcp2 = TMRC()
134*59599516SKenneth E. Jansen      impistat=0
135*59599516SKenneth E. Jansen      impistat2=0
136*59599516SKenneth E. Jansenc      call summary_stop()
137*59599516SKenneth E. Jansen
138*59599516SKenneth E. Jansen
139*59599516SKenneth E. Jansen            tmpres(:,:) = res(:,:)
140*59599516SKenneth E. Jansen            iblk = 1
141*59599516SKenneth E. Jansen
142*59599516SKenneth E. Jansenc.... lesSolve : main matrix solver
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansen      lesId   = numeqns(1)
145*59599516SKenneth E. Jansen      eqnType = 1
146*59599516SKenneth E. Jansen
147*59599516SKenneth E. Jansenc      call summary_start()
148*59599516SKenneth E. Jansen      impistat=1
149*59599516SKenneth E. Jansen      impistat2=1
150*59599516SKenneth E. Jansen      tlescp1 = TMRC()
151*59599516SKenneth E. Jansen#ifdef AMG
152*59599516SKenneth E. Jansen      ! Initial Time Profiling
153*59599516SKenneth E. Jansen      call cpu_time(cpusec(1))
154*59599516SKenneth E. Jansen      if (irun_amg_prec.gt.0) then
155*59599516SKenneth E. Jansen          call ramg_control(colm,rowp,lhsK,lhsP,
156*59599516SKenneth E. Jansen     &         ilwork,BC,iBC,iper)
157*59599516SKenneth E. Jansen      end if
158*59599516SKenneth E. Jansen
159*59599516SKenneth E. Jansen      call cpu_time(cpusec(6))
160*59599516SKenneth E. Jansen      if (irun_amg_prec.gt.0) then
161*59599516SKenneth E. Jansen      ramg_flag = 1
162*59599516SKenneth E. Jansen      if (irun_amg_prec.eq.2) then ! Some setup work (mode a)
163*59599516SKenneth E. Jansen        ramg_window = 1.0
164*59599516SKenneth E. Jansen        ramg_redo = 0
165*59599516SKenneth E. Jansen      endif
166*59599516SKenneth E. Jansen      do while (ramg_flag.le.irun_amg_prec)
167*59599516SKenneth E. Jansen      ! if smart solve, possible run solve twice
168*59599516SKenneth E. Jansen      ! restart only if meets plateau
169*59599516SKenneth E. Jansen#endif
170*59599516SKenneth E. Jansen
171*59599516SKenneth E. Jansenc
172*59599516SKenneth E. Jansenc.... setup the linear algebra solver
173*59599516SKenneth E. Jansenc
174*59599516SKenneth E. Jansen      rtmp = res(:,1:4)
175*59599516SKenneth E. Jansen      call usrNew ( usr,        eqnType,          aperm,
176*59599516SKenneth E. Jansen     &              atemp,      rtmp,             solinc,
177*59599516SKenneth E. Jansen     &              flowDiag,   sclrDiag,         lesP,
178*59599516SKenneth E. Jansen     &              lesQ,       iBC,              BC,
179*59599516SKenneth E. Jansen     &              iper,       ilwork,           numpe,
180*59599516SKenneth E. Jansen     &              nshg,       nshl,             nPermDims,
181*59599516SKenneth E. Jansen     &              nTmpDims,   rowp,             colm,
182*59599516SKenneth E. Jansen     &              lhsK,       lhsP,             rdtmp,
183*59599516SKenneth E. Jansen     &              nnz_tot,    CGsol )
184*59599516SKenneth E. Jansenc
185*59599516SKenneth E. Jansenc.... solve linear system
186*59599516SKenneth E. Jansenc
187*59599516SKenneth E. Jansen      call myfLesSolve ( lesId, usr )
188*59599516SKenneth E. Jansen#ifdef AMG
189*59599516SKenneth E. Jansen      ramg_flag = ramg_flag + 2 ! Default no second run in mode a
190*59599516SKenneth E. Jansen      if (irun_amg_prec.eq.3) then
191*59599516SKenneth E. Jansen          if (maxIters.gt.int(statsflow(4))) then
192*59599516SKenneth E. Jansen          ramg_flag = ramg_flag + 1 ! Default no second run in mode b
193*59599516SKenneth E. Jansen          endif
194*59599516SKenneth E. Jansen      endif
195*59599516SKenneth E. Jansen      enddo
196*59599516SKenneth E. Jansen      else
197*59599516SKenneth E. Jansenc
198*59599516SKenneth E. Jansenc.... setup the linear algebra solver
199*59599516SKenneth E. Jansenc
200*59599516SKenneth E. Jansen      rtmp = res(:,1:4)
201*59599516SKenneth E. Jansen      call usrNew ( usr,        eqnType,          aperm,
202*59599516SKenneth E. Jansen     &              atemp,      rtmp,             solinc,
203*59599516SKenneth E. Jansen     &              flowDiag,   sclrDiag,         lesP,
204*59599516SKenneth E. Jansen     &              lesQ,       iBC,              BC,
205*59599516SKenneth E. Jansen     &              iper,       ilwork,           numpe,
206*59599516SKenneth E. Jansen     &              nshg,       nshl,             nPermDims,
207*59599516SKenneth E. Jansen     &              nTmpDims,   rowp,             colm,
208*59599516SKenneth E. Jansen     &              lhsK,       lhsP,             rdtmp,
209*59599516SKenneth E. Jansen     &              nnz_tot,    CGsol )
210*59599516SKenneth E. Jansen
211*59599516SKenneth E. Jansen          call myfLesSolve( lesId, usr )
212*59599516SKenneth E. Jansen      endif
213*59599516SKenneth E. Jansen
214*59599516SKenneth E. Jansen      call cpu_time(cpusec(3))
215*59599516SKenneth E. Jansen
216*59599516SKenneth E. Jansen      ramg_time(1) = ramg_time(1) + cpusec(3)-cpusec(1)
217*59599516SKenneth E. Jansen      ramg_time(7) = ramg_time(7) + cpusec(6)-cpusec(1)
218*59599516SKenneth E. Jansen
219*59599516SKenneth E. Jansen      ! ramg_time: 1 : local total
220*59599516SKenneth E. Jansen      !            4 : local VG-cycle
221*59599516SKenneth E. Jansen      !            7 : local setup time
222*59599516SKenneth E. Jansen      !           11 : Ap-product level 1
223*59599516SKenneth E. Jansen      !           12 : Ap-product level >1
224*59599516SKenneth E. Jansen      !           13 : Prolongation/Restriction
225*59599516SKenneth E. Jansen      !           20 : local boundary MLS time
226*59599516SKenneth E. Jansen
227*59599516SKenneth E. Jansen      if (myrank.eq.master) then
228*59599516SKenneth E. Jansen      write(*,*)
229*59599516SKenneth E. Jansen      endif
230*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Total ACUSIM Solver:",
231*59599516SKenneth E. Jansen     &                    ramg_time(1))
232*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Setup: ",ramg_time(7))
233*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Prec'd cycle: ",ramg_time(4))
234*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Ap product(level=1): ",
235*59599516SKenneth E. Jansen     &                      ramg_time(11))
236*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Ap product(level>=2): ",
237*59599516SKenneth E. Jansen     &                      ramg_time(12))
238*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Pro/Restr ",
239*59599516SKenneth E. Jansen     &                      ramg_time(13))
240*59599516SKenneth E. Jansen      call ramg_print_time(" == AMG == Boundary Ap (GS only)",
241*59599516SKenneth E. Jansen     &                      ramg_time(20))
242*59599516SKenneth E. Jansen      if (myrank.eq.master) then
243*59599516SKenneth E. Jansen      write(*,*)
244*59599516SKenneth E. Jansen      endif
245*59599516SKenneth E. Jansen
246*59599516SKenneth E. Jansen#endif
247*59599516SKenneth E. Jansen
248*59599516SKenneth E. Jansen      ! End Time profiling output
249*59599516SKenneth E. Jansen
250*59599516SKenneth E. Jansen      call getSol ( usr, solinc )
251*59599516SKenneth E. Jansen
252*59599516SKenneth E. Jansen      if (numpe > 1) then
253*59599516SKenneth E. Jansen         call commu ( solinc, ilwork, nflow, 'out')
254*59599516SKenneth E. Jansen      endif
255*59599516SKenneth E. Jansen      tlescp2 = TMRC()
256*59599516SKenneth E. Jansen      impistat=0
257*59599516SKenneth E. Jansen      impistat2=0
258*59599516SKenneth E. Jansenc      call summary_stop()
259*59599516SKenneth E. Jansen
260*59599516SKenneth E. Jansen      tcorecp(1) = tcorecp(1) + telmcp2-telmcp1 ! elem. formation
261*59599516SKenneth E. Jansen      tcorecp(2) = tcorecp(2) + tlescp2-tlescp1 ! linear alg. solution
262*59599516SKenneth E. Jansen
263*59599516SKenneth E. Jansen      call rstatic (res, y, solinc) ! output flow stats
264*59599516SKenneth E. Jansenc
265*59599516SKenneth E. Jansenc.... end
266*59599516SKenneth E. Jansenc
267*59599516SKenneth E. Jansen      return
268*59599516SKenneth E. Jansen      end
269*59599516SKenneth E. Jansen
270*59599516SKenneth E. Jansen      subroutine SolSclr(y,          ac,         u,
271*59599516SKenneth E. Jansen     &                   yold,       acold,      uold,
272*59599516SKenneth E. Jansen     &                   x,          iBC,
273*59599516SKenneth E. Jansen     &                   BC,         nPermDimsS,  nTmpDimsS,
274*59599516SKenneth E. Jansen     &                   apermS,     atempS,     iper,
275*59599516SKenneth E. Jansen     &                   ilwork,     shp,        shgl,
276*59599516SKenneth E. Jansen     &                   shpb,       shglb,      rowp,
277*59599516SKenneth E. Jansen     &                   colm,       lhsS,       solinc,
278*59599516SKenneth E. Jansen     &                   tcorecpscal)
279*59599516SKenneth E. Jansenc
280*59599516SKenneth E. Jansenc----------------------------------------------------------------------
281*59599516SKenneth E. Jansenc
282*59599516SKenneth E. Jansenc This is the 2nd interface routine to the Farzin's linear equation
283*59599516SKenneth E. Jansenc solver library.
284*59599516SKenneth E. Jansenc
285*59599516SKenneth E. Jansenc input:
286*59599516SKenneth E. Jansenc  y      (nshg,ndof)           : Y-variables at n+alpha_f
287*59599516SKenneth E. Jansenc  ac     (nshg,ndof)           : Primvar. accel. variable n+alpha_m
288*59599516SKenneth E. Jansenc  yold   (nshg,ndof)           : Y-variables at beginning of step
289*59599516SKenneth E. Jansenc  x      (numnp,nsd)            : node coordinates
290*59599516SKenneth E. Jansenc  iBC    (nshg)                : BC codes
291*59599516SKenneth E. Jansenc  BC     (nshg,ndofBC)         : BC constraint parameters
292*59599516SKenneth E. Jansenc  iper   (nshg)                : periodic nodal information
293*59599516SKenneth E. Jansenc
294*59599516SKenneth E. Jansenc output:
295*59599516SKenneth E. Jansenc  y      (nshg,ndof)           : Y-variables at n+alpha_f
296*59599516SKenneth E. Jansenc  ac     (nshg,ndof)           : Primvar. accel. variable n+alpha_m
297*59599516SKenneth E. Jansenc
298*59599516SKenneth E. Jansenc
299*59599516SKenneth E. Jansenc The followings are preliminary steps required to use Farzin's
300*59599516SKenneth E. Jansenc solver library.  New way of writing has to be used such as
301*59599516SKenneth E. Jansenc
302*59599516SKenneth E. Jansenc          |     E    | | dS | =  | RScal |
303*59599516SKenneth E. Jansenc
304*59599516SKenneth E. Jansenc----------------------------------------------------------------------
305*59599516SKenneth E. Jansenc
306*59599516SKenneth E. Jansen      use pointer_data
307*59599516SKenneth E. Jansen
308*59599516SKenneth E. Jansen      include "common.h"
309*59599516SKenneth E. Jansen      include "mpif.h"
310*59599516SKenneth E. Jansen      include "auxmpi.h"
311*59599516SKenneth E. Jansenc
312*59599516SKenneth E. Jansen      real*8    y(nshg,ndof),             ac(nshg,ndof),
313*59599516SKenneth E. Jansen     &          yold(nshg,ndof),          acold(nshg,ndof),
314*59599516SKenneth E. Jansen     &          u(nshg,nsd),              uold(nshg,nsd),
315*59599516SKenneth E. Jansen     &          x(numnp,nsd),             BC(nshg,ndofBC),
316*59599516SKenneth E. Jansen     &          res(nshg,1),
317*59599516SKenneth E. Jansen     &          flowDiag(nshg,4),
318*59599516SKenneth E. Jansen     &          sclrDiag(nshg,1),           lhsS(nnz_tot),
319*59599516SKenneth E. Jansen     &          apermS(nshg,nPermDimsS),  atempS(nshg,nTmpDimsS)
320*59599516SKenneth E. Jansen
321*59599516SKenneth E. Jansenc
322*59599516SKenneth E. Jansen      real*8    shp(MAXTOP,maxsh,MAXQPT),
323*59599516SKenneth E. Jansen     &          shgl(MAXTOP,nsd,maxsh,MAXQPT),
324*59599516SKenneth E. Jansen     &          shpb(MAXTOP,maxsh,MAXQPT),
325*59599516SKenneth E. Jansen     &          shglb(MAXTOP,nsd,maxsh,MAXQPT)
326*59599516SKenneth E. Jansenc
327*59599516SKenneth E. Jansen      integer   usr(100),                 eqnType,
328*59599516SKenneth E. Jansen     &          rowp(nshg*nnz),           colm(nshg+1),
329*59599516SKenneth E. Jansen     &          iBC(nshg),                ilwork(nlwork),
330*59599516SKenneth E. Jansen     &          iper(nshg)
331*59599516SKenneth E. Jansenc
332*59599516SKenneth E. Jansen      real*8    yAlpha(nshg,ndof),        acAlpha(nshg,ndof),
333*59599516SKenneth E. Jansen     &          uAlpha(nshg,nsd),
334*59599516SKenneth E. Jansen     &          lesP(nshg,1),               lesQ(nshg,1),
335*59599516SKenneth E. Jansen     &          solinc(nshg,1),           CGsol(nshg),
336*59599516SKenneth E. Jansen     &          tcorecpscal(2)
337*59599516SKenneth E. Jansen
338*59599516SKenneth E. Jansenc
339*59599516SKenneth E. Jansenc.... *******************>> Element Data Formation <<******************
340*59599516SKenneth E. Jansenc
341*59599516SKenneth E. Jansenc.... compute solution at n+alpha
342*59599516SKenneth E. Jansenc
343*59599516SKenneth E. Jansen      call itrYAlpha( uold,    yold,    acold,
344*59599516SKenneth E. Jansen     &                u,       y,       ac,
345*59599516SKenneth E. Jansen     &                uAlpha,  yAlpha,  acAlpha)
346*59599516SKenneth E. Jansenc
347*59599516SKenneth E. Jansenc.... form the LHS matrices, the residual vector (at alpha)
348*59599516SKenneth E. Jansenc
349*59599516SKenneth E. Jansen      impistat=2
350*59599516SKenneth E. Jansen      impistat2=1
351*59599516SKenneth E. Jansen      telmcp1 = TMRC()
352*59599516SKenneth E. Jansen      call ElmGMRSclr(yAlpha,acAlpha,    x,
353*59599516SKenneth E. Jansen     &             shp,       shgl,       iBC,
354*59599516SKenneth E. Jansen     &             BC,        shpb,       shglb,
355*59599516SKenneth E. Jansen     &             res,       iper,       ilwork,
356*59599516SKenneth E. Jansen     &             rowp,      colm,       lhsS   )
357*59599516SKenneth E. Jansen      telmcp2 = TMRC()
358*59599516SKenneth E. Jansen      impistat=0
359*59599516SKenneth E. Jansen      impistat2=0
360*59599516SKenneth E. Jansenc
361*59599516SKenneth E. Jansenc.... lesSolve : main matrix solver
362*59599516SKenneth E. Jansenc
363*59599516SKenneth E. Jansen      lesId   = numeqns(1+nsolt+isclr)
364*59599516SKenneth E. Jansen      eqnType = 2
365*59599516SKenneth E. Jansenc
366*59599516SKenneth E. Jansenc.... setup the linear algebra solver
367*59599516SKenneth E. Jansenc
368*59599516SKenneth E. Jansen
369*59599516SKenneth E. Jansen      impistat=2
370*59599516SKenneth E. Jansen      impistat2=1
371*59599516SKenneth E. Jansen      tlescp1 = TMRC()
372*59599516SKenneth E. Jansen      call usrNew ( usr,        eqnType,          apermS,
373*59599516SKenneth E. Jansen     &              atempS,     res,              solinc,
374*59599516SKenneth E. Jansen     &              flowDiag,   sclrDiag,         lesP,
375*59599516SKenneth E. Jansen     &              lesQ,       iBC,              BC,
376*59599516SKenneth E. Jansen     &              iper,       ilwork,           numpe,
377*59599516SKenneth E. Jansen     &              nshg,       nshl,             nPermDimsS,
378*59599516SKenneth E. Jansen     &              nTmpDimsS,  rowp,             colm,
379*59599516SKenneth E. Jansen     &              rlhsK,      rlhsP,            lhsS,
380*59599516SKenneth E. Jansen     &              nnz_tot,    CGsol )
381*59599516SKenneth E. Jansenc
382*59599516SKenneth E. Jansenc.... solve linear system
383*59599516SKenneth E. Jansenc
384*59599516SKenneth E. Jansen      call myfLesSolve ( lesId, usr )
385*59599516SKenneth E. Jansen      call getSol ( usr, solinc )
386*59599516SKenneth E. Jansen
387*59599516SKenneth E. Jansen      if (numpe > 1) then
388*59599516SKenneth E. Jansen         call commu ( solinc, ilwork, 1, 'out')
389*59599516SKenneth E. Jansen      endif
390*59599516SKenneth E. Jansen      tlescp2 = TMRC()
391*59599516SKenneth E. Jansen      impistat=0
392*59599516SKenneth E. Jansen      impistat2=0
393*59599516SKenneth E. Jansen
394*59599516SKenneth E. Jansen      tcorecpscal(1) = tcorecpscal(1) + telmcp2-telmcp1 ! elem. formation
395*59599516SKenneth E. Jansen      tcorecpscal(2) = tcorecpscal(2) + tlescp2-tlescp1 ! linear alg. solution
396*59599516SKenneth E. Jansen
397*59599516SKenneth E. Jansen      nsolsc=5+isclr
398*59599516SKenneth E. Jansen      call rstaticSclr (res, y, solinc, nsolsc) ! output scalar stats
399*59599516SKenneth E. Jansenc
400*59599516SKenneth E. Jansenc.... end
401*59599516SKenneth E. Jansenc
402*59599516SKenneth E. Jansen      return
403*59599516SKenneth E. Jansen      end
404*59599516SKenneth E. Jansen
405*59599516SKenneth E. Jansen
406*59599516SKenneth E. Jansen
407*59599516SKenneth E. Jansen
408*59599516SKenneth E. Jansen
409