xref: /phasta/phSolver/compressible/bc3res.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
159599516SKenneth E. Jansen      subroutine bc3Res (y,  iBC,  BC,  res, iper, ilwork)
259599516SKenneth E. Jansenc
359599516SKenneth E. Jansenc----------------------------------------------------------------------
459599516SKenneth E. Jansenc
559599516SKenneth E. Jansenc This routine satisfies the BC of the residual vector for 3D elements.
659599516SKenneth E. Jansenc
759599516SKenneth E. Jansenc input:
859599516SKenneth E. Jansenc  y     (nshg,ndof)   : Y variables
959599516SKenneth E. Jansenc  iBC   (nshg)        : Boundary Condition Code
1059599516SKenneth E. Jansenc  BC    (nshg,ndofBC) : the boundary condition constraint parameters
1159599516SKenneth E. Jansenc  res   (nshg,nflow)   : residual before BC is applied
1259599516SKenneth E. Jansenc
1359599516SKenneth E. Jansenc output:
1459599516SKenneth E. Jansenc  res   (nshg,nflow)   : residual after satisfaction of BC
1559599516SKenneth E. Jansenc
1659599516SKenneth E. Jansenc
1759599516SKenneth E. Jansenc Thuc Bui,      Winter 1989.
1859599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
1959599516SKenneth E. Jansenc----------------------------------------------------------------------
2059599516SKenneth E. Jansenc
2159599516SKenneth E. Jansen      include "common.h"
2259599516SKenneth E. Jansenc
2359599516SKenneth E. Jansen      dimension y(nshg,ndof),             iBC(nshg),
2459599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
2559599516SKenneth E. Jansen     &            res(nshg,nflow),           ilwork(nlwork),
2659599516SKenneth E. Jansen     &            iper(nshg)
2759599516SKenneth E. Jansenc
2859599516SKenneth E. Jansenc.... density
2959599516SKenneth E. Jansenc
3059599516SKenneth E. Jansen      where (btest(iBC,0))
3159599516SKenneth E. Jansen         res(:,5) = res(:,5) + BC(:,1)*Rgas* res(:,1) !IDEAL GAS ASSUMED
3259599516SKenneth E. Jansen         res(:,1) = zero
3359599516SKenneth E. Jansen      endwhere
3459599516SKenneth E. Jansenc
3559599516SKenneth E. Jansenc.... pressure
3659599516SKenneth E. Jansenc
3759599516SKenneth E. Jansen      if(EntropyPressure.eq.1) then
3859599516SKenneth E. Jansen         where (btest(iBC,2))
3959599516SKenneth E. Jansen
4059599516SKenneth E. Jansenc Thought this would be correct if W was in the tangent space of V
4159599516SKenneth E. Jansenc as described in Shakib's thesis it does not work for primitive
4259599516SKenneth E. Jansenc variables
4359599516SKenneth E. Jansenc
4459599516SKenneth E. Jansenc Instead we use the entropy variable W
4559599516SKenneth E. Jansenc
4659599516SKenneth E. Jansen            res(:,2) = res(:,2) -y(:,1)*res(:,1)
4759599516SKenneth E. Jansen            res(:,3) = res(:,3) -y(:,2)*res(:,1)
4859599516SKenneth E. Jansen            res(:,4) = res(:,4) -y(:,3)*res(:,1)
4959599516SKenneth E. Jansen            res(:,5) = res(:,5) -
5059599516SKenneth E. Jansen     &           (gamma*Rgas/gamma1*y(:,5)
5159599516SKenneth E. Jansen     &           + pt5 * ( y(:,1)**2 + y(:,2)**2 + y(:,3)**2))*res(:,1)
5259599516SKenneth E. Jansen            res(:,1) = zero
5359599516SKenneth E. Jansen         endwhere
5459599516SKenneth E. Jansen      else
5559599516SKenneth E. Jansen         where (btest(iBC,2))
5659599516SKenneth E. Jansen            res(:,1) = zero
5759599516SKenneth E. Jansen         endwhere
5859599516SKenneth E. Jansen      endif
5959599516SKenneth E. Jansenc
6059599516SKenneth E. Jansenc.... velocities
6159599516SKenneth E. Jansenc
6259599516SKenneth E. Jansenc ibits(n1,n2,n3) extracts bits n2+1 through n2+n3 (extending to the left
6359599516SKenneth E. Jansenc as is traditional in binary) of the integer n1
6459599516SKenneth E. Jansenc and returns the base 10 integer. In examples below x y z a b can
6559599516SKenneth E. Jansenc be 1 or zero without any effect.
6659599516SKenneth E. Jansenc
6759599516SKenneth E. Jansenc.... x1-velocity
6859599516SKenneth E. Jansenc
6959599516SKenneth E. Jansenc if iBC=4   bits of ibc =00000100 => ibits(4,3,3)=0
7059599516SKenneth E. Jansenc if iBC=40  bits of ibc =00101000 => ibits(4,3,3)=5
7159599516SKenneth E. Jansenc if iBC=40  bits of ibc =00101000 => ibits(4,3,2)=1
7259599516SKenneth E. Jansenc
7359599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 1)   ! bits of iBC= xy001zab
7459599516SKenneth E. Jansenc
7559599516SKenneth E. Jansenc     notice that the extracted 3 bits form the number 1.  below
7659599516SKenneth E. Jansenc     you will see the combinations which make up 2-7, all of the
7759599516SKenneth E. Jansenc     possible velocity combinations
7859599516SKenneth E. Jansenc
7959599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,4) * res(:,2)
8059599516SKenneth E. Jansen          res(:,4) = res(:,4) - BC(:,5) * res(:,2)
8159599516SKenneth E. Jansen          res(:,2) = zero
8259599516SKenneth E. Jansen        endwhere
8359599516SKenneth E. Jansenc
8459599516SKenneth E. Jansenc.... x2-velocity
8559599516SKenneth E. Jansenc
8659599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 2)   ! bits of iBC= xy010zab
8759599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,3)
8859599516SKenneth E. Jansen          res(:,4) = res(:,4) - BC(:,5) * res(:,3)
8959599516SKenneth E. Jansen          res(:,3) = zero
9059599516SKenneth E. Jansen        endwhere
9159599516SKenneth E. Jansenc
9259599516SKenneth E. Jansenc.... x1-velocity and x2-velocity
9359599516SKenneth E. Jansenc
9459599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 3)  ! bits of iBC= xy011zab
9559599516SKenneth E. Jansen          res(:,4) = res(:,4) - BC(:,4) * res(:,2) - BC(:,6) * res(:,3)
9659599516SKenneth E. Jansen          res(:,2) = zero
9759599516SKenneth E. Jansen          res(:,3) = zero
9859599516SKenneth E. Jansen        endwhere
9959599516SKenneth E. Jansenc
10059599516SKenneth E. Jansenc.... x3-velocity
10159599516SKenneth E. Jansenc
10259599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 4)  ! bits of iBC= xy100zab
10359599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,4)
10459599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,5) * res(:,4)
10559599516SKenneth E. Jansen          res(:,4) = zero
10659599516SKenneth E. Jansen        endwhere
10759599516SKenneth E. Jansenc
10859599516SKenneth E. Jansenc.... x1-velocity and x3-velocity
10959599516SKenneth E. Jansenc
11059599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 5)  ! bits of iBC= xy101zab
11159599516SKenneth E. Jansen          res(:,3) = res(:,3) - BC(:,4) * res(:,2) - BC(:,6) * res(:,4)
11259599516SKenneth E. Jansen          res(:,2) = zero
11359599516SKenneth E. Jansen          res(:,4) = zero
11459599516SKenneth E. Jansen        endwhere
11559599516SKenneth E. Jansenc
11659599516SKenneth E. Jansenc.... x2-velocity and x3-velocity
11759599516SKenneth E. Jansenc
11859599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 6)  ! bits of iBC= xy110zab
11959599516SKenneth E. Jansen          res(:,2) = res(:,2) - BC(:,4) * res(:,3) - BC(:,6) * res(:,4)
12059599516SKenneth E. Jansen          res(:,3) = zero
12159599516SKenneth E. Jansen          res(:,4) = zero
12259599516SKenneth E. Jansen        endwhere
12359599516SKenneth E. Jansenc
12459599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity
12559599516SKenneth E. Jansenc
12659599516SKenneth E. Jansen        where (ibits(iBC,3,3) .eq. 7)  ! bits of iBC= xy111zab
12759599516SKenneth E. Jansen          res(:,2) = zero
12859599516SKenneth E. Jansen          res(:,3) = zero
12959599516SKenneth E. Jansen          res(:,4) = zero
13059599516SKenneth E. Jansen        endwhere
13159599516SKenneth E. Jansenc
13259599516SKenneth E. Jansenc.... scaled plane extraction boundary condition
13359599516SKenneth E. Jansenc
13459599516SKenneth E. Jansen        if(intpres.eq.1) then  ! interpolating pressure so zero continuity res
13559599516SKenneth E. Jansen           where (btest(iBC,11))
13659599516SKenneth E. Jansen              res(:,1) = zero
13759599516SKenneth E. Jansen              res(:,2) = zero
13859599516SKenneth E. Jansen              res(:,3) = zero
13959599516SKenneth E. Jansen              res(:,4) = zero
14059599516SKenneth E. Jansen	      res(:,5) = zero ! added to correspond to genscale (Elaine)
14159599516SKenneth E. Jansen           endwhere
14259599516SKenneth E. Jansen        else  ! leave residual in continuity equation
14359599516SKenneth E. Jansen           where (btest(iBC,11))
14459599516SKenneth E. Jansen              res(:,2) = zero
14559599516SKenneth E. Jansen              res(:,3) = zero
14659599516SKenneth E. Jansen              res(:,4) = zero
14759599516SKenneth E. Jansen	      res(:,5) = zero ! added to correspond to genscale (Elaine)
14859599516SKenneth E. Jansen           endwhere
14959599516SKenneth E. Jansen        endif
15059599516SKenneth E. Jansenc
15159599516SKenneth E. Jansenc.... temperature
15259599516SKenneth E. Jansenc
15359599516SKenneth E. Jansen        where (btest(iBC,1)) res(:,5) = zero
15459599516SKenneth E. Jansenc
15559599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications)
15659599516SKenneth E. Jansenc
15759599516SKenneth E. Jansen        do j = 1,nshg
15859599516SKenneth E. Jansen          if (btest(iBC(j),10)) then
15959599516SKenneth E. Jansen            i = iper(j)
16059599516SKenneth E. Jansen            res(i,:) = res(i,:) + res(j,:)
16159599516SKenneth E. Jansen            res(j,:) = zero
16259599516SKenneth E. Jansen          endif
16359599516SKenneth E. Jansen        enddo
16459599516SKenneth E. Jansenc
16559599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters
16659599516SKenneth E. Jansenc
16759599516SKenneth E. Jansenc        do i = 1,nshg
16859599516SKenneth E. Jansenc           if (btest(iBC(i),10)) then
16959599516SKenneth E. Jansenc              res(i,:) = res(iper(i),:)
17059599516SKenneth E. Jansenc           endif
17159599516SKenneth E. Jansenc        enddo
17259599516SKenneth E. Jansen       if(numpe.gt.1) then
173513954efSKenneth E. Jansen       if(usingPETSc.eq.0) then !kill this code for petsc
17459599516SKenneth E. Jansenc
17559599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated
17659599516SKenneth E. Jansenc
17759599516SKenneth E. Jansen        numtask = ilwork(1)
17859599516SKenneth E. Jansen        itkbeg = 1
17959599516SKenneth E. Jansen
18059599516SKenneth E. Jansen        do itask = 1, numtask
18159599516SKenneth E. Jansen
18259599516SKenneth E. Jansen          iacc   = ilwork (itkbeg + 2)
18359599516SKenneth E. Jansen          numseg = ilwork (itkbeg + 4)
18459599516SKenneth E. Jansen
18559599516SKenneth E. Jansen          if (iacc .eq. 0) then
18659599516SKenneth E. Jansen            do is = 1,numseg
18759599516SKenneth E. Jansen              isgbeg = ilwork (itkbeg + 3 + 2*is)
18859599516SKenneth E. Jansen              lenseg = ilwork (itkbeg + 4 + 2*is)
18959599516SKenneth E. Jansen              isgend = isgbeg + lenseg - 1
19059599516SKenneth E. Jansen              res(isgbeg:isgend,:) = zero
19159599516SKenneth E. Jansen            enddo
19259599516SKenneth E. Jansen          endif
19359599516SKenneth E. Jansen
19459599516SKenneth E. Jansen          itkbeg = itkbeg + 4 + 2*numseg
19559599516SKenneth E. Jansen
19659599516SKenneth E. Jansen        enddo
19759599516SKenneth E. Jansen        endif
198513954efSKenneth E. Jansen        endif
19959599516SKenneth E. Jansenc
20059599516SKenneth E. Jansenc.... return
20159599516SKenneth E. Jansenc
20259599516SKenneth E. Jansen        return
20359599516SKenneth E. Jansen        end
20459599516SKenneth E. Jansenc
20559599516SKenneth E. Jansenc
20659599516SKenneth E. Jansenc
20759599516SKenneth E. Jansen        subroutine bc3ResSclr (y,  iBC,  BC,   rest,
20859599516SKenneth E. Jansen     &                         iper, ilwork)
20959599516SKenneth E. Jansenc
21059599516SKenneth E. Jansenc----------------------------------------------------------------------
21159599516SKenneth E. Jansenc
21259599516SKenneth E. Jansenc This routine satisfies the BC of the residual vector for 3D elements.
21359599516SKenneth E. Jansenc
21459599516SKenneth E. Jansenc input:
21559599516SKenneth E. Jansenc  Y     (nshg,ndof)   : Y Variables
21659599516SKenneth E. Jansenc  iBC   (nshg)        : Boundary Condition Code
21759599516SKenneth E. Jansenc  BC    (nshg,ndofBC) : the boundary condition constraint parameters
21859599516SKenneth E. Jansenc  rest  (nshg)        : residual before BC is applied
21959599516SKenneth E. Jansenc
22059599516SKenneth E. Jansenc output:
22159599516SKenneth E. Jansenc  rest  (nshg)        : residual after satisfaction of BC
22259599516SKenneth E. Jansenc
22359599516SKenneth E. Jansenc
22459599516SKenneth E. Jansenc Thuc Bui,      Winter 1989.
22559599516SKenneth E. Jansenc Zdenek Johan,  Winter 1991.  (Fortran 90)
22659599516SKenneth E. Jansenc----------------------------------------------------------------------
22759599516SKenneth E. Jansenc
22859599516SKenneth E. Jansen        include "common.h"
22959599516SKenneth E. Jansenc
23059599516SKenneth E. Jansen        dimension y(nshg,ndof),      iBC(nshg),
23159599516SKenneth E. Jansen     &            BC(nshg,ndofBC),
23259599516SKenneth E. Jansen     &            rest(nshg),        ilwork(nlwork),
23359599516SKenneth E. Jansen     &            iper(nshg)
23459599516SKenneth E. Jansenc
23559599516SKenneth E. Jansenc
23659599516SKenneth E. Jansen         id = isclr+5
23759599516SKenneth E. Jansenc.... Scalar Variable
23859599516SKenneth E. Jansenc
23959599516SKenneth E. Jansen        where (btest(iBC,id))
24059599516SKenneth E. Jansen          rest(:) = zero
24159599516SKenneth E. Jansen        endwhere
24259599516SKenneth E. Jansenc
24359599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications)
24459599516SKenneth E. Jansenc
24559599516SKenneth E. Jansen        do j = 1,nshg
24659599516SKenneth E. Jansen          if (btest(iBC(j),10)) then
24759599516SKenneth E. Jansen            i = iper(j)
24859599516SKenneth E. Jansen            rest(i) = rest(i) + rest(j)
24959599516SKenneth E. Jansen            rest(j) = zero   !changed
25059599516SKenneth E. Jansen          endif
25159599516SKenneth E. Jansen        enddo
25259599516SKenneth E. Jansenc
25359599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters
25459599516SKenneth E. Jansenc
25559599516SKenneth E. Jansenc$$$         do i = 1,nshg
25659599516SKenneth E. Jansenc$$$            if (btest(iBC(i),10)) then
25759599516SKenneth E. Jansenc$$$               rest(i) = rest(iper(i))
25859599516SKenneth E. Jansenc$$$            endif
25959599516SKenneth E. Jansenc$$$         enddo
26059599516SKenneth E. Jansenc
26159599516SKenneth E. Jansenc removed for impl=4 as we have set the loops over ntopsh
26259599516SKenneth E. Jansenc
26359599516SKenneth E. Jansen        if(numpe.gt.1 ) then
264*2801f607SKenneth E. Jansen         if(usingPETSc.eq.0) then !kill this code for petsc
26559599516SKenneth E. Jansenc
26659599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated
26759599516SKenneth E. Jansenc
26859599516SKenneth E. Jansen           numtask = ilwork(1)
26959599516SKenneth E. Jansen           itkbeg = 1
27059599516SKenneth E. Jansen
27159599516SKenneth E. Jansen           do itask = 1, numtask
27259599516SKenneth E. Jansen
27359599516SKenneth E. Jansen              iacc   = ilwork (itkbeg + 2)
27459599516SKenneth E. Jansen              numseg = ilwork (itkbeg + 4)
27559599516SKenneth E. Jansen
27659599516SKenneth E. Jansen              if (iacc .eq. 0) then
27759599516SKenneth E. Jansen                 do is = 1,numseg
27859599516SKenneth E. Jansen                    isgbeg = ilwork (itkbeg + 3 + 2*is)
27959599516SKenneth E. Jansen                    lenseg = ilwork (itkbeg + 4 + 2*is)
28059599516SKenneth E. Jansen                    isgend = isgbeg + lenseg - 1
28159599516SKenneth E. Jansen                    rest(isgbeg:isgend) = zero
28259599516SKenneth E. Jansen                 enddo
28359599516SKenneth E. Jansen              endif
28459599516SKenneth E. Jansen
28559599516SKenneth E. Jansen              itkbeg = itkbeg + 4 + 2*numseg
28659599516SKenneth E. Jansen
28759599516SKenneth E. Jansen           enddo
28859599516SKenneth E. Jansen         endif
289*2801f607SKenneth E. Jansen        endif
29059599516SKenneth E. Jansenc
29159599516SKenneth E. Jansenc
29259599516SKenneth E. Jansenc.... return
29359599516SKenneth E. Jansenc
29459599516SKenneth E. Jansen        return
29559599516SKenneth E. Jansen        end
29659599516SKenneth E. Jansen
297