From 6f732c332ef6ad8b33980c033d6f25f8749a3641 Mon Sep 17 00:00:00 2001 From: tnagel <nagelt@tcd.ie> Date: Fri, 3 Apr 2020 19:42:07 +0200 Subject: [PATCH] Added reduced version of Lubby2 and corresponding test. --- MaterialLib/SolidModels/MFront/CMakeLists.txt | 3 +- .../SolidModels/MFront/Lubby2mod.mfront | 80 ++++++ ProcessLib/SmallDeformation/Tests.cmake | 3 +- .../Mechanics/Burgers/cube_1e0_mfront_mod.prj | 251 ++++++++++++++++++ ...1e0_mfront_mod_pcs_0_ts_101_t_1.000000.vtu | 3 + ...e_1e0_mfront_mod_pcs_0_ts_1_t_0.000100.vtu | 3 + 6 files changed, 341 insertions(+), 2 deletions(-) create mode 100644 MaterialLib/SolidModels/MFront/Lubby2mod.mfront create mode 100644 Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod.prj create mode 100644 Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_101_t_1.000000.vtu create mode 100644 Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_1_t_0.000100.vtu diff --git a/MaterialLib/SolidModels/MFront/CMakeLists.txt b/MaterialLib/SolidModels/MFront/CMakeLists.txt index a765275d31d..d1e05c8f850 100644 --- a/MaterialLib/SolidModels/MFront/CMakeLists.txt +++ b/MaterialLib/SolidModels/MFront/CMakeLists.txt @@ -19,7 +19,8 @@ mfront_behaviours_check_library(OgsMFrontBehaviour MohrCoulombAbboSloanOrtho StandardElasticityBrick StandardElasticityBrickOrtho - Lubby2) + Lubby2 + Lubby2mod) target_include_directories(MaterialLib_SolidModels_MFront PUBLIC ThirdParty/MGIS/include) diff --git a/MaterialLib/SolidModels/MFront/Lubby2mod.mfront b/MaterialLib/SolidModels/MFront/Lubby2mod.mfront new file mode 100644 index 00000000000..7e14479a0b3 --- /dev/null +++ b/MaterialLib/SolidModels/MFront/Lubby2mod.mfront @@ -0,0 +1,80 @@ + +@DSL Implicit; +@Behaviour Lubby2mod; +@Author Thomas Nagel, Thomas Helfer; +@Description {Lubby2 model for stationary +and transient creep based on Burgers +rheological model. +Reduced implementation. +}; + +@Algorithm NewtonRaphson; +@MaximumNumberOfIterations 100; + +@Epsilon 1.e-14; +@Theta 1.0; + +@ModellingHypotheses{".+"}; +@Brick StandardElasticity; +@RequireStiffnessTensor<UnAltered>; + +// Intercept of yield function +@MaterialProperty real GK0; +GK0.setEntryName("KelvinShearModulus"); +@MaterialProperty real etaK0; +etaK0.setEntryName("KelvinViscosity"); +@MaterialProperty real etaM0; +etaM0.setEntryName("MaxwellViscosity"); +@MaterialProperty real mK; +mK.setEntryName("KelvinElasticParameter"); +@MaterialProperty real mvK; +mvK.setEntryName("KelvinViscoParameter"); +@MaterialProperty real mvM; +mvM.setEntryName("MaxwellViscoParameter"); + +@AuxiliaryStateVariable Stensor epsK; +epsK.setEntryName("KelvinStrain"); + +//! increment of the Kelvin strain +@LocalVariable Stensor depsK; +//! increment of the Maxwell strain +@LocalVariable Stensor depsM; + +@Integrator { + + const auto seq = sigmaeq(sig); + const auto iseq = 1. / std::max(seq, 1.e-14 * D(0, 0)); + const auto s = deviator(sig); + constexpr auto Pdev = Stensor4::K(); + + const auto etaK = etaK0 * std::exp(mvK * seq); + const auto etaM = etaM0 * std::exp(mvM * seq); + const auto GK = GK0 * std::exp(mK * seq); + + // calculate Kelvin strain residual + const auto etaK_impl = etaK + dt * GK * theta; + depsK = dt / (2. * etaK_impl) * (s - 2 * GK * epsK); + + // calculate Maxwell strain residual + depsM = dt / (2 * etaM) * s; + + // residuals + feel += depsM + depsK; + + // Jacobian + const auto dseq_ddeel = 3. * iseq / 2. * s | (Pdev * D); + const auto detaK_ddeel = etaK * mvK * dseq_ddeel; + const auto detaM_ddeel = etaM * mvM * dseq_ddeel; + const auto dGK_ddeel = GK * mK * dseq_ddeel; + // + dfeel_ddeel += + -(dt / (2 * etaK_impl * etaK_impl) * (s - 2 * GK * epsK) ^ detaK_ddeel) + + (dt / (2 * etaK_impl) * Pdev * D) - dt / etaK_impl * (epsK ^ dGK_ddeel) - + dt / (2 * etaK_impl * etaK_impl) * dt * theta * + ((s - 2 * GK * epsK) ^ dGK_ddeel) - + (dt / (2 * etaM * etaM) * s ^ detaM_ddeel) + (dt / (2 * etaM) * Pdev * D); +} + +@UpdateAuxiliaryStateVariables { + epsK += depsK; +} // end of @UpdateAuxiliaryStateVariables diff --git a/ProcessLib/SmallDeformation/Tests.cmake b/ProcessLib/SmallDeformation/Tests.cmake index 08aad5375cc..a804d38feb6 100644 --- a/ProcessLib/SmallDeformation/Tests.cmake +++ b/ProcessLib/SmallDeformation/Tests.cmake @@ -61,6 +61,7 @@ if (OGS_USE_MFRONT) OgsTest(PROJECTFILE Mechanics/Linear/MFront/square_1e0_orthotropic_45xy_z.prj) OgsTest(PROJECTFILE Mechanics/Linear/MFront/square_1e0_orthotropic_y-xz.prj) OgsTest(PROJECTFILE Mechanics/Burgers/cube_1e0_mfront.prj) + OgsTest(PROJECTFILE Mechanics/Burgers/cube_1e0_mfront_mod.prj) # Linear elastic, no internal state variables, no external state variables. AddTest( NAME Mechanics_SDL_disc_with_hole_mfront @@ -225,4 +226,4 @@ AddTest( DIFF_DATA output_pcs_0_ts_1_t_1.000000.vtu output_pcs_0_ts_1_t_1.000000.vtu displacement displacement 0 1e-12 output_pcs_0_ts_1_t_1.000000.vtu output_pcs_0_ts_1_t_1.000000.vtu principal_stress_values principal_stress_values 0 1e-10 -) \ No newline at end of file +) diff --git a/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod.prj b/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod.prj new file mode 100644 index 00000000000..5f996310863 --- /dev/null +++ b/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod.prj @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh>cube_1x1x1_hex_1e0.vtu</mesh> + <geometry>cube_1x1x1.gml</geometry> + <processes> + <process> + <name>SD</name> + <type>SMALL_DEFORMATION</type> + <integration_order>2</integration_order> + <constitutive_relation> + <type>MFront</type> + <behaviour>Lubby2mod</behaviour> + <material_properties> + <material_property name="YoungModulus" parameter="YoungModulus"/> + <material_property name="PoissonRatio" parameter="PoissonRatio"/> + <material_property name="KelvinShearModulus" parameter="GK0"/> + <material_property name="KelvinViscosity" parameter="etaK0"/> + <material_property name="MaxwellViscosity" parameter="etaM0"/> + <material_property name="KelvinElasticParameter" parameter="mK"/> + <material_property name="MaxwellViscoParameter" parameter="mvM"/> + <material_property name="KelvinViscoParameter" parameter="mvK"/> + </material_properties> + </constitutive_relation> + <solid_density>rho_sr</solid_density> + <specific_body_force>0 0 0</specific_body_force> + <process_variables> + <process_variable>displacement</process_variable> + </process_variables> + <secondary_variables> + <secondary_variable internal_name="sigma" output_name="sigma"/> + </secondary_variables> + </process> + </processes> + <time_loop> + <processes> + <process ref="SD"> + <nonlinear_solver>basic_newton</nonlinear_solver> + <convergence_criterion> + <type>DeltaX</type> + <norm_type>NORM2</norm_type> + <abstol>1e-15</abstol> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial>0</t_initial> + <t_end>1</t_end> + <timesteps> + <pair> + <repeat>1</repeat> + <delta_t>0.0001</delta_t> + </pair> + <pair> + <repeat>100</repeat> + <delta_t>0.01</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>cube_1e0_mfront_mod</prefix> + <timesteps> + <pair> + <repeat>1</repeat> + <each_steps>1</each_steps> + </pair> + <pair> + <repeat>1</repeat> + <each_steps>10000000</each_steps> + </pair> + </timesteps> + <variables> + <variable>displacement</variable> + <variable>sigma</variable> + </variables> + </output> + </time_loop> + <parameters> + <parameter> + <name>GK0</name> + <type>Constant</type> + <value>0.8</value> + </parameter> + <parameter> + <name>etaK0</name> + <type>Constant</type> + <value>0.5</value> + </parameter> + <parameter> + <name>YoungModulus</name> + <type>Constant</type> + <value>1.8</value> + </parameter> + <parameter> + <name>PoissonRatio</name> + <type>Constant</type> + <value>0.125</value> + </parameter> + <parameter> + <name>etaM0</name> + <type>Constant</type> + <value>0.5</value> + </parameter> + <parameter> + <name>mK</name> + <type>Constant</type> + <value>-0.2</value> + </parameter> + <parameter> + <name>mvK</name> + <type>Constant</type> + <value>-0.2</value> + </parameter> + <parameter> + <name>mvM</name> + <type>Constant</type> + <value>-0.3</value> + </parameter> + <parameter> + <name>rho_sr</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>displacement0</name> + <type>Constant</type> + <values>0 0 0</values> + </parameter> + <parameter> + <name>neumann_force</name> + <type>Constant</type> + <values>0.01</values> + </parameter> + <parameter> + <name>dirichlet0</name> + <type>Constant</type> + <value>0</value> + </parameter> + </parameters> + <process_variables> + <process_variable> + <name>displacement</name> + <components>3</components> + <order>1</order> + <initial_condition>displacement0</initial_condition> + <boundary_conditions> + <!-- fixed boundaries --> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>left</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>back</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>front</geometry> + <type>Dirichlet</type> + <component>0</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>front</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>right</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <!-- force --> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>back</geometry> + <type>Neumann</type> + <component>0</component> + <parameter>neumann_force</parameter> + </boundary_condition> + <!-- fix front for the 3d case --> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>top</geometry> + <type>Dirichlet</type> + <component>2</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>bottom</geometry> + <type>Dirichlet</type> + <component>2</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_newton</name> + <type>Newton</type> + <max_iter>4</max_iter> + <linear_solver>general_linear_solver</linear_solver> + </nonlinear_solver> + </nonlinear_solvers> + <linear_solvers> + <linear_solver> + <name>general_linear_solver</name> + <lis>-i cg -p jacobi -tol 1e-16 -maxiter 10000</lis> + <eigen> + <solver_type>CG</solver_type> + <precon_type>DIAGONAL</precon_type> + <max_iteration_step>10000</max_iteration_step> + <error_tolerance>1e-16</error_tolerance> + </eigen> + <petsc> + <prefix>sd</prefix> + <parameters>-sd_ksp_type cg -sd_pc_type bjacobi -sd_ksp_rtol 1e-16 -sd_ksp_max_it 10000</parameters> + </petsc> + </linear_solver> + </linear_solvers> + <test_definition> + <vtkdiff> + <file>cube_1e0_mfront_mod_pcs_0_ts_1_t_0.000100.vtu</file> + <field>displacement</field> + <absolute_tolerance>5e-16</absolute_tolerance> + <relative_tolerance>1e-16</relative_tolerance> + </vtkdiff> + <vtkdiff> + <file>cube_1e0_mfront_mod_pcs_0_ts_101_t_1.000000.vtu</file> + <field>displacement</field> + <absolute_tolerance>5e-16</absolute_tolerance> + <relative_tolerance>1e-16</relative_tolerance> + </vtkdiff> + </test_definition> +</OpenGeoSysProject> diff --git a/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_101_t_1.000000.vtu b/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_101_t_1.000000.vtu new file mode 100644 index 00000000000..e996fa3b051 --- /dev/null +++ b/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_101_t_1.000000.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dad753d851bbe651cd165f809eb49627553be68e13e5926e2ca012aadadabd3 +size 4958 diff --git a/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_1_t_0.000100.vtu b/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_1_t_0.000100.vtu new file mode 100644 index 00000000000..aa613d73b42 --- /dev/null +++ b/Tests/Data/Mechanics/Burgers/cube_1e0_mfront_mod_pcs_0_ts_1_t_0.000100.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b99e8ab5bcfebe29647ec52a0b198a4c0f02ef6e1d2d79ec99d82e4d7e15809 +size 4954 -- GitLab