LCOV - code coverage report
Current view: top level - include/materials - InterfaceMaterial.h (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 39 49 79.6 %
Date: 2025-07-17 01:28:37 Functions: 16 22 72.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://mooseframework.inl.gov
       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             : #pragma once
      11             : 
      12             : // MOOOSE includes
      13             : #include "MaterialBase.h"
      14             : #include "NeighborCoupleable.h"
      15             : #include "TwoMaterialPropertyInterface.h"
      16             : 
      17             : #define usingInterfaceMaterialMembers                                                              \
      18             :   usingMaterialBaseMembers;                                                                        \
      19             :   usingNeighborCoupleableMembers;                                                                  \
      20             :   using InterfaceMaterial::_q_point;                                                               \
      21             :   using InterfaceMaterial::_qrule;                                                                 \
      22             :   using InterfaceMaterial::_JxW;                                                                   \
      23             :   using InterfaceMaterial::_current_elem;                                                          \
      24             :   using InterfaceMaterial::_neighbor_elem;                                                         \
      25             :   using InterfaceMaterial::_current_side;                                                          \
      26             :   using InterfaceMaterial::_neighbor_side
      27             : 
      28             : /**
      29             :  * Interface materials compute MaterialProperties.
      30             :  */
      31             : class InterfaceMaterial : public MaterialBase,
      32             :                           public NeighborCoupleable,
      33             :                           public TwoMaterialPropertyInterface
      34             : {
      35             : public:
      36             :   static InputParameters validParams();
      37             : 
      38             :   InterfaceMaterial(const InputParameters & parameters);
      39             : 
      40           0 :   virtual bool isInterfaceMaterial() override { return true; };
      41             :   void computeProperties() override;
      42             : 
      43             :   ///@{
      44             :   /**
      45             :    * Retrieve the property through a given input parameter key with a fallback
      46             :    * to getting it by name
      47             :    *
      48             :    * \p state is the property state; 0 = current, 1 = old, 2 = older, etc.
      49             :    */
      50             :   template <typename T, bool is_ad>
      51             :   const GenericMaterialProperty<T, is_ad> &
      52             :   getGenericMaterialProperty(const std::string & name, const unsigned int state = 0);
      53             :   template <typename T>
      54             :   const MaterialProperty<T> & getMaterialProperty(const std::string & name,
      55             :                                                   const unsigned int state = 0)
      56             :   {
      57             :     return getGenericMaterialProperty<T, false>(name, state);
      58             :   }
      59             :   template <typename T>
      60          26 :   const ADMaterialProperty<T> & getADMaterialProperty(const std::string & name)
      61             :   {
      62          26 :     return getGenericMaterialProperty<T, true>(name, 0);
      63             :   }
      64             :   template <typename T>
      65         528 :   const MaterialProperty<T> & getMaterialPropertyOld(const std::string & name)
      66             :   {
      67         528 :     return getGenericMaterialProperty<T, false>(name, 1);
      68             :   }
      69             :   template <typename T>
      70             :   const MaterialProperty<T> & getMaterialPropertyOlder(const std::string & name)
      71             :   {
      72             :     return getGenericMaterialProperty<T, false>(name, 2);
      73             :   }
      74             :   ///@}
      75             : 
      76             :   ///@{
      77             :   /**
      78             :    * Retrieve the property named "name"
      79             :    *
      80             :    * \p state is the property state; 0 = current, 1 = old, 2 = older, etc.
      81             :    */
      82             :   template <typename T, bool is_ad>
      83             :   const GenericMaterialProperty<T, is_ad> &
      84             :   getGenericMaterialPropertyByName(const std::string & name, const unsigned int state = 0);
      85             :   template <typename T>
      86         264 :   const MaterialProperty<T> & getMaterialPropertyByName(const std::string & prop_name,
      87             :                                                         const unsigned int state = 0)
      88             :   {
      89             : 
      90         264 :     return getGenericMaterialPropertyByName<T, false>(prop_name, state);
      91             :   }
      92             :   template <typename T>
      93             :   const ADMaterialProperty<T> & getADMaterialPropertyByName(const std::string & prop_name)
      94             :   {
      95             : 
      96             :     return getGenericMaterialPropertyByName<T, true>(prop_name, 0);
      97             :   }
      98             :   template <typename T>
      99          54 :   const MaterialProperty<T> & getMaterialPropertyOldByName(const std::string & prop_name)
     100             :   {
     101             : 
     102          54 :     return getGenericMaterialPropertyByName<T, false>(prop_name, 1);
     103             :   }
     104             :   template <typename T>
     105             :   const MaterialProperty<T> & getMaterialPropertyOlderByName(const std::string & prop_name)
     106             :   {
     107             : 
     108             :     return getGenericMaterialPropertyByName<T, false>(prop_name, 2);
     109             :   }
     110             :   ///@}
     111             : 
     112             :   ///@{
     113             :   /**
     114             :    * Retrieve the neighbor property through a given input parameter key with a fallback
     115             :    * to getting it by name
     116             :    *
     117             :    * \p state is the property state; 0 = current, 1 = old, 2 = older, etc.
     118             :    */
     119             :   template <typename T, bool is_ad>
     120             :   const GenericMaterialProperty<T, is_ad> &
     121             :   getGenericNeighborMaterialProperty(const std::string & name, const unsigned int state = 0);
     122             :   template <typename T>
     123             :   const MaterialProperty<T> & getNeighborMaterialProperty(const std::string & name,
     124             :                                                           const unsigned int state = 0)
     125             :   {
     126             :     return getGenericNeighborMaterialProperty<T, false>(name, state);
     127             :   }
     128             :   template <typename T>
     129          13 :   const ADMaterialProperty<T> & getNeighborADMaterialProperty(const std::string & name)
     130             :   {
     131          13 :     return getGenericNeighborMaterialProperty<T, true>(name, 0);
     132             :   }
     133             :   template <typename T>
     134          54 :   const MaterialProperty<T> & getNeighborMaterialPropertyOld(const std::string & name)
     135             :   {
     136          54 :     return getGenericNeighborMaterialProperty<T, false>(name, 1);
     137             :   }
     138             :   template <typename T>
     139             :   const MaterialProperty<T> & getNeighborMaterialPropertyOlder(const std::string & name)
     140             :   {
     141             :     return getGenericNeighborMaterialProperty<T, false>(name, 2);
     142             :   }
     143             :   ///@}
     144             : 
     145             :   ///@{
     146             :   /**
     147             :    * Retrieve the neighbor property named "name"
     148             :    *
     149             :    * \p state is the property state; 0 = current, 1 = old, 2 = older, etc.
     150             :    */
     151             :   template <typename T, bool is_ad>
     152             :   const GenericMaterialProperty<T, is_ad> &
     153             :   getGenericNeighborMaterialPropertyByName(const std::string & name, const unsigned int state = 0);
     154             :   template <typename T>
     155         264 :   const MaterialProperty<T> & getNeighborMaterialPropertyByName(const std::string & prop_name,
     156             :                                                                 const unsigned int state = 0)
     157             :   {
     158         264 :     return getGenericNeighborMaterialPropertyByName<T, false>(prop_name, state);
     159             :   }
     160             :   template <typename T>
     161           0 :   const ADMaterialProperty<T> & getNeighborADMaterialPropertyByName(const std::string & prop_name)
     162             :   {
     163           0 :     return getGenericNeighborMaterialPropertyByName<T, true>(prop_name, 0);
     164             :   }
     165             :   ///@}
     166             : 
     167             :   using MaterialBase::getZeroMaterialProperty;
     168             : 
     169           0 :   virtual bool isBoundaryMaterial() const override { return true; }
     170             : 
     171           0 :   virtual const std::unordered_set<unsigned int> & getMatPropDependencies() const override
     172             :   {
     173           0 :     return TwoMaterialPropertyInterface::getMatPropDependencies();
     174             :   }
     175             : 
     176             : protected:
     177           0 :   virtual const MaterialData & materialData() const override { return _material_data; }
     178        7464 :   virtual MaterialData & materialData() override { return _material_data; }
     179             : 
     180           0 :   virtual const QBase & qRule() const override { return *_qrule; }
     181             : 
     182             :   bool _bnd;
     183             :   const MooseArray<Point> & _q_point;
     184             :   const QBase * const & _qrule;
     185             :   const MooseArray<Real> & _JxW;
     186             : 
     187             :   /// Current element
     188             :   const Elem * const & _current_elem;
     189             :   /// Current neighbor element
     190             :   const Elem * const & _neighbor_elem;
     191             :   /// current side of the current element
     192             :   const unsigned int & _current_side;
     193             :   /// current side of the neighbor element
     194             :   const unsigned int & _neighbor_side;
     195             : };
     196             : 
     197             : template <typename T, bool is_ad>
     198             : const GenericMaterialProperty<T, is_ad> &
     199         554 : InterfaceMaterial::getGenericMaterialProperty(const std::string & name, const unsigned int state)
     200             : {
     201             :   // Check if the supplied parameter is a valid input parameter key
     202         554 :   const auto prop_name = getMaterialPropertyName(name);
     203             : 
     204             :   // Check if it's just a constant.
     205         554 :   if (const auto * default_property = defaultGenericMaterialProperty<T, is_ad>(prop_name))
     206           0 :     return *default_property;
     207             : 
     208         554 :   return getGenericMaterialPropertyByName<T, is_ad>(prop_name, state);
     209         554 : }
     210             : 
     211             : template <typename T, bool is_ad>
     212             : const GenericMaterialProperty<T, is_ad> &
     213         872 : InterfaceMaterial::getGenericMaterialPropertyByName(const std::string & prop_name,
     214             :                                                     const unsigned int state)
     215             : {
     216         872 :   MaterialBase::checkExecutionStage();
     217             : 
     218             :   // The property may not exist yet, so declare it (declare/getMaterialProperty are referencing the
     219             :   // same memory)
     220         872 :   if (state == 0)
     221         290 :     _requested_props.insert(prop_name);
     222             : 
     223             :   // Do this before hand so that the propery id is defined
     224             :   auto & prop =
     225         872 :       TwoMaterialPropertyInterface::getGenericMaterialPropertyByName<T, is_ad>(prop_name, state);
     226             : 
     227         872 :   registerPropName(prop_name, true, state);
     228             : 
     229         872 :   return prop;
     230             : }
     231             : 
     232             : template <typename T, bool is_ad>
     233             : const GenericMaterialProperty<T, is_ad> &
     234          67 : InterfaceMaterial::getGenericNeighborMaterialProperty(const std::string & name,
     235             :                                                       const unsigned int state)
     236             : {
     237             :   // Check if the supplied parameter is a valid input parameter key
     238          67 :   const auto prop_name = getMaterialPropertyName(name);
     239             : 
     240             :   // Check if it's just a constant.
     241          67 :   if (const auto * default_property = defaultGenericMaterialProperty<T, is_ad>(prop_name))
     242           0 :     return *default_property;
     243             : 
     244          67 :   return getGenericNeighborMaterialPropertyByName<T, is_ad>(prop_name, state);
     245          67 : }
     246             : 
     247             : template <typename T, bool is_ad>
     248             : const GenericMaterialProperty<T, is_ad> &
     249         331 : InterfaceMaterial::getGenericNeighborMaterialPropertyByName(const std::string & name,
     250             :                                                             const unsigned int state)
     251             : {
     252         331 :   MaterialBase::checkExecutionStage();
     253             : 
     254             :   // The property may not exist yet, so declare it (declare/getMaterialProperty are referencing the
     255             :   // same memory)
     256         331 :   if (state == 0)
     257         277 :     _requested_props.insert(name);
     258             : 
     259             :   // Do this before hand so that the propery id is defined
     260             :   auto & prop =
     261         331 :       TwoMaterialPropertyInterface::getGenericNeighborMaterialPropertyByName<T, is_ad>(name, state);
     262             : 
     263         331 :   registerPropName(name, true, state);
     264             : 
     265         331 :   return prop;
     266             : }

Generated by: LCOV version 1.14