xref: /phasta/phSolver/compressible/asimfg.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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