Skip to content
Snippets Groups Projects
Commit cc01fcf6 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

Merge branch 'BGRa_ext' into 'master'

New stationary creep model for rock salt

See merge request ogs/ogs!3745
parents dd7be456 056c5dab
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,7 @@ mfront_behaviours_check_library(
MohrCoulombAbboSloanOrtho
MohrCoulombAbboSloanUBI
MohrCoulombAbboSloanUBIOrtho
PowerLawLinearCreep
StandardElasticityBrick
StandardElasticityBrickOrtho
)
......
@DSL Implicit;
@Behaviour PowerLawLinearCreep;
@Author Thomas Nagel;
@Description {Combined power-law (dislocation creep) and linear (pressure-solution creep)
model for salt creep. Bérest et al. (2019). Rock Mech Rock Eng.
};
@Algorithm NewtonRaphson;
@MaximumNumberOfIterations 100;
@Epsilon 1.e-14;
@Theta 1.0;
@ModellingHypotheses{".+"};
@Brick StandardElasticity;
// Intercept of yield function
@MaterialProperty real A1;
A1.setEntryName("PowerLawFactor");
@MaterialProperty real Q1;
Q1.setEntryName("PowerLawEnergy");
@MaterialProperty real m;
m.setEntryName("PowerLawExponent");
@MaterialProperty real A2;
A2.setEntryName("LinearLawFactor");
@MaterialProperty real Q2;
Q2.setEntryName("LinearLawEnergy");
@MaterialProperty real sig0;
sig0.setEntryName("ReferenceStress");
@MaterialProperty real Dgrain;
Dgrain.setEntryName("SaltGrainSize");
@Parameter real Ru = 8.314472; // J/(Kmol)
Ru.setEntryName("UniversalGasConstant");
//! increment of the power-law strain
@LocalVariable Stensor depsPL;
//! increment of the linear-law strain
@LocalVariable Stensor depsL;
//! Second Lamé coefficient
@LocalVariable stress mu;
@InitLocalVariables
{
mu = computeMu(young, nu);
// Compute initial elastic strain
eel = 1. / (2. * mu) * sig - nu / young * trace(sig) * Stensor::Id();
}
@Integrator
{
const auto s = deviator(sig);
const auto norm_s = sigmaeq(sig) / std::sqrt(3. / 2.);
constexpr auto Pdev = Stensor4::K();
const auto bPL = std::pow(3. / 2., (m + 1) / 2) * A1 *
std::exp(-Q1 / Ru / (T + dT)) / std::pow(sig0, m);
const auto bL = 3. / 2. * A2 / std::pow(Dgrain, 3) *
std::exp(-Q2 / Ru / (T + dT)) / sig0;
if (norm_s > 1e-14 * mu)
{
const auto norm_s_pow = std::pow(norm_s, m - 1);
depsPL = dt * bPL * norm_s_pow * s;
depsL = dt * bL * s;
feel += depsPL + depsL;
dfeel_ddeel +=
2. * mu * dt *
(bPL * norm_s_pow * (Pdev + (((m - 1) / norm_s / norm_s) * s ^ s)) +
bL * Pdev);
}
}
......@@ -283,6 +283,19 @@ AddTest(
SimpleAxisymmetricCreepWithAnalyticSolution.vtu SimpleAxisymmetricCreepWithAnalyticalSolution_ts_1000_t_100.000000.vtu analytic_strain epsilon 1e-7 0
)
AddTest(
NAME ThermoMechanics_CreepBGRa_SimpleAxisymmetricCreepWithAnalyticSolutionMFront
PATH ThermoMechanics/CreepBGRa/SimpleAxisymmetricCreep
EXECUTABLE ogs
EXECUTABLE_ARGS SimpleAxisymmetricCreepWithAnalyticSolutionMFront.prj
WRAPPER time
TESTER vtkdiff
REQUIREMENTS OGS_USE_MFRONT AND NOT (OGS_USE_LIS OR OGS_USE_MPI)
RUNTIME 22
DIFF_DATA
SimpleAxisymmetricCreepWithAnalyticSolutionMFront.vtu SimpleAxisymmetricCreepWithAnalyticalSolutionMFront_ts_1000_t_100.000000.vtu analytic_strain epsilon 2e-6 0
)
AddTest(
NAME ThermoMechanics_CreepAfterExcavation
PATH ThermoMechanics/CreepBGRa/CreepAfterExcavation
......
<?xml version="1.0" encoding="ISO-8859-1"?>
<OpenGeoSysProject>
<mesh axially_symmetric="true">SimpleAxisymmetricCreepWithAnalyticSolutionMFront.vtu</mesh>
<geometry>boundary.gml</geometry>
<processes>
<process>
<name>ThermoMechanics</name>
<type>THERMO_MECHANICS</type>
<integration_order>2</integration_order>
<constitutive_relation>
<type>MFront</type>
<behaviour>PowerLawLinearCreep</behaviour>
<material_properties>
<material_property name="YoungModulus" parameter="E"/>
<material_property name="PoissonRatio" parameter="nu"/>
<material_property name="PowerLawFactor" parameter="A"/>
<material_property name="PowerLawEnergy" parameter="Q"/>
<material_property name="PowerLawExponent" parameter="n"/>
<material_property name="ReferenceStress" parameter="sigma_f"/>
<material_property name="LinearLawFactor" parameter="A2"/>
<material_property name="LinearLawEnergy" parameter="Q"/>
<material_property name="SaltGrainSize" parameter="Dgrain"/>
</material_properties>
</constitutive_relation>
<process_variables>
<displacement>displacement</displacement>
<temperature>temperature</temperature>
</process_variables>
<secondary_variables>
<secondary_variable internal_name="sigma" output_name="sigma"/>
<secondary_variable internal_name="epsilon" output_name="epsilon"/>
</secondary_variables>
<specific_body_force>0 0</specific_body_force>
</process>
</processes>
<media>
<medium>
<phases>
<phase>
<type>Solid</type>
<properties>
<property>
<name>density</name>
<type>Constant</type>
<value>0.</value>
</property>
<property>
<name>specific_heat_capacity</name>
<type>Constant</type>
<value>100</value>
</property>
<property>
<name>thermal_conductivity</name>
<type>Constant</type>
<value>1</value>
</property>
<property>
<name>thermal_expansivity</name>
<type>Constant</type>
<value>4e-5</value>
</property>
</properties>
</phase>
</phases>
</medium>
</media>
<time_loop>
<processes>
<process ref="ThermoMechanics">
<nonlinear_solver>basic_newton</nonlinear_solver>
<convergence_criterion>
<type>PerComponentDeltaX</type>
<norm_type>NORM2</norm_type>
<abstols>5e-12 1e-16 1e-16</abstols>
</convergence_criterion>
<time_discretization>
<type>BackwardEuler</type>
</time_discretization>
<time_stepping>
<type>FixedTimeStepping</type>
<t_initial>0</t_initial>
<t_end>100</t_end>
<timesteps>
<pair>
<repeat>100</repeat>
<delta_t>0.1</delta_t>
</pair>
</timesteps>
</time_stepping>
</process>
</processes>
<output>
<type>VTK</type>
<prefix>SimpleAxisymmetricCreepWithAnalyticalSolutionMFront</prefix>
<timesteps>
<pair>
<repeat>10</repeat>
<each_steps>100</each_steps>
</pair>
</timesteps>
<variables>
<variable>displacement</variable>
<variable>temperature</variable>
<variable>sigma</variable>
<variable>epsilon</variable>
</variables>
<suffix>_ts_{:timestep}_t_{:time}</suffix>
</output>
</time_loop>
<parameters>
<parameter>
<name>A</name>
<type>Constant</type>
<value>0.18</value>
</parameter>
<parameter>
<name>n</name>
<type>Constant</type>
<value>5.0</value>
</parameter>
<parameter>
<name>sigma_f</name>
<type>Constant</type>
<value>1</value>
</parameter>
<parameter>
<name>Q</name>
<type>Constant</type>
<value>54000</value>
</parameter>
<parameter>
<name>A2</name>
<type>Constant</type>
<value>0.0</value>
</parameter>
<parameter>
<name>Dgrain</name>
<type>Constant</type>
<value>5e-2</value>
</parameter>
<parameter>
<name>E</name>
<type>Constant</type>
<value>25000</value>
</parameter>
<parameter>
<name>nu</name>
<type>Constant</type>
<value>0.27</value>
</parameter>
<parameter>
<name>temperature_ic</name>
<type>Constant</type>
<value>373.15</value>
</parameter>
<parameter>
<name>temperature_bc</name>
<type>Constant</type>
<value>373.15</value>
</parameter>
<parameter>
<name>displacement0</name>
<type>Constant</type>
<values>0 0</values>
</parameter>
<parameter>
<name>dirichlet0</name>
<type>Constant</type>
<value>0</value>
</parameter>
<parameter>
<name>m_pressure</name>
<type>Constant</type>
<value>5.0</value>
</parameter>
</parameters>
<process_variables>
<process_variable>
<name>displacement</name>
<components>2</components>
<order>1</order>
<initial_condition>displacement0</initial_condition>
<boundary_conditions>
<boundary_condition>
<geometrical_set>cpreepBGRA</geometrical_set>
<geometry>bottom</geometry>
<type>Neumann</type>
<component>1</component>
<parameter>m_pressure</parameter>
</boundary_condition>
<boundary_condition>
<geometrical_set>cpreepBGRA</geometrical_set>
<geometry>top</geometry>
<type>Dirichlet</type>
<component>1</component>
<parameter>dirichlet0</parameter>
</boundary_condition>
</boundary_conditions>
</process_variable>
<process_variable>
<name>temperature</name>
<components>1</components>
<order>1</order>
<initial_condition>temperature_ic</initial_condition>
<boundary_conditions>
<boundary_condition>
<geometrical_set>cpreepBGRA</geometrical_set>
<geometry>top</geometry>
<type>Dirichlet</type>
<parameter>temperature_bc</parameter>
</boundary_condition>
<boundary_condition>
<geometrical_set>cpreepBGRA</geometrical_set>
<geometry>bottom</geometry>
<type>Dirichlet</type>
<parameter>temperature_bc</parameter>
</boundary_condition>
</boundary_conditions>
</process_variable>
</process_variables>
<nonlinear_solvers>
<nonlinear_solver>
<name>basic_newton</name>
<type>Newton</type>
<max_iter>50</max_iter>
<linear_solver>general_linear_solver</linear_solver>
</nonlinear_solver>
</nonlinear_solvers>
<linear_solvers>
<linear_solver>
<name>general_linear_solver</name>
<lis>-i bicgstab -p jacobi -tol 1e-11 -maxiter 10000</lis>
<eigen>
<solver_type>BiCGSTAB</solver_type>
<precon_type>DIAGONAL</precon_type>
<max_iteration_step>10000</max_iteration_step>
<error_tolerance>1e-17</error_tolerance>
</eigen>
</linear_solver>
</linear_solvers>
</OpenGeoSysProject>
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