Testing Scientific Code
Conservation Check
Test an Invariant
Scientific code often has conservation rules. A simple invariant can flag whether a balance still holds.
Program
Play the program to vary the stored amount and watch the balance check change.
conservation_check.f90
program conservation_check_demo
implicit none
integer :: added
integer :: removed
integer :: stored
integer :: imbalance
logical :: balanced
character(len=5) :: status
added = 12
removed = 8
stored =
imbalance = added - removed - stored
balanced = imbalance == 0
if (balanced) then
status = 'ok'
else
status = 'check'
end if
print '(A, 1X, I0)', trim(status), imbalance
end program conservation_check_demo
program conservation_check_demo
implicit none
integer :: added
integer :: removed
integer :: stored
integer :: imbalance
logical :: balanced
character(len=5) :: status
added = 12
removed = 8
stored =
imbalance = added - removed - stored
balanced = imbalance == 0
if (balanced) then
status = 'ok'
else
status = 'check'
end if
print '(A, 1X, I0)', trim(status), imbalance
end program conservation_check_demo
program conservation_check_demo
implicit none
integer :: added
integer :: removed
integer :: stored
integer :: imbalance
logical :: balanced
character(len=5) :: status
added = 12
removed = 8
stored =
imbalance = added - removed - stored
balanced = imbalance == 0
if (balanced) then
status = 'ok'
else
status = 'check'
end if
print '(A, 1X, I0)', trim(status), imbalance
end program conservation_check_demo
invariant
`added - removed - stored` should remain zero for this balance model.
logical check
`imbalance == 0` records the invariant as a logical value.
diagnostic output
A compact status plus imbalance explains the test result.