Walker test code coverage report
Current view: top level - Control/Walker/Options - DiffEq.hpp (source / functions) Hit Total Coverage
Commit: test_coverage.info Lines: 35 36 97.2 %
Date: 2022-09-21 18:57:21 Functions: 2 2 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 42 84 50.0 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Control/Walker/Options/DiffEq.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     Differential equation options and associations for walker
       9                 :            :   \details   Differential equation options and associations for walker
      10                 :            : */
      11                 :            : // *****************************************************************************
      12                 :            : #ifndef WalkerDiffEqOptions_h
      13                 :            : #define WalkerDiffEqOptions_h
      14                 :            : 
      15                 :            : #include <brigand/sequences/list.hpp>
      16                 :            : 
      17                 :            : #include "TaggedTuple.hpp"
      18                 :            : #include "Toggle.hpp"
      19                 :            : #include "Keywords.hpp"
      20                 :            : #include "Walker/Options/InitPolicy.hpp"
      21                 :            : #include "Walker/Options/CoeffPolicy.hpp"
      22                 :            : 
      23                 :            : namespace walker {
      24                 :            : namespace ctr {
      25                 :            : 
      26                 :            : //! Differential equation types
      27                 :            : enum class DiffEqType : uint8_t { NO_DIFFEQ=0,
      28                 :            :                                   OU,
      29                 :            :                                   DIAG_OU,
      30                 :            :                                   SKEWNORMAL,
      31                 :            :                                   GAMMA,
      32                 :            :                                   BETA,
      33                 :            :                                   NUMFRACBETA,
      34                 :            :                                   MASSFRACBETA,
      35                 :            :                                   MIXNUMFRACBETA,
      36                 :            :                                   MIXMASSFRACBETA,
      37                 :            :                                   DIRICHLET,
      38                 :            :                                   MIXDIRICHLET,
      39                 :            :                                   GENDIR,
      40                 :            :                                   WRIGHTFISHER,
      41                 :            :                                   POSITION,
      42                 :            :                                   DISSIPATION,
      43                 :            :                                   VELOCITY };
      44                 :            : 
      45                 :            : //! Pack/Unpack: forward overload to generic enum class packer
      46                 :        422 : inline void operator|( PUP::er& p, DiffEqType& e ) { PUP::pup( p, e ); }
      47                 :            : 
      48                 :            : //! Differential equation key used to access a diff eq in a factory
      49                 :            : using DiffEqKey =
      50                 :            :   tk::TaggedTuple< brigand::list<
      51                 :            :     tag::diffeq,      DiffEqType
      52                 :            :   , tag::initpolicy,  ctr::InitPolicyType
      53                 :            :   , tag::coeffpolicy, ctr::CoeffPolicyType
      54                 :            : > >;
      55                 :            : 
      56                 :            : //! Class with base templated on the above enum class with associations
      57                 :            : class DiffEq : public tk::Toggle< DiffEqType > {
      58                 :            : 
      59                 :            :   public:
      60                 :            :     // List valid expected choices to make them also available at compile-time
      61                 :            :     using keywords = brigand::list< kw::ornstein_uhlenbeck
      62                 :            :                                   , kw::diag_ou
      63                 :            :                                   , kw::skewnormal
      64                 :            :                                   , kw::gamma
      65                 :            :                                   , kw::beta
      66                 :            :                                   , kw::numfracbeta
      67                 :            :                                   , kw::massfracbeta
      68                 :            :                                   , kw::mixnumfracbeta
      69                 :            :                                   , kw::mixmassfracbeta
      70                 :            :                                   , kw::dirichlet
      71                 :            :                                   , kw::mixdirichlet
      72                 :            :                                   , kw::gendir
      73                 :            :                                   , kw::wrightfisher
      74                 :            :                                   , kw::position
      75                 :            :                                   , kw::dissipation
      76                 :            :                                   , kw::velocity
      77                 :            :                                   >;
      78                 :            : 
      79                 :            :     //! Constructor: pass associations references to base, which will handle
      80                 :            :     //! class-user interactions
      81                 :      19554 :     explicit DiffEq() :
      82                 :            :       tk::Toggle< DiffEqType >( "Differential equation",
      83                 :            :         //! Enums -> names
      84                 :          0 :         { { DiffEqType::NO_DIFFEQ, "n/a" },
      85         [ +  - ]:      19554 :           { DiffEqType::OU, kw::ornstein_uhlenbeck::name() },
      86         [ +  - ]:      39108 :           { DiffEqType::DIAG_OU, kw::diag_ou::name() },
      87         [ +  - ]:      39108 :           { DiffEqType::SKEWNORMAL, kw::skewnormal::name() },
      88         [ +  - ]:      39108 :           { DiffEqType::GAMMA, kw::gamma::name() },
      89         [ +  - ]:      39108 :           { DiffEqType::BETA, kw::beta::name() },
      90         [ +  - ]:      39108 :           { DiffEqType::NUMFRACBETA, kw::numfracbeta::name() },
      91         [ +  - ]:      39108 :           { DiffEqType::MASSFRACBETA, kw::massfracbeta::name() },
      92         [ +  - ]:      39108 :           { DiffEqType::MIXNUMFRACBETA, kw::mixnumfracbeta::name() },
      93         [ +  - ]:      39108 :           { DiffEqType::MIXMASSFRACBETA, kw::mixmassfracbeta::name() },
      94         [ +  - ]:      39108 :           { DiffEqType::DIRICHLET, kw::dirichlet::name() },
      95         [ +  - ]:      39108 :           { DiffEqType::MIXDIRICHLET, kw::mixdirichlet::name() },
      96         [ +  - ]:      39108 :           { DiffEqType::GENDIR, kw::gendir::name() },
      97         [ +  - ]:      39108 :           { DiffEqType::WRIGHTFISHER, kw::wrightfisher::name() },
      98         [ +  - ]:      39108 :           { DiffEqType::POSITION, kw::position::name() },
      99         [ +  - ]:      39108 :           { DiffEqType::DISSIPATION, kw::dissipation::name() },
     100         [ +  - ]:      39108 :           { DiffEqType::VELOCITY, kw::velocity::name() } },
     101                 :            :         //! keywords -> Enums
     102                 :      39108 :         { { "no_diffeq", DiffEqType::NO_DIFFEQ },
     103         [ +  - ]:      19554 :           { kw::ornstein_uhlenbeck::string(), DiffEqType::OU },
     104         [ +  - ]:      39108 :           { kw::diag_ou::string(), DiffEqType::DIAG_OU },
     105         [ +  - ]:      39108 :           { kw::skewnormal::string(), DiffEqType::SKEWNORMAL },
     106         [ +  - ]:      39108 :           { kw::gamma::string(), DiffEqType::GAMMA },
     107         [ +  - ]:      39108 :           { kw::beta::string(), DiffEqType::BETA },
     108         [ +  - ]:      39108 :           { kw::numfracbeta::string(), DiffEqType::NUMFRACBETA },
     109         [ +  - ]:      39108 :           { kw::massfracbeta::string(), DiffEqType::MASSFRACBETA },
     110         [ +  - ]:      39108 :           { kw::mixnumfracbeta::string(), DiffEqType::MIXNUMFRACBETA },
     111         [ +  - ]:      39108 :           { kw::mixmassfracbeta::string(), DiffEqType::MIXMASSFRACBETA },
     112         [ +  - ]:      39108 :           { kw::dirichlet::string(), DiffEqType::DIRICHLET },
     113         [ +  - ]:      39108 :           { kw::mixdirichlet::string(), DiffEqType::MIXDIRICHLET },
     114         [ +  - ]:      39108 :           { kw::gendir::string(), DiffEqType::GENDIR },
     115         [ +  - ]:      39108 :           { kw::wrightfisher::string(), DiffEqType::WRIGHTFISHER },
     116         [ +  - ]:      39108 :           { kw::position::string(), DiffEqType::POSITION },
     117         [ +  - ]:      39108 :           { kw::dissipation::string(), DiffEqType::DISSIPATION },
     118 [ +  - ][ +  - ]:    1329672 :           { kw::velocity::string(), DiffEqType::VELOCITY } } ) {}
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  + ]
         [ +  + ][ -  - ]
                 [ -  - ]
     119                 :            : };
     120                 :            : 
     121                 :            : } // ctr::
     122                 :            : } // walker::
     123                 :            : 
     124                 :            : #endif // WalkerDiffEqOptions_h

Generated by: LCOV version 1.14