Reconstruct interfaces states.
The reconstruction is done in primitive variables.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(euler_1d), | intent(in) | :: | self | Euler field. |
||
| type(conservative_compressible), | intent(in) | :: | conservative(1-self%Ng:) | Conservative variables. |
||
| type(conservative_compressible), | intent(inout) | :: | r_conservative(1:,0:) | Reconstructed conservative vars. |
subroutine reconstruct_interfaces_primitive(self, conservative, r_conservative)
!< Reconstruct interfaces states.
!<
!< The reconstruction is done in primitive variables.
class(euler_1d), intent(in) :: self !< Euler field.
type(conservative_compressible), intent(in) :: conservative(1-self%Ng:) !< Conservative variables.
type(conservative_compressible), intent(inout) :: r_conservative(1:, 0:) !< Reconstructed conservative vars.
type(primitive_compressible) :: primitive(1-self%Ng:self%Ni+self%Ng) !< Primitive variables.
type(primitive_compressible) :: r_primitive(1:2, 0:self%Ni+1) !< Reconstructed primitive variables.
real(R8P), allocatable :: P(:) !< Serialized primitive variables.
real(R8P) :: C(1:2, 1-self%Ng:-1+self%Ng, 1:3) !< Pseudo characteristic variables.
real(R8P) :: CR(1:2, 1:3) !< Pseudo characteristic reconst.
integer(I4P) :: i !< Counter.
integer(I4P) :: j !< Counter.
integer(I4P) :: f !< Counter.
integer(I4P) :: v !< Counter.
class(interpolator_object), allocatable :: interpolator !< WENO interpolator.
select case(self%weno_order)
case(1) ! 1st order piecewise constant reconstruction
do i=0, self%Ni+1
r_conservative(1, i) = conservative(i)
r_conservative(2, i) = r_conservative(1, i)
enddo
case(3, 5, 7, 9, 11, 13, 15, 17) ! 3rd-17th order WENO reconstruction
call wenoof_create(interpolator_type='reconstructor-JS', &
S=self%Ng, &
interpolator=interpolator)
do i=1-self%Ng, self%Ni+self%Ng
primitive(i) = conservative_to_primitive_compressible(conservative=conservative(i), eos=self%eos)
enddo
do i=0, self%Ni+1
do j=i+1-self%Ng, i-1+self%Ng
P = primitive(j)%array()
do f=1, 2
C(f, j-i, 1) = P(1)
C(f, j-i, 2) = P(2)
C(f, j-i, 3) = P(5)
enddo
enddo
do v=1, 3
call interpolator%interpolate(stencil=C(:, :, v), interpolation=CR(:, v))
enddo
do f=1, 2
r_primitive(f, i)%density = CR(f, 1)
r_primitive(f, i)%velocity = CR(f, 2) * ex
r_primitive(f, i)%pressure = CR(f, 3)
enddo
enddo
do i=0, self%Ni+1
r_conservative(1, i) = primitive_to_conservative_compressible(primitive=r_primitive(1, i), eos=self%eos)
r_conservative(2, i) = primitive_to_conservative_compressible(primitive=r_primitive(2, i), eos=self%eos)
enddo
endselect
endsubroutine reconstruct_interfaces_primitive