Return the left eigenvectors matrix L as dF/dP = A = R ^ L.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(primitive_compressible), | intent(in) | :: | self | Primitive. |
||
| class(eos_object), | intent(in) | :: | eos | Equation of state. |
Eigenvectors.
pure function left_eigenvectors(self, eos) result(eig)
!< Return the left eigenvectors matrix `L` as `dF/dP = A = R ^ L`.
class(primitive_compressible), intent(in) :: self !< Primitive.
class(eos_object), intent(in) :: eos !< Equation of state.
real(R8P) :: eig(1:3, 1:3) !< Eigenvectors.
real(R8P) :: gp !< `g*p`.
real(R8P) :: gp_a !< `g*p/a`.
gp = eos%g() * self%pressure
gp_a = gp / eos%speed_of_sound(density=self%density, pressure=self%pressure)
eig(1, 1) = 0._R8P ; eig(1, 2) = -gp_a ; eig(1, 3) = 1._R8P
eig(2, 1) = gp / self%density ; eig(2, 2) = 0._R8P ; eig(2, 3) = -1._R8P
eig(3, 1) = 0._R8P ; eig(3, 2) = gp_a ; eig(3, 3) = 1._R8P
endfunction left_eigenvectors