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