compute_roe_state Subroutine

private subroutine compute_roe_state(eos_left, state_left, eos_right, state_right, r_d, r_u, r_e, r_a)

Evaluate the intermediate state from the known states U1,U4 using the Roe linearization.

Arguments

Type IntentOptional AttributesName
class(eos_object), intent(in) :: eos_left

Equation of state for left state.

class(conservative_object), intent(in) :: state_left

Left Riemann state.

class(eos_object), intent(in) :: eos_right

Equation of state for right state.

class(conservative_object), intent(in) :: state_right

Right Riemann state.

real(kind=R8P), intent(out) :: r_d

Roe intermediate state density.

type(vector), intent(out) :: r_u

Roe intermediate state velocity vector..

real(kind=R8P), intent(out) :: r_e

Roe intermediate state enthalpy.

real(kind=R8P), intent(out) :: r_a

Roe intermediate state sound speed.

Calls

proc~~compute_roe_state~~CallsGraph proc~compute_roe_state compute_roe_state proc~conservative_compressible_pointer conservative_compressible_pointer proc~compute_roe_state->proc~conservative_compressible_pointer proc~eos_compressible_pointer eos_compressible_pointer proc~compute_roe_state->proc~eos_compressible_pointer
Help

Called By

proc~~compute_roe_state~~CalledByGraph proc~compute_roe_state compute_roe_state proc~solve~5 solve proc~solve~5->proc~compute_roe_state
Help

Source Code


Source Code

   subroutine compute_roe_state(eos_left, state_left, eos_right, state_right, r_d, r_u, r_e, r_a)
   !< Evaluate the intermediate state from the known states U1,U4 using the Roe linearization.
   class(eos_object),                      intent(in)    :: eos_left     !< Equation of state for left state.
   class(conservative_object),             intent(in)    :: state_left   !< Left Riemann state.
   class(eos_object),                      intent(in)    :: eos_right    !< Equation of state for right state.
   class(conservative_object),             intent(in)    :: state_right  !< Right Riemann state.
   real(R8P),                              intent(out)   :: r_d          !< Roe intermediate state density.
   type(vector),                           intent(out)   :: r_u          !< Roe intermediate state velocity vector..
   real(R8P),                              intent(out)   :: r_e          !< Roe intermediate state enthalpy.
   real(R8P),                              intent(out)   :: r_a          !< Roe intermediate state sound speed.
   real(R8P)                                             :: x, omx       !< x = sqrt(r1)/(sqrt(r1)+sqrt(r4)),  omx = 1-x
   real(R8P)                                             :: cp, cv       !< Roe intermediate state Cp and Cv.
   type(conservative_compressible), pointer              :: state_left_  !< Left Riemann state, local variable.
   type(conservative_compressible), pointer              :: state_right_ !< Right Riemann state, local variable.
   type(eos_compressible),          pointer              :: eos_left_    !< Left Riemann state, local variable.
   type(eos_compressible),          pointer              :: eos_right_   !< Right Riemann state, local variable.

   state_left_ => conservative_compressible_pointer(to=state_left)
   state_right_ => conservative_compressible_pointer(to=state_right)
   eos_left_ => eos_compressible_pointer(to=eos_left)
   eos_right_ => eos_compressible_pointer(to=eos_right)
   x = sqrt(state_left_%density)/(sqrt(state_left_%density)+sqrt(state_right_%density)) ; omx = 1._R8P - x

   r_d   = sqrt(state_left_%density*state_right_%density)
   r_u%x = state_left_%momentum%x / state_left_%density * x + state_right_%momentum%x / state_right_%density * omx
   r_u%y = state_left_%momentum%y / state_left_%density * x + state_right_%momentum%y / state_right_%density * omx
   r_u%z = state_left_%momentum%z / state_left_%density * x + state_right_%momentum%z / state_right_%density * omx
   r_e   = (state_left_%energy  + state_left_%pressure(eos_left))   / state_left_%density  * x + &
           (state_right_%energy + state_right_%pressure(eos_right)) / state_right_%density * omx
   cp    = eos_left_%cp_ * x + eos_right_%cp_ * omx
   cv    = eos_left_%cv_ * x + eos_right_%cv_ * omx
   r_a   = sqrt((cp/cv - 1._R8P)*(r_e - 0.5_R8P * r_u%sq_norm()))

   endsubroutine compute_roe_state


add add add_euler array array compute_derivate compute_dt compute_fluxes compute_fluxes compute_fluxes_from_primitive compute_post_rarefaction compute_post_shock compute_roe_state compute_states23_from_u23 compute_u23 compute_up23 compute_waves compute_waves_u23 compute_waves_up23 cons_assign_cons cons_divide_real cons_multiply_cons cons_multiply_real conservative_compressible conservative_compressible_instance conservative_compressible_pointer conservative_to_primitive_compressible cp cv delta density description description description description destroy destroy destroy dEuler_dt energy energy eos_assign_eos eos_compressible eos_compressible_instance eos_compressible_pointer eta euler_assign_euler euler_assign_real euler_local_error euler_multiply_euler euler_multiply_real g gm1 gp1 impose_boundary_conditions initialize initialize initialize initialize initialize initialize initialize initialize initialize initialize left_eigenvectors momentum negative negative output parse_command_line_interface positive positive pressure pressure prim_assign_prim prim_divide_real prim_multiply_prim prim_multiply_real primitive_compressible primitive_compressible_instance primitive_compressible_pointer primitive_to_conservative_compressible R real_multiply_cons real_multiply_euler real_multiply_prim reconstruct_interfaces_characteristic reconstruct_interfaces_conservative reconstruct_interfaces_primitive right_eigenvectors rpat_assign_rpat save_time_serie solve solve solve solve solve speed_of_sound sub sub sub_euler temperature velocity