Skip to content

Solving problems

Using the development version of IPSL-CM-LAM means you will probably encounter a lot of problems and bugs.

This section will help you navigate the known problems with their solutions.

The most famous: paprs bad order

This bug is notorious for its omnipresence and the effort required to debug it. LMDZ performs a check of pressure levels verifying if they are stacked correctly. When the levels are incorrect, you will probably see something along the lines:

It No :     19   t :        1710.0
It No :     20   t :        1800.0
Time spent (s):   13  -- ms/step : 681.89  -- Throughput :   131
Whole job (min) :  338  -- Completion in (min) :   337
nrerror: an assertion failed with this tag:physiq_mod paprs bad order
program terminated by assert_v

Info

The exact check is on line 1370 in file libf/phylmd/physiq_mod.f90 for LMDZ rev. 5913. It might be on another line or in different module, if your LMDZ version differs:

! Quick check on pressure levels:
CALL assert(paprs(:, nbp_lev + 1) < paprs(:, nbp_lev), "physiq_mod paprs bad order")

Get more information

It is possible to look up the paprs values by setting prt_level in run.def, the LMDZ configuration file, to at least 2 (this is the minimum necessary logging level):

## niveau d impression de controle
prt_level=2

Then, rerunning the simulation might produce:

  nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys
          846          79           4 F F   156038.000000000
   2.083333334303461E-002   900.000000000000
  paprs, play, phi, u, v, t
                      NaN                     NaN                     NaN
                      NaN                     NaN                     NaN

Or a mix of good and bad values:

    96108.3466422974        95909.3557910326        1336.33825107508
   -1.56595953376457        3.49277532618069        270.518210206537
                      NaN                     NaN                     NaN
                      NaN                     NaN                     NaN

Either way, we now know that something is wrong with the pressure levels!

Unfortunately, by default, the logs are collected from all MPI processes at once which creates hard to read and debug wall of text. By redirecting each process output to a separate file, we might be able to learn at which longitude-latitude the problem occurs and at what scale!

See ... for how to do that (TODO: USER guid > improving logging)

Missing *.xml file

The *.card parsers in the libIGCM is very sensitive about whitespaces between list elements. If you see an error, saying that one of the XIOS configuration file is missing, there are two common cases:

  1. The file is missing so it cannot be copied
  2. The definition of files to copy are corrupted.
[ParametersFiles]
List=   (${SUBMIT_DIR}/PARAM/DYNAMICO/earth_const.def, .),\
        (${SUBMIT_DIR}/PARAM/DYNAMICO/run_dynamico.def_nbp${RESOL_NBP}, run_dynamico.def),\
        (${SUBMIT_DIR}/PARAM/DYNAMICO/nudging_dynamico.xml, .),\      # <- hidden whitespaces
        (${SUBMIT_DIR}/PARAM/DYNAMICO/sponge_dynamico.xml, .),\
        (${MODIPSL}/modeles/ICOSA_LMDZ/xml/param_gw.xml, .), \
        (${SUBMIT_DIR}/PARAM/DYNAMICO/context_dynamico.xml, .),\
        (${SUBMIT_DIR}/PARAM/DYNAMICO/context_input_dynamico.xml, .),\
        (${SUBMIT_DIR}/PARAM/DYNAMICO/field_def_dynamico.xml, .),\
        (${SUBMIT_DIR}/PARAM/DYNAMICO/file_def_dynamico.xml, .)

The possible error:

terminate called after throwing an instance of 'xios::CException'
In file "xml_parser_impl.hpp", function "static void xios::xml::CXMLParser::ParseInclude(const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> &, T &) [with T = xios::CContext]",  line 19 ->
Can not open <./context_dynamico.xml> file