FORESEER test: primitive compressible class test.
| Type | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|
| 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. |
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