Quinoa all test code coverage report
Current view: top level - PDE/Integrate - Initialize.hpp (source / functions) Hit Total Coverage
Commit: Quinoa_v0.3-957-gb4f0efae0 Lines: 6 20 30.0 %
Date: 2021-11-11 18:25:50 Functions: 2 4 50.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 2 36 5.6 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/PDE/Integrate/Initialize.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     Functions for initialization of system of PDEs in DG methods
       9                 :            :   \details   This file contains functionality for setting initial conditions
      10                 :            :      and evaluating known solutions used in discontinuous Galerkin methods for
      11                 :            :      various orders of numerical representation.
      12                 :            : */
      13                 :            : // *****************************************************************************
      14                 :            : #ifndef Initialize_h
      15                 :            : #define Initialize_h
      16                 :            : 
      17                 :            : #include "Basis.hpp"
      18                 :            : #include "Types.hpp"
      19                 :            : #include "Fields.hpp"
      20                 :            : #include "UnsMesh.hpp"
      21                 :            : #include "FunctionPrototypes.hpp"
      22                 :            : #include "Inciter/InputDeck/InputDeck.hpp"
      23                 :            : 
      24                 :            : namespace inciter {
      25                 :            : 
      26                 :            : extern ctr::InputDeck g_inputdeck;
      27                 :            : 
      28                 :            : } // inciter::
      29                 :            : 
      30                 :            : namespace tk {
      31                 :            : 
      32                 :            : //! Initalize a PDE system for DG by projecting the exact solution
      33                 :            : //! in the DG solution space
      34                 :            : void
      35                 :            : initialize( ncomp_t system,
      36                 :            :             ncomp_t ncomp,
      37                 :            :             ncomp_t offset,
      38                 :            :             const Fields& L,
      39                 :            :             const std::vector< std::size_t >& inpoel,
      40                 :            :             const UnsMesh::Coords& coord,
      41                 :            :             const InitializeFn& solution,
      42                 :            :             Fields& unk,
      43                 :            :             real t,
      44                 :            :             const std::size_t nielem );
      45                 :            : 
      46                 :            : //! Update the rhs by adding the initial analytical solution term
      47                 :            : void
      48                 :            : update_rhs( ncomp_t ncomp,
      49                 :            :             const std::size_t ndof,
      50                 :            :             const tk::real wt,
      51                 :            :             const std::vector< tk::real >& B,
      52                 :            :             const std::vector< tk::real >& s,
      53                 :            :             std::vector< tk::real >& R );
      54                 :            : 
      55                 :            : 
      56                 :            : //! Compute the initial conditions
      57                 :            : void
      58                 :            : eval_init( ncomp_t ncomp,
      59                 :            :            ncomp_t offset,
      60                 :            :            const std::size_t ndof,
      61                 :            :            const std::size_t rdof,
      62                 :            :            const std::size_t e,
      63                 :            :            const std::vector< tk::real >& R,
      64                 :            :            const Fields& L,
      65                 :            :            Fields& unk );
      66                 :            : 
      67                 :            : template< class eq >
      68                 :            : void
      69                 :        277 : BoxElems( std::size_t system,
      70                 :            :   const tk::Fields& geoElem,
      71                 :            :   std::size_t nielem,
      72                 :            :   std::vector< std::unordered_set< std::size_t > >& inbox )
      73                 :            : // *****************************************************************************
      74                 :            : //! Determine if elements lie inside user defined IC boxes
      75                 :            : //! \tparam eq Equation type to operate on, e.g., tag::compflow, tag::multimat
      76                 :            : //! \param[in] system Equation system index
      77                 :            : //! \param[in] geoElem Element geometry array
      78                 :            : //! \param[in] nielem Number of internal elements
      79                 :            : //! \param[in,out] inbox List of nodes at which box user ICs are set for
      80                 :            : //!    each IC box
      81                 :            : // *****************************************************************************
      82                 :            : {
      83                 :            :   // Detect if user has configured a IC boxes
      84                 :        277 :   const auto& icbox = inciter::g_inputdeck.get<tag::param, eq, tag::ic,
      85                 :            :     tag::box>();
      86         [ +  - ]:        277 :   if (icbox.size() > system) {
      87                 :        277 :     std::size_t bcnt = 0;
      88         [ -  + ]:        277 :     for (const auto& b : icbox[system]) {   // for all boxes for this eq
      89         [ -  - ]:          0 :      inbox.emplace_back();
      90         [ -  - ]:          0 :       std::vector< tk::real > box
      91                 :            :         { b.template get< tag::xmin >(), b.template get< tag::xmax >(),
      92                 :            :           b.template get< tag::ymin >(), b.template get< tag::ymax >(),
      93                 :            :           b.template get< tag::zmin >(), b.template get< tag::zmax >() };
      94                 :            : 
      95                 :          0 :       const auto eps = std::numeric_limits< tk::real >::epsilon();
      96                 :            :       // Determine which elements lie in the IC box
      97         [ -  - ]:          0 :       for (ncomp_t e=0; e<nielem; ++e) {
      98         [ -  - ]:          0 :         auto x = geoElem(e,1,0);
      99         [ -  - ]:          0 :         auto y = geoElem(e,2,0);
     100         [ -  - ]:          0 :         auto z = geoElem(e,3,0);
     101         [ -  - ]:          0 :         if ( std::any_of( begin(box), end(box),
     102                 :          0 :                           [=](auto p){ return abs(p) > eps; } ) &&
     103 [ -  - ][ -  - ]:          0 :              x>box[0] && x<box[1] &&
     104 [ -  - ][ -  - ]:          0 :              y>box[2] && y<box[3] &&
     105 [ -  - ][ -  - ]:          0 :              z>box[4] && z<box[5] )
         [ -  - ][ -  - ]
     106                 :            :         {
     107         [ -  - ]:          0 :           inbox[bcnt].insert( e );
     108                 :            :         }
     109                 :            :       }
     110                 :          0 :       ++bcnt;
     111                 :            :     }
     112                 :            :   }
     113                 :        277 : }
     114                 :            : 
     115                 :            : } // tk::
     116                 :            : 
     117                 :            : #endif // Initialize_h

Generated by: LCOV version 1.14