1*59599516SKenneth E. Jansen subroutine AsIMFG (y, ac, x, xmudmi, shp, 2*59599516SKenneth E. Jansen & shgl, ien, mater, 3*59599516SKenneth E. Jansen & res, rmes, BDiag, qres, rerr) 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc This routine computes and assembles the data corresponding to the 8*59599516SKenneth E. Jansenc interior elements. 9*59599516SKenneth E. Jansenc 10*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 11*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansen use rlssave ! Use the resolved Leonard stresses at the nodes. 14*59599516SKenneth E. Jansen 15*59599516SKenneth E. Jansen include "common.h" 16*59599516SKenneth E. Jansenc 17*59599516SKenneth E. Jansen dimension y(nshg,ndofl), ac(nshg,ndofl), 18*59599516SKenneth E. Jansen & x(numnp,nsd), 19*59599516SKenneth E. Jansen & shp(nshl,MAXQPT), 20*59599516SKenneth E. Jansen & shgl(nsd,nshl,MAXQPT), 21*59599516SKenneth E. Jansen & ien(npro,nshl), 22*59599516SKenneth E. Jansen & mater(npro), res(nshg,nflow), 23*59599516SKenneth E. Jansen & rmes(nshg,nflow), BDiag(nshg,nflow,nflow), 24*59599516SKenneth E. Jansen & qres(nshg,idflx) 25*59599516SKenneth E. Jansen 26*59599516SKenneth E. Jansenc 27*59599516SKenneth E. Jansen dimension ycl(npro,nshl,ndofl), acl(npro,nshl,ndofl), 28*59599516SKenneth E. Jansen & xl(npro,nenl,nsd), 29*59599516SKenneth E. Jansen & rl(npro,nshl,nflow), rml(npro,nshl,nflow), 30*59599516SKenneth E. Jansen & BDiagl(npro,nshl,nflow,nflow), 31*59599516SKenneth E. Jansen & ql(npro,nshl,idflx) 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansen dimension rlsl(npro,nshl,6) 34*59599516SKenneth E. Jansen dimension xmudmi(npro,ngauss) 35*59599516SKenneth E. Jansen dimension sgn(npro,nshl) 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansen real*8 rerrl(npro,nshl,6), rerr(nshg,10) 38*59599516SKenneth E. Jansenc 39*59599516SKenneth E. Jansenc 40*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis 41*59599516SKenneth E. Jansenc functions. 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansen if (ipord .gt. 1) then 44*59599516SKenneth E. Jansen call getsgn(ien,sgn) 45*59599516SKenneth E. Jansen endif 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansenc.... gather the variables 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansen call localy(y, ycl, ien, ndofl, 'gather ') 50*59599516SKenneth E. Jansen call localy(ac, acl, ien, ndofl, 'gather ') 51*59599516SKenneth E. Jansen call localx(x, xl, ien, nsd, 'gather ') 52*59599516SKenneth E. Jansen 53*59599516SKenneth E. Jansen if (idiff >= 1 .or. isurf .eq. 1) 54*59599516SKenneth E. Jansen & call local (qres, ql, ien, idflx, 'gather ') 55*59599516SKenneth E. Jansen 56*59599516SKenneth E. Jansen if( (iLES.gt.10).and.(iLES.lt.20)) then ! bardina 57*59599516SKenneth E. Jansen call local (rls, rlsl, ien, 6, 'gather ') 58*59599516SKenneth E. Jansen else 59*59599516SKenneth E. Jansen rlsl = zero 60*59599516SKenneth E. Jansen endif 61*59599516SKenneth E. Jansenc 62*59599516SKenneth E. Jansenc.... get the element residuals and preconditioner 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. Jansen rl = zero 65*59599516SKenneth E. Jansen rml = zero 66*59599516SKenneth E. Jansen BDiagl = zero 67*59599516SKenneth E. Jansen EGmassd= one ! just a dummy real since we don't have a LHS with MFI 68*59599516SKenneth E. Jansen if(ierrcalc.eq.1) rerrl = zero 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansen ttim(31) = ttim(31) - secs(0.0) 71*59599516SKenneth E. Jansen! pass the memory location of ycl to both yl and ycl in e3b. This may 72*59599516SKenneth E. Jansen! seem dangerous since yl in e3b is :,nflow and ycl is :,ndof but they 73*59599516SKenneth E. Jansen! do not write to yl (at least not out of bounds), only use the data 74*59599516SKenneth E. Jansen! there so both will access data 75*59599516SKenneth E. Jansen! properly from this location. 76*59599516SKenneth E. Jansen 77*59599516SKenneth E. Jansen call e3 (ycl, ycl, acl, shp, 78*59599516SKenneth E. Jansen & shgl, xl, rl, rml, xmudmi, 79*59599516SKenneth E. Jansen & BDiagl, ql, sgn, rlsl, EGmassd, 80*59599516SKenneth E. Jansen & rerrl) 81*59599516SKenneth E. Jansen 82*59599516SKenneth E. Jansen ttim(31) = ttim(31) + secs(0.0) 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansenc.... assemble the residual and the modified residual 85*59599516SKenneth E. Jansenc 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen call local (res, rl, ien, nflow, 'scatter ') 88*59599516SKenneth E. Jansen call local (rmes, rml, ien, nflow, 'scatter ') 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansenc res is G_A obtained using local A_{e=1}^n_e G^e_a 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen if ( ierrcalc .eq. 1 ) then 93*59599516SKenneth E. Jansen call local (rerr, rerrl, ien, 6, 'scatter ') 94*59599516SKenneth E. Jansen endif 95*59599516SKenneth E. Jansenc 96*59599516SKenneth E. Jansenc.... assemble the Block-Diagonal 97*59599516SKenneth E. Jansenc 98*59599516SKenneth E. Jansen if (iprec .ne. 0) 99*59599516SKenneth E. Jansen & call local (BDiag, BDiagl, ien, nflow*nflow, 'scatter ') 100*59599516SKenneth E. Jansen 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansenc.... end 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansen return 105*59599516SKenneth E. Jansen end 106*59599516SKenneth E. Jansen 107*59599516SKenneth E. Jansen 108*59599516SKenneth E. Jansen 109*59599516SKenneth E. Jansen 110*59599516SKenneth E. Jansen 111