foreseer_test_primitive_compressible.F90 Source File

FORESEER test: primitive compressible class test.

This File Depends On

sourcefile~~foreseer_test_primitive_compressible.f90~~EfferentGraph sourcefile~foreseer_test_primitive_compressible.f90 foreseer_test_primitive_compressible.F90 sourcefile~foreseer.f90 foreseer.f90 sourcefile~foreseer.f90->sourcefile~foreseer_test_primitive_compressible.f90 sourcefile~foreseer_compressible_transformations.f90 foreseer_compressible_transformations.f90 sourcefile~foreseer_compressible_transformations.f90->sourcefile~foreseer.f90 sourcefile~foreseer_eos_compressible.f90 foreseer_eos_compressible.f90 sourcefile~foreseer_eos_compressible.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_solver_compressible_roe.f90 foreseer_riemann_solver_compressible_roe.F90 sourcefile~foreseer_eos_compressible.f90->sourcefile~foreseer_riemann_solver_compressible_roe.f90 sourcefile~foreseer_riemann_pattern_compressible_object.f90 foreseer_riemann_pattern_compressible_object.f90 sourcefile~foreseer_eos_compressible.f90->sourcefile~foreseer_riemann_pattern_compressible_object.f90 sourcefile~foreseer_riemann_solver_compressible_roe.f90->sourcefile~foreseer.f90 sourcefile~foreseer_primitive_object.f90 foreseer_primitive_object.f90 sourcefile~foreseer_primitive_object.f90->sourcefile~foreseer.f90 sourcefile~foreseer_primitive_compressible.f90 foreseer_primitive_compressible.f90 sourcefile~foreseer_primitive_object.f90->sourcefile~foreseer_primitive_compressible.f90 sourcefile~foreseer_riemann_pattern_compressible_object.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90 foreseer_riemann_pattern_compressible_pvl.f90 sourcefile~foreseer_riemann_pattern_compressible_object.f90->sourcefile~foreseer_riemann_pattern_compressible_pvl.f90 sourcefile~foreseer_conservative_compressible.f90 foreseer_conservative_compressible.f90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer.f90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_compressible_transformations.f90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_riemann_solver_compressible_roe.f90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_riemann_pattern_compressible_object.f90 sourcefile~foreseer_riemann_solver_compressible_pvl.f90 foreseer_riemann_solver_compressible_pvl.f90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_riemann_solver_compressible_pvl.f90 sourcefile~foreseer_riemann_solver_compressible_hllc.f90 foreseer_riemann_solver_compressible_hllc.F90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_riemann_solver_compressible_hllc.f90 sourcefile~foreseer_riemann_solver_compressible_exact.f90 foreseer_riemann_solver_compressible_exact.F90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_riemann_solver_compressible_exact.f90 sourcefile~foreseer_riemann_solver_compressible_llf.f90 foreseer_riemann_solver_compressible_llf.F90 sourcefile~foreseer_conservative_compressible.f90->sourcefile~foreseer_riemann_solver_compressible_llf.f90 sourcefile~foreseer_riemann_solver_compressible_pvl.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_solver_compressible_hllc.f90->sourcefile~foreseer.f90 sourcefile~foreseer_primitive_compressible.f90->sourcefile~foreseer.f90 sourcefile~foreseer_primitive_compressible.f90->sourcefile~foreseer_compressible_transformations.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90->sourcefile~foreseer_riemann_solver_compressible_roe.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90->sourcefile~foreseer_riemann_solver_compressible_pvl.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90->sourcefile~foreseer_riemann_solver_compressible_hllc.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90->sourcefile~foreseer_riemann_solver_compressible_exact.f90 sourcefile~foreseer_riemann_pattern_compressible_pvl.f90->sourcefile~foreseer_riemann_solver_compressible_llf.f90 sourcefile~foreseer_riemann_solver_object.f90 foreseer_riemann_solver_object.f90 sourcefile~foreseer_riemann_solver_object.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_solver_object.f90->sourcefile~foreseer_riemann_solver_compressible_roe.f90 sourcefile~foreseer_riemann_solver_object.f90->sourcefile~foreseer_riemann_solver_compressible_pvl.f90 sourcefile~foreseer_riemann_solver_object.f90->sourcefile~foreseer_riemann_solver_compressible_hllc.f90 sourcefile~foreseer_riemann_solver_object.f90->sourcefile~foreseer_riemann_solver_compressible_exact.f90 sourcefile~foreseer_riemann_solver_object.f90->sourcefile~foreseer_riemann_solver_compressible_llf.f90 sourcefile~foreseer_riemann_pattern_object.f90 foreseer_riemann_pattern_object.f90 sourcefile~foreseer_riemann_pattern_object.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_pattern_object.f90->sourcefile~foreseer_riemann_pattern_compressible_object.f90 sourcefile~foreseer_conservative_object.f90 foreseer_conservative_object.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_solver_compressible_roe.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_pattern_compressible_object.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_conservative_compressible.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_solver_compressible_pvl.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_solver_compressible_hllc.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_pattern_compressible_pvl.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_solver_object.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_pattern_object.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_solver_compressible_exact.f90 sourcefile~foreseer_conservative_object.f90->sourcefile~foreseer_riemann_solver_compressible_llf.f90 sourcefile~foreseer_riemann_solver_compressible_exact.f90->sourcefile~foreseer.f90 sourcefile~foreseer_riemann_solver_compressible_llf.f90->sourcefile~foreseer.f90 sourcefile~foreseer_eos_object.f90 foreseer_eos_object.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_compressible_transformations.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_eos_compressible.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_solver_compressible_roe.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_primitive_object.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_pattern_compressible_object.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_conservative_compressible.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_solver_compressible_pvl.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_solver_compressible_hllc.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_primitive_compressible.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_pattern_compressible_pvl.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_solver_object.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_pattern_object.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_conservative_object.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_solver_compressible_exact.f90 sourcefile~foreseer_eos_object.f90->sourcefile~foreseer_riemann_solver_compressible_llf.f90
Help


Source Code

!< FORESEER test: primitive compressible class test.

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