xref: /phasta/phSolver/compressible/asbflx.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine AsBFlx (y,       x,       shpb,    shglb,
2*59599516SKenneth E. Jansen     &                     ienb,    materb,  iBCB,    BCB,
3*59599516SKenneth E. Jansen     &                     invflx,  flxres,  flxLHS,  flxnrm)
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,ndof),             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     &            invflx(numnp),            flxres(numnp,nflow),
21*59599516SKenneth E. Jansen     &            flxLHS(numnp,1),          flxnrm(numnp,nsd)
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansen        dimension ycl(npro,nshl,ndof),       xlb(npro,nenl,nsd),
24*59599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),      rml(npro,nshl,nflow),
25*59599516SKenneth E. Jansen     &            flhsl(npro,nshl,1),       fnrml(npro,nshl,nsd),
26*59599516SKenneth E. Jansen     &            lnflx(npro),              lnode(27)
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansen        dimension sgn(npro,nshl)
29*59599516SKenneth E. Jansenc
30*59599516SKenneth E. Jansenc.... compute the nodes which lie on the boundary (hierarchic)
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansen        call getbnodes(lnode)
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansen
35*59599516SKenneth E. Jansenc.... create the matrix of mode signs for the hierarchic basis
36*59599516SKenneth E. Jansenc     functions.
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansen        if (ipord .gt. 1) then
39*59599516SKenneth E. Jansen           call getsgn(ienb,sgn)
40*59599516SKenneth E. Jansen        endif
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansenc.... ------------------------>  Residual  <---------------------------
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansenc.... gather the variables
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansen        call localy(y,      ycl, ienb,   ndofl,  'gather  ')
47*59599516SKenneth E. Jansen        call localx(x,      xlb,ienb,   nsd,    'gather  ')
48*59599516SKenneth E. Jansenc
49*59599516SKenneth E. Jansenc
50*59599516SKenneth E. Jansenc.... get the boundary element residual
51*59599516SKenneth E. Jansenc
52*59599516SKenneth E. Jansen        rl = zero
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
57*59599516SKenneth E. Jansenc
58*59599516SKenneth E. Jansen        call local (flxres, rl, ienb,   nflow,   'scatter ')
59*59599516SKenneth E. Jansenc
60*59599516SKenneth E. Jansenc.... --------------------->  LHS and Normal  <------------------------
61*59599516SKenneth E. Jansenc
62*59599516SKenneth E. Jansenc.... compute the boundary LHS and normal
63*59599516SKenneth E. Jansenc
64*59599516SKenneth E. Jansen        flhsl = zero
65*59599516SKenneth E. Jansen        fnrml = zero
66*59599516SKenneth E. Jansenc
67*59599516SKenneth E. Jansenc.... 2D
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansenc       if (nsd .eq. 2) then
70*59599516SKenneth E. Jansenc         call f2lhs (shpb,   shglb,  xlb,    flhsl,
71*59599516SKenneth E. Jansenc    &                fnrml)
72*59599516SKenneth E. Jansenc       endif
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansenc.... 3D
75*59599516SKenneth E. Jansenc
76*59599516SKenneth E. Jansenc       if (nsd .eq. 3) then
77*59599516SKenneth E. Jansen          call f3lhs (shpb,   shglb,  xlb,    flhsl,
78*59599516SKenneth E. Jansen     &                fnrml, sgn)
79*59599516SKenneth E. Jansenc       endif
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansenc.... reset the non-contributing element values
82*59599516SKenneth E. Jansenc
83*59599516SKenneth E. Jansen        lnflx = 0
84*59599516SKenneth E. Jansen        do n = 1, nenbl
85*59599516SKenneth E. Jansen          lnflx = lnflx +
86*59599516SKenneth E. Jansen     &          min(1, invflx(abs(ienb(:,mnodeb(n,lelCat,nsd)))))
87*59599516SKenneth E. Jansen        enddo
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansen        do n = 1, nshl
90*59599516SKenneth E. Jansen          where (lnflx .ne. nenbl)   flhsl(:,n,1) = zero
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen          do i = 1, nsd
93*59599516SKenneth E. Jansen            where (lnflx .ne. nenbl) fnrml(:,n,i) = zero
94*59599516SKenneth E. Jansen          enddo
95*59599516SKenneth E. Jansen        enddo
96*59599516SKenneth E. Jansenc
97*59599516SKenneth E. Jansenc.... assemble the boundary LHS and normal
98*59599516SKenneth E. Jansenc
99*59599516SKenneth E. Jansen        call local (flxLHS, flhsl,  ienb,   1,      'scatter ')
100*59599516SKenneth E. Jansenc
101*59599516SKenneth E. Jansen        call local (flxnrm, fnrml,  ienb,   nsd,    'scatter ')
102*59599516SKenneth E. Jansenc
103*59599516SKenneth E. Jansenc.... end
104*59599516SKenneth E. Jansenc
105*59599516SKenneth E. Jansen        return
106*59599516SKenneth E. Jansen        end
107