TRUST Release Note - V1.9.3

This page details the major changes and new functionalities released with TRUST version 1.9.3! The main points are the introduction of the new PolyMAC spatial discretisations, the updates concerning the porting to the GPU architectures, and the changes around the MED and LATA post-processing formats.

Physics and numerics

  • PolyMAC spatial discretisation family: three PolyMAC versions are now available in TRUST

    • PolyMAC, which corresponds to the initial PolyMAC implementation. It is not compatible with Pb_Multiphase but is used in several other applications.

    • PolyMAC_P0P1NC, compatible with Pb_Multiphase.

    • PolyMAC_P0, compatible with Pb_Multiphase. Warning, this last one can be costly on tetrahedral meshes.

  • Conversion to and from an enthalpy form of the energy equation (which is initially in temperature) is now facilitated: the Fluide_Reel_base class contains now a public struct H_to_T that is useful to convert, using the chain law, enthalpy derivatives into temperature ones. For codes and application where all derivatives are expressed as a function of the enthalpy, this struct can be now used to safely convert all calls to TPPI methods and Pb_Multiphase fluids/saturation/correlation and source terms.

Code input / outputs

  • Several improvements/changes have been done around the MED file format, notably the Read_MED | Lire_MED keyword:

    • now relies exclusively on MED groups, not on families. The option exclude_groups can be used in Read_MED to avoid reading some undesired face groups.

    • has a new option include_additional_face_groups to read a group of arbitrary faces from a MED file. This can be used with option face_group to apply Perte_Charge_Singuliere on this group of faces. See Perte_Charge_Singuliere validation form for example.

  • The LATA format has also been improved and TRUST can now produce single LATA file: the format single_lata can be used, that dumps results in a single binary lata file (Not supported in 64 bits integer build for now). A new interpreter “lml_to_lata” has also been added, that can be used to convert lml files to single_lata format.

Watch out for the future support of CGNS file format!

Solvers and performance

The following developments towards a more performant and more capable TRUST GPU version have been performed:

  • Faster setup and less memory needed with option by default changed (HMIS->PMIS selector algorithm) for Nvidia (classical) algebric multigrid: amgx cg { precond c-amg { } ... }

  • More options for linear solver on AMD: rocALUTION cg { precond c-amg|sa-amg { [smoother jacobi|gs] [coarse_grid_solver LU|inversion|jacobi] [omega double] [coarse_grids_host int] [impr] } rtol|atol double [ impr ] }

  • More support in VEF for temperature equation (diffusion operator, boussinesq term) and periodic flow (source term + boundary condition in operators)

  • 64 bits integer build supported for Nvidia/AMD with: ./configure -cuda/-rocm -openmp -with-64-bit-indices

  • Experimental device-device communication implemented if Cuda-aware MPI is available. Use: TRUST_USE_GPU_AWARE_MPI=1 trust datafile NB_PROCS

  • Default for AmgX preconditionner may be overloaded in data file. Ex: amgx gcp { precond c-amg { p:selector=PMIS p:strength_threshold=0.8 } ... }

Tools / Validation

  • A new method ‘initBuildDirectory()’ was added in Jupyter validation form Python API. It triggers the build directory creation and copy the ‘src’ content into it.

  • A new tool for dataset Python maniupulation and reference doc generation was introduced -> trustpy. Check out the README.md file in Outils/trustpy/doc. It is used for the moment to

Dataset changes

Here are all the syntax changes in the TRUST dataset:

  • ‘gravity’ field is no more read and associated to a medium, syntax is obsolete. It should be read directly in the medium.

  • the definition of the ‘medium’ (Fluid, solid, constituent, …) can now only read in the problem, and the old syntax (read + association) is not supported anymore.

  • Read_MED | Lire_MED, Write_MED | Ecrire_MED and Champ_Fonc_MED: the old syntax of these keywords is not supported anymore. You now have to use the syntax with braces.

Prerequisites / portability

  • C++14 compilers are now mandatory so old GNU compilers (<5.0) are not supported anymore.

  • The following prerequisite upgrades were performed:

    • MEDCoupling upgraded to 9.12.0
    • HDF5 upgraded to 1.14.2 -> this fixes a weird crash on a 32768 cores calculation during raffiner_isotrope_parallele operation
    • rocALUTION upgraded to 3.0.3
    • VisIt upgraded to v3.3.3 and 3rd party packages added except qt-everywhere-src 5.14.2
    • ccache updated from 3.1.4 to 4.8.2 -> allows for faster (re)build with Nvidia compilers (nvc++, nvc, nvcc)

Misc

Here are the other less notable improvements/changes in this version:

  • a new option for DP_impose keyword was introduced: ‘dp_regul’ to regulate the DP in order to match a target flow rate.

  • a new option while launching TRUST executable is available: -log_directory=/ to save .log files into logs\_dir (interesting for parallel computations)

  • TRUST can now be linked to a pre-compiled static library of CoolProp 6.5.0 version (./configure -with-coolprop=<YOUR_PATH_TO_COOLPROP_INSTALL>).

  • the basic turbulence classes (Pbs, equations, nul models) have moved from TrioCFD to TRUST for code architecture reasons.

  • the fluxes are not printed into an .out file by default anymore if the dedicated operator’s output file is not set in the code. If a .out is desired, one must apply set_fichier, else no file is written.

  • the option ‘table_temps_lue’ was added to ‘Champ_Fonc_MED_Table_Temps’ keyword : Champ_Fonc_MED_Table_Temps { table_temps_lue file.txt | table_temps { … } … }

Bug fixes

  • Various bugs have been fixed :

    • Incomplete save (for HDF5 and .xyz files) when diffusion-implicited scheme did not converge
    • When diffusive-implicited scheme diverges, backup wasn’t done
    • Fluxes are not printed into an .out file if the dedicated operator’s output file is not set in the code, this avoids confusions.
    • Bug fix with lambda keyword in Perte_Charge_Circulaire in PolyMAC discretisation
    • When using Vorticity in Definition_champ to extract the max value for exemple in a probe, not all times were written in the .son file
  • A performance issue has been fixed too: fixed a performance regression (switch from Mkl to OpenBlas) for several solvers (MUMPS, GCP) on irene and topaze clusters

Note that the post-processing of fields on faces is sometimes buggy in the MED format, this was noted too late for this version but will be fixed in the next one.