LCOV - code coverage report
Current view: top level - src/Model/Solid/Linear - Laplacian.H (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 22 22 100.0 %
Date: 2024-11-18 05:28:54 Functions: 13 14 92.9 %

          Line data    Source code
       1             : #ifndef MODEL_SOLID_LINEAR_LAPLACIAN_H_
       2             : #define MODEL_SOLID_LINEAR_LAPLACIAN_H_
       3             : 
       4             : #include <AMReX.H>
       5             : #include <AMReX_REAL.H>
       6             : #include <eigen3/Eigen/Core>
       7             : 
       8             : #include "IO/ParmParse.H"
       9             : #include "Util/Util.H"
      10             : #include "Set/Set.H"
      11             : 
      12             : namespace Model
      13             : {
      14             : namespace Solid
      15             : {
      16             : namespace Linear
      17             : {
      18             : ///
      19             : /// Isotropic implements the following elastic model
      20             : /// \f[ \mathbb{C}_{ijkl} = \alpha\delta_{ik}\delta_{jl}  \f]
      21             : /// corresponding to the elastic model
      22             : /// \f[ \sigma_{ij} = \alpha\delta_{ik}\delta_{jl}u_{k,l} = \alpha u_{i,j} \f]
      23             : /// \f[ f_{i} = \mathbb{C}_{ijkl}u_{k,jl} = \alpha\delta_{ik}\delta_{jl}u_{k,jl} = \alpha u_{i,jj} \f]
      24             : ///
      25             : class Laplacian : public Model::Solid::Solid<Set::Sym::Diagonal>
      26             : {
      27             : public:
      28       18054 :     Laplacian() { Define(); } ;
      29        8516 :     Laplacian(Set::Scalar alpha) { Define(alpha); } ;
      30             :     Laplacian(Solid<Set::Sym::Diagonal> base) : Solid<Set::Sym::Diagonal>(base) {};
      31       35074 :     ~Laplacian() {} ;
      32       26574 :     void Define(Set::Scalar alpha = 1.0)
      33             :     {
      34       53148 :         ddw = alpha*Set::Matrix4<AMREX_SPACEDIM,Set::Sym::Diagonal>(Set::Matrix::Ones());
      35       26574 :     }
      36         260 :     Set::Scalar W(const Set::Matrix & gradu) const override
      37             :     {
      38         520 :         return ( 0.5 * gradu.transpose() * (ddw*gradu) ).trace();
      39             :     }
      40       18886 :     Set::Matrix DW(const Set::Matrix & gradu) const override
      41             :     {
      42       37772 :         return ddw*gradu;
      43             :     }
      44        8483 :     Set::Matrix4<AMREX_SPACEDIM,Set::Sym::Diagonal> DDW(const Set::Matrix & /*gradu*/) const override
      45             :     {
      46        8483 :         return ddw;
      47             :     }
      48             : public:
      49        8472 :     static Laplacian Zero()
      50             :     {
      51        8472 :         return Laplacian(0.0);
      52             :     }
      53           4 :     static void Parse(Laplacian value,IO::ParmParse pp)
      54             :     {
      55           4 :         Set::Scalar alpha = NAN;
      56             :         // Coefficient for the Laplacian
      57           4 :         pp_query_default("alpha",alpha,1.0);
      58           4 :         value.Define(alpha);
      59           4 :     }
      60             :     
      61             :     Set::Matrix4<AMREX_SPACEDIM,Set::Sym::Diagonal> ddw;
      62             :     static const KinematicVariable kinvar = KinematicVariable::gradu;
      63          44 :     static Laplacian Random()
      64             :     {
      65          44 :         Set::Scalar alpha = (Util::Random() + 0.1)/1.1;
      66          44 :         return Laplacian(alpha);
      67             :     }
      68             : 
      69             : #define OP_CLASS Laplacian
      70             : #define OP_VARS X(ddw)
      71             : #include "Model/Solid/InClassOperators.H"
      72             : };
      73             : #include "Model/Solid/ExtClassOperators.H"
      74             : 
      75             : }
      76             : }
      77             : }
      78             : #endif

Generated by: LCOV version 1.14