LCOV - code coverage report
Current view: top level - src/utils - RaccoonUtils.C (source / functions) Hit Total Coverage
Test: coverage.info Lines: 29 30 96.7 %
Date: 2025-02-21 01:06:12 Functions: 5 5 100.0 %

          Line data    Source code
       1             : //* This file is part of the RACCOON application
       2             : //* being developed at Dolbow lab at Duke University
       3             : //* http://dolbow.pratt.duke.edu
       4             : 
       5             : #include "RaccoonUtils.h"
       6             : #include "ADReal.h"
       7             : #include "MooseUtils.h"
       8             : #include "RankTwoTensorImplementation.h"
       9             : 
      10             : namespace RaccoonUtils
      11             : {
      12             : 
      13             : ADReal
      14     7766504 : Macaulay(const ADReal x, const bool deriv)
      15             : {
      16     7766504 :   if (deriv)
      17           0 :     return x > 0 ? 1 : 0;
      18    23299512 :   return 0.5 * (x + std::abs(x));
      19             : }
      20             : 
      21             : std::vector<ADReal>
      22     1828660 : Macaulay(const std::vector<ADReal> & v, const bool deriv)
      23             : {
      24     1828660 :   std::vector<ADReal> m = v;
      25     7314640 :   for (auto & x : m)
      26     5485980 :     x = Macaulay(x, deriv);
      27     1828660 :   return m;
      28             : }
      29             : 
      30             : ADRankTwoTensor
      31     1828660 : spectralDecomposition(const ADRankTwoTensor & r2t)
      32             : {
      33     1828660 :   ADRankTwoTensor eigvecs;
      34     1828660 :   std::vector<ADReal> eigvals(LIBMESH_DIM);
      35     1828660 :   r2t.symmetricEigenvaluesEigenvectors(eigvals, eigvecs);
      36             : 
      37     1828660 :   ADRankTwoTensor eigvals_pos;
      38     1828660 :   eigvals_pos.fillFromInputVector(Macaulay(eigvals));
      39     1828660 :   return eigvecs * eigvals_pos * eigvecs.transpose();
      40             : }
      41             : 
      42             : ADRankTwoTensor
      43      519064 : log(const ADRankTwoTensor & r2t)
      44             : {
      45             :   std::vector<ADReal> d;
      46      519064 :   ADRankTwoTensor V, D;
      47      519064 :   r2t.symmetricEigenvaluesEigenvectors(d, V);
      48     2076256 :   for (auto & di : d)
      49     1557192 :     di = std::log(di);
      50      519064 :   D.fillFromInputVector(d);
      51      519064 :   return V * D * V.transpose();
      52             : }
      53             : 
      54             : ADRankTwoTensor
      55      235072 : exp(const ADRankTwoTensor & r2t)
      56             : {
      57             :   std::vector<ADReal> d;
      58      235072 :   ADRankTwoTensor V, D;
      59      235072 :   r2t.symmetricEigenvaluesEigenvectors(d, V);
      60      940288 :   for (auto & di : d)
      61      705216 :     di = std::exp(di);
      62      235072 :   D.fillFromInputVector(d);
      63      235072 :   return V * D * V.transpose();
      64             : }
      65             : 
      66             : } // end namespace MooseUtils

Generated by: LCOV version 1.16