diff --git a/ProcessLib/SmallDeformation/Tests.cmake b/ProcessLib/SmallDeformation/Tests.cmake index db5ce62cf47de41b0a717eb89bf78805fa0ccd7c..2e3ab2a5ed76ba1970208313aeac60f61e7aabf5 100644 --- a/ProcessLib/SmallDeformation/Tests.cmake +++ b/ProcessLib/SmallDeformation/Tests.cmake @@ -204,8 +204,8 @@ AddTest( TESTER vtkdiff REQUIREMENTS NOT OGS_USE_MPI DIFF_DATA - ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu displacement displacement 6e-4 0 - ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu sigma sigma 6e-4 0 + ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu displacement displacement 1e-16 0 + ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu sigma sigma 1e-15 0 ) #With PETSc @@ -345,3 +345,47 @@ AddTest( ref_hertz_contact_ts_10.vtu hertz_pcs_0_ts_10_t_10.000000.vtu epsilon epsilon 1e-16 0 ref_hertz_contact_ts_10.vtu hertz_pcs_0_ts_10_t_10.000000.vtu sigma sigma 1e-16 0 ) + +# Basic test that MFront works at all. +# Linear elastic, no internal state variables, no external state variables. +AddTest( + NAME Mechanics_SDL_disc_with_hole_mfront + PATH Mechanics/Linear/MFront/disc_with_hole + EXECUTABLE ogs + EXECUTABLE_ARGS disc_with_hole.prj + TESTER vtkdiff + REQUIREMENTS OGS_USE_MFRONT AND NOT OGS_USE_MPI + DIFF_DATA + disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu disc_with_hole_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-16 1e-16 + VIS disc_with_hole_pcs_0_ts_4_t_1.000000.vtu +) + +# Tests that internal state variables work correcly. +AddTest( + NAME Mechanics_DruckerPrager_mfront + PATH Mechanics/Ehlers/MFront + EXECUTABLE ogs + EXECUTABLE_ARGS cube_1e0_dp.prj + TESTER vtkdiff + REQUIREMENTS OGS_USE_MFRONT AND NOT OGS_USE_MPI + # The reference solution has been computed by OGS's Ehlers model. + # See also the prj file. + DIFF_DATA + cube_1e0_dp_ref_created_with_OGS_Ehlers.vtu cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu displacement displacement 1e-14 0 + cube_1e0_dp_ref_created_with_OGS_Ehlers.vtu cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu sigma sigma 1e-13 0 + cube_1e0_dp_ref_created_with_OGS_Ehlers.vtu cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu epsilon epsilon 1e-14 0 +) + +# Tests that axial symmetry works correctly. +# NB: Currently (2018-11-06) the plane strain hypothesis is used within MFront! +AddTest( + NAME SmallDeformation_ring_plane_strain_axi_mfront + PATH Mechanics/Linear/MFront/axisymm_ring + EXECUTABLE ogs + EXECUTABLE_ARGS ring_plane_strain.prj + TESTER vtkdiff + REQUIREMENTS OGS_USE_MFRONT AND NOT OGS_USE_MPI + DIFF_DATA + ../../ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu displacement displacement 1e-16 0 + ../../ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu sigma sigma 1e-15 0 +) diff --git a/Tests/Data/Mechanics/Ehlers/MFront/DruckerPrager.mfront b/Tests/Data/Mechanics/Ehlers/MFront/DruckerPrager.mfront new file mode 100644 index 0000000000000000000000000000000000000000..b6a5571748a8b3ed43b1f3b402da321050af8aab --- /dev/null +++ b/Tests/Data/Mechanics/Ehlers/MFront/DruckerPrager.mfront @@ -0,0 +1,72 @@ +@Parser Implicit; +@Behaviour DruckerPrager; +@Algorithm NewtonRaphson_NumericalJacobian; +@Theta 1.; + +@MaterialProperty real young; +young.setGlossaryName("YoungModulus"); +@MaterialProperty real nu; +nu.setGlossaryName("PoissonRatio"); +@MaterialProperty real kappa; +@MaterialProperty real beta; + +@StateVariable real pla_mult; +@StateVariable real a; + +@LocalVariable stress lambda; +@LocalVariable stress mu; +@LocalVariable stress Fel; +@LocalVariable StressStensor s0; + +@InitLocalVariables { + lambda = computeLambda(young, nu); + mu = computeMu(young, nu); + StressStensor sigel(lambda * trace(eel + deto) * Stensor::Id() + + 2 * mu * (eel + deto)); + const auto s_dev = deviator(sigel); + const stress J2 = (s_dev|s_dev)/2.; + const stress I1 = trace(sigel); + + Fel = sqrt(J2) + beta * I1 - kappa; +} + +@ComputeStress { + sig = (lambda * trace(eel) * Stensor::Id() + 2 * mu * eel); +} + +@Integrator { + Stensor s_dev = deviator(sig); + + if (Fel > 0) { + Stensor nq = sqrt(3.)/2./sigmaeq(sig)*s_dev; + Stensor np = 1.0 * Stensor::Id(); + + const auto yield = sqrt((s_dev|s_dev)/2.) + beta * trace(sig) - kappa; + + const auto dev_flow = 1.0; + const auto iso_flow = beta; + + feel = + deel - deto + dpla_mult * (nq * dev_flow + np * iso_flow); + fpla_mult = yield / young; + fa = da - sqrt(2. / 3. * (dpla_mult * (nq * dev_flow + np * iso_flow)) | + (dpla_mult * (nq * dev_flow + np * iso_flow))); + + } else { + feel = deel - deto ; + } +} + +@TangentOperator { + if ((smt == ELASTIC) || (smt == SECANTOPERATOR)) { + computeElasticStiffness<N, Type>::exe(Dt, lambda, mu); + } else if (smt == CONSISTENTTANGENTOPERATOR) { + StiffnessTensor De; + Stensor4 Je; + computeElasticStiffness<N, Type>::exe(De, lambda, mu); + getPartialJacobianInvert(Je); + Dt = De * Je; + } else { + return false; + } +} diff --git a/Tests/Data/Mechanics/Ehlers/MFront/DruckerPrager.so b/Tests/Data/Mechanics/Ehlers/MFront/DruckerPrager.so new file mode 100755 index 0000000000000000000000000000000000000000..a311106f008e899cd4c8fe9eb3146de01d08ee50 Binary files /dev/null and b/Tests/Data/Mechanics/Ehlers/MFront/DruckerPrager.so differ diff --git a/Tests/Data/Mechanics/Ehlers/MFront/cube_1e0_dp.prj b/Tests/Data/Mechanics/Ehlers/MFront/cube_1e0_dp.prj new file mode 100644 index 0000000000000000000000000000000000000000..b82f2f3250c89fe0a17890a2b0f01aec1626e1f0 --- /dev/null +++ b/Tests/Data/Mechanics/Ehlers/MFront/cube_1e0_dp.prj @@ -0,0 +1,357 @@ +<?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> + + <library>DruckerPrager.so</library> + <behaviour>DruckerPrager</behaviour> + + <material_properties> + <material_property name="YoungModulus" parameter="E" /> + <material_property name="PoissonRatio" parameter="nu" /> + <material_property name="beta" parameter="beta" /> + <material_property name="kappa" parameter="kappa" /> + </material_properties> + </constitutive_relation> + + <!-- Configuration of the Ehlers model used to compute the reference solution. + <constitutive_relation> + <type>Ehlers</type> + <shear_modulus>G</shear_modulus> + <bulk_modulus>K</bulk_modulus> + <kappa>kappa</kappa> + <beta>beta</beta> + <gamma>gamma</gamma> + <hardening_modulus>hard</hardening_modulus> + <alpha>alpha</alpha> + <delta>delta</delta> + <eps>epsilon</eps> + <m>m</m> + <alphap>alphap</alphap> + <deltap>deltap</deltap> + <epsp>epsilonp</epsp> + <mp>mp</mp> + <betap>betap</betap> + <gammap>gammap</gammap> + <nonlinear_solver> + <maximum_iterations>100</maximum_iterations> + <error_tolerance>1e-14</error_tolerance> + </nonlinear_solver> + </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 type="static" internal_name="sigma" output_name="sigma"/> + <secondary_variable type="static" internal_name="epsilon" output_name="epsilon"/> + </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-14</abstol> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <output> + <variables> + <variable>displacement</variable> + <variable>sigma</variable> + <variable>epsilon</variable> + </variables> + </output> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial>0</t_initial> + <t_end>5.1</t_end> + <timesteps> + <pair> + <repeat>1</repeat> + <delta_t>0.05</delta_t> + </pair> + <pair> + <repeat>1000</repeat> + <delta_t>0.025</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>cube_1e0_dp</prefix> + <timesteps> + <pair> + <repeat>1</repeat> + <each_steps>1</each_steps> + </pair> + </timesteps> + </output> + </time_loop> + <parameters> + <parameter> + <name>E</name> + <type>Constant</type> + <value>360 <!-- 9 K G / (3 K + G) --></value> + </parameter> + <parameter> + <name>nu</name> + <type>Constant</type> + <value>0.2 <!-- (3 K - 2 G) / 2 / (3 K + G) --></value> + </parameter> + + <parameter> + <name>kappa</name> + <type>Constant</type> + <value>0.0866</value> + </parameter> + + <parameter> + <name>beta</name> + <type>Constant</type> + <value>0.1667</value> + </parameter> + + <!-- Parameter values of the Ehlers model used to compute the reference solution. + <parameter> + <name>G</name> + <type>Constant</type> + <value>150.</value> + </parameter> + <parameter> + <name>K</name> + <type>Constant</type> + <value>200.</value> + </parameter> + <parameter> + <name>gamma</name> + <type>Constant</type> + <value>1.</value> + </parameter> + <parameter> + <name>hard</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>alpha</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>delta</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>epsilon</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>m</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>alphap</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>deltap</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>epsilonp</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>mp</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>betap</name> + <type>Constant</type> + <value>0.1667</value> + </parameter> + <parameter> + <name>gammap</name> + <type>Constant</type> + <value>1.</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>Dirichlet_left</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>Dirichlet_bottom</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>Dirichlet_front</name> + <type>Constant</type> + <value>0.</value> + </parameter> + <parameter> + <name>Dirichlet_top_spatial</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>Neumann_spatial</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>Dirichlet_top</name> + <type>CurveScaled</type> + <curve>Dirichlet_top_temporal</curve> + <parameter>Dirichlet_top_spatial</parameter> + </parameter> + <parameter> + <name>Neumann_force_right</name> + <type>CurveScaled</type> + <curve>Neumann_temporal_right</curve> + <parameter>Neumann_spatial</parameter> + </parameter> + <parameter> + <name>Neumann_force_top</name> + <type>CurveScaled</type> + <curve>Neumann_temporal_top</curve> + <parameter>Neumann_spatial</parameter> + </parameter> + </parameters> + <curves> + <curve> + <name>Dirichlet_top_temporal</name> + <coords>0.0 4.8 5.1</coords> + <values>0.0 -0.004 -0.003</values> + </curve> + <curve> + <name>Neumann_temporal_right</name> + <coords>0.0 5.1</coords> + <values>0.0 0.0</values> + </curve> + <curve> + <name>Neumann_temporal_top</name> + <coords>0.0 5.1</coords> + <values>0 0.0</values> + </curve> + </curves> + <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>0</component> + <parameter>Dirichlet_left</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>front</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>Dirichlet_front</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>bottom</geometry> + <type>Dirichlet</type> + <component>2</component> + <parameter>Dirichlet_bottom</parameter> + </boundary_condition> + <!-- force --> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>right</geometry> + <type>Neumann</type> + <component>0</component> + <parameter>Neumann_force_right</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>back</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>Dirichlet_top</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>top</geometry> + <type>Neumann</type> + <component>2</component> + <parameter>Neumann_force_top</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-16 -maxiter 10000</lis> + <eigen> + <solver_type>BiCGSTAB</solver_type> + <precon_type>NONE</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> +</OpenGeoSysProject> diff --git a/Tests/Data/Mechanics/Ehlers/MFront/cube_1e0_dp_ref_created_with_OGS_Ehlers.vtu b/Tests/Data/Mechanics/Ehlers/MFront/cube_1e0_dp_ref_created_with_OGS_Ehlers.vtu new file mode 100644 index 0000000000000000000000000000000000000000..9d78b88d91fa0d8f962dfe00a1ac4335416df500 --- /dev/null +++ b/Tests/Data/Mechanics/Ehlers/MFront/cube_1e0_dp_ref_created_with_OGS_Ehlers.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb8c75862991401766afce1445e3c43e2c9f3c65424a61adaafc658ce5a8e4c7 +size 4682 diff --git a/Tests/Data/Mechanics/Linear/MFront/axisymm_ring/ring_plane_strain.prj b/Tests/Data/Mechanics/Linear/MFront/axisymm_ring/ring_plane_strain.prj new file mode 100644 index 0000000000000000000000000000000000000000..a0cb430ff40cbb051d50d081c62b520523c7bbe5 --- /dev/null +++ b/Tests/Data/Mechanics/Linear/MFront/axisymm_ring/ring_plane_strain.prj @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh axially_symmetric="true">../../square_1x1_quad_1e4_translated.vtu</mesh> + <geometry>../../square_1x1_ring.gml</geometry> + <processes> + <process> + <name>SD</name> + <type>SMALL_DEFORMATION</type> + <integration_order>2</integration_order> + <constitutive_relation> + <type>MFront</type> + + <library>../disc_with_hole/libBehaviour.so</library> + <behaviour>Elasticity</behaviour> + + <material_properties> + <material_property name="YoungModulus" parameter="E" /> + <material_property name="PoissonRatio" parameter="nu" /> + </material_properties> + </constitutive_relation> + <solid_density>rho_sr</solid_density> + <specific_body_force>0 0</specific_body_force> + <process_variables> + <process_variable>displacement</process_variable> + </process_variables> + <secondary_variables> + <secondary_variable type="static" 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> + <output> + <variables> + <variable>displacement</variable> + <variable>sigma</variable> + </variables> + </output> + <time_stepping> + <type>SingleStep</type> + </time_stepping> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>ring_plane_strain</prefix> + <timesteps> + <pair> + <repeat>1</repeat> + <each_steps>10000000</each_steps> + </pair> + </timesteps> + </output> + </time_loop> + <parameters> + <parameter> + <name>E</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>nu</name> + <type>Constant</type> + <value>.25</value> + </parameter> + <parameter> + <name>rho_sr</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>displacement_initial</name> + <type>Constant</type> + <values>0 0</values> + </parameter> + <parameter> + <name>displacement_bottom</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>pressure_inner</name> + <type>Constant</type> + <value>0.02</value> + </parameter> + <parameter> + <name>pressure_outer</name> + <type>Constant</type> + <value>-0.01</value> + </parameter> + </parameters> + <process_variables> + <process_variable> + <name>displacement</name> + <components>2</components> + <order>1</order> + <initial_condition>displacement_initial</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>square_1x1_geometry</geometrical_set> + <geometry>inner</geometry> + <type>Neumann</type> + <component>0</component> + <parameter>pressure_inner</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>square_1x1_geometry</geometrical_set> + <geometry>outer</geometry> + <type>Neumann</type> + <component>0</component> + <parameter>pressure_outer</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>square_1x1_geometry</geometrical_set> + <geometry>bottom</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>displacement_bottom</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>square_1x1_geometry</geometrical_set> + <geometry>top</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>displacement_bottom</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_newton</name> + <type>Newton</type> + <max_iter>10</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> +</OpenGeoSysProject> diff --git a/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.gml b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.gml new file mode 100644 index 0000000000000000000000000000000000000000..8dc11d3ec617edbb3c255f861ec1f3da028672f4 --- /dev/null +++ b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.gml @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1a6ae81343ec6b580a28043dcf70fc432d4dcd6d975fe3387a0b5f2c65fd75d +size 4991 diff --git a/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.prj b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.prj new file mode 100644 index 0000000000000000000000000000000000000000..18e7eb40a3b8c340a2d74ac9d53463909fca5ff2 --- /dev/null +++ b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.prj @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh>disc_with_hole.vtu</mesh> + <geometry>disc_with_hole.gml</geometry> + <processes> + <process> + <name>SD</name> + <type>SMALL_DEFORMATION</type> + <integration_order>2</integration_order> + <constitutive_relation> + <type>MFront</type> + + <library>libBehaviour.so</library> + <behaviour>Elasticity</behaviour> + + <material_properties> + <material_property name="YoungModulus" parameter="E" /> + <material_property name="PoissonRatio" parameter="nu" /> + </material_properties> + </constitutive_relation> + <solid_density>rho_sr</solid_density> + <specific_body_force>0 0</specific_body_force> + <process_variables> + <process_variable>displacement</process_variable> + </process_variables> + <secondary_variables> + <secondary_variable type="static" 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> + <output> + <variables> + <variable>displacement</variable> + <variable>sigma</variable> + </variables> + </output> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial>0</t_initial> + <t_end>1</t_end> + <timesteps> + <pair> + <repeat>4</repeat> + <delta_t>0.25</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>disc_with_hole</prefix> + <timesteps> + <pair> + <repeat>1</repeat> + <each_steps>10000000</each_steps> + </pair> + </timesteps> + </output> + </time_loop> + <parameters> + <parameter> + <name>E</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>nu</name> + <type>Constant</type> + <value>.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</values> + </parameter> + <parameter> + <name>dirichlet0</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>dirichlet1</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>neumann_force</name> + <type>Constant</type> + <values>0.01</values> + </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>disc_with_hole</geometrical_set> + <geometry>LEFT</geometry> + <type>Dirichlet</type> + <component>0</component> + <parameter>dirichlet0</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>disc_with_hole</geometrical_set> + <geometry>BOTTOM</geometry> + <type>Dirichlet</type> + <component>1</component> + <parameter>dirichlet1</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>disc_with_hole</geometrical_set> + <geometry>TOP</geometry> + <type>Neumann</type> + <component>1</component> + <parameter>neumann_force</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_newton</name> + <type>Newton</type> + <max_iter>5</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> +</OpenGeoSysProject> diff --git a/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.vtu b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.vtu new file mode 100644 index 0000000000000000000000000000000000000000..591a5b3abec9fda237f24c5689033cf1a30acc9c --- /dev/null +++ b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d25d38cfa4a6c2d636362a725a9fe894bc28ed9a1077b5a60b4f49a01e0e7528 +size 85958 diff --git a/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu new file mode 100644 index 0000000000000000000000000000000000000000..4a5cb8d838a3b6e7c6e3bfb78f9ebe97bda65cfa --- /dev/null +++ b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47246d66ed28f2be82c398df0bdca2dd679734a91611f2a27c33904d6d68cbdb +size 101662 diff --git a/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/elasticity.mfront b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/elasticity.mfront new file mode 100644 index 0000000000000000000000000000000000000000..a985c58315e3a4ffeed3048da9945e4b7f76892c --- /dev/null +++ b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/elasticity.mfront @@ -0,0 +1,32 @@ +@Behaviour Elasticity; +@Author Helfer Thomas; +@Date 23/11/06; +@Description{ + A very first test + (the most simple one in fact). +} + +@UseQt true; +@ProvidesSymmetricTangentOperator; + +@MaterialProperty stress young; +young.setGlossaryName("YoungModulus"); +@MaterialProperty real nu; +nu.setGlossaryName("PoissonRatio"); + +@LocalVariable stress lambda; +@LocalVariable stress mu; + +@Includes{ +#include"TFEL/Material/Lame.hxx" +} + +@Integrator{ + using namespace tfel::material::lame; + lambda = computeLambda(young,nu); + mu = computeMu(young,nu); + sig = lambda*trace(eto+deto)*StrainStensor::Id()+2*mu*(eto+deto); + if(computeTangentOperator_){ + Dt = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); + } +} diff --git a/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/libBehaviour.so b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/libBehaviour.so new file mode 100755 index 0000000000000000000000000000000000000000..93632cd232f2d286a7400d749ef622ae8b81f758 Binary files /dev/null and b/Tests/Data/Mechanics/Linear/MFront/disc_with_hole/libBehaviour.so differ