xref: /phasta/phSolver/common/pvsqbi.f (revision 7acde132a6def0fe2daaec0d1a712dff0e5c6636)
159599516SKenneth E. Jansenc-----------------------------------------------------------------------
259599516SKenneth E. Jansenc
359599516SKenneth E. Jansenc  Natural pressure boundary condition can be calculated with p, the pressure,
459599516SKenneth E. Jansenc  related (in some prescribed manner) to Q, the flow rate, through the same
559599516SKenneth E. Jansenc  boundary.  To do this efficiently requires us to precompute the integral
659599516SKenneth E. Jansenc  of N_A over the boundary for each node A and store it in a vector of length
759599516SKenneth E. Jansenc  nshg (a bit wasteful since only the nodes on the boundary will be non zero
859599516SKenneth E. Jansenc  in this vector but it is probably slower to index it than to multiply and
959599516SKenneth E. Jansenc  add the extra zeros....check later).
1059599516SKenneth E. Jansenc
1159599516SKenneth E. Jansenc-----------------------------------------------------------------------
1259599516SKenneth E. Jansen      module pvsQbi
1359599516SKenneth E. Jansen
1459599516SKenneth E. Jansen      real*8, allocatable ::  NABI(:,:)
1559599516SKenneth E. Jansen      real*8, allocatable ::  NASC(:)
1659599516SKenneth E. Jansen      integer, allocatable :: ndsurf(:)
1759599516SKenneth E. Jansen
1859599516SKenneth E. Jansen      end module
1959599516SKenneth E. Jansen
20*bd5c8633SCameron Smith      subroutine finalizeNABI
21*bd5c8633SCameron Smith        use pvsQbi
22*bd5c8633SCameron Smith        if( allocated(NABI) ) then
23*bd5c8633SCameron Smith          deallocate(NABI)
24*bd5c8633SCameron Smith        endif
25*bd5c8633SCameron Smith        if( allocated(NASC) ) then
26*bd5c8633SCameron Smith          deallocate(NASC)
27*bd5c8633SCameron Smith        endif
28*bd5c8633SCameron Smith        if( allocated(ndsurf) ) then
29*bd5c8633SCameron Smith          deallocate(ndsurf)
30*bd5c8633SCameron Smith        endif
31*bd5c8633SCameron Smith      end
32*bd5c8633SCameron Smith
3359599516SKenneth E. Jansenc-----------------------------------------------------------------------
3459599516SKenneth E. Jansenc
3559599516SKenneth E. Jansenc     Initialize:
3659599516SKenneth E. Jansenc
3759599516SKenneth E. Jansenc-----------------------------------------------------------------------
3859599516SKenneth E. Jansen      subroutine initNABI( x, shpb )
3959599516SKenneth E. Jansen
4059599516SKenneth E. Jansen      use     pointer_data
4159599516SKenneth E. Jansen      use     pvsQbi
4259599516SKenneth E. Jansen      include "common.h"
4359599516SKenneth E. Jansen
4459599516SKenneth E. Jansen      real*8   x(numnp,nsd)
4559599516SKenneth E. Jansenc
4659599516SKenneth E. Jansenc use is like
4759599516SKenneth E. Jansenc
4859599516SKenneth E. Jansenc      NABI=pvsQbi -> NABI
4959599516SKenneth E. Jansenc
5059599516SKenneth E. Jansen        dimension   shpb(MAXTOP,maxsh,MAXQPT)
5159599516SKenneth E. Jansen        real*8, allocatable :: tmpshpb(:,:)
5259599516SKenneth E. Jansen        allocate ( NABI(nshg,3) )
5359599516SKenneth E. Jansen        allocate ( NASC(nshg)   )
5459599516SKenneth E. Jansen        allocate ( ndsurf(nshg) )
5559599516SKenneth E. Jansen
5659599516SKenneth E. Jansenc
5759599516SKenneth E. Jansenc....  calculate NABI
5859599516SKenneth E. Jansenc
5959599516SKenneth E. Jansen      NABI=zero
6059599516SKenneth E. Jansen      NASC=zero
6159599516SKenneth E. Jansen      ndsurf=0
6259599516SKenneth E. Jansenc
6359599516SKenneth E. Jansenc.... -------------------->   boundary elements   <--------------------
6459599516SKenneth E. Jansenc
6559599516SKenneth E. Jansenc.... set up parameters
6659599516SKenneth E. Jansenc
6759599516SKenneth E. Jansenc        intrul = intg   (2,itseq)
6859599516SKenneth E. Jansenc        intind = intptb (intrul)
6959599516SKenneth E. Jansenc
7059599516SKenneth E. Jansenc.... loop over the boundary elements
7159599516SKenneth E. Jansenc
7259599516SKenneth E. Jansen        do iblk = 1, nelblb
7359599516SKenneth E. Jansenc
7459599516SKenneth E. Jansenc.... set up the parameters
7559599516SKenneth E. Jansenc
7659599516SKenneth E. Jansen          iel    = lcblkb(1,iblk)
7759599516SKenneth E. Jansen          lelCat = lcblkb(2,iblk)
7859599516SKenneth E. Jansen          lcsyst = lcblkb(3,iblk)
7959599516SKenneth E. Jansen          iorder = lcblkb(4,iblk)
8059599516SKenneth E. Jansen          nenl   = lcblkb(5,iblk)  ! no. of vertices per element
8159599516SKenneth E. Jansen          nenbl  = lcblkb(6,iblk)  ! no. of vertices per bdry. face
8259599516SKenneth E. Jansen          nshl   = lcblkb(9,iblk)
8359599516SKenneth E. Jansen          nshlb  = lcblkb(10,iblk)
8459599516SKenneth E. Jansen          mattyp = lcblkb(7,iblk)
8559599516SKenneth E. Jansen          ndofl  = lcblkb(8,iblk)
8659599516SKenneth E. Jansen          npro   = lcblkb(1,iblk+1) - iel
8759599516SKenneth E. Jansen
8859599516SKenneth E. Jansen
8959599516SKenneth E. Jansen          if(lcsyst.eq.3) lcsyst=nenbl
9059599516SKenneth E. Jansenc
9159599516SKenneth E. Jansen          if(lcsyst.eq.3 .or. lcsyst.eq.4) then
9259599516SKenneth E. Jansen             ngaussb = nintb(lcsyst)
9359599516SKenneth E. Jansen          else
9459599516SKenneth E. Jansen             ngaussb = nintb(lcsyst)
9559599516SKenneth E. Jansen          endif
9659599516SKenneth E. Jansen
9759599516SKenneth E. Jansenc
9859599516SKenneth E. Jansenc.... compute and assemble the residuals corresponding to the
9959599516SKenneth E. Jansenc     boundary integral
10059599516SKenneth E. Jansenc
10159599516SKenneth E. Jansen          allocate (tmpshpb(nshl,MAXQPT))
10259599516SKenneth E. Jansen
10359599516SKenneth E. Jansen          tmpshpb(1:nshl,:) = shpb(lcsyst,1:nshl,:)
10459599516SKenneth E. Jansen
10559599516SKenneth E. Jansen          call AsBNABI (                       x,
10659599516SKenneth E. Jansen     &                 tmpshpb,
10759599516SKenneth E. Jansen     &                 mienb(iblk)%p,
10859599516SKenneth E. Jansen     &                 miBCB(iblk)%p)
10959599516SKenneth E. Jansen
11059599516SKenneth E. Jansen          call AsBNASC(                       x,
11159599516SKenneth E. Jansen     &                 tmpshpb,
11259599516SKenneth E. Jansen     &                 mienb(iblk)%p,
11359599516SKenneth E. Jansen     &                 miBCB(iblk)%p)
11459599516SKenneth E. Jansen
11559599516SKenneth E. Jansen          deallocate (tmpshpb)
11659599516SKenneth E. Jansen
11759599516SKenneth E. Jansen      enddo
11859599516SKenneth E. Jansen
11959599516SKenneth E. Jansenc
12059599516SKenneth E. Jansenc     note that NABI has NOT been communicated.  It
12159599516SKenneth E. JansenC     is the on processor contribution to this vector.  It will used to
12259599516SKenneth E. JansenC     build the on processor contribution to res that will then be made
12359599516SKenneth E. JansenC     complete via a call to commu.  Similarly the LHS usage will create
12459599516SKenneth E. JansenC     the on-processor contribution to the lhsK. Same for NASC
12559599516SKenneth E. Jansenc
12659599516SKenneth E. Jansen      return
12759599516SKenneth E. Jansen      end
12859599516SKenneth E. Jansen
12959599516SKenneth E. Jansen
130