1*59599516SKenneth E. Jansen subroutine Au1MFG (ypre, y, ac, x, 2*59599516SKenneth E. Jansen & rmes, res, uBrg, 3*59599516SKenneth E. Jansen & BDiag, iBC, BC, 4*59599516SKenneth E. Jansen & iper, ilwork, shp, 5*59599516SKenneth E. Jansen & shgl, shpb, 6*59599516SKenneth E. Jansen & 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 one-sided scheme. 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansenc input: 14*59599516SKenneth E. Jansenc y (nshg,ndof) : Y-variables 15*59599516SKenneth E. Jansenc ypre (nshg,nflow) : preconditioned Y-variables 16*59599516SKenneth E. Jansenc (perturbed, no-scalars) 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 uBrg (nshg,nflow) : Krylov space vector 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 engBC (nshg) : energy for BC on density or pressure 25*59599516SKenneth E. Jansenc shp(b) (nshape,ngauss) : element shape functions (boundary) 26*59599516SKenneth E. Jansenc shgl(b)(nsd,nshape,ngauss) : local gradients of shape functions 27*59599516SKenneth E. Jansenc 28*59599516SKenneth E. Jansenc output: 29*59599516SKenneth E. Jansenc uBrg (nshg,nflow) : Krylov space vectors 30*59599516SKenneth E. Jansenc 31*59599516SKenneth E. Jansenc 32*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 33*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansen include "common.h" 36*59599516SKenneth E. Jansen include "mpif.h" 37*59599516SKenneth E. Jansen include "auxmpi.h" 38*59599516SKenneth E. Jansenc 39*59599516SKenneth E. Jansen dimension y(nshg,ndof), ypre(nshg,nflow), 40*59599516SKenneth E. Jansen & x(numnp,nsd), ac(nshg,ndof), 41*59599516SKenneth E. Jansen & rmes(nshg,nflow), ytmp(nshg,nflow), 42*59599516SKenneth E. Jansen & res(nshg,nflow), uBrg(nshg,nflow), 43*59599516SKenneth E. Jansen & BDiag(nshg,nflow,nflow), iBC(nshg), 44*59599516SKenneth E. Jansen & BC(nshg,ndofBC), iper(nshg) 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansen dimension uBtmp(nshg,nflow), tmpBC(nshg), 47*59599516SKenneth E. Jansen & ilwork(nlwork) 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansen 50*59599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 51*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 52*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 53*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 54*59599516SKenneth E. Jansen 55*59599516SKenneth E. Jansenc$$$ dimension shp(nshl,ngauss), shgl(nsd,nshl,ngauss), 56*59599516SKenneth E. Jansenc$$$ & shpb(nshl,ngaussb), 57*59599516SKenneth E. Jansenc$$$ & shglb(nsd,nshl,ngaussb) 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansenc.... calculate Rmod(y + eps u_i) 60*59599516SKenneth E. Jansenc 61*59599516SKenneth E. Jansen uBtmp = zero 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansenc call yshuffle(ypre, 'new2old ') 64*59599516SKenneth E. Jansen uBrg = ypre + eGMRES * uBrg 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansen call i3LU (BDiag, uBrg, 'backward') 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansen call yshuffle(uBrg, 'old2new ') 69*59599516SKenneth E. Jansenc 70*59599516SKenneth E. Jansen call itrBC (uBrg, uBrg, iBC, BC, iper, ilwork) 71*59599516SKenneth E. Jansenc 72*59599516SKenneth E. Jansen call itrRes (uBrg, y, 73*59599516SKenneth E. Jansen & x, shp, 74*59599516SKenneth E. Jansen & shgl, iBC, 75*59599516SKenneth E. Jansen & BC, shpb, 76*59599516SKenneth E. Jansen & shglb, uBtmp, 77*59599516SKenneth E. Jansen & iper, ilwork, ac) 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansen call i3LU (BDiag, uBtmp, 'forward ') 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansenc.... calculate ( Rmod(y + eps u_i) - Rmod(y) ) / eps 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansen uBrg = ( uBtmp - rmes ) / eGMRES 84*59599516SKenneth E. Jansenc ... before returning lets put ypre back in the new format 85*59599516SKenneth E. Jansenc call yshuffle(ypre, 'old2new ') 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansenc.... flop count 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansen flops = flops + 4*nflow*nshg 90*59599516SKenneth E. Jansenc 91*59599516SKenneth E. Jansenc.... end 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansen return 94*59599516SKenneth E. Jansen end 95*59599516SKenneth E. Jansen 96*59599516SKenneth E. Jansen 97*59599516SKenneth E. Jansen 98*59599516SKenneth E. Jansen 99