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