xref: /phasta/phSolver/compressible/asbmfg.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine AsBMFG (y,       x,       shpb,    shglb,
2*59599516SKenneth E. Jansen     &                     ienb,    materb,  iBCB,    BCB,
3*59599516SKenneth E. Jansen     &                     res,     rmes)
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  boundary 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        include "common.h"
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansen        dimension y(nshg,ndofl),           x(numnp,nsd),
16*59599516SKenneth E. Jansen     &            shpb(nshl,ngaussb),
17*59599516SKenneth E. Jansen     &            shglb(nsd,nshl,ngaussb),
18*59599516SKenneth E. Jansen     &            ienb(npro,nshl),          materb(npro),
19*59599516SKenneth E. Jansen     &            iBCB(npro,ndiBCB),        BCB(npro,nshlb,ndBCB),
20*59599516SKenneth E. Jansen     &            res(nshg,nflow),         rmes(nshg,nflow)
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansen        dimension ycl(npro,nshl,ndofl),  xlb(npro,nenl,nsd),
23*59599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),
24*59599516SKenneth E. Jansen     &            rml(npro,nshl,nflow)
25*59599516SKenneth E. Jansenc
26*59599516SKenneth E. Jansen        dimension sgn(npro,nshl)
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis
29*59599516SKenneth E. Jansenc     functions.
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansen        if (ipord .gt. 1) then
32*59599516SKenneth E. Jansen           call getsgn(ienb,sgn)
33*59599516SKenneth E. Jansen        endif
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansenc.... gather the variables
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansen
38*59599516SKenneth E. Jansen        call localy(y,      ycl,     ienb,   ndofl,  'gather  ')
39*59599516SKenneth E. Jansen        call localx(x,      xlb,    ienb,   nsd,    'gather  ')
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansen
42*59599516SKenneth E. Jansenc.... get the boundary element residuals
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansen        rl  = zero
45*59599516SKenneth E. Jansen        rml = zero
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansen!  pass the memory location of ycl to both yl and ycl in e3b.  This may
48*59599516SKenneth E. Jansen !  seem dangerous since yl in e3b is :,nflow and ycl is :,ndof but they
49*59599516SKenneth E. Jansen !  do not write to yl (out of bounds at least), only use the data there
50*59599516SKenneth E. Jansen !  so both will access data
51*59599516SKenneth E. Jansen !  properly from this location.
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansen        call e3b  (ycl,     ycl,     iBCB,    BCB,     shpb,    shglb,
54*59599516SKenneth E. Jansen     &             xlb,     rl,      rml,     sgn)
55*59599516SKenneth E. Jansenc
56*59599516SKenneth E. Jansenc.... assemble the residual and the modified residual
57*59599516SKenneth E. Jansenc
58*59599516SKenneth E. Jansen        call local(res,    rl,     ienb,   nflow,  'scatter ')
59*59599516SKenneth E. Jansen
60*59599516SKenneth E. Jansen
61*59599516SKenneth E. Jansenc
62*59599516SKenneth E. Jansen        if (Navier .eq. 1 .and. ires.ne.1 )
63*59599516SKenneth E. Jansen     &  call local(rmes,   rml,    ienb,   nflow,  'scatter ')
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansenc.... end
66*59599516SKenneth E. Jansenc
67*59599516SKenneth E. Jansen        return
68*59599516SKenneth E. Jansen        end
69*59599516SKenneth E. Jansenc
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansenc
72*59599516SKenneth E. Jansen        subroutine AsBMFGSclr (y,       x,       shpb,    shglb,
73*59599516SKenneth E. Jansen     &                         ienb,    materb,  iBCB,
74*59599516SKenneth E. Jansen     &                         BCB,     rest,    rmest)
75*59599516SKenneth E. Jansenc
76*59599516SKenneth E. Jansenc----------------------------------------------------------------------
77*59599516SKenneth E. Jansenc
78*59599516SKenneth E. Jansenc This routine computes and assembles the data corresponding to the
79*59599516SKenneth E. Jansenc  boundary elements.
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
82*59599516SKenneth E. Jansenc----------------------------------------------------------------------
83*59599516SKenneth E. Jansenc
84*59599516SKenneth E. Jansen        include "common.h"
85*59599516SKenneth E. Jansenc
86*59599516SKenneth E. Jansen        dimension y(nshg,ndofl),           x(numnp,nsd),
87*59599516SKenneth E. Jansen     &            shpb(nshl,maxsh),
88*59599516SKenneth E. Jansen     &            shglb(nsd,nshl,maxsh),
89*59599516SKenneth E. Jansen     &            ienb(npro,nshl),       materb(npro),
90*59599516SKenneth E. Jansen     &            iBCB(npro,ndiBCB),   BCB(npro,nshlb,ndBCB),
91*59599516SKenneth E. Jansen     &            rest(nshg),         rmest(nshg)
92*59599516SKenneth E. Jansenc
93*59599516SKenneth E. Jansen        dimension ycl(npro,nshl,ndofl),   xlb(npro,nenl,nsd),
94*59599516SKenneth E. Jansen     &            rtl(npro,nshl),
95*59599516SKenneth E. Jansen     &            rmtl(npro,nshl)
96*59599516SKenneth E. Jansenc
97*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis
98*59599516SKenneth E. Jansenc     functions.
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansen        if (ipord .gt. 1) then
101*59599516SKenneth E. Jansen           call getsgn(ienb,sgn)
102*59599516SKenneth E. Jansen        endif
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansenc.... gather the variables
105*59599516SKenneth E. Jansenc
106*59599516SKenneth E. Jansen        call localy (y,      ycl,     ienb,   ndofl,  'gather  ')
107*59599516SKenneth E. Jansen        call localx (x,      xlb,    ienb,   nsd,    'gather  ')
108*59599516SKenneth E. Jansenc
109*59599516SKenneth E. Jansenc.... get the boundary element residuals
110*59599516SKenneth E. Jansenc
111*59599516SKenneth E. Jansen        rtl  = zero
112*59599516SKenneth E. Jansen        rmtl = zero
113*59599516SKenneth E. Jansenc
114*59599516SKenneth E. Jansenc.... 3D
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansen            call e3bSclr (ycl,    iBCB,    BCB,
117*59599516SKenneth E. Jansen     &                    shpb,  shglb,   sgn,
118*59599516SKenneth E. Jansen     &                    xlb,   rtl,     rmtl)
119*59599516SKenneth E. Jansenc
120*59599516SKenneth E. Jansenc.... assemble the residual and the modified residual
121*59599516SKenneth E. Jansenc
122*59599516SKenneth E. Jansen
123*59599516SKenneth E. Jansen        call local (rest,    rtl,     ienb,   1,  'scatter ')
124*59599516SKenneth E. Jansen
125*59599516SKenneth E. Jansen
126*59599516SKenneth E. Jansenc
127*59599516SKenneth E. Jansen        if (Navier .eq. 1)
128*59599516SKenneth E. Jansen     &  call local (rmest,   rmtl,    ienb,   1,  'scatter ')
129*59599516SKenneth E. Jansenc
130*59599516SKenneth E. Jansenc.... end
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansen        return
133*59599516SKenneth E. Jansen        end
134*59599516SKenneth E. Jansen
135*59599516SKenneth E. Jansen
136