Quinoa all test code coverage report
Current view: top level - Control/Inciter/InputDeck - InputDeck.hpp (source / functions) Hit Total Coverage
Commit: -128-NOTFOUND Lines: 250 250 100.0 %
Date: 2024-04-22 13:39:53 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 1385 2768 50.0 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Control/Inciter/InputDeck/InputDeck.hpp
       4                 :            :   \copyright 2012-2015 J. Bakosi,
       5                 :            :              2016-2018 Los Alamos National Security, LLC.,
       6                 :            :              2019-2021 Triad National Security, LLC.
       7                 :            :              All rights reserved. See the LICENSE file for details.
       8                 :            :   \brief     Inciter's new input deck definition
       9                 :            :   \details   This file defines the heterogeneous struct that is used for storing
      10                 :            :      the data from user input during the control file parsing of the
      11                 :            :      computational shock hydrodynamics tool, Inciter.
      12                 :            : */
      13                 :            : // *****************************************************************************
      14                 :            : #ifndef InputDeck_h
      15                 :            : #define InputDeck_h
      16                 :            : 
      17                 :            : #include <getopt.h>
      18                 :            : #include "Types.hpp"
      19                 :            : #include "TaggedTuple.hpp"
      20                 :            : #include "Inciter/CmdLine/CmdLine.hpp"
      21                 :            : #include "Transfer.hpp"
      22                 :            : #include "Inciter/OutVar.hpp"
      23                 :            : #include "Inciter/Options/PDE.hpp"
      24                 :            : #include "Inciter/Options/Problem.hpp"
      25                 :            : #include "Inciter/Options/Scheme.hpp"
      26                 :            : #include "Inciter/Options/Limiter.hpp"
      27                 :            : #include "Inciter/Options/Flux.hpp"
      28                 :            : #include "Inciter/Options/Initiate.hpp"
      29                 :            : #include "Inciter/Options/AMRInitial.hpp"
      30                 :            : #include "Inciter/Options/AMRError.hpp"
      31                 :            : #include "Inciter/Options/PrefIndicator.hpp"
      32                 :            : #include "Inciter/Options/MeshVelocity.hpp"
      33                 :            : #include "Inciter/Options/MeshVelocitySmoother.hpp"
      34                 :            : #include "Inciter/Options/Material.hpp"
      35                 :            : #include "Options/PartitioningAlgorithm.hpp"
      36                 :            : #include "Options/TxtFloatFormat.hpp"
      37                 :            : #include "Options/FieldFile.hpp"
      38                 :            : #include "Options/Error.hpp"
      39                 :            : #include "Options/UserTable.hpp"
      40                 :            : 
      41                 :            : namespace inciter {
      42                 :            : 
      43                 :            : namespace ctr {
      44                 :            : 
      45                 :            : using ncomp_t = std::size_t;
      46                 :            : 
      47                 :            : using bclist = tk::TaggedTuple< brigand::list<
      48                 :            :   tag::dirichlet,   std::vector< std::size_t >,
      49                 :            :   tag::symmetry,    std::vector< std::size_t >,
      50                 :            :   tag::inlet,       std::vector< std::size_t >,
      51                 :            :   tag::outlet,      std::vector< std::size_t >,
      52                 :            :   tag::farfield,    std::vector< std::size_t >,
      53                 :            :   tag::extrapolate, std::vector< std::size_t >
      54                 :            : > >;
      55                 :            : 
      56                 :            : // Transport
      57                 :            : using transportList = tk::TaggedTuple< brigand::list<
      58                 :            :     tag::physics,        PhysicsType,
      59                 :            :     tag::ncomp,          std::size_t,
      60                 :            :     tag::intsharp,       int,
      61                 :            :     tag::intsharp_param, tk::real,
      62                 :            :     tag::problem,        ProblemType,
      63                 :            :     tag::diffusivity,    std::vector< tk::real >,
      64                 :            :     tag::lambda,         std::vector< tk::real >,
      65                 :            :     tag::u0,             std::vector< tk::real >
      66                 :            : > >;
      67                 :            : 
      68                 :            : // CompFlow
      69                 :            : using compflowList = tk::TaggedTuple< brigand::list<
      70                 :            :     tag::physics, PhysicsType,
      71                 :            :     tag::problem, ProblemType,
      72                 :            :     tag::alpha,   tk::real,
      73                 :            :     tag::beta,    tk::real,
      74                 :            :     tag::betax,   tk::real,
      75                 :            :     tag::betay,   tk::real,
      76                 :            :     tag::betaz,   tk::real,
      77                 :            :     tag::r0,      tk::real,
      78                 :            :     tag::p0,      tk::real,
      79                 :            :     tag::ce,      tk::real,
      80                 :            :     tag::kappa,   tk::real
      81                 :            : > >;
      82                 :            : 
      83                 :            : // MultiMat
      84                 :            : using multimatList = tk::TaggedTuple< brigand::list<
      85                 :            :   tag::physics,          PhysicsType,
      86                 :            :   tag::nmat,             std::size_t,
      87                 :            :   tag::prelax,           uint64_t,
      88                 :            :   tag::prelax_timescale, tk::real,
      89                 :            :   tag::intsharp,         int,
      90                 :            :   tag::intsharp_param,   tk::real,
      91                 :            :   tag::problem,          ProblemType
      92                 :            : > >;
      93                 :            : 
      94                 :            : // Material/EOS object
      95                 :            : using materialList = tk::TaggedTuple< brigand::list<
      96                 :            :   tag::eos,      MaterialType,
      97                 :            :   tag::id,       std::vector< uint64_t >,
      98                 :            :   tag::gamma,    std::vector< tk::real >,
      99                 :            :   tag::pstiff,   std::vector< tk::real >,
     100                 :            :   tag::w_gru,    std::vector< tk::real >,
     101                 :            :   tag::A_jwl,    std::vector< tk::real >,
     102                 :            :   tag::B_jwl,    std::vector< tk::real >,
     103                 :            :   tag::C_jwl,    std::vector< tk::real >,
     104                 :            :   tag::R1_jwl,   std::vector< tk::real >,
     105                 :            :   tag::R2_jwl,   std::vector< tk::real >,
     106                 :            :   tag::rho0_jwl, std::vector< tk::real >,
     107                 :            :   tag::de_jwl,   std::vector< tk::real >,
     108                 :            :   tag::rhor_jwl, std::vector< tk::real >,
     109                 :            :   tag::Tr_jwl,   std::vector< tk::real >,
     110                 :            :   tag::Pr_jwl,   std::vector< tk::real >,
     111                 :            :   tag::mu,       std::vector< tk::real >,
     112                 :            :   tag::rho0,     std::vector< tk::real >,
     113                 :            :   tag::cv,       std::vector< tk::real >,
     114                 :            :   tag::k,        std::vector< tk::real >
     115                 :            : > >;
     116                 :            : 
     117                 :            : // Boundary conditions block
     118                 :            : using bcList = tk::TaggedTuple< brigand::list<
     119                 :            :   tag::mesh,        std::vector< std::size_t >,
     120                 :            :   tag::dirichlet,   std::vector< std::size_t >,
     121                 :            :   tag::symmetry,    std::vector< std::size_t >,
     122                 :            :   tag::inlet,       std::vector< std::size_t >,
     123                 :            :   tag::outlet,      std::vector< std::size_t >,
     124                 :            :   tag::farfield,    std::vector< std::size_t >,
     125                 :            :   tag::extrapolate, std::vector< std::size_t >,
     126                 :            :   tag::stag_point,  std::vector< tk::real >,
     127                 :            :   tag::radius,      tk::real,
     128                 :            :   tag::velocity,    std::vector< tk::real >,
     129                 :            :   tag::pressure,    tk::real,
     130                 :            :   tag::density,     tk::real,
     131                 :            :   tag::timedep,     std::vector<
     132                 :            :     tk::TaggedTuple< brigand::list<
     133                 :            :       tag::sideset,   std::vector< uint64_t >,
     134                 :            :       tag::fn,        std::vector< tk::real >
     135                 :            :     > >
     136                 :            :   >
     137                 :            : > >;
     138                 :            : 
     139                 :            : // IC box
     140                 :            : using boxList = tk::TaggedTuple< brigand::list<
     141                 :            :   tag::materialid,     std::size_t,
     142                 :            :   tag::volume,         tk::real,
     143                 :            :   tag::mass,           tk::real,
     144                 :            :   tag::density,        tk::real,
     145                 :            :   tag::velocity,       std::vector< tk::real >,
     146                 :            :   tag::pressure,       tk::real,
     147                 :            :   tag::energy,         tk::real,
     148                 :            :   tag::energy_content, tk::real,
     149                 :            :   tag::temperature,    tk::real,
     150                 :            :   tag::xmin,           tk::real,
     151                 :            :   tag::xmax,           tk::real,
     152                 :            :   tag::ymin,           tk::real,
     153                 :            :   tag::ymax,           tk::real,
     154                 :            :   tag::zmin,           tk::real,
     155                 :            :   tag::zmax,           tk::real,
     156                 :            :   tag::orientation,    std::vector< tk::real >,
     157                 :            :   tag::initiate,       inciter::ctr::InitiateType,
     158                 :            :   tag::point,          std::vector< tk::real >,
     159                 :            :   tag::init_time,      tk::real,
     160                 :            :   tag::front_width,    tk::real,
     161                 :            :   tag::front_speed,    tk::real
     162                 :            : > >;
     163                 :            : 
     164                 :            : // IC meshblock
     165                 :            : using meshblockList = tk::TaggedTuple< brigand::list<
     166                 :            :   tag::blockid,        std::uint64_t,
     167                 :            :   tag::materialid,     std::size_t,
     168                 :            :   tag::volume,         tk::real,
     169                 :            :   tag::mass,           tk::real,
     170                 :            :   tag::density,        tk::real,
     171                 :            :   tag::velocity,       std::vector< tk::real >,
     172                 :            :   tag::pressure,       tk::real,
     173                 :            :   tag::energy,         tk::real,
     174                 :            :   tag::energy_content, tk::real,
     175                 :            :   tag::temperature,    tk::real,
     176                 :            :   tag::initiate,       inciter::ctr::InitiateType,
     177                 :            :   tag::point,          std::vector< tk::real >,
     178                 :            :   tag::init_time,      tk::real,
     179                 :            :   tag::front_width,    tk::real,
     180                 :            :   tag::front_speed,    tk::real
     181                 :            : > >;
     182                 :            : 
     183                 :            : // Initial conditions (ic) block
     184                 :            : using icList = tk::TaggedTuple< brigand::list<
     185                 :            :   tag::materialid,  std::size_t,
     186                 :            :   tag::pressure,    tk::real,
     187                 :            :   tag::temperature, tk::real,
     188                 :            :   tag::density,     tk::real,
     189                 :            :   tag::energy,      tk::real,
     190                 :            :   tag::velocity,    std::vector< tk::real >,
     191                 :            :   tag::box,         std::vector< boxList >,
     192                 :            :   tag::meshblock,   std::vector< meshblockList >
     193                 :            : > >;
     194                 :            : 
     195                 :            : // Overset mesh block
     196                 :            : using meshList = tk::TaggedTuple< brigand::list<
     197                 :            :   tag::filename,    std::string,
     198                 :            :   tag::location,    std::vector< tk::real >,
     199                 :            :   tag::orientation, std::vector< tk::real >,
     200                 :            :   tag::velocity,    std::vector< tk::real >
     201                 :            : > >;
     202                 :            : 
     203                 :            : // Field output block
     204                 :            : using fieldOutputList = tk::TaggedTuple< brigand::list<
     205                 :            :   tag::interval, uint32_t,
     206                 :            :   tag::time_interval, tk::real,
     207                 :            :   tag::time_range,    std::vector< tk::real >,
     208                 :            :   tag::refined,       bool,
     209                 :            :   tag::filetype,      tk::ctr::FieldFileType,
     210                 :            :   tag::sideset,       std::vector< uint64_t >,
     211                 :            :   tag::outvar,        std::vector< OutVar >,
     212                 :            :   tag::elemalias,     std::vector< std::string >,  // only for error checking
     213                 :            :   tag::elemvar,       std::vector< std::string >,  // only for error checking
     214                 :            :   tag::nodealias,     std::vector< std::string >,  // only for error checking
     215                 :            :   tag::nodevar,       std::vector< std::string >   // only for error checking
     216                 :            : > >;
     217                 :            : 
     218                 :            : // Diagnostics block
     219                 :            : using diagnosticsList = tk::TaggedTuple< brigand::list<
     220                 :            :   tag::interval, uint32_t,
     221                 :            :   tag::error,         tk::ctr::ErrorType,
     222                 :            :   tag::format,        tk::ctr::TxtFloatFormatType,
     223                 :            :   tag::precision,     std::streamsize
     224                 :            : > >;
     225                 :            : 
     226                 :            : // History output block
     227                 :            : using historyOutputList = tk::TaggedTuple< brigand::list<
     228                 :            :   tag::interval, uint32_t,
     229                 :            :   tag::time_interval, tk::real,
     230                 :            :   tag::time_range,    std::vector< tk::real >,
     231                 :            :   tag::format,        tk::ctr::TxtFloatFormatType,
     232                 :            :   tag::precision,     std::streamsize,
     233                 :            :   tag::point,         std::vector<
     234                 :            :     tk::TaggedTuple< brigand::list<
     235                 :            :       tag::id,    std::string,
     236                 :            :       tag::coord, std::vector< tk::real >
     237                 :            :     > >
     238                 :            :   >
     239                 :            : > >;
     240                 :            : 
     241                 :            : using ConfigMembers = brigand::list<
     242                 :            : 
     243                 :            :   tag::title, std::string,
     244                 :            : 
     245                 :            :   // Command line parameters
     246                 :            :   tag::cmd, CmdLine,
     247                 :            : 
     248                 :            :   // time stepping options
     249                 :            :   tag::nstep, uint64_t,
     250                 :            :   tag::term,  tk::real,
     251                 :            :   tag::t0,    tk::real,
     252                 :            :   tag::dt,    tk::real,
     253                 :            :   tag::cfl,   tk::real,
     254                 :            :   tag::ttyi,  uint32_t,
     255                 :            : 
     256                 :            :   // steady-state solver options
     257                 :            :   tag::steady_state, bool,
     258                 :            :   tag::residual,     tk::real,
     259                 :            :   tag::rescomp,      uint32_t,
     260                 :            : 
     261                 :            :   // mesh partitioning and reordering/sorting choices
     262                 :            :   tag::partitioning,     tk::ctr::PartitioningAlgorithmType,
     263                 :            :   tag::pelocal_reorder,  bool,
     264                 :            :   tag::operator_reorder, bool,
     265                 :            : 
     266                 :            :   // discretization scheme choices
     267                 :            :   tag::scheme, SchemeType,
     268                 :            :   tag::ndof,   std::size_t,
     269                 :            :   tag::rdof,   std::size_t,
     270                 :            :   tag::flux,   FluxType,
     271                 :            : 
     272                 :            :   // limiter options
     273                 :            :   tag::limiter,              LimiterType,
     274                 :            :   tag::cweight,              tk::real,
     275                 :            :   tag::shock_detector_coeff, tk::real,
     276                 :            :   tag::accuracy_test,        bool,
     277                 :            :   tag::limsol_projection,    bool,
     278                 :            : 
     279                 :            :   // PDE options
     280                 :            :   tag::ncomp,     std::size_t,
     281                 :            :   tag::pde,       PDEType,
     282                 :            :   tag::transport, transportList,
     283                 :            :   tag::compflow,  compflowList,
     284                 :            :   tag::multimat,  multimatList,
     285                 :            : 
     286                 :            :   // Dependent variable name
     287                 :            :   tag::depvar, std::vector< char >,
     288                 :            : 
     289                 :            :   tag::sys, std::map< std::size_t, std::size_t >,
     290                 :            : 
     291                 :            :   tag::material, std::vector< materialList >,
     292                 :            : 
     293                 :            :   tag::matidxmap, tk::TaggedTuple< brigand::list<
     294                 :            :     tag::eosidx, std::vector< std::size_t >,
     295                 :            :     tag::matidx, std::vector< std::size_t >,
     296                 :            :     tag::solidx, std::vector< std::size_t >
     297                 :            :   > >,
     298                 :            : 
     299                 :            :   // Conditions
     300                 :            :   tag::bc, std::vector< bcList >,
     301                 :            :   tag::ic, icList,
     302                 :            :   tag::mesh, std::vector< meshList >,
     303                 :            :   tag::transfer, std::vector< Transfer >,
     304                 :            : 
     305                 :            :   // ALE block
     306                 :            :   // ---------------------------------------------------------------------------
     307                 :            :   tag::ale, tk::TaggedTuple< brigand::list<
     308                 :            :     tag::ale,           bool,
     309                 :            :     tag::smoother,      MeshVelocitySmootherType,
     310                 :            :     tag::mesh_velocity, MeshVelocityType,
     311                 :            :     tag::mesh_motion,   std::vector< std::size_t >,
     312                 :            :     tag::meshforce,     std::vector< tk::real >,
     313                 :            :     tag::dvcfl,         tk::real,
     314                 :            :     tag::vortmult,      tk::real,
     315                 :            :     tag::maxit,         std::size_t,
     316                 :            :     tag::tolerance,     tk::real,
     317                 :            :     tag::dirichlet,     std::vector< std::size_t >,
     318                 :            :     tag::symmetry,      std::vector< std::size_t >,
     319                 :            :     tag::move,          std::vector<
     320                 :            :       tk::TaggedTuple< brigand::list<
     321                 :            :         tag::sideset, std::vector< uint64_t >,
     322                 :            :         tag::fntype,  tk::ctr::UserTableType,
     323                 :            :         tag::fn,      std::vector< tk::real >
     324                 :            :       > >
     325                 :            :     >
     326                 :            :   > >,
     327                 :            : 
     328                 :            :   // p-refinement block
     329                 :            :   // ---------------------------------------------------------------------------
     330                 :            :   tag::pref, tk::TaggedTuple< brigand::list<
     331                 :            :     tag::pref,      bool,
     332                 :            :     tag::indicator, PrefIndicatorType,
     333                 :            :     tag::ndofmax,   std::size_t,
     334                 :            :     tag::tolref,    tk::real
     335                 :            :   > >,
     336                 :            : 
     337                 :            :   // AMR block
     338                 :            :   // ---------------------------------------------------------------------------
     339                 :            :   tag::amr, tk::TaggedTuple< brigand::list<
     340                 :            :     tag::amr,           bool,
     341                 :            :     tag::t0ref,         bool,
     342                 :            :     tag::dtref,         bool,
     343                 :            :     tag::dtref_uniform, bool,
     344                 :            :     tag::dtfreq,        std::size_t,
     345                 :            :     tag::maxlevels,     std::size_t,
     346                 :            :     tag::initial,       std::vector< AMRInitialType >,
     347                 :            :     tag::edgelist,      std::vector< std::size_t >,
     348                 :            :     tag::coords,        tk::TaggedTuple< brigand::list<
     349                 :            :       tag::xminus, tk::real,
     350                 :            :       tag::xplus,  tk::real,
     351                 :            :       tag::yminus, tk::real,
     352                 :            :       tag::yplus,  tk::real,
     353                 :            :       tag::zminus, tk::real,
     354                 :            :       tag::zplus,  tk::real
     355                 :            :     > >,
     356                 :            :     tag::error,         AMRErrorType,
     357                 :            :     tag::refvar,        std::vector< char >,
     358                 :            :     tag::tol_refine,    tk::real,
     359                 :            :     tag::tol_derefine,  tk::real
     360                 :            :   > >,
     361                 :            : 
     362                 :            :   // Output options
     363                 :            :   tag::field_output,   fieldOutputList,
     364                 :            :   tag::diagnostics,    diagnosticsList,
     365                 :            :   tag::history_output, historyOutputList
     366                 :            : >;
     367                 :            : 
     368                 :            : // Class storing the Config params
     369                 :            : class InputDeck : public tk::TaggedTuple< ConfigMembers > {
     370                 :            : 
     371                 :            :   public:
     372                 :            :     //! Set of tags to ignore when printing this InputDeck
     373                 :            :     using ignore = CmdLine::ignore;
     374                 :            : 
     375                 :            :     //! \brief Constructor: set defaults
     376                 :            :     //! \param[in] cl Previously parsed and store command line
     377                 :            :     //! \details Anything not set here is initialized by the compiler using the
     378                 :            :     //!   default constructor for the corresponding type.
     379                 :       1369 :     explicit InputDeck( const CmdLine& cl = {} ) {
     380                 :            :       // Set previously parsed command line
     381         [ +  - ]:       1369 :       get< tag::cmd >() = cl;
     382                 :            :       // Default time stepping params
     383                 :       1369 :       get< tag::dt >() = 0.0;
     384                 :       1369 :       get< tag::cfl >() = 0.0;
     385                 :            :       // Default AMR settings
     386                 :       1369 :       auto rmax =
     387                 :            :         std::numeric_limits< tk::real >::max() / 100;
     388                 :       1369 :       get< tag::amr, tag::coords, tag::xminus >() = rmax;
     389                 :       1369 :       get< tag::amr, tag::coords, tag::xplus >() = -rmax;
     390                 :       1369 :       get< tag::amr, tag::coords, tag::yminus >() = rmax;
     391                 :       1369 :       get< tag::amr, tag::coords, tag::yplus >() = -rmax;
     392                 :       1369 :       get< tag::amr, tag::coords, tag::zminus >() = rmax;
     393                 :       1369 :       get< tag::amr, tag::coords, tag::zplus >() = -rmax;
     394                 :            : 
     395                 :            :       // -----------------------------------------------------------------------
     396                 :            :       /*
     397                 :            :                                   Keyword vector
     398                 :            :          The following code generates a vector of keywords, for the sole purpose
     399                 :            :          of documentation and user-help (accessible via the --helpctr and
     400                 :            :          --helpkw cmdline arguments. If entries for a keyword are not added to
     401                 :            :          this vector, help will not be output for it. The entries follow the
     402                 :            :          function signature of the tk::entry_t constructor (defined in
     403                 :            :          Base/Types.hpp).
     404                 :            :       */
     405                 :            :       // -----------------------------------------------------------------------
     406                 :       2738 :       std::set< tk::entry_t > keywords;
     407                 :            : 
     408                 :            :       keywords.insert({"inciter",
     409                 :            :         "Start configuration block for inciter",
     410                 :            :         R"(This keyword is used to select inciter. Inciter, is a continuum-realm
     411                 :            :         shock hydrodynamics tool, solving a system of PDEs. The entire control
     412 [ +  - ][ +  - ]:       1369 :         file must be enclosed within the inciter block)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     413                 :            : 
     414                 :            :       keywords.insert({"title", "Title", R"(The title may be specified in
     415 [ +  - ][ +  - ]:       1369 :         the input file. It is optional.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     416                 :            : 
     417                 :            :       // -----------------------------------------------------------------------
     418                 :            :       // time stepping options
     419                 :            :       // -----------------------------------------------------------------------
     420                 :            : 
     421                 :            :       keywords.insert({"nstep", "Set number of time steps to take",
     422                 :            :         R"(This keyword is used to specify the number of time steps to take in a
     423                 :            :         simulation. The number of time steps are used in conjunction with the
     424                 :            :         maximmum time specified by keyword 'term': the simulation stops whichever
     425                 :            :         is reached first. Both 'nstep' and 'term' can be left unspecified, in
     426 [ +  - ][ +  - ]:       1369 :         which case their default values are used. See also 'term'.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     427                 :            : 
     428                 :            :       keywords.insert({"term", "Set maximum physical time to simulate",
     429                 :            :         R"(This keyword is used to specify the termination time in a simulation.
     430                 :            :         The termination time and number of time steps, specified by 'nstep', are
     431                 :            :         used in conjunction to determine when to stop a simulation: whichever is
     432                 :            :         reached first. Both 'nstep' and 'term' can be left unspecified, in which
     433 [ +  - ][ +  - ]:       1369 :         case their default values are used. See also 'nstep'.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     434                 :            : 
     435                 :            :       keywords.insert({"t0", "Set starting non-dimensional time",
     436                 :            :         R"(This keyword is used to specify the starting time in a simulation.)",
     437 [ +  - ][ +  - ]:       1369 :         "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     438                 :            : 
     439                 :            :       keywords.insert({"dt", "Select constant time step size",
     440                 :            :         R"(This keyword is used to specify the time step size that used as a
     441                 :            :         constant during simulation. Setting 'cfl' and 'dt' are mutually
     442 [ +  - ][ +  - ]:       1369 :         exclusive. If both 'cfl' and 'dt' are set, 'dt' wins.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     443                 :            : 
     444                 :            :       keywords.insert({"cfl",
     445                 :            :       "Set the Courant-Friedrichs-Lewy (CFL) coefficient",
     446                 :            :       R"(This keyword is used to specify the CFL coefficient for
     447                 :            :       variable-time-step-size simulations. Setting 'cfl' and 'dt' are mutually
     448 [ +  - ][ +  - ]:       1369 :       exclusive. If both 'cfl' and 'dt' are set, 'dt' wins.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     449                 :            : 
     450                 :            :       keywords.insert({"ttyi", "Set screen output interval",
     451                 :            :         R"(This keyword is used to specify the interval in time steps for screen
     452 [ +  - ][ +  - ]:       1369 :         output during a simulation.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     453                 :            : 
     454                 :            :       // -----------------------------------------------------------------------
     455                 :            :       // steady-state solver options
     456                 :            :       // -----------------------------------------------------------------------
     457                 :            : 
     458                 :            :       keywords.insert({"steady_state", "March to steady state",
     459                 :            :         R"(This keyword is used indicate that local time stepping should be used
     460 [ +  - ][ +  - ]:       1369 :         to march towards a stationary solution.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     461                 :            : 
     462                 :            :       keywords.insert({"residual",
     463                 :            :         "Set the convergence criterion for the residual to reach",
     464                 :            :         R"(This keyword is used to specify a convergence criterion for the local
     465                 :            :         time stepping marching to steady state, below which the simulation is
     466 [ +  - ][ +  - ]:       1369 :         considered converged.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     467                 :            : 
     468                 :            :       keywords.insert({"rescomp",
     469                 :            :         "Equation system component index for convergence",
     470                 :            :         R"(This keyword is used to specify a single integer that is used to denote
     471                 :            :         the equation component index in the complete system of equations
     472                 :            :         configured, to use for the convergence criterion for local
     473 [ +  - ][ +  - ]:       1369 :         time stepping marching towards steady state.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     474                 :            : 
     475                 :            :       // -----------------------------------------------------------------------
     476                 :            :       // mesh partitioning and reordering/sorting choices
     477                 :            :       // -----------------------------------------------------------------------
     478                 :            : 
     479                 :            :       keywords.insert({"partitioning",
     480                 :            :         "Select mesh partitioning algorithm",
     481                 :            :         R"(This keyword is used to select a mesh partitioning algorithm. See
     482                 :            :         Control/Options/PartitioningAlgorithm.hpp for valid options.)",
     483 [ +  - ][ +  - ]:       1369 :         "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     484                 :            : 
     485                 :            :       keywords.insert({"rcb",
     486                 :            :         "Select recursive coordinate bisection mesh partitioner",
     487                 :            :         R"(This keyword is used to select the recursive coordinate bisection (RCB)
     488                 :            :         mesh partitioner. RCB is a geometry-based partitioner used to distribute
     489                 :            :         an input mesh among processing elements. See
     490 [ +  - ][ +  - ]:       1369 :         Control/Options/PartitioningAlgorithm.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     491                 :            : 
     492                 :            :       keywords.insert({"rib",
     493                 :            :         "Select recursive inertial bisection mesh partitioner",
     494                 :            :         R"(This keyword is used to select the recursive inertial bisection (RIB)
     495                 :            :         mesh partitioner. RIB is a geometry-based partitioner used to distribute
     496                 :            :         an input mesh among processing elements. See
     497 [ +  - ][ +  - ]:       1369 :         Control/Options/PartitioningAlgorithm.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     498                 :            : 
     499                 :            :       keywords.insert({"hsfc",
     500                 :            :         "Select Hilbert Space Filling Curve (HSFC) mesh partitioner",
     501                 :            :         R"(This keyword is used to select the Hilbert Space Filling Curve (HSFC)
     502                 :            :         mesh partitioner. HSFC is a geometry-based partitioner used to distribute
     503                 :            :         an input mesh among processing elements. See
     504 [ +  - ][ +  - ]:       1369 :         Control/Options/PartitioningAlgorithm.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     505                 :            : 
     506                 :            :       keywords.insert({"phg",
     507                 :            :         "Select parallel hypergraph mesh partitioner",
     508                 :            :         R"(This keyword is used to select the parallel hypergraph (PHG)
     509                 :            :         mesh partitioner. PHG is a graph-based partitioner used to distribute an
     510                 :            :         input mesh among processing elements. See
     511 [ +  - ][ +  - ]:       1369 :         Control/Options/PartitioningAlgorithm.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     512                 :            : 
     513                 :            :       keywords.insert({"mj",
     514                 :            :         "Select multi-jagged (MJ) mesh partitioner",
     515                 :            :         R"(This keyword is used to select the multi-jagged (MJ) mesh partitioner.
     516                 :            :         MJ is a geometry-based partitioner used to distribute an input mesh among
     517                 :            :         processing elements. See
     518 [ +  - ][ +  - ]:       1369 :         Control/Options/PartitioningAlgorithm.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     519                 :            : 
     520                 :            :       keywords.insert({"pelocal_reorder",
     521                 :            :         "PE-local reorder",
     522                 :            :         R"(This keyword is used in inciter as a keyword in the inciter...end block
     523                 :            :         as "pelocal_reorder true" (or false) to do (or not do) a global
     524                 :            :         distributed mesh reordering across all PEs that yields an approximately
     525                 :            :         continuous mesh node ID order as mesh partitions are assigned to PEs after
     526 [ +  - ][ +  - ]:       1369 :         mesh partitioning. This reordering is optional.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     527                 :            : 
     528                 :            :       keywords.insert({"operator_reorder",
     529                 :            :         "Operator-access reorder",
     530                 :            :         R"(This keyword is used in inciter as a keyword in the inciter...end block
     531                 :            :         as "operator_reorder on" (or off) to do (or not do) a local mesh node
     532                 :            :         reordering based on the PDE operator access pattern. This reordering is
     533 [ +  - ][ +  - ]:       1369 :         optional.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     534                 :            : 
     535                 :            :       // -----------------------------------------------------------------------
     536                 :            :       // discretization scheme choices
     537                 :            :       // -----------------------------------------------------------------------
     538                 :            : 
     539                 :            :       keywords.insert({"scheme", "Select discretization scheme",
     540                 :            :         R"(This keyword is used to select a spatial discretization scheme,
     541                 :            :         necessarily connected to the temporal discretization scheme. See
     542 [ +  - ][ +  - ]:       1369 :         Control/Inciter/Options/Scheme.hpp for valid options.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     543                 :            : 
     544                 :            :       keywords.insert({"alecg",
     545                 :            :         "Select continuous Galerkin with ALE + Runge-Kutta",
     546                 :            :         R"(This keyword is used to select the continuous Galerkin finite element
     547                 :            :         scheme in the arbitrary Lagrangian-Eulerian (ALE) reference frame combined
     548                 :            :         with Runge-Kutta (RK) time stepping.
     549 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Scheme.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     550                 :            : 
     551                 :            :       keywords.insert({"oversetfe",
     552                 :            :         "Select continuous Galerkin finite element with overset meshes + "
     553                 :            :         "Runge-Kutta",
     554                 :            :         R"(This keyword is used to select the continuous Galerkin finite element
     555                 :            :         scheme with Runge-Kutta (RK) time stepping, combined with overset grids.
     556 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Scheme.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     557                 :            : 
     558                 :            :       keywords.insert({"dg",
     559                 :            :         "Select 1st-order discontinuous Galerkin discretization + Runge-Kutta",
     560                 :            :         R"(This keyword is used to select the first-order accurate discontinuous
     561                 :            :         Galerkin, DG(P0), spatial discretiztaion used in Inciter. As this is first
     562                 :            :         order accurate, it is intended for testing and debugging purposes only.
     563                 :            :         Selecting this spatial discretization also selects the Runge-Kutta scheme
     564                 :            :         for time discretization. See Control/Inciter/Options/Scheme.hpp for other
     565 [ +  - ][ +  - ]:       1369 :         valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     566                 :            : 
     567                 :            :       keywords.insert({"p0p1",
     568                 :            :         "Select 2nd-order finite volume discretization + Runge-Kutta",
     569                 :            :         R"(This keyword is used to select the second-order accurate finite volume,
     570                 :            :         P0P1, spatial discretiztaion used in Inciter. This method uses a
     571                 :            :         least-squares procedure to reconstruct the second-order solution from the
     572                 :            :         first-order one. Selecting this spatial discretization also selects the
     573                 :            :         Runge-Kutta scheme for time discretization.
     574 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Scheme.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     575                 :            : 
     576                 :            :       keywords.insert({"dgp1",
     577                 :            :         "Select 2nd-order discontinuous Galerkin discretization + Runge-Kutta",
     578                 :            :         R"(This keyword is used to select the second-order accurate discontinuous
     579                 :            :         Galerkin, DG(P1), spatial discretiztaion used in Inciter. Selecting this
     580                 :            :         spatial discretization also selects the Runge-Kutta scheme for time
     581                 :            :         discretization. See Control/Inciter/Options/Scheme.hpp for other
     582 [ +  - ][ +  - ]:       1369 :         valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     583                 :            : 
     584                 :            :       keywords.insert({"dgp2",
     585                 :            :         "Select 3nd-order discontinuous Galerkin discretization + Runge-Kutta",
     586                 :            :         R"(This keyword is used to select the third-order accurate discontinuous
     587                 :            :         Galerkin, DG(P2), spatial discretiztaion used in Inciter. Selecting this
     588                 :            :         spatial discretization also selects the Runge-Kutta scheme for time
     589                 :            :         discretization. See Control/Inciter/Options/Scheme.hpp for other
     590 [ +  - ][ +  - ]:       1369 :         valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     591                 :            : 
     592                 :            :       keywords.insert({"pdg",
     593                 :            :         "Select p-adaptive discontinuous Galerkin discretization + Runge-Kutta",
     594                 :            :         R"(This keyword is used to select the polynomial adaptive discontinuous
     595                 :            :         Galerkin spatial discretizaion used in Inciter. Selecting this spatial
     596                 :            :         discretization also selects the Runge-Kutta scheme for time
     597                 :            :         discretization. See Control/Inciter/Options/Scheme.hpp for other valid
     598 [ +  - ][ +  - ]:       1369 :         options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     599                 :            : 
     600                 :            :       keywords.insert({"fv",
     601                 :            :         "Select 2nd-order finite volume discretization + Runge-Kutta",
     602                 :            :         R"(This keyword is used to select the second-order accurate finite volume,
     603                 :            :         P0P1, spatial discretiztaion used in Inciter. This method uses a
     604                 :            :         least-squares procedure to reconstruct the second-order solution from the
     605                 :            :         first-order one. See Control/Inciter/Options/Scheme.hpp for other valid
     606 [ +  - ][ +  - ]:       1369 :         options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     607                 :            : 
     608                 :            :       keywords.insert({"ndof", "Number of evolved solution DOFs",
     609 [ +  - ][ +  - ]:       1369 :         R"(The number of solution DOFs that are evolved.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     610                 :            : 
     611                 :            :       keywords.insert({"rdof", "Total number of solution DOFs",
     612                 :            :         R"(The total number of solution DOFs, including the reconstructed and the
     613 [ +  - ][ +  - ]:       1369 :         evolved ones.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     614                 :            : 
     615                 :            :       // -----------------------------------------------------------------------
     616                 :            :       // limiter options
     617                 :            :       // -----------------------------------------------------------------------
     618                 :            : 
     619                 :            :       keywords.insert({"limiter", "Select limiter function",
     620                 :            :         R"(This keyword is used to select a limiter function, used for
     621                 :            :         discontinuous Galerkin (DG) spatial discretization used in inciter. See
     622 [ +  - ][ +  - ]:       1369 :         Control/Inciter/Options/Limiter.hpp for valid options.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     623                 :            : 
     624                 :            :       keywords.insert({"nolimiter", "No limiter used",
     625                 :            :         R"(This keyword is used for discontinuous Galerkin (DG) spatial
     626                 :            :         discretization without any limiter in inciter. See
     627 [ +  - ][ +  - ]:       1369 :         Control/Inciter/Options/Limiter.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     628                 :            : 
     629                 :            :       keywords.insert({"wenop1",
     630                 :            :         "Select the Weighted Essentially Non-Oscillatory (WENO) limiter for DGP1",
     631                 :            :         R"(This keyword is used to select the Weighted Essentially Non-Oscillatory
     632                 :            :         limiter used for discontinuous Galerkin (DG) P1 spatial discretization
     633                 :            :         used in inciter. See Control/Inciter/Options/Limiter.hpp for other valid
     634 [ +  - ][ +  - ]:       1369 :         options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     635                 :            : 
     636                 :            :       keywords.insert({"cweight",
     637                 :            :         "Set value for central linear weight used by WENO, cweight",
     638                 :            :         R"(This keyword is used to set the central linear weight used for the
     639                 :            :         central stencil in the Weighted Essentially Non-Oscillatory (WENO) limiter
     640 [ +  - ][ +  - ]:       1369 :         for discontinuous Galerkin (DG) methods.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     641                 :            : 
     642                 :            :       keywords.insert({"superbeep1",
     643                 :            :         "Select the Superbee limiter for DGP1",
     644                 :            :         R"(This keyword is used to select the Superbee limiter used for
     645                 :            :         discontinuous Galerkin (DG) P1 spatial discretization used in inciter.
     646 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Limiter.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     647                 :            : 
     648                 :            :       keywords.insert({"shock_detector_coeff",
     649                 :            :         "Configure the coefficient used in shock indicator",
     650                 :            :         R"(This keyword can be used to configure the coefficient used in the
     651 [ +  - ][ +  - ]:       1369 :         threshold calculation for the shock indicator.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     652                 :            : 
     653                 :            :       keywords.insert({"vertexbasedp1",
     654                 :            :         "Select the vertex-based limiter for DGP1",
     655                 :            :         R"(This keyword is used to select the vertex-based limiter used for
     656                 :            :         discontinuous Galerkin (DG) P1 spatial discretization used in inciter.
     657                 :            :         Ref. Kuzmin, D. (2010). A vertex-based hierarchical slope limiter for
     658                 :            :         p-adaptive discontinuous Galerkin methods. Journal of computational and
     659                 :            :         applied mathematics, 233(12), 3077-3085.
     660 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Limiter.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     661                 :            : 
     662                 :            :       keywords.insert({"accuracy_test", "Toggle accuracy test setup",
     663                 :            :         R"(This keyword is used to specify if the current setup is for an
     664                 :            :         order-of-accuracy testing, used for discontinuous Galerkin (DG) spatial
     665                 :            :         discretization in inciter. This deactivates certain robustness corrections
     666                 :            :         which might impact order-of-accuracy. Only intended for simple test
     667 [ +  - ][ +  - ]:       1369 :         problems and not for real problems.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     668                 :            : 
     669                 :            :       keywords.insert({"limsol_projection",
     670                 :            :         "Toggle limited solution projection",
     671                 :            :         R"(This keyword is used to specify limited solution projection.
     672                 :            :         This is used for discontinuous Galerkin (DG) spatial discretization in
     673                 :            :         inciter, for multi-material hydrodynamics. This uses a projection to
     674                 :            :         obtain bulk momentum and material energies from the limited primitive
     675                 :            :         quantities. This step is essential to obtain closure-law obeying limited
     676                 :            :         quantities. See Pandare et al. (2023). On the Design of Stable,
     677                 :            :         Consistent, and Conservative High-Order Methods for Multi-Material
     678 [ +  - ][ +  - ]:       1369 :         Hydrodynamics. J Comp Phys (490).)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     679                 :            : 
     680                 :            :       // -----------------------------------------------------------------------
     681                 :            :       // flux options
     682                 :            :       // -----------------------------------------------------------------------
     683                 :            : 
     684                 :            :       keywords.insert({"flux", "Select flux function",
     685                 :            :         R"(This keyword is used to select a flux function, used for
     686                 :            :         discontinuous Galerkin (DG) spatial discretization used in inciter. See
     687 [ +  - ][ +  - ]:       1369 :         Control/Inciter/Options/Flux.hpp for valid options.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     688                 :            : 
     689                 :            :       keywords.insert({"laxfriedrichs",
     690                 :            :         "Select Lax-Friedrichs flux function",
     691                 :            :         R"(This keyword is used to select the Lax-Friedrichs flux function used
     692                 :            :         for discontinuous Galerkin (DG) spatial discretization used in inciter.
     693 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Flux.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     694                 :            : 
     695                 :            :       keywords.insert({"hllc",
     696                 :            :         "Select the Harten-Lax-van Leer-Contact (HLLC) flux function",
     697                 :            :         R"(This keyword is used to select the Harten-Lax-van Leer-Contact flux
     698                 :            :         function used for discontinuous Galerkin (DG) spatial discretization
     699                 :            :         used in inciter. See Control/Inciter/Options/Flux.hpp for other valid
     700 [ +  - ][ +  - ]:       1369 :         options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     701                 :            : 
     702                 :            :       keywords.insert({"upwind", "Select the upwind flux function",
     703                 :            :         R"(This keyword is used to select the upwind flux
     704                 :            :         function used for discontinuous Galerkin (DG) spatial discretization
     705                 :            :         used in inciter. It is only usable for scalar transport.
     706 [ +  - ][ +  - ]:       1369 :         See Control/Inciter/Options/Flux.hpp for other valid options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     707                 :            : 
     708                 :            :       keywords.insert({"ausm",
     709                 :            :         "Select the Advection Upstream Splitting Method (AUSM) flux function",
     710                 :            :         R"(This keyword is used to select the AUSM flux
     711                 :            :         function used for discontinuous Galerkin (DG) spatial discretization
     712                 :            :         used in inciter. It is only set up for for multi-material hydro, and
     713 [ +  - ][ +  - ]:       1369 :         not selectable for anything else.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     714                 :            : 
     715                 :            :       keywords.insert({"hll",
     716                 :            :         "Select the Harten-Lax-vanLeer (HLL) flux function",
     717                 :            :         R"(This keyword is used to select the HLL flux
     718                 :            :         function used for discontinuous Galerkin (DG) spatial discretization
     719                 :            :         used in inciter. It is only set up for for multi-material hydro, and
     720 [ +  - ][ +  - ]:       1369 :         not selectable for anything else.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     721                 :            : 
     722                 :            :       // -----------------------------------------------------------------------
     723                 :            :       // PDE keywords
     724                 :            :       // -----------------------------------------------------------------------
     725                 :            : 
     726                 :            :       keywords.insert({"problem",
     727                 :            :         "Specify problem configuration for partial differential equation solver",
     728                 :            :         R"(This keyword is used to specify the problem configuration for the
     729 [ +  - ][ +  - ]:       1369 :         partial differential equation solver.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     730                 :            : 
     731                 :            :       keywords.insert({"transport",
     732                 :            :         "Start configuration block for an transport equation",
     733                 :            :         R"(This keyword is used to introduce a transport block, used to
     734                 :            :         specify the configuration for a transport equation type.)",
     735 [ +  - ][ +  - ]:       1369 :         "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     736                 :            : 
     737                 :            :       keywords.insert({"ncomp",
     738                 :            :         "Set number of scalar components for a system of transport equations",
     739                 :            :         R"(This keyword is used to specify the number of scalar
     740 [ +  - ][ +  - ]:       1369 :         components of transport (linear advection) equations.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     741                 :            : 
     742                 :            :       keywords.insert({"compflow",
     743                 :            :         "Start configuration block for the compressible flow equations",
     744                 :            :         R"(This keyword is used to introduce the compflow block, used to
     745                 :            :         specify the configuration for a system of partial differential equations,
     746 [ +  - ][ +  - ]:       1369 :         governing single material compressible fluid flow.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     747                 :            : 
     748                 :            :       keywords.insert({"multimat",
     749                 :            :         "Start configuration block for the compressible multi-material equations",
     750                 :            :         R"(This keyword is used to introduce the multimat block,
     751                 :            :         used to specify the configuration for a system of partial differential
     752                 :            :         equations, governing compressible multi-material hydrodynamics assuming
     753 [ +  - ][ +  - ]:       1369 :         velocity equilibrium (single velocity).)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     754                 :            : 
     755                 :            :       keywords.insert({"nmat",
     756                 :            :         "Set number of materials for the multi-material system",
     757                 :            :         R"(This keyword is used to specify the number of materials for
     758 [ +  - ][ +  - ]:       1369 :         multi-material flow, see also the keyword 'multimat'.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     759                 :            : 
     760                 :            :       keywords.insert({"prelax",
     761                 :            :         "Toggle multi-material finite pressure relaxation",
     762                 :            :         R"(This keyword is used to turn finite pressure relaxation between
     763                 :            :         multiple materials on/off. It is used only for the multi-material solver,
     764 [ +  - ][ +  - ]:       1369 :         and has no effect when used for the other PDE types.)", "uint 0/1"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     765                 :            : 
     766                 :            :       keywords.insert({"prelax_timescale",
     767                 :            :         "Time-scale for multi-material finite pressure relaxation",
     768                 :            :         R"(This keyword is used to specify the time-scale at which finite pressure
     769                 :            :         relaxation between multiple materials occurs. The default value of 0.25
     770                 :            :         corresponds to a relaxation time that is 4 times the time required for a
     771                 :            :         sound wave to pass through a computational element. It is used only for
     772 [ +  - ][ +  - ]:       1369 :         multimat, and has no effect for the other PDE types.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     773                 :            : 
     774                 :            :       keywords.insert({"intsharp",
     775                 :            :         "Toggle multi-material interface sharpening",
     776                 :            :         R"(This keyword is used to turn interface sharpening on/off. It uses the
     777                 :            :         multi-material THINC interface reconstruction.
     778                 :            :         Ref. Pandare A. K., Waltz J., & Bakosi J. (2021) Multi-Material
     779                 :            :         Hydrodynamics with Algebraic Sharp Interface Capturing. Computers &
     780                 :            :         Fluids, doi: https://doi.org/10.1016/j.compfluid.2020.104804. It is used
     781                 :            :         for the multi-material and the transport solver, and has no effect when
     782 [ +  - ][ +  - ]:       1369 :         used for the other PDE types.)", "uint 0/1"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     783                 :            : 
     784                 :            :       keywords.insert({"intsharp_param",
     785                 :            :         "Parameter for multi-material interface sharpening",
     786                 :            :         R"(This keyword is used to specify the parameter for the interface
     787                 :            :         sharpening. This parameter affects how many cells the material interfaces
     788                 :            :         span, after the use of sharpening. It is used for multimat and transport,
     789 [ +  - ][ +  - ]:       1369 :         and has no effect for the other PDE types.)", "real" });
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     790                 :            : 
     791                 :            :       // Dependent variable name
     792                 :            :       keywords.insert({"depvar",
     793                 :            :         "Select dependent variable name for PDE.",
     794 [ +  - ][ +  - ]:       1369 :         R"(Select dependent variable name for PDE.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     795                 :            : 
     796                 :            :       // -----------------------------------------------------------------------
     797                 :            :       // physics choices
     798                 :            :       // -----------------------------------------------------------------------
     799                 :            : 
     800                 :            :       keywords.insert({"physics",
     801                 :            :         "Specify the physics configuration for a system of PDEs",
     802                 :            :         R"(This keyword is used to select the physics configuration for a
     803                 :            :         particular PDE system. Valid options depend on the system of PDEs in
     804 [ +  - ][ +  - ]:       1369 :         which the keyword is used.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     805                 :            : 
     806                 :            :       keywords.insert({"advection",
     807                 :            :         "Specify the advection physics",
     808                 :            :         R"(This keyword is used to select the advection physics for the transport
     809 [ +  - ][ +  - ]:       1369 :         PDE system. Only usable for 'transport'.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     810                 :            : 
     811                 :            :       keywords.insert({"advdiff",
     812                 :            :         "Specify the advection + diffusion physics",
     813                 :            :         R"(This keyword is used to select the advection + diffusion physics
     814 [ +  - ][ +  - ]:       1369 :         for transport PDEs. Only usable for 'transport'.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     815                 :            : 
     816                 :            :       keywords.insert({"navierstokes",
     817                 :            :         "Specify the Navier-Stokes (viscous) compressible flow physics",
     818                 :            :         R"(This keyword is used to select the Navier-Stokes (viscous) compressible
     819 [ +  - ][ +  - ]:       1369 :         flow physics configuration. Currently setup only for 'compflow'.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     820                 :            : 
     821                 :            :       keywords.insert({"euler",
     822                 :            :         "Specify the Euler (inviscid) compressible flow physics",
     823                 :            :         R"(This keyword is used to select the Euler (inviscid) compressible
     824 [ +  - ][ +  - ]:       1369 :         flow physics configuration. Usable for 'compflow' and 'multimat')"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     825                 :            : 
     826                 :            :       keywords.insert({"energy_pill",
     827                 :            :         "Specify the energy pill physics",
     828                 :            :         R"(This keyword is used to select an energy pill initialization as physics
     829                 :            :         configuration for multiple material compressible flow. Parameters for the
     830                 :            :         linearly traveling front are required to be specified when energy_pill is
     831                 :            :         selected. See 'linear' for more details. Currently setup only for
     832 [ +  - ][ +  - ]:       1369 :         'multimat')"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     833                 :            : 
     834                 :            :       // -----------------------------------------------------------------------
     835                 :            :       // material/eos object
     836                 :            :       // -----------------------------------------------------------------------
     837                 :            : 
     838                 :            :       keywords.insert({"material",
     839                 :            :         "Start configuration block for material (eos) properties",
     840                 :            :         R"(This keyword is used to introduce a material block, used to
     841 [ +  - ][ +  - ]:       1369 :         specify material properties.)", "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     842                 :            : 
     843                 :            :       keywords.insert({"id", "ID",
     844                 :            :         R"(This keyword is used to specify an ID, a positive integer. Usage is
     845                 :            :         context specific, i.e. what block it is specified in. E.g. Inside the
     846                 :            :         material block, it is used to specify a block consisting of IDs of
     847 [ +  - ][ +  - ]:       1369 :         materials of that EOS type)", "vector of uints"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     848                 :            : 
     849                 :            :       keywords.insert({"eos", "Select equation of state (type)",
     850                 :            :         R"(This keyword is used to select an equation of state for a material.)",
     851 [ +  - ][ +  - ]:       1369 :         "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     852                 :            : 
     853                 :            :       keywords.insert({"gamma", "ratio of specific heats",
     854                 :            :         R"(This keyword is used to specify the material property, ratio of
     855 [ +  - ][ +  - ]:       1369 :         specific heats.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     856                 :            : 
     857                 :            :       keywords.insert({"pstiff", "EoS stiffness parameter",
     858                 :            :         R"(This keyword is used to specify the material property, stiffness
     859 [ +  - ][ +  - ]:       1369 :         parameter in the stiffened gas equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     860                 :            : 
     861                 :            :       keywords.insert({"w_gru", "Grueneisen coefficient",
     862                 :            :         R"(This keyword is used to specify the material property, Gruneisen
     863                 :            :         coefficient for the Jones-Wilkins-Lee equation of state.)",
     864 [ +  - ][ +  - ]:       1369 :         "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     865                 :            : 
     866                 :            :       keywords.insert({"A_jwl", "JWL EoS A parameter",
     867                 :            :         R"(This keyword is used to specify the material property A (units: Pa)
     868 [ +  - ][ +  - ]:       1369 :         for the Jones-Wilkins-Lee equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     869                 :            : 
     870                 :            :       keywords.insert({"B_jwl", "JWL EoS B parameter",
     871                 :            :         R"(This keyword is used to specify the material property B (units: Pa)
     872 [ +  - ][ +  - ]:       1369 :         for the Jones-Wilkins-Lee equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     873                 :            : 
     874                 :            :       keywords.insert({"C_jwl", "JWL EoS C parameter",
     875                 :            :         R"(This keyword is used to specify the material property C (units: Pa)
     876 [ +  - ][ +  - ]:       1369 :         for the Jones-Wilkins-Lee equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     877                 :            : 
     878                 :            :       keywords.insert({"R1_jwl", "JWL EoS R1 parameter",
     879                 :            :         R"(This keyword is used to specify the material property R1 for the
     880 [ +  - ][ +  - ]:       1369 :         Jones-Wilkins-Lee equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     881                 :            : 
     882                 :            :       keywords.insert({"R2_jwl", "JWL EoS R2 parameter",
     883                 :            :         R"(This keyword is used to specify the material property R2 for the
     884 [ +  - ][ +  - ]:       1369 :         Jones-Wilkins-Lee equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     885                 :            : 
     886                 :            :       keywords.insert({"rho0_jwl", "JWL EoS rho0 parameter",
     887                 :            :         R"(This keyword is used to specify the material property rho0, which is
     888                 :            :         the density of initial state (units: kg/m3) for the Jones-Wilkins-Lee
     889 [ +  - ][ +  - ]:       1369 :         equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     890                 :            : 
     891                 :            :       keywords.insert({"de_jwl", "JWL EoS de parameter",
     892                 :            :         R"(This keyword is used to specify the material property de, which is the
     893                 :            :         heat of detonation for products; and for reactants, it is chosen such that
     894                 :            :         the ambient internal energy (e0) is 0 (units: J/kg). Used for the
     895 [ +  - ][ +  - ]:       1369 :         Jones-Wilkins-Lee equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     896                 :            : 
     897                 :            :       keywords.insert({"rhor_jwl", "JWL EoS rhor parameter",
     898                 :            :         R"(This keyword is used to specify the material property rhor, which is
     899                 :            :         the density of reference state (units: kg/m3) for the Jones-Wilkins-Lee
     900 [ +  - ][ +  - ]:       1369 :         equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     901                 :            : 
     902                 :            :       keywords.insert({"Tr_jwl", "JWL EoS Tr parameter",
     903                 :            :         R"(This keyword is used to specify the material property Tr, which is the
     904                 :            :         temperature of reference state (units: K) for the Jones-Wilkins-Lee
     905 [ +  - ][ +  - ]:       1369 :         equation of state.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     906                 :            : 
     907                 :            :       keywords.insert({"Pr_jwl", "JWL EoS er parameter",
     908                 :            :         R"(This keyword is used to specify the material property Pr, which is the
     909                 :            :         pressure at the reference state (units: Pa) for the Jones-Wilkins-Lee
     910                 :            :         equation of state. It is used to calculate the reference temperature for
     911 [ +  - ][ +  - ]:       1369 :         the EoS.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     912                 :            : 
     913                 :            :       keywords.insert({"mu", "shear modulus/dynamic viscosity",
     914                 :            :         R"(This keyword is used to specify the material property, shear modulus
     915 [ +  - ][ +  - ]:       1369 :         for solids, or dynamic viscosity for fluids.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     916                 :            : 
     917                 :            :       keywords.insert({"rho0", "EoS rho0 parameter",
     918                 :            :         R"(This keyword is used to specify the material property rho0, which is
     919                 :            :         the density of initial state (units: kg/m3) of the material.)",
     920 [ +  - ][ +  - ]:       1369 :         "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     921                 :            : 
     922                 :            :       keywords.insert({"cv", "specific heat at constant volume",
     923                 :            :         R"(This keyword is used to specify the material property, specific heat at
     924 [ +  - ][ +  - ]:       1369 :         constant volume.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     925                 :            : 
     926                 :            :       keywords.insert({"k", "heat conductivity",
     927                 :            :         R"(This keyword is used to specify the material property, heat
     928 [ +  - ][ +  - ]:       1369 :         conductivity.)", "vector of reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     929                 :            : 
     930                 :            :       keywords.insert({"stiffenedgas",
     931                 :            :         "Select the stiffened gas equation of state",
     932 [ +  - ][ +  - ]:       1369 :         R"(This keyword is used to select the stiffened gas equation of state.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     933                 :            : 
     934                 :            :       keywords.insert({"jwl", "Select the JWL equation of state",
     935                 :            :         R"(This keyword is used to select the Jones, Wilkins, Lee equation of
     936 [ +  - ][ +  - ]:       1369 :         state.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     937                 :            : 
     938                 :            :       keywords.insert({"smallshearsolid",
     939                 :            :         "Select the SMALLSHEARSOLID equation of state",
     940                 :            :         R"(This keyword is used to select the small shear strain equation of state
     941                 :            :         for solids. This EOS uses a small-shear approximation for the elastic
     942                 :            :         contribution, and a stiffened gas EOS for the hydrodynamic contribution of
     943                 :            :         the internal energy See Plohr, J. N., & Plohr, B. J. (2005). Linearized
     944                 :            :         analysis of Richtmyer–Meshkov flow for elastic materials. Journal of Fluid
     945 [ +  - ][ +  - ]:       1369 :         Mechanics, 537, 55-89 for further details.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     946                 :            : 
     947                 :            :       keywords.insert({"matidxmap",
     948                 :            :       "AUTO-GENERATED Material index map for EOS",
     949                 :            :       R"(The following AUTO-GENERATED data structure is used to index into the
     950                 :            :       correct material vector entry. This is done using the following three maps:
     951                 :            :       1. eosidx: This vector provides the eos-index (value) in the
     952                 :            :       vector<tag::material> for the given user-spec material id (index).
     953                 :            :       2. matidx: This vector provides the material-index (value) inside the
     954                 :            :       vector<tag::material>[eosidx] block for the given user-specified
     955                 :            :       material id (index).
     956                 :            :       3. solidx: This vector provides the solid-index (value) assigned to
     957 [ +  - ][ +  - ]:       1369 :       the given user-specified material id (index). It is 0 for fluids.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     958                 :            : 
     959                 :            :       // -----------------------------------------------------------------------
     960                 :            :       // output object
     961                 :            :       // -----------------------------------------------------------------------
     962                 :            : 
     963                 :            :       keywords.insert({"field_output",
     964                 :            :         "Start of field_output input block",
     965                 :            :         R"(This keyword is used to start a block in the input file containing the
     966 [ +  - ][ +  - ]:       1369 :         list and settings of requested field output.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     967                 :            : 
     968                 :            :       keywords.insert({"interval",
     969                 :            :         "Set interval (in units of iteration count)",
     970                 :            :         R"(This keyword is used to specify an interval in units of iteration count
     971                 :            :         (i.e., number of time steps). This must be used within a relevant
     972 [ +  - ][ +  - ]:       1369 :         block.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     973                 :            : 
     974                 :            :       keywords.insert({"time_interval",
     975                 :            :         "Set interval (in units of physics time)",
     976                 :            :         R"(This keyword is used to specify an interval in units of physics time.
     977 [ +  - ][ +  - ]:       1369 :         This must be used within a relevant block.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     978                 :            : 
     979                 :            :       keywords.insert({"time_range",
     980                 :            :         "Configure physics time range for output (in units of physics time)",
     981                 :            :         R"(This keyword is used to configure field-, or history-output, specifying
     982                 :            :         a start time, a stop time, and an output frequency in physics time units.
     983                 :            :         Example: 'time_range = {0.2, 0.3, 0.001}', which specifies that from t=0.2 to
     984                 :            :         t=0.3 output should happen at physics time units of dt=0.001. This must be
     985 [ +  - ][ +  - ]:       1369 :         used within a relevant block.)", "vector of 3 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     986                 :            : 
     987                 :            :       keywords.insert({"refined", "Toggle refined field output on/off",
     988                 :            :         R"(This keyword can be used to turn on/off refined field output, which
     989                 :            :         refines the mesh and evaluates the solution on the refined mesh for saving
     990 [ +  - ][ +  - ]:       1369 :         the solution.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     991                 :            : 
     992                 :            :       keywords.insert({"filetype", "Select output file type",
     993                 :            :         R"(This keyword is used to specify the output file type of
     994 [ +  - ][ +  - ]:       1369 :         mesh-based field output in a field_output block.)", "string" });
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     995                 :            : 
     996                 :            :       keywords.insert({"elemvar",
     997                 :            :         "Specify list of elem-centered variables for output",
     998                 :            :         R"(This keyword is used to specify elem-centered variables for output to
     999 [ +  - ][ +  - ]:       1369 :         file. It is used in field_output blocks.)", "vector of string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1000                 :            : 
    1001                 :            :       keywords.insert({"nodevar",
    1002                 :            :         "Specify list of node-centered variables for output",
    1003                 :            :         R"(This keyword is used to specify node-centered variables for output to
    1004 [ +  - ][ +  - ]:       1369 :         file. It is used in field_output blocks.)", "vector of string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1005                 :            : 
    1006                 :            :       keywords.insert({"sideset",
    1007                 :            :         "Specify list of side sets",
    1008                 :            :         R"(This keyword is used to specify side sets. Usage is context specific,
    1009                 :            :         i.e. depends on what block it is specified in. Eg. in the field_output
    1010                 :            :         block it specifies the sidesets on which field output is desired.)",
    1011 [ +  - ][ +  - ]:       1369 :         "vector of uints"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1012                 :            : 
    1013                 :            :       keywords.insert({"diagnostics",
    1014                 :            :         "Specify the diagnostics block",
    1015                 :            :         R"(This keyword is used to introduce the dagnostics block, used to
    1016 [ +  - ][ +  - ]:       1369 :         configure diagnostics output.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1017                 :            : 
    1018                 :            :       keywords.insert({"interval",
    1019                 :            :         "Set interval (in units of iteration count)",
    1020                 :            :         R"(This keyword is used to specify an interval in units of iteration count
    1021                 :            :         (i.e., number of time steps). Usage is context specific, and this must
    1022 [ +  - ][ +  - ]:       1369 :         be used within a relevant block.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1023                 :            : 
    1024                 :            :       keywords.insert({"error", "Select an error type",
    1025                 :            :         R"(This keyword is used to select the error type. Used either in the
    1026                 :            :         diagnostics block to specify error norm, or in the AMR block to specify
    1027 [ +  - ][ +  - ]:       1369 :         the error for solution-adaptive mesh refinement.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1028                 :            : 
    1029                 :            :       keywords.insert({"format",
    1030                 :            :         "Specify the ASCII floating-point output format",
    1031                 :            :         R"(This keyword is used to select the
    1032                 :            :         floating-point output format for ASCII floating-point number output.
    1033                 :            :         Valid options are 'default', 'fixed', and 'scientific'. For more info on
    1034                 :            :         these various formats, see
    1035 [ +  - ][ +  - ]:       1369 :         http://en.cppreference.com/w/cpp/io/manip/fixed.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1036                 :            : 
    1037                 :            :       keywords.insert({"precision",
    1038                 :            :         "Precision in digits for ASCII floating-point output",
    1039                 :            :         R"(This keyword is used to select
    1040                 :            :         the precision in digits for ASCII floating-point real number output.
    1041                 :            :         Example: "precision=10", which selects ten digits for floating-point
    1042                 :            :         output, e.g., 3.141592654. The number of digits must be larger than zero
    1043                 :            :         and lower than the maximum representable digits for the given
    1044                 :            :         floating-point type. For more info on setting the precision in C++, see
    1045                 :            :         http://en.cppreference.com/w/cpp/io/manip/setprecision, and
    1046 [ +  - ][ +  - ]:       1369 :         http://en.cppreference.com/w/cpp/types/numeric_limits/digits10)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1047                 :            : 
    1048                 :            :       keywords.insert({"history_output",
    1049                 :            :         "Start of history_output input block",
    1050                 :            :         R"(This keyword is used to start a block in the input file containing the
    1051 [ +  - ][ +  - ]:       1369 :         descriptions and settings of requested history output.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1052                 :            : 
    1053                 :            :       keywords.insert({"point",
    1054                 :            :         "Start configuration block for history point, or a single point in IC blocks",
    1055                 :            :         R"(This keyword is used to either introduce a vector block used to
    1056                 :            :         specify probes for history output, or in the IC/BC block to specify
    1057                 :            :         a single point. When used in history output, it takes sub-entries of
    1058                 :            :         'id' and 'coord'. When used in IC/BC, directly takes three reals as
    1059 [ +  - ][ +  - ]:       1369 :         coordinates.)", "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1060                 :            : 
    1061                 :            :       keywords.insert({"coord", "Specify point coordinates",
    1062                 :            :         R"(This keyword is used to specify coordinates of the history-point.)",
    1063 [ +  - ][ +  - ]:       1369 :         "3 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1064                 :            : 
    1065                 :            :       keywords.insert({"exodusii", "Select ExodusII output",
    1066                 :            :         R"(This keyword is used to select the
    1067                 :            :         ExodusII output file type readable by, e.g., ParaView of either a requested
    1068                 :            :         probability density function (PDF) within a pdfs ... end block or for
    1069                 :            :         mesh-based field output in a field_output ... end block. Example:
    1070                 :            :         "filetype exodusii", which selects ExodusII file output. For more info on
    1071 [ +  - ][ +  - ]:       1369 :         ExodusII, see http://sourceforge.net/projects/exodusii.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1072                 :            : 
    1073                 :            :       keywords.insert({"density", "Request/specify density",
    1074                 :            :         R"(This keyword is used to request/specify the density. Usage is
    1075                 :            :         context specific. When specifed as 'elemvar' or 'nodevar' inside
    1076                 :            :         field_output, requests density as an output quantity. Otherwise,
    1077 [ +  - ][ +  - ]:       1369 :         specifies density at IC/BC.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1078                 :            : 
    1079                 :            :       keywords.insert({"x-momentum",
    1080                 :            :         "Request x-momentum",
    1081                 :            :         R"(This keyword is used to request the fluid x-momentum as an output
    1082 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1083                 :            : 
    1084                 :            :       keywords.insert({"y-momentum",
    1085                 :            :         "Request y-momentum",
    1086                 :            :         R"(This keyword is used to request the fluid y-momentum as an output
    1087 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1088                 :            : 
    1089                 :            :       keywords.insert({"z-momentum",
    1090                 :            :         "Request z-momentum",
    1091                 :            :         R"(This keyword is used to request the fluid z-momentum as an output
    1092 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1093                 :            : 
    1094                 :            :       keywords.insert({
    1095                 :            :         "specific_total_energy", "Request specific total energy",
    1096                 :            :         R"(This keyword is used to request the specific total energy as an output
    1097 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1098                 :            : 
    1099                 :            :       keywords.insert({
    1100                 :            :         "volumetric_total_energy", "Request total volumetric energy",
    1101                 :            :         R"(This keyword is used to request the volumetric total energy as an output
    1102 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1103                 :            : 
    1104                 :            :       keywords.insert({"x-velocity",
    1105                 :            :         "Request x-velocity",
    1106                 :            :         R"(This keyword is used to request the fluid x-velocity as an output
    1107 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1108                 :            : 
    1109                 :            :       keywords.insert({"y-velocity",
    1110                 :            :         "Request y-velocity",
    1111                 :            :         R"(This keyword is used to request the fluid y-velocity as an output
    1112 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1113                 :            : 
    1114                 :            :       keywords.insert({"z-velocity",
    1115                 :            :         "Request z-velocity",
    1116                 :            :         R"(This keyword is used to request the fluid z-velocity as an output
    1117 [ +  - ][ +  - ]:       1369 :         variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1118                 :            : 
    1119                 :            :       keywords.insert({"pressure", "Request/specify pressure",
    1120                 :            :         R"(This keyword is used to request/specify the pressure. Usage is
    1121                 :            :         context specific. When specifed as 'elemvar' or 'nodevar' inside
    1122                 :            :         field_output, requests pressure as an output quantity. Otherwise,
    1123 [ +  - ][ +  - ]:       1369 :         specifies pressure at IC/BC.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1124                 :            : 
    1125                 :            :       keywords.insert({"material_indicator",
    1126                 :            :         "Request material_indicator",
    1127                 :            :         R"(This keyword is used to request the material indicator function as an
    1128 [ +  - ][ +  - ]:       1369 :         output variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1129                 :            : 
    1130                 :            :       keywords.insert({"analytic",
    1131                 :            :         "Request analytic solution",
    1132                 :            :         R"(This keyword is used to request the analytic solution (if exist) as an
    1133 [ +  - ][ +  - ]:       1369 :         output variable.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1134                 :            : 
    1135                 :            :       keywords.insert({"l2", "Select the L2 norm",
    1136 [ +  - ][ +  - ]:       1369 :         R"(This keyword is used to enable computing the L2 norm.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1137                 :            : 
    1138                 :            :       keywords.insert({"linf", "Select the L_{infinity} norm",
    1139 [ +  - ][ +  - ]:       1369 :         R"(This keyword is used to enable computing the L-infinity norm.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1140                 :            : 
    1141                 :            :       keywords.insert({"default",
    1142                 :            :         "Select the default ASCII floating-point output",
    1143                 :            :         R"(This keyword is used to select the
    1144                 :            :         'default' floating-point output format for ASCII floating-point real
    1145                 :            :         number output. For more info on these various formats, see
    1146 [ +  - ][ +  - ]:       1369 :         http://en.cppreference.com/w/cpp/io/manip/fixed.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1147                 :            : 
    1148                 :            :       keywords.insert({"fixed",
    1149                 :            :         "Select the fixed ASCII floating-point output",
    1150                 :            :         R"(This keyword is used to select the
    1151                 :            :         'fixed' floating-point output format for ASCII floating-point real
    1152                 :            :         number output. For more info on these various formats, see
    1153 [ +  - ][ +  - ]:       1369 :         http://en.cppreference.com/w/cpp/io/manip/fixed.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1154                 :            : 
    1155                 :            :       keywords.insert({"scientific",
    1156                 :            :         "Select the scientific ASCII floating-point output",
    1157                 :            :         R"(This keyword is used to select the
    1158                 :            :         'scientific' floating-point output format for ASCII floating-point real
    1159                 :            :         number output. For more info on these various formats, see
    1160 [ +  - ][ +  - ]:       1369 :         http://en.cppreference.com/w/cpp/io/manip/fixed.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1161                 :            : 
    1162                 :            :       // -----------------------------------------------------------------------
    1163                 :            :       // ALE options
    1164                 :            :       // -----------------------------------------------------------------------
    1165                 :            : 
    1166                 :            :       keywords.insert({"ale", "Start block configuring ALE",
    1167                 :            :         R"(This keyword is used to introduce the ale block, used to
    1168                 :            :         configure arbitrary Lagrangian-Eulerian (ALE) mesh movement.)",
    1169 [ +  - ][ +  - ]:       1369 :         "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1170                 :            : 
    1171                 :            :       keywords.insert({"smoother", "Select mesh velocity smoother",
    1172                 :            :         R"(This keyword is used to select a mesh velocity smoother option, used
    1173                 :            :         for Arbitrary-Lagrangian-Eulerian (ALE) mesh motion. Valid options are
    1174 [ +  - ][ +  - ]:       1369 :         'laplace', 'helmholtz', and 'none')", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1175                 :            : 
    1176                 :            :       keywords.insert({"mesh_velocity", "Select mesh velocity",
    1177                 :            :         R"(This keyword is used to select a mesh velocity option, used for
    1178                 :            :         Arbitrary-Lagrangian-Eulerian (ALE) mesh motion. Valid options are
    1179 [ +  - ][ +  - ]:       1369 :         'sine', 'fluid', and 'user_defined".)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1180                 :            : 
    1181                 :            :       keywords.insert({"mesh_motion",
    1182                 :            :         "List of dimension indices that are allowed to move in ALE calculations",
    1183                 :            :         R"(This keyword is used to specify a list of integers (0, 1, or 2) whose
    1184                 :            :         coordinate directions corresponding to x, y, or z are allowed to move with
    1185                 :            :         the mesh velocity in ALE calculations. Useful for 1D/2D problems.)",
    1186 [ +  - ][ +  - ]:       1369 :         "vector of uints"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1187                 :            : 
    1188                 :            :       keywords.insert({"meshforce", "Set ALE mesh force model parameter(s)",
    1189                 :            :         R"(This keyword is used to specify a vector of real numbers used to
    1190                 :            :         parameterize a mesh force model for ALE. The length of the vector must
    1191 [ +  - ][ +  - ]:       1369 :         exactly be 4.)", "vector of 4 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1192                 :            : 
    1193                 :            :       keywords.insert({"dvcfl",
    1194                 :            :         "Set the volume-change Courant-Friedrichs-Lewy (CFL) coefficient",
    1195                 :            :         R"(This keyword is used to specify the volume-change (dV/dt) CFL coefficient
    1196                 :            :         for variable-time-step-size simulations due to volume change in time in
    1197                 :            :         arbitrary-Lagrangian-Eulerian (ALE) calculations. Setting 'dvcfl' only has
    1198                 :            :         effect in ALE calculations and used together with 'cfl'. See also J. Waltz,
    1199                 :            :         N.R. Morgan, T.R. Canfield, M.R.J. Charest, L.D. Risinger, J.G. Wohlbier, A
    1200                 :            :         three-dimensional finite element arbitrary Lagrangian–Eulerian method for
    1201                 :            :         shock hydrodynamics on unstructured grids, Computers & Fluids, 92: 172-187,
    1202 [ +  - ][ +  - ]:       1369 :         2014.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1203                 :            : 
    1204                 :            :       keywords.insert({"vortmult",
    1205                 :            :         "Configure vorticity multiplier for ALE mesh velocity",
    1206                 :            :         R"(This keyword is used to configure the multiplier for the vorticity term
    1207                 :            :         in the mesh velocity smoother (mesh_velocity=fluid) or for the potential
    1208                 :            :         gradient for the Helmholtz mesh velocity (mesh_velocity=helmholtz) for ALE
    1209                 :            :         mesh motion. For 'fluid' this is coefficient c2 in Eq.(36) of Waltz,
    1210                 :            :         Morgan, Canfield, Charest, Risinger, Wohlbier, A three-dimensional finite
    1211                 :            :         element arbitrary Lagrangian–Eulerian method for shock hydrodynamics on
    1212                 :            :         unstructured grids, Computers & Fluids, 2014, and for 'helmholtz', this
    1213                 :            :         is coefficient a1 in Eq.(23) of Bakosi, Waltz, Morgan, Improved ALE mesh
    1214                 :            :         velocities for complex flows, International Journal for Numerical Methods
    1215 [ +  - ][ +  - ]:       1369 :         in Fluids, 2017. )", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1216                 :            : 
    1217                 :            :       keywords.insert({"maxit",
    1218                 :            :         "Set the max number of iterations for the ALE mesh velocity linear solve",
    1219                 :            :         R"(This keyword is used to specify the maximum number of linear solver
    1220                 :            :         iterations taken to converge the mesh velocity linear solve in
    1221                 :            :         arbitrary-Lagrangian-Eulerian (ALE) calculations. See also J. Waltz,
    1222                 :            :         N.R. Morgan, T.R. Canfield, M.R.J. Charest, L.D. Risinger, J.G. Wohlbier, A
    1223                 :            :         three-dimensional finite element arbitrary Lagrangian–Eulerian method for
    1224                 :            :         shock hydrodynamics on unstructured grids, Computers & Fluids, 92: 172-187,
    1225 [ +  - ][ +  - ]:       1369 :         2014.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1226                 :            : 
    1227                 :            :       keywords.insert({"tolerance",
    1228                 :            :         "Set the tolerance for the ALE mesh velocity linear solve",
    1229                 :            :         R"(This keyword is used to specify the tolerance to converge the mesh
    1230                 :            :         velocity linear solve for in
    1231                 :            :         arbitrary-Lagrangian-Eulerian (ALE) calculations. See also J. Waltz,
    1232                 :            :         N.R. Morgan, T.R. Canfield, M.R.J. Charest, L.D. Risinger, J.G. Wohlbier, A
    1233                 :            :         three-dimensional finite element arbitrary Lagrangian–Eulerian method for
    1234                 :            :         shock hydrodynamics on unstructured grids, Computers & Fluids, 92: 172-187,
    1235 [ +  - ][ +  - ]:       1369 :         2014.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1236                 :            : 
    1237                 :            :       keywords.insert({"move",
    1238                 :            :         "Start configuration block configuring surface movement in ALE",
    1239                 :            :         R"(This keyword is used to introduce a move block, used to
    1240 [ +  - ][ +  - ]:       1369 :         configure surface movement for ALE simulations.)", "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1241                 :            : 
    1242                 :            :       keywords.insert({"fntype",
    1243                 :            :         "Select how a user-defined function is interpreted",
    1244                 :            :         R"(This keyword is used to select how a user-defined function should be
    1245 [ +  - ][ +  - ]:       1369 :         interpreted.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1246                 :            : 
    1247                 :            :       keywords.insert({"fn", "Specify a discrete user-defined function",
    1248                 :            :         R"(This keyword is used to specify a user-defined function block with
    1249                 :            :         discrete points, listed inside the fn block. Used in ale mesh motion and
    1250 [ +  - ][ +  - ]:       1369 :         time-dependent BC specification)", "reals" });
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1251                 :            : 
    1252                 :            :       keywords.insert({"laplace",
    1253                 :            :         "Select the Laplace mesh velocity smoother for ALE",
    1254                 :            :         R"(This keyword is used to select the 'Laplace' mesh velocity smoother
    1255 [ +  - ][ +  - ]:       1369 :         for Arbitrary-Lagrangian-Eulerian (ALE) mesh motion.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1256                 :            : 
    1257                 :            :       keywords.insert({"helmholtz",
    1258                 :            :         "Select the Helmholtz velocity for ALE",
    1259                 :            :         R"(This keyword is used to select the a velocity, computed from the
    1260                 :            :         Helmholtz-decomposition as the mesh velocity for
    1261                 :            :         Arbitrary-Lagrangian-Eulerian (ALE) mesh motion. See J. Bakosi, J. Waltz,
    1262                 :            :         N. Morgan, Improved ALE mesh velocities for complex flows, Int. J. Numer.
    1263 [ +  - ][ +  - ]:       1369 :         Meth. Fl., 1-10, 2017, https://doi.org/10.1002/fld.4403.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1264                 :            : 
    1265                 :            :       keywords.insert({"none", "Select none option",
    1266                 :            :         R"(This keyword is used to select the 'none' option from a list of
    1267 [ +  - ][ +  - ]:       1369 :         configuration options.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1268                 :            : 
    1269                 :            :       keywords.insert({"sine",
    1270                 :            :         "Prescribe sinusoidal mesh velocity for ALE",
    1271                 :            :         R"(This keyword is used to prescribe a sinusoidal mesh velocity
    1272 [ +  - ][ +  - ]:       1369 :         for Arbitrary-Lagrangian-Eulerian (ALE) mesh motion.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1273                 :            : 
    1274                 :            :       keywords.insert({"fluid", "Select the fluid velocity for ALE",
    1275                 :            :         R"(This keyword is used to select the 'fluid' velocity as the mesh velocity
    1276 [ +  - ][ +  - ]:       1369 :         for Arbitrary-Lagrangian-Eulerian (ALE) mesh motion.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1277                 :            : 
    1278                 :            :       // -----------------------------------------------------------------------
    1279                 :            :       // h/p adaptation objects
    1280                 :            :       // -----------------------------------------------------------------------
    1281                 :            : 
    1282                 :            :       keywords.insert({"amr",
    1283                 :            :         "Start configuration block configuring adaptive mesh refinement",
    1284                 :            :         R"(This keyword is used to introduce the amr block, used to
    1285 [ +  - ][ +  - ]:       1369 :         configure adaptive mesh refinement.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1286                 :            : 
    1287                 :            :       keywords.insert({"t0ref", "Enable mesh refinement at t<0",
    1288                 :            :         R"(This keyword is used to enable initial mesh refinement, which can be
    1289                 :            :         configured to perform multiple levels of mesh refinement based on various
    1290 [ +  - ][ +  - ]:       1369 :         refinement criteria and configuration settings.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1291                 :            : 
    1292                 :            :       keywords.insert({"dtref", "Enable mesh refinement at t>0",
    1293                 :            :         R"(This keyword is used to enable solution-adaptive mesh refinement during
    1294 [ +  - ][ +  - ]:       1369 :         time stepping.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1295                 :            : 
    1296                 :            :       keywords.insert({"dtref_uniform",
    1297                 :            :         "Enable mesh refinement at t>0 but only perform uniform refinement",
    1298                 :            :         R"(This keyword is used to force uniform-only solution-adaptive mesh
    1299 [ +  - ][ +  - ]:       1369 :         refinement during time stepping.)", "bool"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1300                 :            : 
    1301                 :            :       keywords.insert({"dtfreq",
    1302                 :            :         "Set mesh refinement frequency during time stepping",
    1303                 :            :         R"(This keyword is used to configure the frequency of mesh refinement
    1304 [ +  - ][ +  - ]:       1369 :         during time stepping.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1305                 :            : 
    1306                 :            :       keywords.insert({"maxlevels",
    1307                 :            :         "Set maximum allowed mesh refinement levels",
    1308                 :            :         R"(This keyword is used to configure the maximum allowed mesh refinement
    1309 [ +  - ][ +  - ]:       1369 :         levels.)", "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1310                 :            : 
    1311                 :            :       keywords.insert({"initial",
    1312                 :            :         "Configure initial mesh refinement (before time stepping)",
    1313                 :            :         R"(This keyword is used to add to a list of initial mesh refinement types
    1314                 :            :         that happens before t = 0. Allowed options are 'uniform',
    1315                 :            :         'uniform_derefine', 'initial_conditions', 'coords', 'edgelist')",
    1316 [ +  - ][ +  - ]:       1369 :         "vector of strings"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1317                 :            : 
    1318                 :            :       keywords.insert({"coords",
    1319                 :            :         "Configure initial refinement using coordinate planes",
    1320                 :            :         R"(This keyword can be used to configure entire volumes on a given side of
    1321                 :            :         a plane in 3D space. The keyword introduces an coords block within
    1322                 :            :         an amr block. All edges of the input mesh will be tagged for refinement
    1323                 :            :         whose end-points lie within the given ranges.
    1324                 :            :         Example: 'xminus 0.5' refines all edges whose end-point coordinates are
    1325                 :            :         less than 0.5. Multiple specifications are understood by combining with
    1326                 :            :         a logical AND. That is: 'xminus 0.5 yplus 0.3' refines all edges whose
    1327                 :            :         end-point x coordinates are less than 0.5 AND y coordinates are larger than
    1328 [ +  - ][ +  - ]:       1369 :         0.3.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1329                 :            : 
    1330                 :            :       keywords.insert({"xminus",
    1331                 :            :         "Configure initial refinement for coordinates lower than an x-normal plane",
    1332                 :            :         R"(This keyword can be used to configure a mesh refinement volume for edges
    1333                 :            :         whose end-points are less than the x coordinate of a plane perpendicular
    1334                 :            :         to coordinate x in 3D space. The keyword must be used in a coords-block
    1335                 :            :         within an amr-block with syntax 'xminus <real>'. All edges of the
    1336                 :            :         input mesh will be tagged for refinement whose end-points lie less than (-)
    1337                 :            :         the real number given. Example: 'xminus 0.5' refines all edges whose end-point
    1338 [ +  - ][ +  - ]:       1369 :         x-coordinates are less than 0.5.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1339                 :            : 
    1340                 :            :       keywords.insert({"xplus",
    1341                 :            :         "Configure initial refinement for coordinates larger than an x-normal plane",
    1342                 :            :         R"(This keyword can be used to configure a mesh refinement volume for edges
    1343                 :            :         whose end-points are larger than the x coordinate of a plane perpendicular
    1344                 :            :         to coordinate x in 3D space. The keyword must be used in a coords-block
    1345                 :            :         within an amr-block with syntax 'xplus <real>'. All edges of the
    1346                 :            :         input mesh will be tagged for refinement whose end-points lie larger than
    1347                 :            :         (+) the real number given. Example: 'xplus 0.5' refines all edges whose
    1348 [ +  - ][ +  - ]:       1369 :         end-point coordinates are larger than 0.5.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1349                 :            : 
    1350                 :            :       keywords.insert({"yminus",
    1351                 :            :         "Configure initial refinement for coordinates lower than an y-normal plane",
    1352                 :            :         R"(This keyword can be used to configure a mesh refinement volume for edges
    1353                 :            :         whose end-points are less than the y coordinate of a plane perpendicular
    1354                 :            :         to coordinate y in 3D space. The keyword must be used in a coords-block
    1355                 :            :         within an amr-block with syntax 'yminus <real>'. All edges of the
    1356                 :            :         input mesh will be tagged for refinement whose end-points lie less than (-)
    1357                 :            :         the real number given. Example: 'yminus 0.5' refines all edges whose end-point
    1358 [ +  - ][ +  - ]:       1369 :         coordinates are less than 0.5.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1359                 :            : 
    1360                 :            :       keywords.insert({"yplus",
    1361                 :            :         "Configure initial refinement for coordinates larger than an y-normal plane",
    1362                 :            :         R"(This keyword can be used to configure a mesh refinement volume for edges
    1363                 :            :         whose end-points are larger than the y coordinate of a plane perpendicular
    1364                 :            :         to coordinate y in 3D space. The keyword must be used in a coords-block
    1365                 :            :         within an amr-block with syntax 'yplus <real>'. All edges of the
    1366                 :            :         input mesh will be tagged for refinement whose end-points lie larger than
    1367                 :            :         (+) the real number given. Example: 'yplus 0.5' refines all edges whose
    1368 [ +  - ][ +  - ]:       1369 :         end-point coordinates are larger than 0.5.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1369                 :            : 
    1370                 :            :       keywords.insert({"zminus",
    1371                 :            :         "Configure initial refinement for coordinates lower than an z-normal plane",
    1372                 :            :         R"(This keyword can be used to configure a mesh refinement volume for edges
    1373                 :            :         whose end-points are less than the z coordinate of a plane perpendicular
    1374                 :            :         to coordinate z in 3D space. The keyword must be used in a coords-block
    1375                 :            :         within an amr-block with syntax 'zminus <real>'. All edges of the
    1376                 :            :         input mesh will be tagged for refinement whose end-points lie less than (-)
    1377                 :            :         the real number given. Example: 'zminus 0.5' refines all edges whose end-point
    1378 [ +  - ][ +  - ]:       1369 :         coordinates are less than 0.5.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1379                 :            : 
    1380                 :            :       keywords.insert({"zplus",
    1381                 :            :         "Configure initial refinement for coordinates larger than an z-normal plane",
    1382                 :            :         R"(This keyword can be used to configure a mesh refinement volume for edges
    1383                 :            :         whose end-points are larger than the z coordinate of a plane perpendicular
    1384                 :            :         to coordinate z in 3D space. The keyword must be used in a coords-block
    1385                 :            :         within an amr-block with syntax 'zplus <real>'. All edges of the
    1386                 :            :         input mesh will be tagged for refinement whose end-points lie larger than
    1387                 :            :         (+) the real number given. Example: 'zplus 0.5' refines all edges whose
    1388 [ +  - ][ +  - ]:       1369 :         end-point coordinates are larger than 0.5.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1389                 :            : 
    1390                 :            :       keywords.insert({"edgelist",
    1391                 :            :         "Configure edge-node pairs for initial refinement",
    1392                 :            :         R"(This keyword can be used to configure a list of edges that are explicitly
    1393                 :            :         tagged for initial refinement during setup in inciter. The keyword
    1394                 :            :         introduces an edgelist block within an amr block and must
    1395                 :            :         contain a list of integer pairs, i.e., the number of ids must be even,
    1396                 :            :         denoting the end-points of the nodes (=edge) which should be tagged for
    1397 [ +  - ][ +  - ]:       1369 :         refinement.)", "vector of uints"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1398                 :            : 
    1399                 :            :       keywords.insert({"error",
    1400                 :            :         "Configure the error type for solution-adaptive mesh refinement",
    1401                 :            :         R"(This keyword is used to select the algorithm used to estimate the error
    1402                 :            :         for solution-adaptive mesh refinement. Available options are 'jump' and
    1403 [ +  - ][ +  - ]:       1369 :         'hessian')", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1404                 :            : 
    1405                 :            :       keywords.insert({"refvar",
    1406                 :            :         "Configure dependent variables used for adaptive mesh refinement",
    1407                 :            :         R"(This keyword is used to configured a list of dependent variables that
    1408                 :            :         trigger adaptive mesh refinement based on estimating their numerical error.
    1409                 :            :         These refinement variables are used for both initial (i.e., before time
    1410                 :            :         stepping) mesh refinement as well as during time stepping. Only previously
    1411                 :            :         (i.e., earlier in the input file) selected dependent variables can be
    1412                 :            :         configured as refinement variables. Dependent variables are required to be
    1413                 :            :         defined in all equation system configuration blocks, e.g., transport ...
    1414                 :            :         end, by using the 'depvar' keyword. Example: transport depvar c end amr
    1415                 :            :         refvar c end end. Selecting a particular scalar component in a system is
    1416                 :            :         done by appending the equation number to the refvar: Example: transport
    1417                 :            :         depvar q ncomp 3 end amr refvar q1 q2 end end, which configures two
    1418                 :            :         refinement variables: the first and third scalar component of the previously
    1419 [ +  - ][ +  - ]:       1369 :         configured transport equation system.)", "vector of char"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1420                 :            : 
    1421                 :            :       keywords.insert({"tol_refine", "Configure refine tolerance",
    1422                 :            :         R"(This keyword is used to set the tolerance used to tag an edge for
    1423 [ +  - ][ +  - ]:       1369 :         refinement if the relative error exceeds this value.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1424                 :            : 
    1425                 :            :       keywords.insert({"tol_derefine",
    1426                 :            :         "Configure derefine tolerance",
    1427                 :            :         R"(This keyword is used to set the tolerance used to tag an edge for
    1428 [ +  - ][ +  - ]:       1369 :         derefinement if the relative error is below this value.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1429                 :            : 
    1430                 :            :       keywords.insert({"uniform",
    1431                 :            :         "Select uniform initial mesh refinement",
    1432                 :            :         R"(This keyword is used to select uniform initial mesh refinement.)",
    1433 [ +  - ][ +  - ]:       1369 :         "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1434                 :            : 
    1435                 :            :       keywords.insert({"uniform_derefine",
    1436                 :            :         "Select uniform initial mesh de-refinement",
    1437                 :            :         R"(This keyword is used to select uniform initial mesh de-refinement.)",
    1438 [ +  - ][ +  - ]:       1369 :         "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1439                 :            : 
    1440                 :            :       keywords.insert({"initial_conditions",
    1441                 :            :         "Select initial-conditions-based initial mesh refinement",
    1442                 :            :         R"(This keyword is used to select initial-conditions-based initial mesh
    1443 [ +  - ][ +  - ]:       1369 :         refinement.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1444                 :            : 
    1445                 :            :       keywords.insert({"jump",
    1446                 :            :         "Error estimation based on the solution jump normalized by solution value",
    1447                 :            :         R"(This keyword is used to select the jump-based error indicator for
    1448                 :            :         solution-adaptive mesh refinement. The error is estimated by computing the
    1449                 :            :         magnitude of the jump in the solution value normalized by the solution
    1450 [ +  - ][ +  - ]:       1369 :         value.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1451                 :            : 
    1452                 :            :       keywords.insert({"hessian",
    1453                 :            :         "Error estimation based on the Hessian normalized by solution value",
    1454                 :            :         R"(This keyword is used to select the Hessian-based error indicator for
    1455                 :            :         solution-adaptive mesh refinement. The error is estimated by computing the
    1456                 :            :         Hessian (2nd derivative matrix) of the solution normalized by sum of the
    1457 [ +  - ][ +  - ]:       1369 :         absolute values of the gradients at edges-end points.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1458                 :            : 
    1459                 :            :       keywords.insert({"pref",
    1460                 :            :         "Start configuration block configuring p-adaptive refinement",
    1461                 :            :         R"(This keyword is used to introduce the pref block, to
    1462 [ +  - ][ +  - ]:       1369 :         configure p-adaptive refinement)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1463                 :            : 
    1464                 :            :       keywords.insert({"indicator",
    1465                 :            :         "Configure the specific adaptive indicator for p-adaptive DG scheme",
    1466                 :            :         R"(This keyword can be used to configure a specific type of adaptive
    1467                 :            :         indicator for p-adaptive refinement  of the DG scheme. The keyword must
    1468                 :            :         be used in a pref block. Available options are 'pref_spectral_decay' and
    1469 [ +  - ][ +  - ]:       1369 :         'pref_non_conformity'.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1470                 :            : 
    1471                 :            :       keywords.insert({"ndofmax",
    1472                 :            :         "Configure the maximum number of degree of freedom for p-adaptive DG",
    1473                 :            :         R"(This keyword can be used to configure a maximum number of degree of
    1474                 :            :         freedom for p-adaptive refinement  of the DG scheme. The keyword must
    1475 [ +  - ][ +  - ]:       1369 :         be used in a pref block.)", "uint either 4 or 10"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1476                 :            : 
    1477                 :            :       keywords.insert({"tolref",
    1478                 :            :         "Configure the tolerance for p-refinement for p-adaptive DG",
    1479                 :            :         R"(This keyword can be used to configure a tolerance for p-adaptive
    1480                 :            :         refinement  for the DG scheme. The keyword must be used in a pref
    1481                 :            :         block. All elements with a refinement indicator larger than this
    1482 [ +  - ][ +  - ]:       1369 :         tolerance will be p-refined.)", "real between 0 and 1"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1483                 :            : 
    1484                 :            :       keywords.insert({"spectral_decay",
    1485                 :            :         "Select the spectral-decay indicator for p-adaptive DG scheme",
    1486                 :            :         R"(This keyword is used to select the spectral-decay indicator used for
    1487                 :            :         p-adaptive discontinuous Galerkin (DG) discretization used in inciter.
    1488                 :            :         See Control/Inciter/Options/PrefIndicator.hpp for other valid options.)",
    1489 [ +  - ][ +  - ]:       1369 :         "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1490                 :            : 
    1491                 :            :       keywords.insert({"non_conformity",
    1492                 :            :         "Select the non-conformity indicator for p-adaptive DG scheme",
    1493                 :            :         R"(This keyword is used to select the non-conformity indicator used for
    1494                 :            :         p-adaptive discontinuous Galerkin (DG) discretization used in inciter.
    1495                 :            :         See Control/Inciter/Options/PrefIndicator.hpp for other valid options.)",
    1496 [ +  - ][ +  - ]:       1369 :         "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1497                 :            : 
    1498                 :            :       // -----------------------------------------------------------------------
    1499                 :            :       // boundary condition options
    1500                 :            :       // -----------------------------------------------------------------------
    1501                 :            : 
    1502                 :            :       keywords.insert({"bc",
    1503                 :            :         "Start configuration block for boundary conditions",
    1504                 :            :         R"(This keyword is used to introduce the bc block, used for
    1505                 :            :         boundary conditions. This is a vector block, where each vector entry
    1506 [ +  - ][ +  - ]:       1369 :         specifies BCs for a particular mesh)", "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1507                 :            : 
    1508                 :            :       keywords.insert({"mesh",
    1509                 :            :         "List meshes on which the following BCs apply",
    1510                 :            :         R"(This keyword is used to list multiple meshes on which the boundary
    1511                 :            :         conditions listed in this particular bc-block apply.)",
    1512 [ +  - ][ +  - ]:       1369 :         "vector of uints"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1513                 :            : 
    1514                 :            :       keywords.insert({"dirichlet",
    1515                 :            :         "List sidesets with Dirichlet boundary conditions",
    1516                 :            :         R"(This keyword is used to list Dirichlet sidesets.
    1517                 :            :         This keyword is used to list multiple sidesets on
    1518                 :            :         which a prescribed Dirichlet BC is then applied. Such prescribed BCs
    1519                 :            :         at each point in space and time are evaluated using a built-in function,
    1520 [ +  - ][ +  - ]:       1369 :         e.g., using the method of manufactured solutions.)", "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1521                 :            : 
    1522                 :            :       keywords.insert({"symmetry",
    1523                 :            :         "List sidesets with symmetry boundary conditions",
    1524                 :            :         R"(This keyword is used to list (multiple) symmetry BC sidesets.)",
    1525 [ +  - ][ +  - ]:       1369 :         "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1526                 :            : 
    1527                 :            :       keywords.insert({"inlet",
    1528                 :            :         "List sidesets with inlet boundary conditions",
    1529                 :            :         R"(This keyword is used to list (multiple) inlet BC sidesets.)",
    1530 [ +  - ][ +  - ]:       1369 :         "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1531                 :            : 
    1532                 :            :       keywords.insert({"outlet",
    1533                 :            :         "List sidesets with outlet boundary conditions",
    1534                 :            :         R"(This keyword is used to list (multiple) outlet BC sidesets.)",
    1535 [ +  - ][ +  - ]:       1369 :         "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1536                 :            : 
    1537                 :            :       keywords.insert({"farfield",
    1538                 :            :         "List sidesets with farfield boundary conditions",
    1539                 :            :         R"(This keyword is used to list (multiple) farfield BC sidesets.
    1540                 :            :         Keywords allowed in a bc_farfield block are 'density', 'velocity',
    1541 [ +  - ][ +  - ]:       1369 :         'pressure')", "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1542                 :            : 
    1543                 :            :       keywords.insert({"extrapolate",
    1544                 :            :         "List sidesets with Extrapolation boundary conditions",
    1545                 :            :         R"(This keyword is used to list (multiple) extrapolate BC sidesets.)",
    1546 [ +  - ][ +  - ]:       1369 :         "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1547                 :            : 
    1548                 :            :       keywords.insert({"stag",
    1549                 :            :         "List sidesets with stagnation boundary conditions",
    1550                 :            :         R"(This keyword is used to list (multiple) stagnation BC sidesets.)",
    1551 [ +  - ][ +  - ]:       1369 :         "vector of uint(s)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1552                 :            : 
    1553                 :            :       keywords.insert({"timedep",
    1554                 :            :         "Start configuration block describing time dependent boundary conditions",
    1555                 :            :         R"(This keyword is used to introduce a bc_timedep block, used to
    1556                 :            :         specify the configuration of time dependent boundary conditions for a
    1557                 :            :         partial differential equation. A discrete function in time t in the form
    1558                 :            :         of a table with 6 columns (t, pressure(t), density(t), vx(t), vy(t), vz(t))
    1559                 :            :         is expected inside a fn ... end block, specified within the bc_timedep
    1560                 :            :         block. Multiple such bc_timedep blocks can be specified for different
    1561 [ +  - ][ +  - ]:       1369 :         time dependent BCs on different groups of side sets.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1562                 :            : 
    1563                 :            :       keywords.insert({"radius", "Specify a radius",
    1564                 :            :         R"(This keyword is used to specify a radius, used, e.g., in specifying a
    1565                 :            :         point in 3D space for setting a stagnation (velocity vector = 0).)",
    1566 [ +  - ][ +  - ]:       1369 :         "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1567                 :            : 
    1568                 :            :       keywords.insert({"velocity", "Specify velocity",
    1569                 :            :         R"(This keyword is used to configure a velocity vector used in a
    1570                 :            :         context-specific way, e.g., for boundary or initial conditions, or
    1571 [ +  - ][ +  - ]:       1369 :         specifying overset mesh velocity.)", "vector of 3 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1572                 :            : 
    1573                 :            :       // -----------------------------------------------------------------------
    1574                 :            :       // IC object
    1575                 :            :       // -----------------------------------------------------------------------
    1576                 :            : 
    1577                 :            :       keywords.insert({"ic",
    1578                 :            :         "Introduce an ic block used to configure initial conditions",
    1579                 :            :         R"(This keyword is used to introduce an ic block used to set initial
    1580 [ +  - ][ +  - ]:       1369 :         conditions.)", "block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1581                 :            : 
    1582                 :            :       keywords.insert({"materialid", "Specify material id",
    1583                 :            :         R"(This keyword is used to configure the material id within an IC box, IC
    1584                 :            :         mesh-block, or in the background as a part of the initialization.)",
    1585 [ +  - ][ +  - ]:       1369 :         "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1586                 :            : 
    1587                 :            :       keywords.insert({"temperature", "Specify temperature",
    1588                 :            :         R"(This keyword is used to configure temperature, used for, e.g.,
    1589 [ +  - ][ +  - ]:       1369 :         boundary or initial conditions.)" , "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1590                 :            : 
    1591                 :            :       keywords.insert({"box",
    1592                 :            :         "Introduce a box block used to assign initial conditions",
    1593                 :            :         R"(This keyword is used to introduce a IC box block used to assign
    1594                 :            :         initial conditions within a box given by spatial coordinates.)",
    1595 [ +  - ][ +  - ]:       1369 :         "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1596                 :            : 
    1597                 :            :       keywords.insert({"meshblock",
    1598                 :            :         "Introduce a meshblock block used to assign initial conditions",
    1599                 :            :         R"(This keyword is used to introduce a IC meshblock block used to
    1600                 :            :         assign initial conditions within a mesh block specified in the mesh file.)",
    1601 [ +  - ][ +  - ]:       1369 :         "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1602                 :            : 
    1603                 :            :       keywords.insert({"blockid", "Specify mesh block id",
    1604                 :            :         R"(This keyword is used to configure the mesh block id within the
    1605                 :            :         meshblock-block as a part of the initialization. It is strongly
    1606                 :            :         recommended to use contiguous block ids in mesh file starting from 1.)",
    1607 [ +  - ][ +  - ]:       1369 :         "uint"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1608                 :            : 
    1609                 :            :       keywords.insert({"volume", "Specify volume",
    1610                 :            :         R"(This keyword is used to configure the volume of a meshblock.)",
    1611 [ +  - ][ +  - ]:       1369 :         "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1612                 :            : 
    1613                 :            :       keywords.insert({"mass", "Specify mass",
    1614                 :            :         R"(This keyword is used to configure the mass within a box/meshblock.)",
    1615 [ +  - ][ +  - ]:       1369 :         "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1616                 :            : 
    1617                 :            :       keywords.insert({"energy", "Specify energy per unit mass",
    1618                 :            :         R"(This keyword is used to configure energy per unit mass, used for, e.g.,
    1619 [ +  - ][ +  - ]:       1369 :         boundary or initial conditions.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1620                 :            : 
    1621                 :            :       keywords.insert({"energy_content", "Specify energy per unit volume",
    1622                 :            :         R"(This keyword is used to configure energy per unit volume, used for
    1623 [ +  - ][ +  - ]:       1369 :         initial conditions.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1624                 :            : 
    1625                 :            :       keywords.insert({"xmin", "Minimum x coordinate",
    1626                 :            :         R"(This keyword used to configure a minimum x coordinate to specify
    1627 [ +  - ][ +  - ]:       1369 :         a box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1628                 :            : 
    1629                 :            :       keywords.insert({"xmax", "Maximum x coordinate",
    1630                 :            :         R"(This keyword used to configure a maximum x coordinate to specify
    1631 [ +  - ][ +  - ]:       1369 :         a box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1632                 :            : 
    1633                 :            :       keywords.insert({"ymin", "Minimum y coordinate",
    1634                 :            :         R"(This keyword used to configure a minimum y coordinate to specify
    1635 [ +  - ][ +  - ]:       1369 :         a box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1636                 :            : 
    1637                 :            :       keywords.insert({"ymax", "Maximum y coordinate",
    1638                 :            :         R"(This keyword used to configure a maximum y coordinate to specify
    1639 [ +  - ][ +  - ]:       1369 :         a box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1640                 :            : 
    1641                 :            :       keywords.insert({"zmin", "Minimum z coordinate",
    1642                 :            :         R"(This keyword used to configure a minimum z coordinate to specify
    1643 [ +  - ][ +  - ]:       1369 :         a box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1644                 :            : 
    1645                 :            :       keywords.insert({"zmax", "Maximum z coordinate",
    1646                 :            :         R"(This keyword used to configure a maximum z coordinate to specify
    1647 [ +  - ][ +  - ]:       1369 :         a box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1648                 :            : 
    1649                 :            :       keywords.insert({"orientation", "Configure orientation",
    1650                 :            :         R"(Configure orientation of an IC box for rotation about centroid of box.)",
    1651 [ +  - ][ +  - ]:       1369 :         "vector of 3 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1652                 :            : 
    1653                 :            :       keywords.insert({"initiate", "Initiation type",
    1654                 :            :         R"(This keyword is used to select an initiation type to configure how
    1655                 :            :         values are assigned for a box/meshblock initialization. This can be used
    1656                 :            :         to specify, how the values are assigned to mesh nodes within a box. Uses:
    1657                 :            :         (1) impulse: assign the full values at t=0 for all points in a box,
    1658                 :            :         (2) linear: use a linear function in time and space, configured with an
    1659                 :            :         initiation point in space, a constant velocity of the growing spherical
    1660                 :            :         front in time (and space) linearly, and width of the front and assigns
    1661                 :            :         values to mesh points falling within the growing spherical shell inside
    1662 [ +  - ][ +  - ]:       1369 :         a configured box.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1663                 :            : 
    1664                 :            :       keywords.insert({"init_time","Specify the initialization time",
    1665                 :            :         R"(This keyword is used to specify the time at which the propagating front
    1666                 :            :         is initialized for a mesh block or box IC, with 'initiate linear' type.
    1667                 :            :         Delays in initializing separate mesh blocks or boxes can be achieved using
    1668 [ +  - ][ +  - ]:       1369 :         different initialization times.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1669                 :            : 
    1670                 :            :       keywords.insert({"front_width", "Specify a front width",
    1671                 :            :         R"(This keyword is used to specify the width of the propagating front for
    1672                 :            :         a mesh block or box IC, with 'initiate linear' type. The suggested value
    1673                 :            :         of the front width is about 4-5 times the mesh size inside the mesh block
    1674 [ +  - ][ +  - ]:       1369 :         or box.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1675                 :            : 
    1676                 :            :       keywords.insert({"front_speed", "Specify a front speed",
    1677                 :            :         R"(This keyword is used to specify the speed at which a front propagates
    1678 [ +  - ][ +  - ]:       1369 :         for a mesh block or box IC, with 'initiate linear' type.)", "real"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1679                 :            : 
    1680                 :            :       keywords.insert({"impulse",
    1681                 :            :         "Select the impulse initiation type, for a box/meshblock IC",
    1682                 :            :         R"(This keyword can be used to select the 'impulse' initiation/assignment
    1683                 :            :         type for box initial conditions. It simply assigns the prescribed values
    1684 [ +  - ][ +  - ]:       1369 :         to all mesh points within a configured box at t=0.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1685                 :            : 
    1686                 :            :       keywords.insert({"linear",
    1687                 :            :         "Select the linear initiation type, for a box/meshblock IC",
    1688                 :            :         R"(This keyword is be used to specify the 'linear' initiation parameters
    1689                 :            :         for a particular box or meshblock, as a part of the 'energy_pill'
    1690                 :            :         initialization. Linear initiation uses a linear function in time and space,
    1691                 :            :         configured with an initiation point in space, a constant velocity of the
    1692                 :            :         growing spherical front in time (and space) linearly, and width of the front
    1693                 :            :         and assigns values to mesh points falling within the growing spherical shell
    1694                 :            :         inside a configured box or meshblock. The following keywords are required
    1695                 :            :         in the box/meshblock block if 'linear' is used: 'init_time',
    1696 [ +  - ][ +  - ]:       1369 :         'front_width', 'front_speed')"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1697                 :            : 
    1698                 :            :       // -----------------------------------------------------------------------
    1699                 :            :       // Overset mesh object
    1700                 :            :       // -----------------------------------------------------------------------
    1701                 :            : 
    1702                 :            :       keywords.insert({"mesh",
    1703                 :            :         "Start configuration block assigning a mesh to a solver",
    1704                 :            :         R"(This keyword is used to introduce a mesh block, used to
    1705 [ +  - ][ +  - ]:       1369 :         assign and configure a mesh to a solver.)", "vector block-title"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1706                 :            : 
    1707                 :            :       keywords.insert({"filename", "Set filename",
    1708 [ +  - ][ +  - ]:       1369 :         R"(Set filename, e.g., mesh filename for solver coupling.)", "string"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1709                 :            : 
    1710                 :            :       keywords.insert({"location", "Configure location",
    1711                 :            :         R"(Configure location of a mesh relative to another.)",
    1712 [ +  - ][ +  - ]:       1369 :         "vector of 3 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1713                 :            : 
    1714                 :            :       keywords.insert({"orientation", "Configure orientation",
    1715                 :            :         R"(Configure orientation of a mesh relative to another.)",
    1716 [ +  - ][ +  - ]:       1369 :         "vector of 3 reals"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1717                 :            : 
    1718                 :            :       // -----------------------------------------------------------------------
    1719                 :            :       // pre-configured problems
    1720                 :            :       // -----------------------------------------------------------------------
    1721                 :            : 
    1722                 :            :       keywords.insert({"user_defined",
    1723                 :            :         "Select user-defined specification for a problem",
    1724                 :            :         R"(This keyword is used to select the user-defined specification for an
    1725                 :            :         option. This could be a 'problem' to be solved by a partial differential
    1726                 :            :         equation, but can also be a 'user-defined' mesh velocity specification for
    1727 [ +  - ][ +  - ]:       1369 :         ALE mesh motion.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1728                 :            : 
    1729                 :            :       keywords.insert({"shear_diff",
    1730                 :            :         "Select the shear + diffusion test problem ",
    1731                 :            :         R"(This keyword is used to select the shear diffusion test problem. The
    1732                 :            :         initial and boundary conditions are specified to set up the test problem
    1733                 :            :         suitable to exercise and test the advection and diffusion terms of the
    1734 [ +  - ][ +  - ]:       1369 :         scalar transport equation.)" });
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1735                 :            : 
    1736                 :            :       keywords.insert({"slot_cyl",
    1737                 :            :         "Select Zalesak's slotted cylinder test problem",
    1738                 :            :         R"(This keyword is used to select Zalesak's slotted cylinder test
    1739                 :            :         problem. The initial and boundary conditions are specified to set up the
    1740                 :            :         test problem suitable to exercise and test the advection and diffusion
    1741 [ +  - ][ +  - ]:       1369 :         terms of the scalar transport equation.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1742                 :            : 
    1743                 :            :       keywords.insert({"gauss_hump",
    1744                 :            :         "Select advection of 2D Gaussian hump test problem",
    1745                 :            :         R"(This keyword is used to select the advection of 2D Gaussian hump test
    1746                 :            :         problem. The initial and boundary conditions are specified to set up the
    1747                 :            :         test problem suitable to exercise and test the advection
    1748 [ +  - ][ +  - ]:       1369 :         terms of the scalar transport equation.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1749                 :            : 
    1750                 :            :       keywords.insert({"cyl_advect",
    1751                 :            :         "Select advection of cylinder test problem",
    1752                 :            :         R"(This keyword is used to select the advection of cylinder test
    1753                 :            :         problem. The initial and boundary conditions are specified to set up the
    1754                 :            :         test problem suitable to exercise and test the advection
    1755 [ +  - ][ +  - ]:       1369 :         terms of the scalar transport equation.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1756                 :            : 
    1757                 :            :       keywords.insert({"cyl_vortex",
    1758                 :            :         "Select deformation of cylinder in a vortex test problem",
    1759                 :            :         R"(This keyword is used to select the test problem which deforms a cylinder
    1760                 :            :         in a vortical velocity field. The initial and boundary conditions are
    1761                 :            :         specified to set up the test problem suitable to exercise and test the
    1762 [ +  - ][ +  - ]:       1369 :         advection terms of the scalar transport equation.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1763                 :            : 
    1764                 :            :       keywords.insert({"vortical_flow",
    1765                 :            :         "Select the vortical flow test problem ",
    1766                 :            :         R"(This keyword is used to select the vortical flow test problem. The
    1767                 :            :         purpose of this test problem is to test velocity errors generated by spatial
    1768                 :            :         operators in the presence of 3D vorticity and in particluar the
    1769                 :            :         superposition of planar and vortical flows, analogous to voritcity
    1770                 :            :         stretching. For more details, see Waltz,
    1771                 :            :         et. al, "Manufactured solutions for the three-dimensional Euler equations
    1772                 :            :         with relevance to Inertial Confinement Fusion", Journal of Computational
    1773 [ +  - ][ +  - ]:       1369 :         Physics 267 (2014) 196-209.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1774                 :            : 
    1775                 :            :       keywords.insert({"nl_energy_growth",
    1776                 :            :         "Select the nonlinear energy growth test problem",
    1777                 :            :         R"(This keyword is used to select the nonlinear energy growth test problem.
    1778                 :            :         The purpose of this test problem is to test nonlinear, time dependent energy
    1779                 :            :         growth and the subsequent development of pressure gradients due to coupling
    1780                 :            :         between the internal energy and the equation of state. For more details,
    1781                 :            :         see Waltz, et. al, "Manufactured
    1782                 :            :         solutions for the three-dimensional Euler equations with relevance to
    1783                 :            :         Inertial Confinement Fusion", Journal of Computational Physics 267 (2014)
    1784 [ +  - ][ +  - ]:       1369 :         196-209.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1785                 :            : 
    1786                 :            :       keywords.insert({"rayleigh_taylor",
    1787                 :            :         "Select the Rayleigh-Taylor test problem ",
    1788                 :            :         R"(This keyword is used to select the Rayleigh-Taylor unstable configuration
    1789                 :            :         test problem. The purpose of this test problem is to assess time dependent
    1790                 :            :         fluid motion in the presence of Rayleigh-Taylor unstable conditions, i.e.
    1791                 :            :         opposing density and pressure gradients.
    1792                 :            :         For more details, see Waltz, et. al, "Manufactured solutions for the
    1793                 :            :         three-dimensional Euler equations with relevance to Inertial Confinement
    1794 [ +  - ][ +  - ]:       1369 :         Fusion", Journal of Computational Physics 267 (2014) 196-209.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1795                 :            : 
    1796                 :            :       keywords.insert({"taylor_green",
    1797                 :            :         "Select the Taylor-Green test problem ",
    1798                 :            :         R"(This keyword is used to select the Taylor-Green vortex test problem. The
    1799                 :            :         purpose of this problem is to test time accuracy and the correctness of the
    1800                 :            :         discretization of the viscous term in the Navier-Stokes equation. For more
    1801                 :            :         details on the flow, see G.I. Taylor, A.E.
    1802                 :            :         Green, "Mechanism of the Production of Small Eddies from Large Ones", Proc.
    1803                 :            :         R. Soc. Lond. A 1937 158 499-521; DOI: 10.1098/rspa.1937.0036. Published 3
    1804 [ +  - ][ +  - ]:       1369 :         February 1937.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1805                 :            : 
    1806                 :            :       keywords.insert({"sod_shocktube",
    1807                 :            :         "Select the Sod shock-tube test problem ",
    1808                 :            :         R"(This keyword is used to select the Sod shock-tube test problem. The
    1809                 :            :         purpose of this test problem is to test the correctness of the
    1810                 :            :         approximate Riemann solver and its shock and interface capturing
    1811                 :            :         capabilities. For more details, see
    1812                 :            :         G. A. Sod, "A Survey of Several Finite Difference Methods for Systems of
    1813                 :            :         Nonlinear Hyperbolic Conservation Laws", J. Comput. Phys., 27 (1978)
    1814 [ +  - ][ +  - ]:       1369 :         1–31.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1815                 :            : 
    1816                 :            :       keywords.insert({"rotated_sod_shocktube",
    1817                 :            :         "Select the rotated Sod shock-tube test problem ",
    1818                 :            :         R"(This keyword is used to select the rotated Sod shock-tube test problem.
    1819                 :            :         This the same as Sod shocktube but the geometry is rotated about X, Y, Z
    1820                 :            :         each by 45 degrees (in that order) so that none of the domain boundary align
    1821                 :            :         with any of the coordinate directions. The purpose of this test problem is
    1822                 :            :         to test the correctness of the approximate Riemann solver and its shock and
    1823                 :            :         interface capturing capabilities in an arbitrarily oriented geometry.
    1824                 :            :         For more details on the Sod
    1825                 :            :         problem, see G. A. Sod, "A Survey of Several Finite Difference Methods for
    1826                 :            :         Systems of Nonlinear Hyperbolic Conservation Laws", J. Comput. Phys., 27
    1827 [ +  - ][ +  - ]:       1369 :         (1978) 1–31.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1828                 :            : 
    1829                 :            :       keywords.insert({"shedding_flow",
    1830                 :            :         "Select the Shedding flow test problem ",
    1831                 :            :         R"(This keyword is used to select the Shedding flow test problem. It
    1832                 :            :         describe a quasi-2D inviscid flow over a triangular wedge in tetrahedron
    1833                 :            :         grid. The purpose of this test problem is to test the capability of DG
    1834                 :            :         scheme for retaining the shape of vortices and also different error
    1835                 :            :         indicator behavior for this external flow problem when p-adaptive DG scheme
    1836 [ +  - ][ +  - ]:       1369 :         is applied.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1837                 :            : 
    1838                 :            :       keywords.insert({"sedov_blastwave",
    1839                 :            :         "Select the Sedov blast-wave test problem ",
    1840                 :            :         R"(This keyword is used to select the Sedov blast-wave test problem. The
    1841                 :            :         purpose of this test problem is to test the correctness of the
    1842                 :            :         approximate Riemann solver and its strong shock and interface capturing
    1843 [ +  - ][ +  - ]:       1369 :         capabilities.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1844                 :            : 
    1845                 :            :       keywords.insert({"interface_advection",
    1846                 :            :         "Select the interface advection test problem ",
    1847                 :            :         R"(This keyword is used to select the interface advection test problem.
    1848                 :            :         The purpose of this test problem is to test the well-balancedness of the
    1849                 :            :         multi-material discretization and its interface capturing
    1850 [ +  - ][ +  - ]:       1369 :         capabilities.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1851                 :            : 
    1852                 :            :       keywords.insert({"gauss_hump_compflow",
    1853                 :            :         "Select advection of 2D Gaussian hump test problem",
    1854                 :            :         R"(This keyword is used to select the advection of 2D Gaussian hump test
    1855                 :            :         problem. The initial and boundary conditions are specified to set up the
    1856                 :            :         test problem suitable to exercise and test the advection terms of the
    1857                 :            :         Euler equations. The baseline of the density distribution in this testcase
    1858                 :            :         is 1 instead of 0 in gauss_hump_transport which enables it to be the
    1859 [ +  - ][ +  - ]:       1369 :         regression testcase for p-adaptive DG scheme.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1860                 :            : 
    1861                 :            :       keywords.insert({"waterair_shocktube",
    1862                 :            :         "Select the water-air shock-tube test problem ",
    1863                 :            :         R"(This keyword is used to select the Water-air shock-tube test problem.
    1864                 :            :         The purpose of this test problem is to test the correctness of the
    1865                 :            :         multi-material pressure relaxation procedure and its interface capturing
    1866                 :            :         capabilities. For more details, see
    1867                 :            :         Chiapolino, A., Saurel, R., & Nkonga, B. (2017). Sharpening diffuse
    1868                 :            :         interfaces with compressible fluids on unstructured meshes. Journal of
    1869 [ +  - ][ +  - ]:       1369 :         Computational Physics, 340, 389-417.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1870                 :            : 
    1871                 :            :       keywords.insert({"shock_hebubble",
    1872                 :            :         "Select the shock He-bubble test problem ",
    1873                 :            :         R"(This keyword is used to select the shock He-bubble test problem. The
    1874                 :            :         purpose of this test problem is to test the correctness of the
    1875                 :            :         multi-material algorithm and its shock-interface interaction
    1876                 :            :         capabilities. For more details, see
    1877                 :            :         Quirk, J. J., & Karni, S. (1996). On the dynamics of a shock–bubble
    1878 [ +  - ][ +  - ]:       1369 :         interaction. Journal of Fluid Mechanics, 318, 129-163.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1879                 :            : 
    1880                 :            :       keywords.insert({"underwater_ex",
    1881                 :            :         "Select the underwater explosion test problem ",
    1882                 :            :         R"(This keyword is used to select the underwater explosion test problem.
    1883                 :            :         The purpose of this test problem is to test the correctness of the
    1884                 :            :         multi-material algorithm and its interface capturing capabilities in the
    1885                 :            :         presence of strong shocks and large deformations.
    1886                 :            :         For more details, see
    1887                 :            :         Chiapolino, A., Saurel, R., & Nkonga, B. (2017). Sharpening diffuse
    1888                 :            :         interfaces with compressible fluids on unstructured meshes. Journal of
    1889 [ +  - ][ +  - ]:       1369 :         Computational Physics, 340, 389-417.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1890                 :            : 
    1891                 :            :       keywords.insert({"shockdensity_wave",
    1892                 :            :         "Select the shock-density wave test problem ",
    1893                 :            :         R"(This keyword is used to select the shock-density wave test problem.
    1894                 :            :         THe purpose of this test problem is to assess the accuracy of high order
    1895                 :            :         method in predicting the interaction of a density wave with a shock front.
    1896                 :            :         For more details, see Yu, L., Matthias
    1897                 :            :         I. (2014). Discontinuous Galerkin method for multicomponent chemically
    1898                 :            :         reacting flows and combustion. Journal of Computational Physics, 270,
    1899 [ +  - ][ +  - ]:       1369 :         105-137.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1900                 :            : 
    1901                 :            :       keywords.insert({"equilinterface_advect",
    1902                 :            :         "Select the advection of equilibrium interface problem ",
    1903                 :            :         R"(This keyword is used to select the advection of equilibrium interface
    1904                 :            :         problem. This is a manufactured problem with source terms with nonlinear
    1905                 :            :         solutions near the material interface. Source terms are used to ensure
    1906 [ +  - ][ +  - ]:       1369 :         that the conservation laws are satisfied by the manufactured solution.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1907                 :            : 
    1908                 :            :       keywords.insert({"sinewave_packet",
    1909                 :            :         "Select the advection of sinewave packet problem ",
    1910                 :            :         R"(This keyword is used to select the advection of sinewave packet
    1911 [ +  - ][ +  - ]:       1369 :         problem.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1912                 :            : 
    1913                 :            :       keywords.insert({"richtmyer_meshkov",
    1914                 :            :         "Select the Richtmyer-Meshkov instability problem ",
    1915                 :            :         R"(This keyword is used to select the Richtmyer-Meshkov instability
    1916 [ +  - ][ +  - ]:       1369 :         problem. In this problem, a shock hits a perturbed material interface.)"});
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
    1917                 :            : 
    1918                 :            :       // -----------------------------------------------------------------------
    1919                 :            : 
    1920                 :            :       // Initialize help: fill own keywords
    1921                 :       1369 :       tk::ctr::Info ctrinfoFill(get< tag::cmd, tag::ctrinfo >());
    1922         [ +  + ]:     310763 :       for (const auto& i : keywords) {
    1923         [ +  - ]:     309394 :         ctrinfoFill.fill(i);
    1924                 :            :       }
    1925                 :       1369 :     }
    1926                 :            : 
    1927                 :            :     //! Query scheme centering
    1928                 :            :     //! \return Scheme centering
    1929                 :        195 :     tk::Centering centering() const
    1930         [ +  - ]:        195 :     { return ctr::Scheme().centering( get< tag::scheme >() ); }
    1931                 :            : 
    1932                 :            :     /** @name Pack/Unpack: Serialize InputDeck object for Charm++ */
    1933                 :            :     ///@{
    1934                 :            :     //! \brief Pack/Unpack serialize member function
    1935                 :            :     //! \param[in,out] p Charm++'s PUP::er serializer object reference
    1936                 :       1820 :     void pup( PUP::er& p ) { tk::TaggedTuple< ConfigMembers >::pup(p); }
    1937                 :            :     //! \brief Pack/Unpack serialize operator|
    1938                 :            :     //! \param[in,out] p Charm++'s PUP::er serializer object reference
    1939                 :            :     //! \param[in,out] c InputDeck object reference
    1940                 :       1820 :     friend void operator|( PUP::er& p, InputDeck& c ) { c.pup(p); }
    1941                 :            :     //@}
    1942                 :            : 
    1943                 :            : };
    1944                 :            : 
    1945                 :            : } // ctr::
    1946                 :            : } // inciter::
    1947                 :            : 
    1948                 :            : #endif // InputDeck_h

Generated by: LCOV version 1.14