Comprehensive Unit Tests
Generally, for each test, you simply type make
in the test
directory. There are a number of runtime parameters that can
control the behavior. These are specified (along with defaults)
in _parameters
files in each test directory and can be
overridden in an inputs file or on the commandline.
Some additional details on a few of the comprehensive unit tests are given below.
EOS test (test_eos
)
Microphysics/unit_test/test_eos/
is a unit test for the equations
of state in Microphysics. It sets up a cube of data, with
\(\rho\), \(T\), and \(X_k\) varying along the three
dimensions, and then calls the EOS in each zone. Calls are done to
exercise all modes of calling the EOS, in order:
eos_input_rt
: We call the EOS using \(\rho, T\). this is the reference call, and we save the \(h\), \(e\), \(p\), and \(s\) from here to use in subsequent calls.eos_input_rh
: We call the EOS using \(\rho, h\), to recover the original \(T\). To give the root finder some work to do, we perturb the initial temperature.We store the relative error in \(T\) in the output file.
eos_input_tp
: We call the EOS using \(T, p\), to recover the original \(\rho\). To give the root finder some work to do, we perturb the initial density.We store the relative error in \(\rho\) in the output file.
eos_input_rp
: We call the EOS using \(\rho, p\), to recover the original \(T\). To give the root finder some work to do, we perturb the initial temperature.We store the relative error in \(T\) in the output file.
eos_input_re
: We call the EOS using \(\rho, e\), to recover the original \(T\). To give the root finder some work to do, we perturb the initial temperature.We store the relative error in \(T\) in the output file.
eos_input_ps
: We call the EOS using \(p, s\), to recover the original \(\rho, T\). To give the root finder some work to do, we perturb the initial density and temperature.Note: entropy is not well-defined for some EOSs, so we only attempt the root find if \(s > 0\).
We store the relative error in \(\rho, T\) in the output file.
eos_input_ph
: We call the EOS using \(p, h\), to recover the original \(\rho, T\). To give the root finder some work to do, we perturb the initial density and temperature.We store the relative error in \(\rho, T\) in the output file.
eos_input_th
: We call the EOS using \(T, h\), to recover the original \(\rho\). To give the root finder some work to do, we perturb the initial density.Note: for some EOSs, \(h = h(\rho)\) (e.g., an ideal gas), so there is no temperature dependence, and we do not do this test.
We store the relative error in \(\rho\) in the output file.
This unit test is marked up with OpenMP directives and therefore also tests whether the EOS is threadsafe.
To compile for a specific EOS, e.g., helmholtz, do:
make EOS_DIR=helmholtz -j 4
Examining the output (an AMReX plotfile) will show you how big the
errors are. You can use the amrex/Tools/Plotfile/
tool
fextrema
to display the maximum error for each variable.
Network test (test_react
)
Microphysics/unit_test/test_react/
is a unit test for the nuclear
reaction networks in Microphysics. It sets up a cube of data, with
\(\rho\), \(T\), and \(X_k\) varying along the three
dimensions (as a \(16^3\) domain), and then calls the EOS in each
zone. This test does the entire ODE integration of the network for
each zone.
The state in each zone of our data cube is determined by the runtime
parameters dens_min
, dens_max
, temp_min
, and temp_max
for \((\rho, T)\). Because each network carries different
compositions, we specify the composition through runtime parameters in
the &extern
namelist: primary_species_1
,
primary_species_2
, primary_species_3
. These primary species
will vary from X = 0.2 to X = 0.7 to 0.9 (depending on the number).
Only one primary species varies at a time. The non-primary species
will be set equally to share whatever fraction of 1 is not accounted
for by the primary species mass fractions.
This test calls the network on each zone, running for a time
tmax
. The full state, including new mass fractions and energy
release is output to a AMReX plotfile.
You can compile for a specific integrator (e.g., VODE
) or
network (e.g., aprox13
) as:
make NETWORK_DIR=aprox13 INTEGRATOR_DIR=VODE -j 4
The loop over the burner is marked up for OpenMP and CUDA and therefore this test can be used to assess threadsafety of the burners as well as to optimize the GPU performance of the burners.