Quinoa regression test code coverage report
Current view: top level - Main - InciterPrint.hpp (source / functions) Hit Total Coverage
Commit: Quinoa_v0.3-957-gb4f0efae0 Lines: 15 15 100.0 %
Date: 2021-11-11 13:17:06 Functions: 10 10 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 11 22 50.0 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Main/InciterPrint.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-specific pretty printer functionality
       9                 :            :   \details   Inciter-specific pretty printer functionality.
      10                 :            : */
      11                 :            : // *****************************************************************************
      12                 :            : #ifndef InciterPrint_h
      13                 :            : #define InciterPrint_h
      14                 :            : 
      15                 :            : #include <iostream>
      16                 :            : #include <string>
      17                 :            : 
      18                 :            : #include "NoWarning/format.hpp"
      19                 :            : 
      20                 :            : #include "Print.hpp"
      21                 :            : #include "ContainerUtil.hpp"
      22                 :            : #include "Inciter/InputDeck/InputDeck.hpp"
      23                 :            : #include "Inciter/Options/Physics.hpp"
      24                 :            : #include "Inciter/Options/Problem.hpp"
      25                 :            : 
      26                 :            : namespace inciter {
      27                 :            : 
      28                 :            : extern ctr::InputDeck g_inputdeck_defaults;
      29                 :            : extern ctr::InputDeck g_inputdeck;
      30                 :            : 
      31                 :            : //! InciterPrint : tk::Print
      32                 :            : class InciterPrint : public tk::Print {
      33                 :            : 
      34                 :            :   public:
      35                 :            :     //! Constructor
      36                 :            :     //! \param[in] screen Screen output filename
      37                 :            :     //! \param[in,out] str Verbose stream
      38                 :            :     //! \param[in] mode Open mode for screen output file, see
      39                 :            :     //!   http://en.cppreference.com/w/cpp/io/ios_base/openmode
      40                 :            :     //! \param[in,out] qstr Quiet stream
      41                 :            :     //! \see tk::RNGPrint::RNGPrint and tk::Print::Print
      42                 :       2032 :     explicit InciterPrint( const std::string& screen,
      43                 :            :                            std::ostream& str = std::clog,
      44                 :            :                            std::ios_base::openmode mode = std::ios_base::out,
      45                 :       2032 :                            std::ostream& qstr = std::cout ) :
      46                 :       2032 :       Print( screen, str, mode, qstr ) {}
      47                 :            : 
      48                 :            :     //! Print control option: 'group : option'
      49                 :            :     template< typename Option, typename... tags >
      50                 :        636 :     void Item() const {
      51         [ +  - ]:       1272 :       Option opt;
      52                 :       1272 :       m_stream << m_item_name_value_fmt
      53 [ +  - ][ +  - ]:        636 :                   % m_item_indent % opt.group()
      54 [ +  - ][ +  - ]:       1272 :                   % opt.name( g_inputdeck.get< tags... >() );
                 [ +  - ]
      55                 :        636 :     }
      56                 :            : 
      57                 :            :     // Helper class for compact output of PDE policies
      58                 :            :     class Policies {
      59                 :            :       public:
      60                 :            :         // Default constructor
      61                 :            :         explicit Policies() : phys(), prob() {}
      62                 :            :         // Initializer constructor
      63                 :            :         explicit Policies( const std::string& p, const std::string& t ) :
      64                 :            :           phys(p), prob(t) {}
      65                 :            :         // Operator += for adding up two Policies structs
      66                 :            :         Policies& operator+= ( const Policies& p ) {
      67                 :            :           phys += p.phys;
      68                 :            :           prob += p.prob;
      69                 :            :           return *this;
      70                 :            :         }
      71                 :            : 
      72                 :            :       private:
      73                 :            :         // Make all policies unique
      74                 :            :         void unique() { tk::unique( phys ); tk::unique( prob ); }
      75                 :            : 
      76                 :            :         std::string phys;
      77                 :            :         std::string prob;
      78                 :            :     };
      79                 :            : 
      80                 :            :     //! Print equation list with policies
      81                 :            :     //! \param[in] t Section title
      82                 :            :     //! \param[in] factory Factory to get equation data from
      83                 :            :     //! \param[in] ntypes Unique equation types
      84                 :            :     template< class Factory >
      85                 :        466 :     void eqlist( const std::string& t,
      86                 :            :                  const Factory& factory,
      87                 :            :                  std::size_t ntypes ) const
      88                 :            :     {
      89         [ +  - ]:        466 :       if (!factory.empty()) {
      90                 :        466 :         section( t );
      91 [ +  - ][ +  - ]:        466 :         item( "Unique equation types", ntypes );
      92 [ +  - ][ +  - ]:        466 :         item( "With all policy combinations", factory.size() );
      93                 :            :       }
      94                 :        466 :     }
      95                 :            : 
      96                 :            :     //! Print configuration of a stack of partial differential equations
      97                 :            :     void pdes( const std::string& t,
      98                 :            :       const std::vector< std::vector< std::pair< std::string, std::string > > >&
      99                 :            :         info ) const;
     100                 :            : 
     101                 :            :     //! Print out info on solver coupling
     102                 :            :     void couple( const std::vector< Transfer >& transfer,
     103                 :            :                  const std::vector< char >& depvar ) const;
     104                 :            : 
     105                 :            :     //! Print time integration header
     106                 :            :     void inthead( const std::string& t, const std::string& name,
     107                 :            :                   const std::string& legend, const std::string& head ) const;
     108                 :            : 
     109                 :            :     //! Print mesh refinement variables and their indices in the unknown vector
     110                 :            :     void refvar( const std::vector< std::string >& rvar,
     111                 :            :                  const std::vector< std::size_t >& refidx ) const;
     112                 :            : 
     113                 :            :     //! Print initial mesh refinement edge-node pairs
     114                 :            :     void edgeref( const std::vector< std::size_t >& edgenodes ) const;
     115                 :            : 
     116                 :            :   private:
     117                 :            :     //! Return partial differential equation name
     118                 :            :     //! \param[in] key Equation key
     119                 :            :     //! \return Partial differential equation name based on key
     120                 :            :     template< class Key >
     121                 :            :     std::string PDEName ( const Key& key ) const
     122                 :            :     { return ctr::PDE().name( key.template get< tag::pde >() ); }
     123                 :            : };
     124                 :            : 
     125                 :            : } // inciter::
     126                 :            : 
     127                 :            : #endif // InciterPrint_h

Generated by: LCOV version 1.14