foreseer_test_primitive_compressible Program

program~~foreseer_test_primitive_compressible~~UsesGraph program~foreseer_test_primitive_compressible foreseer_test_primitive_compressible module~foreseer foreseer module~foreseer->program~foreseer_test_primitive_compressible vecfor vecfor vecfor->program~foreseer_test_primitive_compressible module~foreseer_riemann_solver_compressible_hllc foreseer_riemann_solver_compressible_hllc vecfor->module~foreseer_riemann_solver_compressible_hllc module~foreseer_primitive_object foreseer_primitive_object vecfor->module~foreseer_primitive_object module~foreseer_riemann_solver_compressible_llf foreseer_riemann_solver_compressible_llf vecfor->module~foreseer_riemann_solver_compressible_llf module~foreseer_compressible_transformations foreseer_compressible_transformations vecfor->module~foreseer_compressible_transformations module~foreseer_riemann_solver_object foreseer_riemann_solver_object vecfor->module~foreseer_riemann_solver_object module~foreseer_riemann_pattern_object foreseer_riemann_pattern_object vecfor->module~foreseer_riemann_pattern_object module~foreseer_conservative_object foreseer_conservative_object vecfor->module~foreseer_conservative_object module~foreseer_riemann_solver_compressible_exact foreseer_riemann_solver_compressible_exact vecfor->module~foreseer_riemann_solver_compressible_exact module~foreseer_conservative_compressible foreseer_conservative_compressible vecfor->module~foreseer_conservative_compressible module~foreseer_riemann_pattern_compressible_pvl foreseer_riemann_pattern_compressible_pvl vecfor->module~foreseer_riemann_pattern_compressible_pvl module~foreseer_riemann_solver_compressible_roe foreseer_riemann_solver_compressible_roe vecfor->module~foreseer_riemann_solver_compressible_roe module~foreseer_primitive_compressible foreseer_primitive_compressible vecfor->module~foreseer_primitive_compressible module~foreseer_riemann_solver_compressible_pvl foreseer_riemann_solver_compressible_pvl vecfor->module~foreseer_riemann_solver_compressible_pvl module~foreseer_riemann_pattern_compressible_object foreseer_riemann_pattern_compressible_object vecfor->module~foreseer_riemann_pattern_compressible_object penf penf penf->program~foreseer_test_primitive_compressible module~foreseer_eos_object foreseer_eos_object penf->module~foreseer_eos_object penf->module~foreseer_riemann_solver_compressible_hllc penf->module~foreseer_primitive_object penf->module~foreseer_riemann_solver_compressible_llf penf->module~foreseer_compressible_transformations penf->module~foreseer_riemann_solver_object module~foreseer_eos_compressible foreseer_eos_compressible penf->module~foreseer_eos_compressible penf->module~foreseer_conservative_object penf->module~foreseer_riemann_solver_compressible_exact penf->module~foreseer_conservative_compressible penf->module~foreseer_riemann_pattern_compressible_pvl penf->module~foreseer_riemann_solver_compressible_roe penf->module~foreseer_primitive_compressible penf->module~foreseer_riemann_solver_compressible_pvl penf->module~foreseer_riemann_pattern_compressible_object module~foreseer_eos_object->module~foreseer module~foreseer_eos_object->module~foreseer_riemann_solver_compressible_hllc module~foreseer_eos_object->module~foreseer_primitive_object module~foreseer_eos_object->module~foreseer_riemann_solver_compressible_llf module~foreseer_eos_object->module~foreseer_compressible_transformations module~foreseer_eos_object->module~foreseer_riemann_solver_object module~foreseer_eos_object->module~foreseer_riemann_pattern_object module~foreseer_eos_object->module~foreseer_eos_compressible module~foreseer_eos_object->module~foreseer_conservative_object module~foreseer_eos_object->module~foreseer_riemann_solver_compressible_exact module~foreseer_eos_object->module~foreseer_conservative_compressible module~foreseer_eos_object->module~foreseer_riemann_pattern_compressible_pvl module~foreseer_eos_object->module~foreseer_riemann_solver_compressible_roe module~foreseer_eos_object->module~foreseer_primitive_compressible module~foreseer_eos_object->module~foreseer_riemann_solver_compressible_pvl module~foreseer_eos_object->module~foreseer_riemann_pattern_compressible_object module~foreseer_riemann_solver_compressible_hllc->module~foreseer module~foreseer_primitive_object->module~foreseer module~foreseer_primitive_object->module~foreseer_primitive_compressible module~foreseer_riemann_solver_compressible_llf->module~foreseer module~foreseer_compressible_transformations->module~foreseer module~foreseer_riemann_solver_object->module~foreseer module~foreseer_riemann_solver_object->module~foreseer_riemann_solver_compressible_hllc module~foreseer_riemann_solver_object->module~foreseer_riemann_solver_compressible_llf module~foreseer_riemann_solver_object->module~foreseer_riemann_solver_compressible_exact module~foreseer_riemann_solver_object->module~foreseer_riemann_solver_compressible_roe module~foreseer_riemann_solver_object->module~foreseer_riemann_solver_compressible_pvl module~foreseer_riemann_pattern_object->module~foreseer module~foreseer_riemann_pattern_object->module~foreseer_riemann_pattern_compressible_object module~foreseer_eos_compressible->module~foreseer module~foreseer_eos_compressible->module~foreseer_riemann_solver_compressible_roe module~foreseer_eos_compressible->module~foreseer_riemann_pattern_compressible_object module~foreseer_conservative_object->module~foreseer module~foreseer_conservative_object->module~foreseer_riemann_solver_compressible_hllc module~foreseer_conservative_object->module~foreseer_riemann_solver_compressible_llf module~foreseer_conservative_object->module~foreseer_riemann_solver_object module~foreseer_conservative_object->module~foreseer_riemann_pattern_object module~foreseer_conservative_object->module~foreseer_riemann_solver_compressible_exact module~foreseer_conservative_object->module~foreseer_conservative_compressible module~foreseer_conservative_object->module~foreseer_riemann_pattern_compressible_pvl module~foreseer_conservative_object->module~foreseer_riemann_solver_compressible_roe module~foreseer_conservative_object->module~foreseer_riemann_solver_compressible_pvl module~foreseer_conservative_object->module~foreseer_riemann_pattern_compressible_object module~foreseer_riemann_solver_compressible_exact->module~foreseer module~foreseer_conservative_compressible->module~foreseer module~foreseer_conservative_compressible->module~foreseer_riemann_solver_compressible_hllc module~foreseer_conservative_compressible->module~foreseer_riemann_solver_compressible_llf module~foreseer_conservative_compressible->module~foreseer_compressible_transformations module~foreseer_conservative_compressible->module~foreseer_riemann_solver_compressible_exact module~foreseer_conservative_compressible->module~foreseer_riemann_solver_compressible_roe module~foreseer_conservative_compressible->module~foreseer_riemann_solver_compressible_pvl module~foreseer_conservative_compressible->module~foreseer_riemann_pattern_compressible_object module~foreseer_riemann_pattern_compressible_pvl->module~foreseer module~foreseer_riemann_pattern_compressible_pvl->module~foreseer_riemann_solver_compressible_hllc module~foreseer_riemann_pattern_compressible_pvl->module~foreseer_riemann_solver_compressible_llf module~foreseer_riemann_pattern_compressible_pvl->module~foreseer_riemann_solver_compressible_exact module~foreseer_riemann_pattern_compressible_pvl->module~foreseer_riemann_solver_compressible_roe module~foreseer_riemann_pattern_compressible_pvl->module~foreseer_riemann_solver_compressible_pvl module~foreseer_riemann_solver_compressible_roe->module~foreseer module~foreseer_primitive_compressible->module~foreseer module~foreseer_primitive_compressible->module~foreseer_compressible_transformations module~foreseer_riemann_solver_compressible_pvl->module~foreseer module~foreseer_riemann_pattern_compressible_object->module~foreseer module~foreseer_riemann_pattern_compressible_object->module~foreseer_riemann_pattern_compressible_pvl iso_fortran_env iso_fortran_env iso_fortran_env->module~foreseer_eos_compressible iso_fortran_env->module~foreseer_conservative_compressible iso_fortran_env->module~foreseer_primitive_compressible
Help


FORESEER test: primitive compressible class test.

Calls

program~~foreseer_test_primitive_compressible~~CallsGraph program~foreseer_test_primitive_compressible foreseer_test_primitive_compressible proc~primitive_compressible_pointer primitive_compressible_pointer program~foreseer_test_primitive_compressible->proc~primitive_compressible_pointer
Help


Variables

Type AttributesNameInitial
type(primitive_compressible) :: another_p

A primitive compressible instance.

logical :: are_tests_passed(16)

List of passed tests.

type(eos_compressible) :: eos

An equation of state.

real(kind=R8P), allocatable:: identity(:,:)

Identity tensor.

real(kind=R8P), allocatable:: l_eigenvectors(:,:)

Left eigenvectors matrix.

type(vector) :: momentum

Momentum vector.

type(primitive_compressible) :: p

A primitive compressible instance.

type(primitive_compressible), pointer:: p_pointer

A primitive compressible pointer.

real(kind=R8P), allocatable:: p_serialized(:)

Primitive variable serialized.

real(kind=R8P), allocatable:: r_eigenvectors(:,:)

Right eigenvectors matrix.


Source Code

program foreseer_test_primitive_compressible
!< FORESEER test: primitive compressible class test.

use foreseer, only : eos_compressible, primitive_compressible, primitive_compressible_pointer
use penf, only : R8P, ZeroR8
use vecfor, only : ex, vector

implicit none
type(eos_compressible)                :: eos                  !< An equation of state.
type(primitive_compressible)          :: p                    !< A primitive compressible instance.
type(primitive_compressible)          :: another_p            !< A primitive compressible instance.
type(primitive_compressible), pointer :: p_pointer            !< A primitive compressible pointer.
type(vector)                          :: momentum             !< Momentum vector.
real(R8P), allocatable                :: p_serialized(:)      !< Primitive variable serialized.
real(R8P), allocatable                :: l_eigenvectors(:,:)  !< Left eigenvectors matrix.
real(R8P), allocatable                :: r_eigenvectors(:,:)  !< Right eigenvectors matrix.
real(R8P), allocatable                :: identity(:,:)        !< Identity tensor.
#ifdef __GFORTRAN__
logical                               :: are_tests_passed(16) !< List of passed tests.
#else
logical                               :: are_tests_passed(8)  !< List of passed tests.
#endif

are_tests_passed = .false.

call p%initialize

are_tests_passed(1) = (p%density  == 0._R8P).and. &
                      (p%velocity == 0._R8P).and. &
                      (p%pressure == 0._R8P)
print "(A,L1)", 'primitive = 0, is right? ', are_tests_passed(1)

eos = eos_compressible(cp=1040.004_R8P, cv=742.86_R8P)
p = primitive_compressible(density=1._R8P, pressure=1._R8P)

are_tests_passed(2) = (p%energy(eos=eos) >= 2.5_R8P - ZeroR8).and.(p%energy(eos=eos) <= 2.5_R8P + ZeroR8)
print "(A,L1)", 'p%energy() = 2.5, is right? ', are_tests_passed(2)

momentum = p%momentum()
are_tests_passed(3) = (p%momentum() >= 0._R8P - ZeroR8).and.(p%momentum() <= 0._R8P + ZeroR8)
print "(A,L1)", 'p%momentum() = 0, is right? ', are_tests_passed(3)

p_serialized = p%array()
are_tests_passed(4) = (size(p_serialized, dim=1) == 5).and.            &
                       (p_serialized(1)          == 1._R8P).and.       &
                       (p_serialized(2)          == 0._R8P).and.       &
                       (p_serialized(3)          == 0._R8P).and.       &
                       (p_serialized(4)          == 0._R8P).and.       &
                       (p_serialized(5)          == 1._R8P)
print "(A,L1)", 'p => serialized, is done right? ', are_tests_passed(4)

call p%destroy
are_tests_passed(5) = (p%density  == 0._R8P).and. &
                      (p%velocity == 0._R8P).and. &
                      (p%pressure == 0._R8P)
print "(A,L1)", 'p destroyed, is right? ', are_tests_passed(5)

p = primitive_compressible(density=1._R8P, velocity=ex, pressure=1._R8P)

another_p = p
are_tests_passed(6) = (another_p%density  >= 1._R8P - ZeroR8).and.(another_p%density  <= 1._R8P + ZeroR8).and. &
                      (another_p%velocity >= 1._R8P - ZeroR8).and.(another_p%velocity <= 1._R8P + ZeroR8).and. &
                      (another_p%pressure >= 1._R8P - ZeroR8).and.(another_p%pressure <= 1._R8P + ZeroR8)
print "(A,L1)", 'another_p = p, is done right? ', are_tests_passed(6)

p_pointer => primitive_compressible_pointer(to=p)
are_tests_passed(7) = (p_pointer%density  >= 1._R8P - ZeroR8).and.(p_pointer%density  <= 1._R8P + ZeroR8).and. &
                      (p_pointer%velocity >= 1._R8P - ZeroR8).and.(p_pointer%velocity <= 1._R8P + ZeroR8).and. &
                      (p_pointer%pressure >= 1._R8P - ZeroR8).and.(p_pointer%pressure <= 1._R8P + ZeroR8)
print "(A,L1)", 'p => p, is done right? ', are_tests_passed(7)

call another_p%initialize(initial_state=p)
are_tests_passed(8) = (another_p%density  >= 1._R8P - ZeroR8).and.(another_p%density  <= 1._R8P + ZeroR8).and. &
                      (another_p%velocity >= 1._R8P - ZeroR8).and.(another_p%velocity <= 1._R8P + ZeroR8).and. &
                      (another_p%pressure >= 1._R8P - ZeroR8).and.(another_p%pressure <= 1._R8P + ZeroR8)
print "(A,L1)", 'antoher_p == p, is right? ', are_tests_passed(8)

#ifdef __GFORTRAN__
p = 2._R8P * p
are_tests_passed(9) = (p%density  >= 2._R8P - ZeroR8).and.(p%density  <= 2._R8P + ZeroR8).and. &
                      (p%velocity >= 2._R8P - ZeroR8).and.(p%velocity <= 2._R8P + ZeroR8).and. &
                      (p%pressure >= 2._R8P - ZeroR8).and.(p%pressure <= 2._R8P + ZeroR8)
print "(A,L1)", '2 * p, is done right? ', are_tests_passed(9)

p = p * p
are_tests_passed(10) = (p%density  >= 4._R8P - ZeroR8).and.(p%density  <= 4._R8P + ZeroR8).and. &
                       (p%velocity >= 4._R8P - ZeroR8).and.(p%velocity <= 4._R8P + ZeroR8).and. &
                       (p%pressure >= 4._R8P - ZeroR8).and.(p%pressure <= 4._R8P + ZeroR8)
print "(A,L1)", 'p * p, is done right? ', are_tests_passed(10)

p = p + p
are_tests_passed(11) = (p%density  >= 8._R8P - ZeroR8).and.(p%density  <= 8._R8P + ZeroR8).and. &
                       (p%velocity >= 8._R8P - ZeroR8).and.(p%velocity <= 8._R8P + ZeroR8).and. &
                       (p%pressure >= 8._R8P - ZeroR8).and.(p%pressure <= 8._R8P + ZeroR8)
print "(A,L1)", 'p + p, is done right? ', are_tests_passed(11)

p = p - p
are_tests_passed(12) = (p%density  >= 0._R8P - ZeroR8).and.(p%density  <= 0._R8P + ZeroR8).and. &
                       (p%velocity >= 0._R8P - ZeroR8).and.(p%velocity <= 0._R8P + ZeroR8).and. &
                       (p%pressure >= 0._R8P - ZeroR8).and.(p%pressure <= 0._R8P + ZeroR8)
print "(A,L1)", 'p - p, is done right? ', are_tests_passed(12)

p = primitive_compressible(density=1._R8P, pressure=1._R8P)

another_p = - p
are_tests_passed(13) = (another_p%density  >= -1._R8P - ZeroR8).and.(another_p%density  <= -1._R8P + ZeroR8).and. &
                       (another_p%pressure >= -1._R8P - ZeroR8).and.(another_p%pressure <= -1._R8P + ZeroR8)
print "(A,L1)", 'another_p = - p, is done right? ', are_tests_passed(13)

another_p = + p
are_tests_passed(14) = (another_p%density  >= 1._R8P - ZeroR8).and.(another_p%density  <= 1._R8P + ZeroR8).and. &
                       (another_p%pressure >= 1._R8P - ZeroR8).and.(another_p%pressure <= 1._R8P + ZeroR8)
print "(A,L1)", 'another_p = + p, is done right? ', are_tests_passed(14)

p = p * 2._R8P
are_tests_passed(15) = (p%density  >= 2._R8P - ZeroR8).and.(p%density  <= 2._R8P + ZeroR8).and. &
                       (p%pressure >= 2._R8P - ZeroR8).and.(p%pressure <= 2._R8P + ZeroR8)
print "(A,L1)", 'p * 2, is done right? ', are_tests_passed(15)

p = p / 2._R8P
are_tests_passed(16) = (p%density  >= 1._R8P - ZeroR8).and.(p%density  <= 1._R8P + ZeroR8).and. &
                       (p%pressure >= 1._R8P - ZeroR8).and.(p%pressure <= 1._R8P + ZeroR8)
print "(A,L1)", 'p / 2, is done right? ', are_tests_passed(16)
#endif

p = primitive_compressible(density=1._R8P, velocity=ex, pressure=1._R8P)

print "(A)", "Test pretty printing"
print "(A)", p_pointer%description()

print "(A)", "Test eigenvector computing"
l_eigenvectors = p%left_eigenvectors(eos=eos)
r_eigenvectors = p%right_eigenvectors(eos=eos)
identity = matmul(l_eigenvectors, r_eigenvectors)
print "(A)", "Left"
print "(3F7.3)", l_eigenvectors(1,:)
print "(3F7.3)", l_eigenvectors(2,:)
print "(3F7.3)", l_eigenvectors(3,:)
print "(A)", "Right"
print "(3F7.3)", r_eigenvectors(1,:)
print "(3F7.3)", r_eigenvectors(2,:)
print "(3F7.3)", r_eigenvectors(3,:)
print "(A)", "L * R"
print "(3F7.3)", identity(1,:)
print "(3F7.3)", identity(2,:)
print "(3F7.3)", identity(3,:)

print "(A,L1)", new_line('a')//'Are all tests passed? ', all(are_tests_passed)
endprogram foreseer_test_primitive_compressible