xref: /phasta/phSolver/common/pvsqbi.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc  Natural pressure boundary condition can be calculated with p, the pressure,
4*59599516SKenneth E. Jansenc  related (in some prescribed manner) to Q, the flow rate, through the same
5*59599516SKenneth E. Jansenc  boundary.  To do this efficiently requires us to precompute the integral
6*59599516SKenneth E. Jansenc  of N_A over the boundary for each node A and store it in a vector of length
7*59599516SKenneth E. Jansenc  nshg (a bit wasteful since only the nodes on the boundary will be non zero
8*59599516SKenneth E. Jansenc  in this vector but it is probably slower to index it than to multiply and
9*59599516SKenneth E. Jansenc  add the extra zeros....check later).
10*59599516SKenneth E. Jansenc
11*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
12*59599516SKenneth E. Jansen      module pvsQbi
13*59599516SKenneth E. Jansen
14*59599516SKenneth E. Jansen      real*8, allocatable ::  NABI(:,:)
15*59599516SKenneth E. Jansen      real*8, allocatable ::  NASC(:)
16*59599516SKenneth E. Jansen      integer, allocatable :: ndsurf(:)
17*59599516SKenneth E. Jansen
18*59599516SKenneth E. Jansen      end module
19*59599516SKenneth E. Jansen
20*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansenc     Initialize:
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
25*59599516SKenneth E. Jansen      subroutine initNABI( x, shpb )
26*59599516SKenneth E. Jansen
27*59599516SKenneth E. Jansen      use     pointer_data
28*59599516SKenneth E. Jansen      use     pvsQbi
29*59599516SKenneth E. Jansen      include "common.h"
30*59599516SKenneth E. Jansen
31*59599516SKenneth E. Jansen      real*8   x(numnp,nsd)
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansenc use is like
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansenc      NABI=pvsQbi -> NABI
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansen        dimension   shpb(MAXTOP,maxsh,MAXQPT)
38*59599516SKenneth E. Jansen        real*8, allocatable :: tmpshpb(:,:)
39*59599516SKenneth E. Jansen        allocate ( NABI(nshg,3) )
40*59599516SKenneth E. Jansen        allocate ( NASC(nshg)   )
41*59599516SKenneth E. Jansen        allocate ( ndsurf(nshg) )
42*59599516SKenneth E. Jansen
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansenc....  calculate NABI
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansen      NABI=zero
47*59599516SKenneth E. Jansen      NASC=zero
48*59599516SKenneth E. Jansen      ndsurf=0
49*59599516SKenneth E. Jansenc
50*59599516SKenneth E. Jansenc.... -------------------->   boundary elements   <--------------------
51*59599516SKenneth E. Jansenc
52*59599516SKenneth E. Jansenc.... set up parameters
53*59599516SKenneth E. Jansenc
54*59599516SKenneth E. Jansenc        intrul = intg   (2,itseq)
55*59599516SKenneth E. Jansenc        intind = intptb (intrul)
56*59599516SKenneth E. Jansenc
57*59599516SKenneth E. Jansenc.... loop over the boundary elements
58*59599516SKenneth E. Jansenc
59*59599516SKenneth E. Jansen        do iblk = 1, nelblb
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansenc.... set up the parameters
62*59599516SKenneth E. Jansenc
63*59599516SKenneth E. Jansen          iel    = lcblkb(1,iblk)
64*59599516SKenneth E. Jansen          lelCat = lcblkb(2,iblk)
65*59599516SKenneth E. Jansen          lcsyst = lcblkb(3,iblk)
66*59599516SKenneth E. Jansen          iorder = lcblkb(4,iblk)
67*59599516SKenneth E. Jansen          nenl   = lcblkb(5,iblk)  ! no. of vertices per element
68*59599516SKenneth E. Jansen          nenbl  = lcblkb(6,iblk)  ! no. of vertices per bdry. face
69*59599516SKenneth E. Jansen          nshl   = lcblkb(9,iblk)
70*59599516SKenneth E. Jansen          nshlb  = lcblkb(10,iblk)
71*59599516SKenneth E. Jansen          mattyp = lcblkb(7,iblk)
72*59599516SKenneth E. Jansen          ndofl  = lcblkb(8,iblk)
73*59599516SKenneth E. Jansen          npro   = lcblkb(1,iblk+1) - iel
74*59599516SKenneth E. Jansen
75*59599516SKenneth E. Jansen
76*59599516SKenneth E. Jansen          if(lcsyst.eq.3) lcsyst=nenbl
77*59599516SKenneth E. Jansenc
78*59599516SKenneth E. Jansen          if(lcsyst.eq.3 .or. lcsyst.eq.4) then
79*59599516SKenneth E. Jansen             ngaussb = nintb(lcsyst)
80*59599516SKenneth E. Jansen          else
81*59599516SKenneth E. Jansen             ngaussb = nintb(lcsyst)
82*59599516SKenneth E. Jansen          endif
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansenc
85*59599516SKenneth E. Jansenc.... compute and assemble the residuals corresponding to the
86*59599516SKenneth E. Jansenc     boundary integral
87*59599516SKenneth E. Jansenc
88*59599516SKenneth E. Jansen          allocate (tmpshpb(nshl,MAXQPT))
89*59599516SKenneth E. Jansen
90*59599516SKenneth E. Jansen          tmpshpb(1:nshl,:) = shpb(lcsyst,1:nshl,:)
91*59599516SKenneth E. Jansen
92*59599516SKenneth E. Jansen          call AsBNABI (                       x,
93*59599516SKenneth E. Jansen     &                 tmpshpb,
94*59599516SKenneth E. Jansen     &                 mienb(iblk)%p,
95*59599516SKenneth E. Jansen     &                 miBCB(iblk)%p)
96*59599516SKenneth E. Jansen
97*59599516SKenneth E. Jansen          call AsBNASC(                       x,
98*59599516SKenneth E. Jansen     &                 tmpshpb,
99*59599516SKenneth E. Jansen     &                 mienb(iblk)%p,
100*59599516SKenneth E. Jansen     &                 miBCB(iblk)%p)
101*59599516SKenneth E. Jansen
102*59599516SKenneth E. Jansen          deallocate (tmpshpb)
103*59599516SKenneth E. Jansen
104*59599516SKenneth E. Jansen      enddo
105*59599516SKenneth E. Jansen
106*59599516SKenneth E. Jansenc
107*59599516SKenneth E. Jansenc     note that NABI has NOT been communicated.  It
108*59599516SKenneth E. JansenC     is the on processor contribution to this vector.  It will used to
109*59599516SKenneth E. JansenC     build the on processor contribution to res that will then be made
110*59599516SKenneth E. JansenC     complete via a call to commu.  Similarly the LHS usage will create
111*59599516SKenneth E. JansenC     the on-processor contribution to the lhsK. Same for NASC
112*59599516SKenneth E. Jansenc
113*59599516SKenneth E. Jansen      return
114*59599516SKenneth E. Jansen      end
115*59599516SKenneth E. Jansen
116*59599516SKenneth E. Jansen
117