speed_of_sound Function

private elemental function speed_of_sound(self, density, pressure) result(speed_of_sound_)

Return speed of sound.

Arguments

Type IntentOptional AttributesName
class(eos_compressible), intent(in) :: self

Equation of state.

real(kind=R8P), intent(in) :: density

Density value.

real(kind=R8P), intent(in) :: pressure

Pressure value.

Return Value real(kind=R8P)

Speed of sound value.


Source Code


Source Code

   elemental function density(self, energy, pressure, speed_of_sound, temperature) result(density_)
   !< Return density.
   class(eos_compressible), intent(in)           :: self           !< Equation of state.
   real(R8P),               intent(in), optional :: energy         !< Specific internal energy value.
   real(R8P),               intent(in), optional :: pressure       !< Pressure value.
   real(R8P),               intent(in), optional :: speed_of_sound !< Speed of sound value.
   real(R8P),               intent(in), optional :: temperature    !< Temperature value.
   real(R8P)                                     :: density_       !< Density value.

   density_ = 0._R8P
   if (present(energy).and.present(pressure)) then
      density_ = pressure / ((self%g_ - 1._R8P) * energy)
   elseif (present(pressure).and.present(speed_of_sound)) then
      density_ = self%g_ * pressure / (speed_of_sound * speed_of_sound)
   elseif (present(pressure).and.present(temperature)) then
      density_ = pressure / (self%R_ * temperature)
   endif
   endfunction density

   pure function description(self, prefix) result(desc)
   !< Return a pretty-formatted object description.
   class(eos_compressible), intent(in)           :: self             !< Equation of state.
   character(*),            intent(in), optional :: prefix           !< Prefixing string.
   character(len=:), allocatable                 :: desc             !< Description.
   character(len=:), allocatable                 :: prefix_          !< Prefixing string, local variable.
   character(len=1), parameter                   :: NL=new_line('a') !< New line character.

   prefix_ = '' ; if (present(prefix)) prefix_ = prefix
   desc = ''
   desc = desc//prefix_//'cp  = '//trim(str(n=self%cp_))//NL
   desc = desc//prefix_//'cv  = '//trim(str(n=self%cv_))
   endfunction description

   elemental function energy(self, density, pressure, temperature) result(energy_)
   !< Return specific internal energy.
   class(eos_compressible), intent(in)           :: self        !< Equation of state.
   real(R8P),               intent(in), optional :: density     !< Density value.
   real(R8P),               intent(in), optional :: pressure    !< Pressure value.
   real(R8P),               intent(in), optional :: temperature !< Temperature value.
   real(R8P)                                     :: energy_     !< Energy value.

   energy_ = 0._R8P
   if (present(density).and.present(pressure)) then
      energy_ = pressure / ((self%g_ - 1._R8P) * density)
   elseif (present(temperature)) then
      energy_ = self%cv() * temperature
   endif
   endfunction energy

   elemental function eta(self) result(eta_)
   !< Return `2 * gamma / (gamma - 1)`.
   class(eos_compressible), intent(in) :: self !< Equation of state.
   real(R8P)                           :: eta_ !< `2 * gamma / (gamma - 1)` value.

   eta_ = self%eta_
   endfunction eta

   elemental function g(self) result(g_)
   !< Return specific heats ratio `gamma=cp/cv`.
   class(eos_compressible), intent(in) :: self !< Equation of state.
   real(R8P)                           :: g_   !< Specific heats ratio value.

   g_ = self%g_
   endfunction g

   elemental function gm1(self) result(gm1_)
   !< Return `gamma - 1`.
   class(eos_compressible), intent(in) :: self !< Equation of state.
   real(R8P)                           :: gm1_ !< `gamma - 1` value.

   gm1_ = self%gm1_
   endfunction gm1

   elemental function gp1(self) result(gp1_)
   !< Return `gamma + 1`.
   class(eos_compressible), intent(in) :: self !< Equation of state.
   real(R8P)                           :: gp1_ !< `gamma + 1` value.

   gp1_ = self%gp1_
   endfunction gp1

   elemental function pressure(self, density, energy, temperature) result(pressure_)
   !< Return pressure.
   class(eos_compressible), intent(in)           :: self        !< Equation of state.
   real(R8P),               intent(in), optional :: density     !< Density value.
   real(R8P),               intent(in), optional :: energy      !< Specific internal energy value.
   real(R8P),               intent(in), optional :: temperature !< Temperature value.
   real(R8P)                                     :: pressure_   !< Pressure value.

   pressure_ = 0._R8P
   if (present(density).and.present(energy)) then
      pressure_ = density * (self%g_ - 1._R8P) * energy
   elseif (present(density).and.present(temperature)) then
      pressure_ = density * self%R_ * temperature
   endif
   endfunction pressure

   elemental function R(self) result(R_)
   !< Return fluid constant `R=cp-cv`.
   class(eos_compressible), intent(in) :: self !< Equation of state.
   real(R8P)                           :: R_   !< Fluid constant value.

   R_ = self%R_
   endfunction R

   elemental function speed_of_sound(self, density, pressure) result(speed_of_sound_)
   !< Return speed of sound.
   class(eos_compressible), intent(in) :: self            !< Equation of state.
   real(R8P),               intent(in) :: density         !< Density value.
   real(R8P),               intent(in) :: pressure        !< Pressure value.
   real(R8P)                           :: speed_of_sound_ !< Speed of sound value.

   speed_of_sound_ = sqrt(self%g_ * pressure / density)
   endfunction speed_of_sound


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