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