|
FEBio
1.5.0
|
00001 #pragma once 00002 #include "FEUncoupledMaterial.h" 00003 00004 //----------------------------------------------------------------------------- 00005 // We first define a material point that stores the damage variable. 00006 class FETIMRDamageMaterialPoint : public FEMaterialPoint 00007 { 00008 public: 00009 FETIMRDamageMaterialPoint(FEMaterialPoint *pt) : FEMaterialPoint(pt) {} 00010 00011 FEMaterialPoint* Copy() 00012 { 00013 FETIMRDamageMaterialPoint* pt = new FETIMRDamageMaterialPoint(*this); 00014 if (m_pt) pt->m_pt = m_pt->Copy(); 00015 return pt; 00016 } 00017 00018 void Init(bool bflag) 00019 { 00020 FEElasticMaterialPoint& pt = *m_pt->ExtractData<FEElasticMaterialPoint>(); 00021 if (bflag) 00022 { 00023 // intialize data to zero 00024 m_MEmax = 0; 00025 m_MEtrial = 0; 00026 m_Dm = 1; 00027 00028 m_FEmax = 0; 00029 m_FEtrial = 0; 00030 m_Df = 1; 00031 } 00032 else 00033 { 00034 m_MEmax = max(m_MEmax, m_MEtrial); 00035 m_FEmax = max(m_FEmax, m_FEtrial); 00036 } 00037 00038 // don't forget to intialize the nested data 00039 if (m_pt) m_pt->Init(bflag); 00040 } 00041 00042 void Serialize(DumpFile& ar) 00043 { 00044 if (ar.IsSaving()) 00045 { 00046 ar << m_MEmax << m_FEmax; 00047 } 00048 else 00049 { 00050 ar >> m_MEmax >> m_FEmax; 00051 } 00052 } 00053 00054 public: 00055 // matrix 00056 double m_MEtrial; 00057 double m_MEmax; 00058 double m_Dm; 00059 00060 // fiber 00061 double m_FEtrial; 00062 double m_FEmax; 00063 double m_Df; 00064 }; 00065 00066 //----------------------------------------------------------------------------- 00067 class FEDamageTransIsoMooneyRivlin : public FEUncoupledMaterial 00068 { 00069 public: 00070 FEDamageTransIsoMooneyRivlin(void); 00071 00072 public: 00073 // Mooney-Rivlin parameters 00074 double m_c1; 00075 double m_c2; 00076 00077 // fiber parameters 00078 double m_c3; 00079 double m_c4; 00080 00081 // Matrix damage parameters 00082 double m_Mbeta; 00083 double m_Msmin; 00084 double m_Msmax; 00085 00086 // Fiber damage parameters 00087 double m_Fbeta; 00088 double m_Fsmin; 00089 double m_Fsmax; 00090 00091 public: 00092 // returns a pointer to a new material point object 00093 virtual FEMaterialPoint* CreateMaterialPointData() { return new FETIMRDamageMaterialPoint(new FEElasticMaterialPoint); } 00094 00095 public: 00097 mat3ds DevStress(FEMaterialPoint& pt); 00098 00100 tens4ds DevTangent(FEMaterialPoint& pt); 00101 00103 void Init(); 00104 00105 protected: 00106 mat3ds MatrixStress(FEMaterialPoint& mp); 00107 mat3ds FiberStress (FEMaterialPoint& mp); 00108 tens4ds MatrixTangent(FEMaterialPoint& pt); 00109 tens4ds FiberTangent (FEMaterialPoint& pt); 00110 00111 protected: 00112 // calculate damage reduction factor for matrix 00113 double MatrixDamage(FEMaterialPoint& pt); 00114 00115 // calculate damage reduction factor for fibers 00116 double FiberDamage(FEMaterialPoint& pt); 00117 00118 double MatrixDamageDerive(FEMaterialPoint& pt); 00119 double FiberDamageDerive(FEMaterialPoint& pt); 00120 00121 public: 00122 // declare as registered 00123 DECLARE_REGISTERED(FEDamageTransIsoMooneyRivlin); 00124 00125 // declare the parameter list 00126 DECLARE_PARAMETER_LIST(); 00127 };
1.7.5.1