#include "cctk.h"
#include "cctk_Arguments.h"
#include "cctk_Parameters.h"
#include "cctk_Functions.h"



subroutine SWTNS_outerboundary (CCTK_ARGUMENTS)
 implicit none
  DECLARE_CCTK_ARGUMENTS
  DECLARE_CCTK_FUNCTIONS
  DECLARE_CCTK_PARAMETERS  

   integer :: i, j, k, spec_i, spec_j, spec_k


do k = 1, cctk_lsh(3)
     do j = 1, cctk_lsh(2)
        do i = 1, cctk_lsh(1)
		  if (grid_r(i,j,k) >= (TOV_surface - rprec) .AND. grid_r(i,j,k) <= (TOV_surface + rprec) )then
		  H(i,j,k) = 0
	          !drXi(i,j,k) = 0
		  drPi(i,j,k) = 0
		  else if ( grid_r(i,j,k) > (TOV_surface + rprec) ) then
		  Xi(i,j,k) = 0
		  Pi(i,j,k) = 0
		  H(i,j,k) = 0
		  end if
         end do
    end do
end do

end subroutine SWTNS_outerboundary


subroutine SWTNS_RHS_outerboundary (CCTK_ARGUMENTS)
  implicit none
  DECLARE_CCTK_ARGUMENTS
  DECLARE_CCTK_FUNCTIONS
  DECLARE_CCTK_PARAMETERS

  integer :: i, j, k,  spec_i, spec_j, spec_k


do k = 1, cctk_lsh(3)
     do j = 1, cctk_lsh(2)
        do i = 1, cctk_lsh(1)
		  if (grid_r(i,j,k) > (TOV_surface + rprec) )then
		  Xidot(i,j,k) = 0
	          Hdot(i,j,k) = 0
		  Pidot(i,j,k) = 0
		  else if (grid_r(i,j,k) >= (TOV_surface - rprec) .AND. grid_r(i,j,k) <= (TOV_surface + rprec) )then
		  Hdot(i,j,k) = 0
		 ! drXi(i,j,k) = 0
		  Pidot(i,j,k) = B(i,j,k)*drH(i,j,k)  + C(i,j,k)*Xi(i,j,k)
		  end if
         end do
    end do
end do

end subroutine SWTNS_RHS_outerboundary

subroutine SWTNS_boundaries (CCTK_ARGUMENTS)
  implicit none
  DECLARE_CCTK_ARGUMENTS
  DECLARE_CCTK_FUNCTIONS
  DECLARE_CCTK_PARAMETERS  
  
  character :: fbound*1000
  integer   :: fboundlen
  integer   :: ierr
  !write(*,*) "SWTNS_boundaries"
   call CCTK_FortranString (fboundlen, bound, fbound)
   if (fboundlen > len(fbound)) call CCTK_WARN (0, "internal error")
   
    ierr = Boundary_SelectGroupForBC &
         (cctkGH, CCTK_ALL_FACES, +1, -1, "SWTNS::scalar", fbound)
    if (ierr/=0) call CCTK_WARN (0, "internal error")
 
    ierr = Boundary_SelectGroupForBC &
        (cctkGH, CCTK_ALL_FACES, +1, -1, "SWTNS::density", fbound)
   if (ierr/=0) call CCTK_WARN (0, "internal error")
   
   ierr = Boundary_SelectGroupForBC &
        (cctkGH, CCTK_ALL_FACES, +1, -1, "SWTNS::velocity", fbound)
   if (ierr/=0) call CCTK_WARN (0, "internal error")
end subroutine SWTNS_boundaries
