LCOV - code coverage report
Current view: top level - src/Model/Interface/Crack - Crack.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 0.0 % 42 0
Test Date: 2025-02-27 04:17:48 Functions: 0.0 % 8 0

            Line data    Source code
       1              : #ifndef MODEL_INTERFACE_CRACK_H
       2              : #define MODEL_INTERFACE_CRACK_H
       3              : 
       4              : #include <AMReX.H>
       5              : #include <AMReX_AmrCore.H>
       6              : 
       7              : #include <iostream>
       8              : #include <fstream>
       9              : 
      10              : namespace Model
      11              : {
      12              : namespace Interface
      13              : {
      14              : namespace Crack
      15              : {
      16              : class Crack
      17              : {
      18              :     public:
      19              :     enum GType {GSQUARE, GMULTIWELL, GPHI4C3, GCUBICM, GSQUAREP, GSQUAREPM};
      20              :     enum WType {WSQUARE, WMULTIWELL, WMULTIWELL2, WPHI4C3};
      21              :     
      22            0 :     Crack() {};
      23              :     
      24              :     AMREX_FORCE_INLINE
      25            0 :     virtual Set::Scalar w_phi(Set::Scalar c, Set::Scalar /*p=0.*/)
      26              :     {
      27            0 :         switch(w_type)
      28              :         {
      29            0 :             case WSQUARE:        return (1.-c)*(1.-c);
      30            0 :             case WMULTIWELL:        return (1.-c)*(1.-c)*c*c;
      31            0 :             case WMULTIWELL2:    return (1.+c)*(1.+c)*(1.-c)*(1.-c);
      32            0 :             case WPHI4C3:        return 1. - 4.*c*c*c + 3.*c*c*c*c;
      33              :             
      34            0 :             default:            return (1.-c)*(1.-c);
      35              :         }
      36              :     }
      37              :     AMREX_FORCE_INLINE
      38            0 :     virtual Set::Scalar g_phi(Set::Scalar c, Set::Scalar p=0.)
      39              :     {
      40            0 :         switch(g_type)
      41              :         {
      42            0 :             case GSQUARE:        return c*c;
      43            0 :             case GMULTIWELL:     return (2.-c)*(2.-c)*c*c;
      44            0 :             case GPHI4C3:         return 4.*c*c*c - 3.*c*c*c*c;
      45            0 :             case GSQUAREP:        return std::pow(c,2.*p);
      46            0 :             case GSQUAREPM:        return std::pow(c,2.*(std::pow(p,m_d_exponent)));
      47            0 :             case GCUBICM:        return m_d_exponent*(c*c*c - c*c) + 3.*c*c - 2.*c*c*c;
      48              : 
      49            0 :             default:             return c*c;
      50              :         }
      51              :     }
      52              :     AMREX_FORCE_INLINE
      53            0 :     virtual Set::Scalar Dw_phi(Set::Scalar c, Set::Scalar /*p=0.*/)
      54              :     {
      55            0 :         switch(w_type)
      56              :         {
      57            0 :             case WSQUARE:        return -2.*(1.-c);
      58            0 :             case WMULTIWELL:        return 4.*c*c*c - 6.*c*c + 2.*c;
      59            0 :             case WMULTIWELL2:    return 4.*c*c*c - 4.*c;
      60            0 :             case WPHI4C3:        return 12.*(c-1.)*c*c;
      61              :             
      62            0 :             default:            return -2.*(1.-c);
      63              :         }
      64              :     }
      65              :     AMREX_FORCE_INLINE
      66            0 :     virtual Set::Scalar Dg_phi(Set::Scalar c, Set::Scalar p=0.)
      67              :     {
      68            0 :         switch(g_type)
      69              :         {
      70            0 :             case GSQUARE:        return 2.*c;
      71            0 :             case GMULTIWELL:     return 4.*c*c*c - 12.*c*c + 8.*c;
      72            0 :             case GPHI4C3:         return 12.*(1.-c)*c*c;
      73            0 :             case GSQUAREP:        return 2.*p*std::pow(c,2*p -1.);
      74            0 :             case GSQUAREPM:        return 2.*std::pow(p,m_d_exponent)*(std::pow(c, 2*std::pow(p,m_d_exponent)-1));
      75            0 :             case GCUBICM:        return m_d_exponent*(3.*c*c - 2.*c) + 6.*c - 6.*c*c;
      76              : 
      77            0 :             default:             return 2*c;
      78              :         }
      79              :     }
      80              : 
      81              :     virtual Set::Scalar Gc(Set::Scalar theta) = 0;
      82              :     virtual Set::Scalar DGc(Set::Scalar theta) = 0;
      83              :     virtual Set::Scalar DDGc(Set::Scalar theta) = 0;
      84              :     virtual Set::Scalar Zeta(Set::Scalar theta) = 0;
      85              :     virtual Set::Scalar Mobility(Set::Scalar theta) = 0;
      86              :     virtual Set::Scalar DrivingForceThreshold(Set::Scalar theta) = 0;
      87              : 
      88              :     void ExportToFile(std::string filename, amrex::Real dTheta)
      89              :     {
      90              :         std::ofstream outFile;
      91              :         outFile.open(filename);
      92              :     
      93              :         for(amrex::Real theta=0; theta<2*pi; theta=theta+dTheta)
      94              :             {
      95              :                 outFile << theta << " " << Gc(theta) << std::endl;   
      96              :             }
      97              :         outFile.close();
      98              :     
      99              :     }
     100            0 :     void SetGType(const GType a_type)
     101              :     {
     102            0 :         g_type = a_type;
     103            0 :     }
     104              : 
     105            0 :     void SetWType(const WType a_type)
     106              :     {
     107            0 :         w_type = a_type;
     108            0 :     }
     109              :     
     110            0 :     void SetDuctileExponent(const Set::Scalar m)
     111              :     {
     112            0 :         m_d_exponent = m;
     113            0 :     }
     114              : 
     115              : protected:
     116              :     static constexpr amrex::Real pi = 3.14159265359;
     117              :     GType g_type = GType::GSQUARE;
     118              :     WType w_type = WType::WSQUARE;
     119              :     Set::Scalar m_d_exponent = 1.;
     120              : };
     121              : }
     122              : }
     123              : }
     124              : 
     125              : #endif
        

Generated by: LCOV version 2.0-1