|
FEBio
1.5.0
|
00001 #pragma once 00002 #include "FEBiphasicSolute.h" 00003 #include "FESolute.h" 00004 00005 //----------------------------------------------------------------------------- 00006 // Monovalent salt (cation + anion) 00007 00008 class FESaltMaterialPoint : public FEMaterialPoint 00009 { 00010 public: 00011 FESaltMaterialPoint(FEMaterialPoint* ppt) : FEMaterialPoint(ppt) {} 00012 00013 FEMaterialPoint* Copy() 00014 { 00015 FESaltMaterialPoint* pt = new FESaltMaterialPoint(*this); 00016 if (m_pt) pt->m_pt = m_pt->Copy(); 00017 return pt; 00018 } 00019 00020 void Serialize(DumpFile& ar) 00021 { 00022 if (ar.IsSaving()) 00023 { 00024 ar << m_c[0] << m_gradc[0] << m_j[0] << m_ca[0]; 00025 ar << m_c[1] << m_gradc[1] << m_j[1] << m_ca[1]; 00026 } 00027 else 00028 { 00029 ar >> m_c[0] >> m_gradc[0] >> m_j[0] >> m_ca[0]; 00030 ar >> m_c[1] >> m_gradc[1] >> m_j[1] >> m_ca[1]; 00031 } 00032 00033 if (m_pt) m_pt->Serialize(ar); 00034 } 00035 00036 void Init(bool bflag) 00037 { 00038 if (bflag) 00039 { 00040 m_c[0] = m_c[1] = 0; 00041 m_ca[0] = m_ca[1] = 0; 00042 m_psi = m_cF = 0; 00043 m_gradc[0] = m_gradc[1] = vec3d(0,0,0); 00044 m_j[0] = m_j[1] = m_Ie = vec3d(0,0,0); 00045 } 00046 00047 if (m_pt) m_pt->Init(bflag); 00048 } 00049 00050 public: 00051 // salt material data 00052 double m_c[2]; 00053 vec3d m_gradc[2]; 00054 vec3d m_j[2]; 00055 double m_ca[2]; 00056 double m_psi; 00057 vec3d m_Ie; 00058 double m_cF; 00059 }; 00060 00061 //----------------------------------------------------------------------------- 00063 00064 class FETriphasic : public FEMaterial 00065 { 00066 public: 00067 FETriphasic(); 00068 00069 // returns a pointer to a new material point object 00070 FEMaterialPoint* CreateMaterialPointData() 00071 { 00072 return new FESaltMaterialPoint(new FEBiphasicMaterialPoint(m_pSolid->CreateMaterialPointData())); 00073 } 00074 00075 // return elastic material component 00076 FEElasticMaterial* GetElasticMaterial() { return m_pSolid; } 00077 00078 public: 00079 void Init(); 00080 00082 mat3ds Stress(FEMaterialPoint& pt); 00083 00085 tens4ds Tangent(FEMaterialPoint& pt); 00086 00088 vec3d FluidFlux(FEMaterialPoint& pt); 00089 00091 vec3d SoluteFlux(FEMaterialPoint& pt, const int ion); 00092 00094 double Pressure(FEMaterialPoint& pt); 00095 00097 double Concentration(FEMaterialPoint& pt, const int ion); 00098 00100 double Porosity(FEMaterialPoint& pt); 00101 00103 double FixedChargeDensity(FEMaterialPoint& pt); 00104 00106 double ElectricPotential(FEMaterialPoint& pt, const bool eform=false); 00107 00109 vec3d CurrentDensity(FEMaterialPoint& pt); 00110 00112 double FluidDensity() { return m_rhoTw; } 00113 00115 double SoluteDensity(const int ion) { return m_pSolute[ion]->Density(); } 00116 00118 double SoluteMolarMass(const int ion) { return m_pSolute[ion]->MolarMass(); } 00119 00121 int SoluteChargeNumber(const int ion) { return m_pSolute[ion]->ChargeNumber(); } 00122 00124 void Serialize(DumpFile& ar); 00125 00126 public: 00127 double m_phi0; 00128 FEElasticMaterial* m_pSolid; 00129 double m_rhoTw; 00130 FEHydraulicPermeability* m_pPerm; 00131 FEOsmoticCoefficient* m_pOsmC; 00132 vector<FESolute*> m_pSolute; 00133 double m_cFr; 00134 double m_Rgas; 00135 double m_Tabs; 00136 double m_Fc; 00137 double m_penalty; 00138 00139 // declare as registered 00140 DECLARE_REGISTERED(FETriphasic); 00141 00142 DECLARE_PARAMETER_LIST(); 00143 };
1.7.5.1