LCOV - code coverage report
Current view: top level - src/Model/Interface/Crack - Crack.H (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 0 42 0.0 %
Date: 2024-11-18 05:28:54 Functions: 0 8 0.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 1.14