1*59599516SKenneth E. Jansen subroutine AsIGMR (y, ac, x, xmudmi, 2*59599516SKenneth E. Jansen & shp, shgl, ien, 3*59599516SKenneth E. Jansen & mater, res, rmes, 4*59599516SKenneth E. Jansen & BDiag, qres, EGmass, rerr) 5*59599516SKenneth E. Jansenc 6*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 7*59599516SKenneth E. Jansenc 8*59599516SKenneth E. Jansenc This routine computes and assembles the data corresponding to the 9*59599516SKenneth E. Jansenc interior elements. 10*59599516SKenneth E. Jansenc 11*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 12*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 13*59599516SKenneth E. Jansenc 14*59599516SKenneth E. Jansen use rlssave ! Use the resolved Leonard stresses at the nodes. 15*59599516SKenneth E. Jansen use timedata ! time series 16*59599516SKenneth E. Jansen use specialBC ! get ytarget to localize and send down 17*59599516SKenneth E. Jansen include "common.h" 18*59599516SKenneth E. Jansenc 19*59599516SKenneth E. Jansen dimension y(nshg,ndofl), ac(nshg,ndofl), 20*59599516SKenneth E. Jansen & x(numnp,nsd), 21*59599516SKenneth E. Jansen & shp(nshl,MAXQPT), 22*59599516SKenneth E. Jansen & shgl(nsd,nshl,MAXQPT), 23*59599516SKenneth E. Jansen & ien(npro,nshl), 24*59599516SKenneth E. Jansen & mater(npro), res(nshg,nflow), 25*59599516SKenneth E. Jansen & rmes(nshg,nflow), BDiag(nshg,nflow,nflow), 26*59599516SKenneth E. Jansen & qres(nshg,idflx) 27*59599516SKenneth E. Jansen 28*59599516SKenneth E. Jansenc 29*59599516SKenneth E. Jansen dimension ycl(npro,nshl,ndofl), acl(npro,nshl,ndof), 30*59599516SKenneth E. Jansen & xl(npro,nenl,nsd), ytargetl(npro,nshl,nflow), 31*59599516SKenneth E. Jansen & rl(npro,nshl,nflow), rml(npro,nshl,nflow), 32*59599516SKenneth E. Jansen & BDiagl(npro,nshl,nflow,nflow), 33*59599516SKenneth E. Jansen & ql(npro,nshl,idflx) 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansen dimension xmudmi(npro,ngauss) 36*59599516SKenneth E. Jansen dimension sgn(npro,nshl), EGmass(npro,nedof,nedof) 37*59599516SKenneth E. Jansen 38*59599516SKenneth E. Jansen dimension rlsl(npro,nshl,6) 39*59599516SKenneth E. Jansen real*8 rerrl(npro,nshl,6), rerr(nshg,10) 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis 43*59599516SKenneth E. Jansenc functions. 44*59599516SKenneth E. Jansenc 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansen if (ipord .gt. 1) then 47*59599516SKenneth E. Jansen call getsgn(ien,sgn) 48*59599516SKenneth E. Jansen endif 49*59599516SKenneth E. Jansenc 50*59599516SKenneth E. Jansenc.... gather the variables 51*59599516SKenneth E. Jansenc 52*59599516SKenneth E. Jansen call localy(y, ycl, ien, ndofl, 'gather ') 53*59599516SKenneth E. Jansen call localy(ac, acl, ien, ndofl, 'gather ') 54*59599516SKenneth E. Jansen call localx(x, xl, ien, nsd, 'gather ') 55*59599516SKenneth E. Jansen call local (qres, ql, ien, idflx, 'gather ') 56*59599516SKenneth E. Jansen 57*59599516SKenneth E. Jansen if(matflg(5,1).ge.4 ) 58*59599516SKenneth E. Jansen & call localy (ytarget, ytargetl, ien, nflow, 'gather ') 59*59599516SKenneth E. Jansen 60*59599516SKenneth E. Jansen 61*59599516SKenneth E. Jansen if( (iLES.gt.10).and.(iLES.lt.20)) then ! bardina 62*59599516SKenneth E. Jansen call local (rls, rlsl, ien, 6, 'gather ') 63*59599516SKenneth E. Jansen else 64*59599516SKenneth E. Jansen rlsl = zero 65*59599516SKenneth E. Jansen endif 66*59599516SKenneth E. Jansenc 67*59599516SKenneth E. Jansenc.... get the element residuals, LHS matrix, and preconditioner 68*59599516SKenneth E. Jansenc 69*59599516SKenneth E. Jansen rl = zero 70*59599516SKenneth E. Jansen BDiagl = zero 71*59599516SKenneth E. Jansen 72*59599516SKenneth E. Jansen if(ierrcalc.eq.1) rerrl = zero 73*59599516SKenneth E. Jansen ttim(31) = ttim(31) - secs(0.0) 74*59599516SKenneth E. Jansen 75*59599516SKenneth E. Jansen call e3 (ycl, ycl, acl, shp, 76*59599516SKenneth E. Jansen & shgl, xl, rl, rml, xmudmi, 77*59599516SKenneth E. Jansen & BDiagl, ql, sgn, rlsl, EGmass, 78*59599516SKenneth E. Jansen & rerrl, ytargetl) 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen ttim(31) = ttim(31) + secs(0.0) 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansenc.... assemble the residual and modified residual 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansen call local (res, rl, ien, nflow, 'scatter ') 85*59599516SKenneth E. Jansenc 86*59599516SKenneth E. Jansen if ( ierrcalc .eq. 1 ) then 87*59599516SKenneth E. Jansen call local (rerr, rerrl, ien, 6, 'scatter ') 88*59599516SKenneth E. Jansen endif 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansenc.... extract and assemble the Block-Diagonal (see note in elmgmr, line 280) 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen if (iprec .ne. 0) then 93*59599516SKenneth E. Jansen do i = 1, nshl 94*59599516SKenneth E. Jansen do j = 1, nflow 95*59599516SKenneth E. Jansen i0 = (i - 1) * nflow + j 96*59599516SKenneth E. Jansen do k = 1, nflow 97*59599516SKenneth E. Jansen j0 = (i - 1) * nflow + k 98*59599516SKenneth E. Jansen BDiagl(:,i,j,k) = EGmass(:,i0,j0) 99*59599516SKenneth E. Jansen enddo 100*59599516SKenneth E. Jansen enddo 101*59599516SKenneth E. Jansen enddo 102*59599516SKenneth E. Jansen call local (BDiag, BDiagl, ien, nflow*nflow, 'scatter ') 103*59599516SKenneth E. Jansen endif 104*59599516SKenneth E. Jansen 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansenc... call timeseries 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansen 109*59599516SKenneth E. Jansen if (exts) then 110*59599516SKenneth E. Jansen if ((iter.eq.1).and.(mod(lstep,freq).eq.0)) then 111*59599516SKenneth E. Jansen call timeseries(ycl,xl,ien,sgn) 112*59599516SKenneth E. Jansen endif 113*59599516SKenneth E. Jansen endif 114*59599516SKenneth E. Jansen 115*59599516SKenneth E. Jansenc 116*59599516SKenneth E. Jansenc.... end 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansen return 119*59599516SKenneth E. Jansen end 120*59599516SKenneth E. Jansenc 121*59599516SKenneth E. Jansenc 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansen subroutine AsIGMRSclr (y, ac, 124*59599516SKenneth E. Jansen & x, elDwl, 125*59599516SKenneth E. Jansen & shp, shgl, ien, 126*59599516SKenneth E. Jansen & mater, rest, rmest, 127*59599516SKenneth E. Jansen & qrest, EGmasst, Diag) 128*59599516SKenneth E. Jansenc 129*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 130*59599516SKenneth E. Jansenc 131*59599516SKenneth E. Jansenc This routine computes and assembles the data corresponding to the 132*59599516SKenneth E. Jansenc interior elements. 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 135*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 136*59599516SKenneth E. Jansenc 137*59599516SKenneth E. Jansen use turbSA 138*59599516SKenneth E. Jansen include "common.h" 139*59599516SKenneth E. Jansenc 140*59599516SKenneth E. Jansen dimension y(nshg,ndof), 141*59599516SKenneth E. Jansen & ac(nshg,ndof), 142*59599516SKenneth E. Jansen & x(numnp,nsd), 143*59599516SKenneth E. Jansen & shp(nshl,MAXQPT), shgl(nsd,nshl,MAXQPT), 144*59599516SKenneth E. Jansen & ien(npro,nshl), 145*59599516SKenneth E. Jansen & mater(npro), rest(nshg), 146*59599516SKenneth E. Jansen & rmest(nshg), Diag(nshg), 147*59599516SKenneth E. Jansen & qrest(nshg) 148*59599516SKenneth E. Jansen 149*59599516SKenneth E. Jansenc 150*59599516SKenneth E. Jansen dimension ycl(npro,nshl,ndof), 151*59599516SKenneth E. Jansen & acl(npro,nshl,ndof), dwl(npro,nenl), 152*59599516SKenneth E. Jansen & xl(npro,nenl,nsd), Diagl(npro,nshl), 153*59599516SKenneth E. Jansen & rtl(npro,nshl), rmtl(npro,nshl), 154*59599516SKenneth E. Jansen & qtl(npro,nshl), sgn(npro,nshl) 155*59599516SKenneth E. Jansenc 156*59599516SKenneth E. Jansen dimension EGmasst(npro,nshape, nshape) 157*59599516SKenneth E. Jansen real*8 elDwl(npro) 158*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis 159*59599516SKenneth E. Jansenc functions. 160*59599516SKenneth E. Jansenc 161*59599516SKenneth E. Jansen call getsgn(ien,sgn) 162*59599516SKenneth E. Jansenc 163*59599516SKenneth E. Jansenc 164*59599516SKenneth E. Jansenc.... gather the variables 165*59599516SKenneth E. Jansenc 166*59599516SKenneth E. Jansen call localy (y, ycl, ien, ndof, 'gather ') 167*59599516SKenneth E. Jansen call localy (ac, acl, ien, ndof, 'gather ') 168*59599516SKenneth E. Jansen call localx (x, xl, ien, nsd, 'gather ') 169*59599516SKenneth E. Jansenc call local (qrest, qtl, ien, 1, 'gather ') 170*59599516SKenneth E. Jansen if (iRANS .lt. 0) then 171*59599516SKenneth E. Jansen call localx (d2wall, dwl, ien, 1, 'gather ') 172*59599516SKenneth E. Jansen endif 173*59599516SKenneth E. Jansenc 174*59599516SKenneth E. Jansenc.... get the element residuals, LHS matrix, and preconditioner 175*59599516SKenneth E. Jansenc 176*59599516SKenneth E. Jansen rtl = zero 177*59599516SKenneth E. Jansen Diagl = zero 178*59599516SKenneth E. Jansen 179*59599516SKenneth E. Jansen ttim(31) = ttim(31) - tmr() 180*59599516SKenneth E. Jansen 181*59599516SKenneth E. Jansen call e3Sclr (ycl, acl, 182*59599516SKenneth E. Jansen & dwl, elDwl, shp, 183*59599516SKenneth E. Jansen & sgn, shgl, xl, 184*59599516SKenneth E. Jansen & rtl, rmtl, 185*59599516SKenneth E. Jansen & qtl, EGmasst ) 186*59599516SKenneth E. Jansen 187*59599516SKenneth E. Jansen ttim(31) = ttim(31) + tmr() 188*59599516SKenneth E. Jansenc 189*59599516SKenneth E. Jansenc.... assemble the residual and modified residual 190*59599516SKenneth E. Jansenc 191*59599516SKenneth E. Jansen call local (rest, rtl, ien, 1, 'scatter ') 192*59599516SKenneth E. Jansenc 193*59599516SKenneth E. Jansenc.... extract and assemble the Diagonal 194*59599516SKenneth E. Jansenc 195*59599516SKenneth E. Jansen if (iprec .ne. 0) then 196*59599516SKenneth E. Jansen do i=1,nshl 197*59599516SKenneth E. Jansen Diagl(:,i)=EGmassT(:,i,i) 198*59599516SKenneth E. Jansen enddo 199*59599516SKenneth E. Jansen call local(Diag, Diagl, ien, 1, 'scatter ') 200*59599516SKenneth E. Jansen endif 201*59599516SKenneth E. Jansenc 202*59599516SKenneth E. Jansenc.... end 203*59599516SKenneth E. Jansenc 204*59599516SKenneth E. Jansen return 205*59599516SKenneth E. Jansen end 206*59599516SKenneth E. Jansen 207*59599516SKenneth E. Jansen 208