xref: /phasta/phSolver/compressible/au2mfg.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine Au2MFG (ypre,      y,    ac,     x,
2*59599516SKenneth E. Jansen     &                     rmes,      res,       Dy,
3*59599516SKenneth E. Jansen     &                     uBrg,      BDiag,     iBC,       BC,
4*59599516SKenneth E. Jansen     &                     iper,      ilwork,
5*59599516SKenneth E. Jansen     &                     shp,       shgl,
6*59599516SKenneth E. Jansen     &                     shpb,      shglb)
7*59599516SKenneth E. Jansenc
8*59599516SKenneth E. Jansenc----------------------------------------------------------------------
9*59599516SKenneth E. Jansenc
10*59599516SKenneth E. Jansenc This routine performs a matrix-vector product for the Matrix-Free
11*59599516SKenneth E. Jansenc  Implicit/Iterative solver using a two-sided scheme and subtracts
12*59599516SKenneth E. Jansenc  it from the residual.
13*59599516SKenneth E. Jansenc
14*59599516SKenneth E. Jansenc input:
15*59599516SKenneth E. Jansenc  y      (nshg,ndof)           : Y-variables
16*59599516SKenneth E. Jansenc  ypre   (nshg,ndof)           : preconditioned Y-variables
17*59599516SKenneth E. Jansenc  x      (numnp,nsd)            : node coordinates
18*59599516SKenneth E. Jansenc  rmes   (nshg,nflow)           : modified residual
19*59599516SKenneth E. Jansenc  res    (nshg,nflow)           : residual
20*59599516SKenneth E. Jansenc  Dy     (nshg,nflow)           : solution step
21*59599516SKenneth E. Jansenc  BDiag  (nshg,nflow,nflow)         : block-diagonal preconditioner
22*59599516SKenneth E. Jansenc  iBC    (nshg)                : BC codes
23*59599516SKenneth E. Jansenc  BC     (nshg,ndofBC)         : BC constraint parameters
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansenc output:
26*59599516SKenneth E. Jansenc  uBrg   (nshg,nflow)           : Krylov vector ( R - A x )
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansenc
29*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
30*59599516SKenneth E. Jansenc----------------------------------------------------------------------
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansen        include "common.h"
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansen        dimension y(nshg,ndof),               ypre(nshg,nflow),
35*59599516SKenneth E. Jansen     &            x(numnp,nsd),               ac(nshg,ndof),
36*59599516SKenneth E. Jansen     &            rmes(nshg,nflow),            ytmp(nshg,nflow),
37*59599516SKenneth E. Jansen     &            res(nshg,nflow),             Dy(nshg,nflow),
38*59599516SKenneth E. Jansen     &            uBrg(nshg,nflow),            BDiag(nshg,nflow,nflow),
39*59599516SKenneth E. Jansen     &            iBC(nshg),                  BC(nshg,ndofBC),
40*59599516SKenneth E. Jansen     &            iper(nshg),                 Dy2(nshg,nflow)
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansen        dimension uBtmp1(nshg,nflow),          uBtmp2(nshg,nflow),
43*59599516SKenneth E. Jansen     &            tmpBC(nshg),                ilwork(nlwork)
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansen        dimension shp(MAXTOP,maxsh,MAXQPT),
46*59599516SKenneth E. Jansen     &            shgl(MAXTOP,nsd,maxsh,MAXQPT),
47*59599516SKenneth E. Jansen     &            shpb(MAXTOP,maxsh,MAXQPT),
48*59599516SKenneth E. Jansen     &            shglb(MAXTOP,nsd,maxsh,MAXQPT)
49*59599516SKenneth E. Jansen
50*59599516SKenneth E. Jansenc$$$        dimension shp(nshl,ngauss),    shgl(nsd,nshl,ngauss),
51*59599516SKenneth E. Jansenc$$$     &            shpb(nshl,ngaussb), shglb(nsd,nshl,ngaussb)
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansenc.... compute the finite difference interval
54*59599516SKenneth E. Jansenc
55*59599516SKenneth E. Jansen        Dy2 = Dy**2
56*59599516SKenneth E. Jansen	call sumgat (Dy2, nflow, summed, ilwork)
57*59599516SKenneth E. Jansen        eps = epsM**pt66 / sqrt(summed)
58*59599516SKenneth E. Jansenc
59*59599516SKenneth E. Jansenc.... calculate R(y + eps x)
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansen        uBtmp1 = zero
62*59599516SKenneth E. Jansenc
63*59599516SKenneth E. Jansenc        call yshuffle(ypre, 'new2old ')
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansen        uBrg = ypre + eps * Dy
66*59599516SKenneth E. Jansenc
67*59599516SKenneth E. Jansen        call i3LU (BDiag,  uBrg,  'backward')
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansen        call yshuffle(uBrg, 'old2new ')
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansen        call itrBC (uBrg, uBrg, iBC,  BC,   iper, ilwork)
72*59599516SKenneth E. Jansenc
73*59599516SKenneth E. Jansen        call itrRes (uBrg,            y,
74*59599516SKenneth E. Jansen     &               x,               shp,
75*59599516SKenneth E. Jansen     &               shgl,            iBC,
76*59599516SKenneth E. Jansen     &               BC,              shpb,
77*59599516SKenneth E. Jansen     &               shglb,           uBtmp1,
78*59599516SKenneth E. Jansen     &               iper,            ilwork)
79*59599516SKenneth E. Jansenc
80*59599516SKenneth E. Jansen        call i3LU (BDiag,  uBtmp1,  'forward ')
81*59599516SKenneth E. Jansenc
82*59599516SKenneth E. Jansenc.... calculate R(y - eps x)
83*59599516SKenneth E. Jansenc
84*59599516SKenneth E. Jansen        uBtmp2 = zero
85*59599516SKenneth E. Jansenc
86*59599516SKenneth E. Jansenc        call yshuffle(ypre, 'new2old ')
87*59599516SKenneth E. Jansenc
88*59599516SKenneth E. Jansen        uBrg = ypre - eps * Dy
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansen        call i3LU (BDiag,  uBrg,  'backward')
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen        call yshuffle(uBrg, 'old2new ')
93*59599516SKenneth E. Jansen
94*59599516SKenneth E. Jansen        call itrBC (uBrg, uBrg, iBC,  BC,   iper, ilwork)
95*59599516SKenneth E. Jansenc
96*59599516SKenneth E. Jansen        call itrRes (uBrg,            y,
97*59599516SKenneth E. Jansen     &               x,               shp,
98*59599516SKenneth E. Jansen     &               shgl,            iBC,
99*59599516SKenneth E. Jansen     &               BC,              shpb,
100*59599516SKenneth E. Jansen     &               shglb,           uBtmp2,
101*59599516SKenneth E. Jansen     &               iper,            ilwork, ac)
102*59599516SKenneth E. Jansenc
103*59599516SKenneth E. Jansen        call i3LU (BDiag,  uBtmp2,  'forward ')
104*59599516SKenneth E. Jansenc
105*59599516SKenneth E. Jansenc.... compute  R(y) - ( R(y + eps x) - R(y - eps x) ) / 2 eps
106*59599516SKenneth E. Jansenc
107*59599516SKenneth E. Jansen        uBrg = res - ( uBtmp1 - uBtmp2 ) / (two * eps)
108*59599516SKenneth E. Jansenc
109*59599516SKenneth E. Jansenc.... flop count
110*59599516SKenneth E. Jansenc
111*59599516SKenneth E. Jansen        flops = flops + 8*nflow*nshg+nshg
112*59599516SKenneth E. Jansenc
113*59599516SKenneth E. Jansenc.... end
114*59599516SKenneth E. Jansenc
115*59599516SKenneth E. Jansen        return
116*59599516SKenneth E. Jansen        end
117