Impose boundary conditions.
The boundary conditions are imposed on the primitive variables by means of the ghost cells approach.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(euler_1d), | intent(in) | :: | self | Euler field. |
||
| type(conservative_compressible), | intent(inout) | :: | U(1-self%Ng:) | Conservative variables. |
pure subroutine impose_boundary_conditions(self, U)
!< Impose boundary conditions.
!<
!< The boundary conditions are imposed on the primitive variables by means of the ghost cells approach.
class(euler_1d), intent(in) :: self !< Euler field.
type(conservative_compressible), intent(inout) :: U(1-self%Ng:) !< Conservative variables.
! type(primitive_compressible), intent(inout) :: P(1-self%Ng:) !< Primitive variables.
integer(I4P) :: i !< Space counter.
select case(trim(adjustl(self%BC_L)))
case('TRA') ! trasmissive (non reflective) BC
do i=1-self%Ng, 0
! P(i) = P(-i+1)
U(i) = U(-i+1)
enddo
case('REF') ! reflective BC
do i=1-self%Ng, 0
! P(i)%density = P(-i+1)%density
! P(i)%velocity = - P(-i+1)%velocity
! P(i)%pressure = P(-i+1)%pressure
U(i)%density = U(-i+1)%density
U(i)%momentum = - U(-i+1)%momentum
U(i)%energy = U(-i+1)%energy
enddo
endselect
select case(trim(adjustl(self%BC_R)))
case('TRA') ! trasmissive (non reflective) BC
do i=self%Ni+1, self%Ni+self%Ng
! P(i) = P(self%Ni-(i-self%Ni-1))
U(i) = U(self%Ni-(i-self%Ni-1))
enddo
case('REF') ! reflective BC
do i=self%Ni+1, self%Ni+self%Ng
! P(i)%density = P(self%Ni-(i-self%Ni-1))%density
! P(i)%velocity = - P(self%Ni-(i-self%Ni-1))%velocity
! P(i)%pressure = P(self%Ni-(i-self%Ni-1))%pressure
U(i)%density = U(self%Ni-(i-self%Ni-1))%density
U(i)%momentum = - U(self%Ni-(i-self%Ni-1))%momentum
U(i)%energy = U(self%Ni-(i-self%Ni-1))%energy
enddo
endselect
endsubroutine impose_boundary_conditions