LCOV - code coverage report
Current view: top level - src/base - EnrichmentFunctionCalculation.C (source / functions) Hit Total Coverage
Test: idaholab/moose xfem: #31405 (292dce) with base fef103 Lines: 42 44 95.5 %
Date: 2025-09-04 07:58:55 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://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             : #include "EnrichmentFunctionCalculation.h"
      11             : 
      12          44 : EnrichmentFunctionCalculation::EnrichmentFunctionCalculation(
      13          44 :     const CrackFrontDefinition * crack_front_definition)
      14          44 :   : _crack_front_definition(*crack_front_definition)
      15             : {
      16          44 : }
      17             : 
      18             : unsigned int
      19     9492744 : EnrichmentFunctionCalculation::crackTipEnrichementFunctionAtPoint(const Point & point,
      20             :                                                                   std::vector<Real> & B)
      21             : {
      22             :   unsigned int crack_front_point_index =
      23     9492744 :       _crack_front_definition.calculateRThetaToCrackFront(point, _r, _theta);
      24             : 
      25     9492744 :   if (MooseUtils::absoluteFuzzyEqual(_r, 0.0))
      26           0 :     mooseError("EnrichmentFunctionCalculation: the distance between a point and the crack "
      27             :                "tip/front is zero.");
      28             : 
      29     9492744 :   Real st = std::sin(_theta);
      30     9492744 :   Real st2 = std::sin(_theta / 2.0);
      31     9492744 :   Real ct2 = std::cos(_theta / 2.0);
      32     9492744 :   Real sr = std::sqrt(_r);
      33             : 
      34     9492744 :   B[0] = sr * st2;
      35     9492744 :   B[1] = sr * ct2;
      36     9492744 :   B[2] = sr * st2 * st;
      37     9492744 :   B[3] = sr * ct2 * st;
      38             : 
      39     9492744 :   return crack_front_point_index;
      40             : }
      41             : 
      42             : unsigned int
      43     3590060 : EnrichmentFunctionCalculation::crackTipEnrichementFunctionDerivativeAtPoint(
      44             :     const Point & point, std::vector<RealVectorValue> & dB)
      45             : {
      46             :   unsigned int crack_front_point_index =
      47     3590060 :       _crack_front_definition.calculateRThetaToCrackFront(point, _r, _theta);
      48             : 
      49     3590060 :   if (MooseUtils::absoluteFuzzyEqual(_r, 0.0))
      50           0 :     mooseError("EnrichmentFunctionCalculation: the distance between a point and the crack "
      51             :                "tip/front is zero.");
      52             : 
      53     3590060 :   Real st = std::sin(_theta);
      54     3590060 :   Real ct = std::cos(_theta);
      55     3590060 :   Real st2 = std::sin(_theta / 2.0);
      56     3590060 :   Real ct2 = std::cos(_theta / 2.0);
      57     3590060 :   Real st15 = std::sin(1.5 * _theta);
      58     3590060 :   Real ct15 = std::cos(1.5 * _theta);
      59     3590060 :   Real sr = std::sqrt(_r);
      60             : 
      61     3590060 :   dB[0](0) = -0.5 / sr * st2;
      62     3590060 :   dB[0](1) = 0.5 / sr * ct2;
      63     3590060 :   dB[0](2) = 0.0;
      64     3590060 :   dB[1](0) = 0.5 / sr * ct2;
      65     3590060 :   dB[1](1) = 0.5 / sr * st2;
      66     3590060 :   dB[1](2) = 0.0;
      67     3590060 :   dB[2](0) = -0.5 / sr * st15 * st;
      68     3590060 :   dB[2](1) = 0.5 / sr * (st2 + st15 * ct);
      69     3590060 :   dB[2](2) = 0.0;
      70     3590060 :   dB[3](0) = -0.5 / sr * ct15 * st;
      71     3590060 :   dB[3](1) = 0.5 / sr * (ct2 + ct15 * ct);
      72     3590060 :   dB[3](2) = 0.0;
      73             : 
      74     3590060 :   return crack_front_point_index;
      75             : }
      76             : 
      77             : void
      78    14360240 : EnrichmentFunctionCalculation::rotateFromCrackFrontCoordsToGlobal(const RealVectorValue & vector,
      79             :                                                                   RealVectorValue & rotated_vector,
      80             :                                                                   const unsigned int point_index)
      81             : {
      82    14360240 :   rotated_vector = _crack_front_definition.rotateFromCrackFrontCoordsToGlobal(vector, point_index);
      83    14360240 : }

Generated by: LCOV version 1.14