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