LCOV - code coverage report
Current view: top level - src/Field - Field.hpp (source / functions) Coverage Total Hit
Test: report.info Lines: 89.7 % 29 26
Test Date: 2025-05-21 12:05:18 Functions: 66.7 % 126 84
Branches: 75.0 % 12 9

             Branch data     Line data    Source code
       1                 :             : //
       2                 :             : // Class Field
       3                 :             : //   BareField with a mesh and configurable boundary conditions
       4                 :             : //
       5                 :             : //
       6                 :             : 
       7                 :             : namespace ippl {
       8                 :             :     namespace detail {
       9                 :             :         template <typename T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      10                 :             :         struct isExpression<Field<T, Dim, Mesh, Centering, ViewArgs...>> : std::true_type {};
      11                 :             :     }  // namespace detail
      12                 :             : 
      13                 :             :     //////////////////////////////////////////////////////////////////////////
      14                 :             :     // A default constructor, which should be used only if the user calls the
      15                 :             :     // 'initialize' function before doing anything else.  There are no special
      16                 :             :     // checks in the rest of the Field methods to check that the Field has
      17                 :             :     // been properly initialized
      18                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      19                 :          24 :     Field<T, Dim, Mesh, Centering, ViewArgs...>::Field()
      20                 :             :         : BareField_t()
      21                 :          24 :         , mesh_m(nullptr)
      22         [ +  + ]:          28 :         , bc_m() {}
      23                 :             : 
      24                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      25                 :             :     Field<T, Dim, Mesh, Centering, ViewArgs...>
      26                 :          12 :     Field<T, Dim, Mesh, Centering, ViewArgs...>::deepCopy() const {
      27                 :          12 :         Field<T, Dim, Mesh, Centering, ViewArgs...> copy(*mesh_m, this->getLayout(),
      28                 :             :                                                          this->getNghost());
      29         [ +  - ]:          12 :         Kokkos::deep_copy(copy.getView(), this->getView());
      30                 :             : 
      31                 :          12 :         return copy;
      32                 :           0 :     }
      33                 :             : 
      34                 :             :     //////////////////////////////////////////////////////////////////////////
      35                 :             :     // Constructors which include a Mesh object as argument
      36                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      37                 :         528 :     Field<T, Dim, Mesh, Centering, ViewArgs...>::Field(Mesh_t& m, Layout_t& l, int nghost)
      38                 :             :         : BareField_t(l, nghost)
      39                 :         528 :         , mesh_m(&m) {
      40         [ +  + ]:        4048 :         for (unsigned int face = 0; face < 2 * Dim; ++face) {
      41                 :        3520 :             bc_m[face] =
      42         [ +  - ]:        7040 :                 std::make_shared<NoBcFace<Field<T, Dim, Mesh, Centering, ViewArgs...>>>(face);
      43                 :             :         }
      44                 :         528 :     }
      45                 :             : 
      46                 :             :     //////////////////////////////////////////////////////////////////////////
      47                 :             :     // Initialize the Field, also specifying a mesh
      48                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      49                 :          24 :     void Field<T, Dim, Mesh, Centering, ViewArgs...>::initialize(Mesh_t& m, Layout_t& l,
      50                 :             :                                                                  int nghost) {
      51                 :          24 :         BareField_t::initialize(l, nghost);
      52                 :          24 :         mesh_m = &m;
      53         [ +  + ]:         192 :         for (unsigned int face = 0; face < 2 * Dim; ++face) {
      54                 :         168 :             bc_m[face] =
      55         [ +  - ]:         336 :                 std::make_shared<NoBcFace<Field<T, Dim, Mesh, Centering, ViewArgs...>>>(face);
      56                 :             :         }
      57                 :          24 :     }
      58                 :             : 
      59                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      60                 :          24 :     T Field<T, Dim, Mesh, Centering, ViewArgs...>::getVolumeIntegral() const {
      61                 :          24 :         typename Mesh::value_type dV = mesh_m->getCellVolume();
      62                 :          24 :         return this->sum() * dV;
      63                 :             :     }
      64                 :             : 
      65                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      66                 :           0 :     T Field<T, Dim, Mesh, Centering, ViewArgs...>::getVolumeAverage() const {
      67                 :           0 :         return getVolumeIntegral() / mesh_m->getMeshVolume();
      68                 :             :     }
      69                 :             : 
      70                 :             :     template <class T, unsigned Dim, class Mesh, class Centering, class... ViewArgs>
      71                 :          48 :     void Field<T, Dim, Mesh, Centering, ViewArgs...>::updateLayout(Layout_t& l, int nghost) {
      72                 :          48 :         BareField_t::updateLayout(l, nghost);
      73                 :          48 :     }
      74                 :             : 
      75                 :             : }  // namespace ippl
        

Generated by: LCOV version 2.0-1