LCOV - code coverage report
Current view: top level - src/kokkos/materials - KokkosMaterialBase.K (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 6f668f Lines: 54 55 98.2 %
Date: 2025-09-22 20:01:15 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://www.mooseframework.org
       3             : //*
       4             : //* All rights reserved, see COPYRIGHT for full restrictions
       5             : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
       6             : //*
       7             : //* Licensed under LGPL 2.1, please see LICENSE for details
       8             : //* https://www.gnu.org/licenses/lgpl-2.1.html
       9             : 
      10             : #include "KokkosMaterialBase.h"
      11             : 
      12             : #include "FEProblemBase.h"
      13             : 
      14             : namespace Moose
      15             : {
      16             : namespace Kokkos
      17             : {
      18             : 
      19             : InputParameters
      20      128754 : MaterialBase::validParams()
      21             : {
      22      128754 :   InputParameters params = ::MaterialBase::validParams();
      23             : 
      24      257508 :   params.suppressParameter<bool>("use_displaced_mesh");
      25      257508 :   params.suppressParameter<bool>("compute");
      26      257508 :   params.suppressParameter<std::vector<OutputName>>("outputs");
      27      128754 :   params.suppressParameter<std::vector<std::string>>("output_properties");
      28             : 
      29      128754 :   params.addPrivateParam<bool>(MooseBase::kokkos_object_param, true);
      30      386262 :   params.addPrivateParam<bool>("_kokkos_material", true);
      31             : 
      32      128754 :   params.registerBase("KokkosMaterial");
      33             : 
      34      128754 :   return params;
      35           0 : }
      36             : 
      37         952 : MaterialBase::MaterialBase(const InputParameters & parameters)
      38             :   : ::MaterialBase(parameters),
      39         766 :     MeshHolder(*_fe_problem.mesh().getKokkosMesh()),
      40         766 :     AssemblyHolder(_fe_problem.kokkosAssembly()),
      41         766 :     SystemHolder(_fe_problem.getKokkosSystems()),
      42         766 :     _t(TransientInterface::_t),
      43         766 :     _t_old(TransientInterface::_t_old),
      44         766 :     _t_step(TransientInterface::_t_step),
      45         766 :     _dt(TransientInterface::_dt),
      46        2298 :     _dt_old(TransientInterface::_dt_old)
      47             : {
      48         952 : }
      49             : 
      50       36803 : MaterialBase::MaterialBase(const MaterialBase & object)
      51             :   : ::MaterialBase(object, {}),
      52             :     MeshHolder(object),
      53             :     AssemblyHolder(object),
      54             :     SystemHolder(object),
      55       29790 :     _t(object._t),
      56       29790 :     _t_old(object._t_old),
      57       29790 :     _t_step(object._t_step),
      58       29790 :     _dt(object._dt),
      59       59580 :     _dt_old(object._dt_old)
      60             : {
      61       36803 :   _element_ids = object._element_ids;
      62       36803 :   _element_side_ids = object._element_side_ids;
      63       36803 : }
      64             : 
      65             : void
      66         838 : MaterialBase::initialSetup()
      67             : {
      68         838 :   if (materialDataType() == Moose::BLOCK_MATERIAL_DATA)
      69             :   {
      70         275 :     std::set<ContiguousElementID> element_ids;
      71             : 
      72         550 :     for (auto block : blockIDs())
      73         275 :       element_ids.insert(_mesh.getKokkosMesh()->getSubdomainContiguousElementIDs(block).begin(),
      74         214 :                          _mesh.getKokkosMesh()->getSubdomainContiguousElementIDs(block).end());
      75             : 
      76         275 :     _element_ids = element_ids;
      77         275 :   }
      78             :   else
      79             :   {
      80         563 :     auto & restricted_blocks = boundaryRestricted() ? meshBlockIDs() : blockIDs();
      81         563 :     auto & restricted_boundaries = boundaryRestricted() ? boundaryIDs() : meshBoundaryIDs();
      82         563 :     auto & material_boundaries = kokkosAssembly().getMaterialBoundaries();
      83             : 
      84         563 :     std::vector<BoundaryID> boundaries;
      85             : 
      86         563 :     std::set_intersection(restricted_boundaries.begin(),
      87             :                           restricted_boundaries.end(),
      88             :                           material_boundaries.begin(),
      89             :                           material_boundaries.end(),
      90             :                           std::back_inserter(boundaries));
      91             : 
      92         563 :     std::set<Pair<ContiguousElementID, unsigned int>> element_side_ids;
      93             : 
      94         688 :     for (auto boundary : boundaries)
      95        1365 :       for (auto elem_id : _mesh.getBoundaryActiveSemiLocalElemIds(boundary))
      96             :       {
      97        1240 :         const auto elem = _mesh.elemPtr(elem_id);
      98             : 
      99        2080 :         if (elem->processor_id() == processor_id() &&
     100        1790 :             restricted_blocks.find(elem->subdomain_id()) != restricted_blocks.end())
     101        1970 :           element_side_ids.insert({_mesh.getKokkosMesh()->getContiguousElementID(elem),
     102         840 :                                    _mesh.sideWithBoundaryID(elem, boundary)});
     103         125 :       }
     104             : 
     105         563 :     _element_side_ids = element_side_ids;
     106         563 :   }
     107         838 : }
     108             : 
     109             : } // namespace Kokkos
     110             : } // namespace Moose

Generated by: LCOV version 1.14