aboutsummaryrefslogtreecommitdiff
path: root/Docs/source/developers/testing.rst
blob: fde629448b7758bd0d58f38e3efb6d239f91bb6e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
.. _developers-testing:

Testing the code
================

When adding a new feature, you want to make sure that (i) you did not break the existing code and (ii) your contribution gives correct results. While existing capabilities are tested regularly remotely (when commits are pushed to an open PR on TravisCI, and every night on local clusters), it can also be useful to run tests on your custom input file. This section details how to use both automated and custom tests.

Continuous Integration in WarpX
-------------------------------

WarpX-tests.ini files
^^^^^^^^^^^^^^^^^^^^^

.. note::
   section empty!

TravisCI tests
^^^^^^^^^^^^^^

.. note::
   section empty!

Local tests every night
^^^^^^^^^^^^^^^^^^^^^^^

.. note::
   section empty!

Run the test suite locally
--------------------------

Once your new feature is ready, you can check that you did not break anything. WarpX has automated tests running for each Pull Request. For easier debugging, it can be convenient to run the tests on your local machine with

.. code-block:: sh

    ./run_test.sh

from WarpX root folder. It will compile all necessary executables and run all tests. The tests can be influenced by environment variables:

* ``export WARPX_TEST_DIM=3``, ``export WARPX_TEST_DIM=2`` or ``export WARPX_TEST_DIM=RZ`` in order to select only the tests that correspond to this dimensionality
* ``export WARPX_TEST_ARCH=CPU`` or ``export WARPX_TEST_ARCH=GPU`` in order to run the tests on CPU or GPU respectively.

The command above (without command line arguments) runs all the tests defined in [Regression/WarpX-tests.ini](./Regression/WarpX-tests.ini). In order to run single tests, pass the test names as command line arguments:

.. code-block:: sh

    ./run_test.sh test1 test2
    # For instance
    ./run_test.sh PlasmaAccelerationBoost3d Larmor

Add a test to the suite
-----------------------

There are three steps to follow to add a new automated test (illustrated here for PML boundary conditions):

* An input file for your test, in folder `Example/Tests/...`. For the PML test, the input file is at ``Examples/Tests/PML/inputs_2d``. You can also re-use an existing input file (even better!) and pass specific parameters at runtime (see below).
* A Python script that reads simulation output and tests correctness versus theory or calibrated results. For the PML test, see ``Examples/Tests/PML/analysis_pml_yee.py``. It typically ends with Python statement `assert( error<0.01 )`.
* Add an entry to [Regression/WarpX-tests.ini](./Regression/WarpX-tests.ini), so that a WarpX simulation runs your test in the continuous integration process on [Travis CI](https://docs.travis-ci.com/user/tutorial/), and the Python script is executed to assess the correctness. For the PML test, the entry is

.. code-block::

   [pml_x_yee]
   buildDir = .
   inputFile = Examples/Tests/PML/inputs2d
   runtime_params = warpx.do_dynamic_scheduling=0 algo.maxwell_solver=yee
   dim = 2
   addToCompileString =
   restartTest = 0
   useMPI = 1
   numprocs = 2
   useOMP = 1
   numthreads = 2
   compileTest = 0
   doVis = 0
   analysisRoutine = Examples/Tests/PML/analysis_pml_yee.py

If you re-use an existing input file, you can add arguments to ``runtime_params``, like ``runtime_params = amr.max_level=1 amr.n_cell=32 512 max_step=100 plasma_e.zmin=-200.e-6``.

Useful tool for plotfile comparison: ``fcompare``
--------------------------------------------------

AMReX provides ``fcompare``, an executable that takes two ``plotfiles`` as input and returns the absolute and relative difference for each field between these two plotfiles. For some changes in the code, it is very convenient to run the same input file with an old and your current version, and ``fcompare`` the plotfiles at the same iteration. To use it:

.. code-block:: sh

   # Compile the executable
   cd <path to AMReX>/Tools/Plotfile/ # This may change
   make -j 8
   # Run the executable to compare old and new versions
   <path to AMReX>/Tools/Plotfile/fcompare.gnu.ex old/plt00200 new/plt00200

which should return something like

.. code-block:: sh

             variable name             absolute error            relative error
                                          (||A - B||)         (||A - B||/||A||)
   ----------------------------------------------------------------------------
   level = 0
   jx                                 1.044455105e+11               1.021651316
   jy                                  4.08631977e+16               7.734299273
   jz                                 1.877301764e+14               1.073458933
   Ex                                 4.196315448e+10               1.253551615
   Ey                                 3.330698083e+12               6.436470137
   Ez                                 2.598167798e+10              0.6804387128
   Bx                                     273.8687473               2.340209782
   By                                     152.3911863                1.10952567
   Bz                                     37.43212767                 2.1977289
   part_per_cell                                   15                    0.9375
   Ex_fp                              4.196315448e+10               1.253551615
   Ey_fp                              3.330698083e+12               6.436470137
   Ez_fp                              2.598167798e+10              0.6804387128
   Bx_fp                                  273.8687473               2.340209782
   By_fp                                  152.3911863                1.10952567
   Bz_fp                                  37.43212767                 2.1977289