Skip to content
Snippets Groups Projects
Commit cebb22d2 authored by Christian Silbermann's avatar Christian Silbermann Committed by Dmitri Naumov
Browse files

Replaced initial porosity by volume ratio, removed Time variable

parent 06582d1a
No related branches found
No related tags found
No related merge requests found
...@@ -53,22 +53,17 @@ la.setEntryName("VirginConsolidationLineSlope"); ...@@ -53,22 +53,17 @@ la.setEntryName("VirginConsolidationLineSlope");
pc_char.setEntryName("CharacteristicPreConsolidationPressure"); pc_char.setEntryName("CharacteristicPreConsolidationPressure");
@PhysicalBounds pc_char in [0:*[; @PhysicalBounds pc_char in [0:*[;
// initial values // Initial value of the volume ratio represents the operating point for the linearization.
@MaterialProperty real phi0; @MaterialProperty real v0;
@PhysicalBounds phi0 in [0:1]; @PhysicalBounds v0 in [1:*[;
phi0.setEntryName("InitialPorosity"); v0.setEntryName("InitialVolumeRatio");
@MaterialProperty stress pc0;
pc0.setEntryName("InitialPreConsolidationPressure");
@PhysicalBounds pc0 in [0:*[;
// state variables (beside eel): // state variables (beside eel):
// A "standard" state variable is a persistent state variable and an integration variable. // A "standard" state variable is a persistent state variable and an integration variable.
@StateVariable real lp; @StateVariable real lp;
lp.setGlossaryName("EquivalentPlasticStrain"); lp.setGlossaryName("EquivalentPlasticStrain");
// @StateVariable stress pc; // Reduced (normalized) pre-consolidation pressure for better integration performance
// pc.setEntryName("ReducedPreConsolidationPressure");
@IntegrationVariable strain rpc; @IntegrationVariable strain rpc;
// An auxiliary state variable is a persistent variable but not an integration variable. // An auxiliary state variable is a persistent variable but not an integration variable.
...@@ -82,15 +77,12 @@ epl_V.setEntryName("PlasticVolumetricStrain"); ...@@ -82,15 +77,12 @@ epl_V.setEntryName("PlasticVolumetricStrain");
@PhysicalBounds v in [1:*[; @PhysicalBounds v in [1:*[;
v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore number v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore number
@AuxiliaryStateVariable real Time;
// local variables // local variables
@LocalVariable StressStensor sig0; @LocalVariable StressStensor sig0;
@LocalVariable StiffnessTensor De; @LocalVariable StiffnessTensor De;
@LocalVariable StiffnessTensor dsig_deel; @LocalVariable StiffnessTensor dsig_deel;
@LocalVariable bool withinElasticRange; @LocalVariable bool withinElasticRange;
@LocalVariable real M2; @LocalVariable real M2;
@LocalVariable real v0;
@LocalVariable real young; @LocalVariable real young;
@LocalVariable real pc_min; @LocalVariable real pc_min;
@LocalVariable real rpc_min; @LocalVariable real rpc_min;
...@@ -99,15 +91,7 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb ...@@ -99,15 +91,7 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb
{ {
tfel::raise_if(la < ka, "Invalid parameters: la<ka"); tfel::raise_if(la < ka, "Invalid parameters: la<ka");
M2 = M * M; M2 = M * M;
v0 = 1 / (1 - phi0);
// TODO may fail in restart simulations
if (Time == 0)
{
// initialize state variables
pc = pc0;
v = v0;
}
// update sig0 // update sig0
sig0 = sig; sig0 = sig;
...@@ -165,7 +149,7 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb ...@@ -165,7 +149,7 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb
const auto rpcNew = rpc + theta * drpc; const auto rpcNew = rpc + theta * drpc;
const auto pcNew = rpcNew * young; const auto pcNew = rpcNew * young;
// calculate the direction of plastic flow // calculate the direction of plastic flow
const auto f = (q * q + M2 * p * (p - pcNew)); const auto f = q * q + M2 * p * (p - pcNew);
const auto df_dp = M2 * (2 * p - pcNew); const auto df_dp = M2 * (2 * p - pcNew);
const auto df_dsig = eval(3 * s - df_dp * id2 / 3); const auto df_dsig = eval(3 * s - df_dp * id2 / 3);
auto norm = std::sqrt(6 * q * q + df_dp * df_dp / 3); // = std::sqrt(df_dsig|df_dsig); auto norm = std::sqrt(6 * q * q + df_dp * df_dp / 3); // = std::sqrt(df_dsig|df_dsig);
...@@ -176,7 +160,7 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb ...@@ -176,7 +160,7 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb
auto depl = eval(dlp * n); auto depl = eval(dlp * n);
const auto deplV = trace(depl); const auto deplV = trace(depl);
const auto fchar = pc0 * young; // OR: young*young const auto fchar = pc_char * young;
// residual // residual
feel = deel + depl - deto; feel = deel + depl - deto;
...@@ -212,7 +196,6 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb ...@@ -212,7 +196,6 @@ v.setEntryName("VolumeRatio"); // Total volume per solid volume = 1 + pore numb
// explicit treatment as long as change of v (or e) during time increment is small // explicit treatment as long as change of v (or e) during time increment is small
@UpdateAuxiliaryStateVariables @UpdateAuxiliaryStateVariables
{ {
Time += dt;
pc += drpc * young; pc += drpc * young;
const auto deelV = trace(deel); const auto deelV = trace(deel);
const auto detoV = trace(deto); const auto detoV = trace(deto);
......
...@@ -21,10 +21,13 @@ ...@@ -21,10 +21,13 @@
<material_property name="CriticalStateLineSlope" parameter="CriticalStateLineSlope"/> <material_property name="CriticalStateLineSlope" parameter="CriticalStateLineSlope"/>
<material_property name="SwellingLineSlope" parameter="SwellingLineSlope"/> <material_property name="SwellingLineSlope" parameter="SwellingLineSlope"/>
<material_property name="VirginConsolidationLineSlope" parameter="VirginConsolidationLineSlope"/> <material_property name="VirginConsolidationLineSlope" parameter="VirginConsolidationLineSlope"/>
<material_property name="InitialPreConsolidationPressure" parameter="InitialPreConsolidationPressure"/>
<material_property name="CharacteristicPreConsolidationPressure" parameter="InitialPreConsolidationPressure"/> <material_property name="CharacteristicPreConsolidationPressure" parameter="InitialPreConsolidationPressure"/>
<material_property name="InitialPorosity" parameter="InitialPorosity"/> <material_property name="InitialVolumeRatio" parameter="InitialVolumeRatio"/>
</material_properties> </material_properties>
<initial_values>
<state_variable name="PreConsolidationPressure" parameter="InitialPreConsolidationPressure"/>
<state_variable name="VolumeRatio" parameter="InitialVolumeRatio"/>
</initial_values>
</constitutive_relation> </constitutive_relation>
<solid_density>rho_sr</solid_density> <solid_density>rho_sr</solid_density>
<specific_body_force>0 0</specific_body_force> <specific_body_force>0 0</specific_body_force>
...@@ -152,11 +155,6 @@ ...@@ -152,11 +155,6 @@
<type>Constant</type> <type>Constant</type>
<value>200.e3</value> <!--Pa--> <value>200.e3</value> <!--Pa-->
</parameter> </parameter>
<parameter>
<name>InitialPorosity</name>
<type>Constant</type>
<value>0.44</value>
</parameter>
<parameter> <parameter>
<name>InitialVolumeRatio</name> <name>InitialVolumeRatio</name>
<type>Constant</type> <type>Constant</type>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment