xref: /phasta/phSolver/compressible/au2mfg.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
159599516SKenneth E. Jansen        subroutine Au2MFG (ypre,      y,    ac,     x,
259599516SKenneth E. Jansen     &                     rmes,      res,       Dy,
359599516SKenneth E. Jansen     &                     uBrg,      BDiag,     iBC,       BC,
459599516SKenneth E. Jansen     &                     iper,      ilwork,
559599516SKenneth E. Jansen     &                     shp,       shgl,
659599516SKenneth E. Jansen     &                     shpb,      shglb)
7513954efSKenneth E. Jansen!
8513954efSKenneth E. Jansen!----------------------------------------------------------------------
9513954efSKenneth E. Jansen!
10513954efSKenneth E. Jansen! This routine performs a matrix-vector product for the Matrix-Free
11513954efSKenneth E. Jansen!  Implicit/Iterative solver using a two-sided scheme and subtracts
12513954efSKenneth E. Jansen!  it from the residual.
13513954efSKenneth E. Jansen!
14513954efSKenneth E. Jansen! input:
15513954efSKenneth E. Jansen!  y      (nshg,ndof)           : Y-variables
16513954efSKenneth E. Jansen!  ypre   (nshg,ndof)           : preconditioned Y-variables
17513954efSKenneth E. Jansen!  x      (numnp,nsd)            : node coordinates
18513954efSKenneth E. Jansen!  rmes   (nshg,nflow)           : modified residual
19513954efSKenneth E. Jansen!  res    (nshg,nflow)           : residual
20513954efSKenneth E. Jansen!  Dy     (nshg,nflow)           : solution step
21513954efSKenneth E. Jansen!  BDiag  (nshg,nflow,nflow)         : block-diagonal preconditioner
22513954efSKenneth E. Jansen!  iBC    (nshg)                : BC codes
23513954efSKenneth E. Jansen!  BC     (nshg,ndofBC)         : BC constraint parameters
24513954efSKenneth E. Jansen!
25513954efSKenneth E. Jansen! output:
26513954efSKenneth E. Jansen!  uBrg   (nshg,nflow)           : Krylov vector ( R - A x )
27513954efSKenneth E. Jansen!
28513954efSKenneth E. Jansen!
29513954efSKenneth E. Jansen! Zdenek Johan, Winter 1991.  (Fortran 90)
30513954efSKenneth E. Jansen!----------------------------------------------------------------------
31513954efSKenneth E. Jansen!
3259599516SKenneth E. Jansen        include "common.h"
33513954efSKenneth E. Jansen!
3459599516SKenneth E. Jansen        dimension y(nshg,ndof),               ypre(nshg,nflow),
3559599516SKenneth E. Jansen     &            x(numnp,nsd),               ac(nshg,ndof),
3659599516SKenneth E. Jansen     &            rmes(nshg,nflow),            ytmp(nshg,nflow),
3759599516SKenneth E. Jansen     &            res(nshg,nflow),             Dy(nshg,nflow),
3859599516SKenneth E. Jansen     &            uBrg(nshg,nflow),            BDiag(nshg,nflow,nflow),
3959599516SKenneth E. Jansen     &            iBC(nshg),                  BC(nshg,ndofBC),
4059599516SKenneth E. Jansen     &            iper(nshg),                 Dy2(nshg,nflow)
41513954efSKenneth E. Jansen!
4259599516SKenneth E. Jansen        dimension uBtmp1(nshg,nflow),          uBtmp2(nshg,nflow),
4359599516SKenneth E. Jansen     &            tmpBC(nshg),                ilwork(nlwork)
44513954efSKenneth E. Jansen!
4559599516SKenneth E. Jansen        dimension shp(MAXTOP,maxsh,MAXQPT),
4659599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT),
4759599516SKenneth E. Jansen     &            shpb(MAXTOP,maxsh,MAXQPT),
4859599516SKenneth E. Jansen     &            shglb(MAXTOP,nsd,maxsh,MAXQPT)
4959599516SKenneth E. Jansen
50513954efSKenneth E. Jansen!$$$        dimension shp(nshl,ngauss),    shgl(nsd,nshl,ngauss),
51513954efSKenneth E. Jansen!$$$     &            shpb(nshl,ngaussb), shglb(nsd,nshl,ngaussb)
52513954efSKenneth E. Jansen!
53513954efSKenneth E. Jansen!.... compute the finite difference interval
54513954efSKenneth E. Jansen!
5559599516SKenneth E. Jansen        Dy2 = Dy**2
5659599516SKenneth E. Jansen        call sumgat (Dy2, nflow, summed, ilwork)
5759599516SKenneth E. Jansen        eps = epsM**pt66 / sqrt(summed)
58513954efSKenneth E. Jansen!
59513954efSKenneth E. Jansen!.... calculate R(y + eps x)
60513954efSKenneth E. Jansen!
6159599516SKenneth E. Jansen        uBtmp1 = zero
62513954efSKenneth E. Jansen!
63513954efSKenneth E. Jansen!        call yshuffle(ypre, 'new2old ')
64513954efSKenneth E. Jansen!
6559599516SKenneth E. Jansen        uBrg = ypre + eps * Dy
66513954efSKenneth E. Jansen!
6759599516SKenneth E. Jansen        call i3LU (BDiag,  uBrg,  'backward')
68513954efSKenneth E. Jansen!
6959599516SKenneth E. Jansen        call yshuffle(uBrg, 'old2new ')
70513954efSKenneth E. Jansen!
7159599516SKenneth E. Jansen        call itrBC (uBrg, uBrg, iBC,  BC,   iper, ilwork)
72513954efSKenneth E. Jansen!
7359599516SKenneth E. Jansen        call itrRes (uBrg,            y,
7459599516SKenneth E. Jansen     &               x,               shp,
7559599516SKenneth E. Jansen     &               shgl,            iBC,
7659599516SKenneth E. Jansen     &               BC,              shpb,
7759599516SKenneth E. Jansen     &               shglb,           uBtmp1,
78513954efSKenneth E. Jansen     &               iper,            ilwork, ac)
79513954efSKenneth E. Jansen!Added ac to the end if itrRes, but not tested - Nicholas
80513954efSKenneth E. Jansen!
8159599516SKenneth E. Jansen        call i3LU (BDiag,  uBtmp1,  'forward ')
82513954efSKenneth E. Jansen!
83513954efSKenneth E. Jansen!.... calculate R(y - eps x)
84513954efSKenneth E. Jansen!
8559599516SKenneth E. Jansen        uBtmp2 = zero
86513954efSKenneth E. Jansen!
87513954efSKenneth E. Jansen!        call yshuffle(ypre, 'new2old ')
88513954efSKenneth E. Jansen!
8959599516SKenneth E. Jansen        uBrg = ypre - eps * Dy
90513954efSKenneth E. Jansen!
9159599516SKenneth E. Jansen        call i3LU (BDiag,  uBrg,  'backward')
92513954efSKenneth E. Jansen!
9359599516SKenneth E. Jansen        call yshuffle(uBrg, 'old2new ')
9459599516SKenneth E. Jansen
9559599516SKenneth E. Jansen        call itrBC (uBrg, uBrg, iBC,  BC,   iper, ilwork)
96513954efSKenneth E. Jansen!
9759599516SKenneth E. Jansen        call itrRes (uBrg,            y,
9859599516SKenneth E. Jansen     &               x,               shp,
9959599516SKenneth E. Jansen     &               shgl,            iBC,
10059599516SKenneth E. Jansen     &               BC,              shpb,
10159599516SKenneth E. Jansen     &               shglb,           uBtmp2,
10259599516SKenneth E. Jansen     &               iper,            ilwork, ac)
103513954efSKenneth E. Jansen!
10459599516SKenneth E. Jansen        call i3LU (BDiag,  uBtmp2,  'forward ')
105513954efSKenneth E. Jansen!
106513954efSKenneth E. Jansen!.... compute  R(y) - ( R(y + eps x) - R(y - eps x) ) / 2 eps
107513954efSKenneth E. Jansen!
10859599516SKenneth E. Jansen        uBrg = res - ( uBtmp1 - uBtmp2 ) / (two * eps)
109513954efSKenneth E. Jansen!
110513954efSKenneth E. Jansen!.... flop count
111513954efSKenneth E. Jansen!
112*f4d0b58bSKenneth E. Jansen   !      flops = flops + 8*nflow*nshg+nshg
113513954efSKenneth E. Jansen!
114513954efSKenneth E. Jansen!.... end
115513954efSKenneth E. Jansen!
11659599516SKenneth E. Jansen        return
11759599516SKenneth E. Jansen        end
118