Quinoa regression test code coverage report
Current view: top level - Control/Inciter/InputDeck - InputDeck.hpp (source / functions) Hit Total Coverage
Commit: Quinoa_v0.3-957-gb4f0efae0 Lines: 78 78 100.0 %
Date: 2021-11-09 13:40:20 Functions: 8 8 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 26 38 68.4 %

           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 input deck definition
       9                 :            :   \details   This file defines the heterogeneous stack 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 InciterInputDeck_h
      15                 :            : #define InciterInputDeck_h
      16                 :            : 
      17                 :            : #include <limits>
      18                 :            : #include <iomanip>
      19                 :            : #include <iostream>
      20                 :            : 
      21                 :            : #include <brigand/algorithms/for_each.hpp>
      22                 :            : 
      23                 :            : #include "NoWarning/set.hpp"
      24                 :            : 
      25                 :            : #include "Inciter/CmdLine/CmdLine.hpp"
      26                 :            : #include "Inciter/Components.hpp"
      27                 :            : 
      28                 :            : namespace inciter {
      29                 :            : 
      30                 :            : namespace ctr {
      31                 :            : 
      32                 :            : //! Member data for tagged tuple
      33                 :            : using InputDeckMembers = brigand::list<
      34                 :            :     tag::cmd,           CmdLine
      35                 :            :   , tag::title,         kw::title::info::expect::type
      36                 :            :   , tag::selected,      selects
      37                 :            :   , tag::amr,           amr
      38                 :            :   , tag::ale,           ale
      39                 :            :   , tag::pref,          pref
      40                 :            :   , tag::discr,         discretization
      41                 :            :   , tag::prec,          precision
      42                 :            :   , tag::flformat,      floatformat
      43                 :            :   , tag::component,     ncomps
      44                 :            :   , tag::sys,           std::map< tk::ctr::ncomp_t, tk::ctr::ncomp_t >
      45                 :            :   , tag::output,        output_parameters
      46                 :            :   , tag::param,         parameters
      47                 :            :   , tag::couple,        couple
      48                 :            :   , tag::diag,          diagnostics
      49                 :            :   , tag::error,         std::vector< std::string >
      50                 :            :   , tag::history,       history
      51                 :            : >;
      52                 :            : 
      53                 :            : //! \brief InputDeck : Control< specialized to Inciter >, see Types.h,
      54                 :            : //! \details The stack is a tagged tuple, a hierarchical heterogeneous data
      55                 :            : //!    structure where all parsed information is stored.
      56                 :            : //! \see Base/TaggedTuple.h
      57                 :            : //! \see Control/Inciter/Types.h
      58                 :            : class InputDeck : public tk::TaggedTuple< InputDeckMembers > {
      59                 :            : 
      60                 :            :   public:
      61                 :            :     //! \brief Inciter input deck keywords
      62                 :            :     //! \see tk::grm::use and its documentation
      63                 :            :     using keywords = brigand::set< kw::title
      64                 :            :                                  , kw::nstep
      65                 :            :                                  , kw::term
      66                 :            :                                  , kw::t0
      67                 :            :                                  , kw::dt
      68                 :            :                                  , kw::ttyi
      69                 :            :                                  , kw::transport
      70                 :            :                                  , kw::end
      71                 :            :                                  , kw::shear_diff
      72                 :            :                                  , kw::slot_cyl
      73                 :            :                                  , kw::problem
      74                 :            :                                  , kw::field_output
      75                 :            :                                  , kw::refined
      76                 :            :                                  , kw::interval_iter
      77                 :            :                                  , kw::interval_time
      78                 :            :                                  , kw::time_range
      79                 :            :                                  , kw::partitioning
      80                 :            :                                  , kw::algorithm
      81                 :            :                                  , kw::rcb
      82                 :            :                                  , kw::rib
      83                 :            :                                  , kw::hsfc
      84                 :            :                                  , kw::phg
      85                 :            :                                  , kw::inciter
      86                 :            :                                  , kw::ncomp
      87                 :            :                                  , kw::nmat
      88                 :            :                                  , kw::pde_diffusivity
      89                 :            :                                  , kw::pde_lambda
      90                 :            :                                  , kw::pde_u0
      91                 :            :                                  , kw::bc_dirichlet
      92                 :            :                                  , kw::sideset
      93                 :            :                                  , kw::compflow
      94                 :            :                                  , kw::multimat
      95                 :            :                                  , kw::ic
      96                 :            :                                  , kw::box
      97                 :            :                                  , kw::lua
      98                 :            :                                  , kw::materialid
      99                 :            :                                  , kw::mass
     100                 :            :                                  , kw::density
     101                 :            :                                  , kw::velocity
     102                 :            :                                  , kw::position
     103                 :            :                                  , kw::acceleration
     104                 :            :                                  , kw::fntype
     105                 :            :                                  , kw::fn
     106                 :            :                                  , kw::move
     107                 :            :                                  , kw::initiate
     108                 :            :                                  , kw::impulse
     109                 :            :                                  , kw::linear
     110                 :            :                                  , kw::pressure
     111                 :            :                                  , kw::energy
     112                 :            :                                  , kw::energy_content
     113                 :            :                                  , kw::temperature
     114                 :            :                                  , kw::xmin
     115                 :            :                                  , kw::xmax
     116                 :            :                                  , kw::ymin
     117                 :            :                                  , kw::ymax
     118                 :            :                                  , kw::zmin
     119                 :            :                                  , kw::zmax
     120                 :            :                                  , kw::txt_float_format
     121                 :            :                                  , kw::txt_float_default
     122                 :            :                                  , kw::txt_float_fixed
     123                 :            :                                  , kw::txt_float_scientific
     124                 :            :                                  , kw::precision
     125                 :            :                                  , kw::diagnostics
     126                 :            :                                  , kw::history_output
     127                 :            :                                  , kw::mesh
     128                 :            :                                  , kw::filename
     129                 :            :                                  , kw::location
     130                 :            :                                  , kw::orientation
     131                 :            :                                  , kw::reference
     132                 :            :                                  , kw::couple
     133                 :            :                                  , kw::material
     134                 :            :                                  , kw::id
     135                 :            :                                  , kw::eos
     136                 :            :                                  , kw::stiffenedgas
     137                 :            :                                  , kw::jwl
     138                 :            :                                  , kw::mat_gamma
     139                 :            :                                  , kw::mat_pstiff
     140                 :            :                                  , kw::mat_mu
     141                 :            :                                  , kw::mat_cv
     142                 :            :                                  , kw::mat_k
     143                 :            :                                  , kw::npar
     144                 :            :                                  , kw::physics
     145                 :            :                                  , kw::advection
     146                 :            :                                  , kw::advdiff
     147                 :            :                                  , kw::navierstokes
     148                 :            :                                  , kw::euler
     149                 :            :                                  , kw::veleq
     150                 :            :                                  , kw::user_defined
     151                 :            :                                  , kw::vortical_flow
     152                 :            :                                  , kw::pde_alpha
     153                 :            :                                  , kw::pde_beta
     154                 :            :                                  , kw::pde_p0
     155                 :            :                                  , kw::ctau
     156                 :            :                                  , kw::cfl
     157                 :            :                                  , kw::dvcfl
     158                 :            :                                  , kw::vortmult
     159                 :            :                                  , kw::mj
     160                 :            :                                  , kw::elem
     161                 :            :                                  , kw::node
     162                 :            :                                  , kw::depvar
     163                 :            :                                  , kw::outvar
     164                 :            :                                  , kw::outvar_density
     165                 :            :                                  , kw::outvar_xmomentum
     166                 :            :                                  , kw::outvar_ymomentum
     167                 :            :                                  , kw::outvar_zmomentum
     168                 :            :                                  , kw::outvar_specific_total_energy
     169                 :            :                                  , kw::outvar_volumetric_total_energy
     170                 :            :                                  , kw::outvar_xvelocity
     171                 :            :                                  , kw::outvar_yvelocity
     172                 :            :                                  , kw::outvar_zvelocity
     173                 :            :                                  , kw::outvar_pressure
     174                 :            :                                  , kw::outvar_material_indicator
     175                 :            :                                  , kw::outvar_analytic
     176                 :            :                                  , kw::nl_energy_growth
     177                 :            :                                  , kw::pde_betax
     178                 :            :                                  , kw::pde_betay
     179                 :            :                                  , kw::pde_betaz
     180                 :            :                                  , kw::pde_ce
     181                 :            :                                  , kw::pde_kappa
     182                 :            :                                  , kw::pde_r0
     183                 :            :                                  , kw::rayleigh_taylor
     184                 :            :                                  , kw::taylor_green
     185                 :            :                                  , kw::filetype
     186                 :            :                                  , kw::exodusii
     187                 :            :                                  , kw::root
     188                 :            :                                  , kw::error
     189                 :            :                                  , kw::l2
     190                 :            :                                  , kw::linf
     191                 :            :                                  , kw::fct
     192                 :            :                                  , kw::fctclip
     193                 :            :                                  , kw::fcteps
     194                 :            :                                  , kw::sysfct
     195                 :            :                                  , kw::sysfctvar
     196                 :            :                                  , kw::pelocal_reorder
     197                 :            :                                  , kw::operator_reorder
     198                 :            :                                  , kw::steady_state
     199                 :            :                                  , kw::residual
     200                 :            :                                  , kw::rescomp
     201                 :            :                                  , kw::amr
     202                 :            :                                  , kw::ale
     203                 :            :                                  , kw::smoother
     204                 :            :                                  , kw::laplace
     205                 :            :                                  , kw::helmholtz
     206                 :            :                                  , kw::meshvelocity
     207                 :            :                                  , kw::meshvel_maxit
     208                 :            :                                  , kw::meshvel_tolerance
     209                 :            :                                  , kw::mesh_motion
     210                 :            :                                  , kw::meshforce
     211                 :            :                                  , kw::none
     212                 :            :                                  , kw::sine
     213                 :            :                                  , kw::fluid
     214                 :            :                                  , kw::amr_t0ref
     215                 :            :                                  , kw::amr_dtref
     216                 :            :                                  , kw::amr_dtref_uniform
     217                 :            :                                  , kw::amr_dtfreq
     218                 :            :                                  , kw::amr_initial
     219                 :            :                                  , kw::amr_uniform
     220                 :            :                                  , kw::amr_uniform_derefine
     221                 :            :                                  , kw::amr_initial_conditions
     222                 :            :                                  , kw::amr_coords
     223                 :            :                                  , kw::amr_error
     224                 :            :                                  , kw::amr_jump
     225                 :            :                                  , kw::amr_hessian
     226                 :            :                                  , kw::amr_refvar
     227                 :            :                                  , kw::amr_tolref
     228                 :            :                                  , kw::amr_tolderef
     229                 :            :                                  , kw::amr_edgelist
     230                 :            :                                  , kw::amr_xminus
     231                 :            :                                  , kw::amr_xplus
     232                 :            :                                  , kw::amr_yminus
     233                 :            :                                  , kw::amr_yplus
     234                 :            :                                  , kw::amr_zminus
     235                 :            :                                  , kw::amr_zplus
     236                 :            :                                  , kw::pref
     237                 :            :                                  , kw::pref_indicator
     238                 :            :                                  , kw::pref_spectral_decay
     239                 :            :                                  , kw::pref_non_conformity
     240                 :            :                                  , kw::pref_ndofmax
     241                 :            :                                  , kw::pref_tolref
     242                 :            :                                  , kw::scheme
     243                 :            :                                  , kw::diagcg
     244                 :            :                                  , kw::alecg
     245                 :            :                                  , kw::dg
     246                 :            :                                  , kw::p0p1
     247                 :            :                                  , kw::dgp1
     248                 :            :                                  , kw::dgp2
     249                 :            :                                  , kw::pdg
     250                 :            :                                  , kw::flux
     251                 :            :                                  , kw::laxfriedrichs
     252                 :            :                                  , kw::hllc
     253                 :            :                                  , kw::upwind
     254                 :            :                                  , kw::ausm
     255                 :            :                                  , kw::hll
     256                 :            :                                  , kw::limiter
     257                 :            :                                  , kw::cweight
     258                 :            :                                  , kw::nolimiter
     259                 :            :                                  , kw::wenop1
     260                 :            :                                  , kw::superbeep1
     261                 :            :                                  , kw::vertexbasedp1
     262                 :            :                                  , kw::prelax
     263                 :            :                                  , kw::prelax_timescale
     264                 :            :                                  , kw::intsharp
     265                 :            :                                  , kw::intsharp_param
     266                 :            :                                  , kw::bc_sym
     267                 :            :                                  , kw::bc_inlet
     268                 :            :                                  , kw::bc_outlet
     269                 :            :                                  , kw::bc_farfield
     270                 :            :                                  , kw::bc_extrapolate
     271                 :            :                                  , kw::bc_timedep
     272                 :            :                                  , kw::bc_stag
     273                 :            :                                  , kw::bc_skip
     274                 :            :                                  , kw::sponge
     275                 :            :                                  , kw::point
     276                 :            :                                  , kw::radius
     277                 :            :                                  , kw::gauss_hump
     278                 :            :                                  , kw::rotated_sod_shocktube
     279                 :            :                                  , kw::cyl_advect
     280                 :            :                                  , kw::cyl_vortex
     281                 :            :                                  , kw::shedding_flow
     282                 :            :                                  , kw::sod_shocktube
     283                 :            :                                  , kw::sedov_blastwave
     284                 :            :                                  , kw::interface_advection
     285                 :            :                                  , kw::gauss_hump_compflow
     286                 :            :                                  , kw::waterair_shocktube
     287                 :            :                                  , kw::shock_hebubble
     288                 :            :                                  , kw::underwater_ex >;
     289                 :            : 
     290                 :            :     //! Set of tags to ignore when printing this InputDeck
     291                 :            :     using ignore = CmdLine::ignore;
     292                 :            : 
     293                 :            :     //! \brief Constructor: set defaults
     294                 :            :     //! \param[in] cl Previously parsed and store command line
     295                 :            :     //! \details Anything not set here is initialized by the compiler using the
     296                 :            :     //!   default constructor for the corresponding type.
     297                 :       1565 :     explicit InputDeck( const CmdLine& cl = {} ) {
     298                 :            :       // Set previously parsed command line
     299                 :            :       get< tag::cmd >() = cl;
     300                 :            :       // Default discretization parameters
     301                 :       1565 :       get< tag::discr, tag::nstep >() =
     302                 :            :          std::numeric_limits< kw::nstep::info::expect::type >::max();
     303                 :       1565 :       get< tag::discr, tag::term >() =
     304                 :            :          std::numeric_limits< kw::term::info::expect::type >::max();
     305                 :       1565 :       get< tag::discr, tag::t0 >() = 0.0;
     306                 :       1565 :       get< tag::discr, tag::dt >() = 0.0;
     307                 :       1565 :       get< tag::discr, tag::cfl >() = 0.0;
     308                 :       1565 :       get< tag::discr, tag::fct >() = true;
     309                 :       1565 :       get< tag::discr, tag::fctclip >() = false;
     310                 :       1565 :       get< tag::discr, tag::ctau >() = 1.0;
     311                 :       1565 :       get< tag::discr, tag::fcteps >() =
     312                 :            :         std::numeric_limits< tk::real >::epsilon();
     313                 :       1565 :       get< tag::discr, tag::pelocal_reorder >() = false;
     314                 :       1565 :       get< tag::discr, tag::operator_reorder >() = false;
     315                 :       1565 :       get< tag::discr, tag::steady_state >() = false;
     316                 :       1565 :       get< tag::discr, tag::residual >() = 1.0e-8;
     317                 :       1565 :       get< tag::discr, tag::rescomp >() = 1;
     318                 :       1565 :       get< tag::discr, tag::scheme >() = SchemeType::DiagCG;
     319                 :       1565 :       get< tag::discr, tag::ndof >() = 1;
     320                 :       1565 :       get< tag::discr, tag::limiter >() = LimiterType::NOLIMITER;
     321                 :       1565 :       get< tag::discr, tag::cweight >() = 1.0;
     322                 :            :       get< tag::discr, tag::ndof >() = 1;
     323                 :       1565 :       get< tag::discr, tag::rdof >() = 1;
     324                 :            :       // Default field output file type
     325                 :       1565 :       get< tag::selected, tag::filetype >() = tk::ctr::FieldFileType::EXODUSII;
     326                 :            :       // Default AMR settings
     327                 :       1565 :       get< tag::amr, tag::amr >() = false;
     328                 :       1565 :       get< tag::amr, tag::t0ref >() = false;
     329                 :       1565 :       get< tag::amr, tag::dtref >() = false;
     330                 :       1565 :       get< tag::amr, tag::dtref_uniform >() = false;
     331                 :       1565 :       get< tag::amr, tag::dtfreq >() = 3;
     332                 :       1565 :       get< tag::amr, tag::error >() = AMRErrorType::JUMP;
     333                 :       1565 :       get< tag::amr, tag::tolref >() = 0.2;
     334                 :       1565 :       get< tag::amr, tag::tolderef >() = 0.05;
     335                 :            :       auto rmax =
     336                 :            :         std::numeric_limits< kw::amr_xminus::info::expect::type >::max() / 100;
     337                 :       1565 :       get< tag::amr, tag::xminus >() = rmax;
     338                 :       1565 :       get< tag::amr, tag::xplus >() = -rmax;
     339                 :       1565 :       get< tag::amr, tag::yminus >() = rmax;
     340                 :       1565 :       get< tag::amr, tag::yplus >() = -rmax;
     341                 :       1565 :       get< tag::amr, tag::zminus >() = rmax;
     342                 :       1565 :       get< tag::amr, tag::zplus >() = -rmax;
     343                 :            :       // Default ALE settings
     344                 :       1565 :       get< tag::ale, tag::ale >() = false;
     345                 :       1565 :       get< tag::ale, tag::smoother >() = MeshVelocitySmootherType::NONE;
     346                 :       1565 :       get< tag::ale, tag::dvcfl >() = 0.0;
     347                 :       1565 :       get< tag::ale, tag::vortmult >() = 0.0;
     348                 :       1565 :       get< tag::ale, tag::maxit >() = 5;
     349                 :       1565 :       get< tag::ale, tag::tolerance >() = 1.0e-2;
     350                 :            :       // Default p-refinement settings
     351                 :       1565 :       get< tag::pref, tag::pref >() = false;
     352                 :       1565 :       get< tag::pref, tag::indicator >() = PrefIndicatorType::SPECTRAL_DECAY;
     353                 :       1565 :       get< tag::pref, tag::ndofmax >() = 10;
     354                 :       1565 :       get< tag::pref, tag::tolref >() = 0.5;
     355                 :            :       // Default txt floating-point output precision in digits
     356                 :       1565 :       get< tag::prec, tag::diag >() = std::cout.precision();
     357                 :       1565 :       get< tag::prec, tag::history >() = std::cout.precision();
     358                 :            :       // Default intervals
     359                 :       1565 :       get< tag::output, tag::iter, tag::tty >() = 1;
     360                 :       1565 :       get< tag::output, tag::iter, tag::diag >() = 1;
     361                 :       1565 :       get< tag::output, tag::iter, tag::field >() =
     362                 :            :         std::numeric_limits< kw::interval_iter::info::expect::type >::max();
     363         [ +  - ]:       1565 :       get< tag::output, tag::iter, tag::history >() =
     364                 :            :         std::numeric_limits< kw::interval_iter::info::expect::type >::max();
     365                 :            :       // Initialize help: fill own keywords
     366                 :            :       const auto& ctrinfoFill = tk::ctr::Info( get< tag::cmd, tag::ctrinfo >() );
     367                 :       1565 :       brigand::for_each< keywords >( ctrinfoFill );
     368                 :       1565 :     }
     369                 :            : 
     370                 :            :     /** @name Pack/Unpack: Serialize InputDeck object for Charm++ */
     371                 :            :     ///@{
     372                 :            :     //! \brief Pack/Unpack serialize member function
     373                 :            :     //! \param[in,out] p Charm++'s PUP::er serializer object reference
     374                 :            :     void pup( PUP::er& p ) { tk::TaggedTuple< InputDeckMembers >::pup(p); }
     375                 :            :     //! \brief Pack/Unpack serialize operator|
     376                 :            :     //! \param[in,out] p Charm++'s PUP::er serializer object reference
     377                 :            :     //! \param[in,out] i InputDeck object reference
     378                 :            :     friend void operator|( PUP::er& p, InputDeck& i ) { i.pup(p); }
     379                 :            :     //@}
     380                 :            : 
     381                 :            :     //! Extract surface side set ids along which user wants to save solution
     382                 :            :     //! \return Unique set of surface side set ids along which user wants to
     383                 :            :     //!   save solution field variables
     384                 :            :     //! \note This returns an ordered set so the order of the set ids are
     385                 :            :     //!   always the same.
     386                 :       9056 :     std::set< int > outsets() const {
     387                 :            :       std::set< int > ids;
     388         [ +  + ]:       9372 :       for (const auto& s : get< tag::cmd, tag::io, tag::surface >()) {
     389         [ +  - ]:        632 :         std::stringstream conv( s );
     390                 :            :         int num;
     391         [ +  - ]:        316 :         conv >> num;
     392                 :            :         ids.insert( num );
     393                 :            :       }
     394                 :       9056 :       return ids;
     395                 :            :     }
     396                 :            : 
     397                 :            :     //! Extract field output variable names the user wants to save
     398                 :            :     //! \param[in] c Extract variables only with this centering
     399                 :            :     //! \return Unique set of field output variable names user wants
     400                 :            :     //! \note This returns an ordered set so the order of the variable names
     401                 :            :     //!   are alphabetical and unique.
     402                 :        466 :     std::set< OutVar > outvars( tk::Centering c ) const {
     403                 :            :       std::set< OutVar > vars;
     404         [ +  + ]:       2140 :       for (const auto& v : get< tag::cmd, tag::io, tag::outvar >()) {
     405         [ +  + ]:       1674 :         if (v.centering == c) vars.insert( v );
     406                 :            :       }
     407                 :        466 :       return vars;
     408                 :            :     }
     409                 :            : 
     410                 :            :     //! Extract field output variable names and aliases the user configured
     411                 :            :     //! \return Map of field output variable names and alias for all
     412                 :            :     //!    output variables the user configured
     413                 :        233 :     std::map< std::string, std::string > outvar_aliases() const {
     414                 :            :       std::map< std::string, std::string > aliases;
     415         [ +  + ]:       1070 :       for (const auto& v : get< tag::cmd, tag::io, tag::outvar >())
     416         [ +  + ]:        837 :          if (!v.alias.empty()) {
     417         [ +  - ]:        658 :            std::stringstream s;
     418         [ +  - ]:        658 :            s << v;
     419 [ +  - ][ +  - ]:       1316 :            aliases[ s.str() ] = v.alias;
     420                 :            :          }
     421                 :        233 :       return aliases;
     422                 :            :     }
     423                 :            : 
     424                 :            :     //! Extract list of mesh filenames (each assigned to a solver)
     425         [ +  - ]:        233 :     std::vector< std::string > mesh() const {
     426                 :            :       using PDETypes = parameters::Keys;
     427                 :            :       std::vector< std::string > meshes;
     428                 :            :       brigand::for_each< PDETypes >( Meshes( *this, meshes ) );
     429                 :        233 :       return meshes;
     430                 :            :     }
     431                 :            : 
     432                 :            :     //! Extract list of dependent variables (each configuring a solver)
     433         [ +  - ]:        233 :     std::vector< char > depvar() const {
     434                 :            :       using PDETypes = parameters::Keys;
     435                 :            :       std::vector< char > depvar;
     436                 :            :       brigand::for_each< PDETypes >( Depvar( *this, depvar ) );
     437                 :        233 :       return depvar;
     438                 :            :     }
     439                 :            : 
     440                 :            :     //! Query special point BC configuration
     441                 :            :     //! \tparam eq PDE type to query
     442                 :            :     //! \tparam sbc Special BC type to query, e.g., stagnation, skip
     443                 :            :     //! \param[in] system Equation system id
     444                 :            :     //! \return Vectors configuring the special points and their radii
     445                 :            :     template< class eq, class sbc >
     446                 :            :     std::tuple< std::vector< tk::real >, std::vector< tk::real > >
     447         [ +  + ]:        322 :     specialBC( std::size_t system ) {
     448                 :            :       const auto& bcspec = get< tag::param, eq, sbc >();
     449                 :            :       const auto& point = bcspec.template get< tag::point >();
     450                 :            :       const auto& radius = bcspec.template get< tag::radius >();
     451                 :            :       std::vector< tk::real > pnt;
     452                 :            :       std::vector< tk::real > rad;
     453 [ +  + ][ +  - ]:        322 :       if (point.size() > system && radius.size() > system) {
     454         [ +  - ]:         12 :         pnt = point[ system ];
     455         [ +  - ]:         12 :         rad = radius[ system ];
     456                 :            :       }
     457                 :            :       Assert( pnt.size() == 3*rad.size(), "Size mismatch" );
     458                 :        322 :       return { std::move(pnt), std::move(rad) };
     459                 :            :     }
     460                 :            : 
     461                 :            :   private:
     462                 :            :     //! Function object to extract the mesh filenames assigned to solvers
     463                 :            :     //! \details This is instantiated for all PDE types at compile time. It goes
     464                 :            :     //!   through all configured solvers (equation system configuration blocks)
     465                 :            :     //!   and builds a list of all mesh filenames associated to all solvers in
     466                 :            :     //!   the input file.
     467                 :            :     struct Meshes {
     468                 :            :       const InputDeck& inputdeck;
     469                 :            :       std::vector< std::string >& filenames;
     470                 :            :       explicit Meshes( const InputDeck& i, std::vector< std::string >& f )
     471                 :            :         : inputdeck(i), filenames(f) {}
     472                 :            :       template< typename eq > void operator()( brigand::type_<eq> ) {
     473                 :            :         const auto& eq_mesh_filename =
     474                 :            :            inputdeck.get< tag::param, eq, tag::mesh, tag::filename >();
     475                 :            :         for (const auto& f : eq_mesh_filename) filenames.push_back( f );
     476                 :            :       }
     477                 :            :     };
     478                 :            : 
     479                 :            :     //! Function object to extract the dependent variables assigned to solvers
     480                 :            :     //! \details This is instantiated for all PDE types at compile time. It goes
     481                 :            :     //!   through all configured solvers (equation system configuration blocks)
     482                 :            :     //!   and builds a list of all dependent variables associated to all solvers
     483                 :            :     //!   in the input file.
     484                 :            :     struct Depvar {
     485                 :            :       const InputDeck& inputdeck;
     486                 :            :       std::vector< char >& depvar;
     487                 :            :       explicit Depvar( const InputDeck& i, std::vector< char >& d ) :
     488                 :            :         inputdeck(i), depvar(d) {}
     489                 :            :       template< typename eq > void operator()( brigand::type_<eq> ) {
     490                 :            :         const auto& eq_depvar = inputdeck.get< tag::param, eq, tag::depvar >();
     491                 :            :         for (const auto& d : eq_depvar) depvar.push_back( d );
     492                 :            :       }
     493                 :            :     };
     494                 :            : };
     495                 :            : 
     496                 :            : } // ctr::
     497                 :            : } // inciter::
     498                 :            : 
     499                 :            : #endif // InciterInputDeck_h

Generated by: LCOV version 1.14