Testing#
1. Running the automatic test suite#
To run the automatic tests, navigate to the tests directory, and run the run_test_suite.sh script:
>$ cd tests
>$ ./run_test_suite.sh
The tests will begin and the output should look like:
############################################
# Running RAMSES automatic test suite #
############################################
Will perform the following tests:
[ 1] hydro/implosion
[ 2] hydro/sod-tube
[ 3] mhd/imhd-tube
[ 4] mhd/orszag-tang
[ 5] rt/stromgren2d
[ 6] sink/smbh-bondi
--------------------------------------------
Test 1/6: hydro/implosion
Cleanup
Compiling source
and so on.
Once the tests have completed, a report is generated in a .pdf file named test_results.pdf, alongside a log file test_suite.log.
Options#
Run the suite in parallel (on 4 cpus):
./run_test_suite.sh -p 4
Do not delete results data:
./run_test_suite.sh -d
Run in verbose mode:
./run_test_suite.sh -v
Select individual tests (for tests 3 to 5, and 10):
./run_test_suite.sh -t 3-5,10
Run all tests in
mhddirectory:
./run_test_suite.sh -t mhd
2. Creating a new test#
The following steps describe how to add a new test to the test suite. In this example, the test will be named sedov-3d.
The first step is to create a new directory sedov-3d in one of the hydro, mhd, rt, or sinks directories. No need to modify the run_test_suite.sh script, the new test will automatically be picked up and added to the list. We will choose to place it inside the hydro directory. Please use hyphens (-) in your test names instead of underscores (_) as latex does not like underscores.
>$ cd hydro
>$ mkdir sedov-3d
Note: use one directory per test. If you want to run a 2D and a 3D sedov test, create separate sedov-2d and sedov-3d directories.
In that directory, you will need:
A
config.txtfile: usually just contains the Makefile flags, e.g.FLAGS: NDIM=3 PATCH= SOLVER=hydroA namelist:
sedov-3d.nml(the name needs to be the same as the test directory)A file for plotting and checking the solution against a reference:
plot-sedov-3d.py. It is advised to copy a file from the other directories to see how to write this. Note that this file needs to contain at least one call tovisu_ramses.check_solution(data["data"], 'sedov-3d').A reference solution:
sedov-3d-ref.txt. To create it, run your test and once the final output (number 2 in this case) has been created, do the following:
import visu_ramses
data = visu_ramses.load_snapshot(2)
visu_ramses.check_solution(data["data"], 'sedov-3d', overwrite=True)
A
Readme.mdcontaining a short description of the test
Optional files:
condinit.f90: you can have your own initial setup if it’s not entirely definable in a namelist. REMEMBER to set the correctPATCHin theconfig.txtfile! (e.g.PATCH=../tests/hydro/sedov-3d)before-test.sh: if this file is present in the test directory, it will be run before the test begins (useful for e.g. creating symbolic links to libraries…)after-test.sh: if this file is present in the test directory, it will be run after the test begins (useful for e.g. cleaning up symbolic links to libraries…)
Tuning tolerances for solution verification#
By default, relative differences between the sums of all the variables inside all leaf cells in the domain and the reference solution cannot exceed 3.0e-13.
Sometimes, some variables are more volatile than others when running simulations on different numbers of CPUs, and this limit is too low, leading to false failed tests.
The check_solution method in the visu/visu_ramses.py module can be tuned to work for your test using the following options:
tolerance: a dictionary listing the allowed relative difference between the sum over all leaf cells and reference value. The default is{"all":3.0e-13}. To make the check ondensityless restrictive, use for instancetolerance={"density":1.0e-10}.threshold: relative value below which a vector component is set to zero. Default is2.0e-14.norm_min: minimum value for the norm of a vector, to protect against null vectors. Default is1.0e-30.min_variance: if the data differs by less than this value from the average value, it is set to the average. Default is1.0e-14.
3. Creating a new group of tests#
If your test does not fall under the categories already present in the tests directory (hydro, mhd, rt, sinks), you can create a new directory and put your tests in there. You will then have to edit the run_test_suite.sh file to ensure your new tests will be picked up.
Say you want to create 3 new tests, sedov-1d, sedov-2d, and sedov-3d inside a new sedov directory, you have to find the line describing the list of directories to be scanned at the top of the run_test_suite.sh file:
# List of directories to scan
testlist="hydro,mhd,rt,sink";
and add your new directory separated from the previous one by a comma, i.e.
# List of directories to scan
testlist="hydro,mhd,rt,sink,sedov";