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

Merge branch 'B_bar_linear' into 'master'

B bar method for linear deformation

See merge request ogs/ogs!5007
parents cf2a8e08 a6aa3355
No related branches found
No related tags found
No related merge requests found
Showing
with 584 additions and 33 deletions
\copydoc ProcessLib::SmallDeformation::SmallDeformationProcessData::use_b_bar
...@@ -464,3 +464,15 @@ doi = {https://doi.org/10.1029/TR038i002p00222}, ...@@ -464,3 +464,15 @@ doi = {https://doi.org/10.1029/TR038i002p00222},
url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/TR038i002p00222}, url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/TR038i002p00222},
year = {1957} year = {1957}
} }
@article{hughes1980generalization,
title={Generalization of selective integration procedures to anisotropic and nonlinear media},
author={Hughes, Thomas JR},
journal={International Journal for Numerical Methods in Engineering},
volume={15},
number={9},
pages={1413--1418},
year={1980},
url = {https://doi.org/10.1002/nme.1620150914},
publisher={Wiley Online Library}
}
...@@ -53,5 +53,7 @@ public: ...@@ -53,5 +53,7 @@ public:
MatrixType<_kelvin_vector_size, _kelvin_vector_size>; MatrixType<_kelvin_vector_size, _kelvin_vector_size>;
using BMatrixType = MatrixType<_kelvin_vector_size, _number_of_dof>; using BMatrixType = MatrixType<_kelvin_vector_size, _number_of_dof>;
using BBarMatrixType = MatrixType<3, ShapeFunction::NPOINTS>;
}; };
} // namespace ProcessLib } // namespace ProcessLib
...@@ -10,8 +10,12 @@ ...@@ -10,8 +10,12 @@
#pragma once #pragma once
#include <Eigen/Core>
#include <cmath> #include <cmath>
#include <optional>
#include "MeshLib/Elements/Elements.h"
#include "NumLib/Fem/Integration/GenericIntegrationMethod.h"
#include "ProcessLib/Deformation/BMatrixPolicy.h" #include "ProcessLib/Deformation/BMatrixPolicy.h"
namespace ProcessLib namespace ProcessLib
...@@ -81,5 +85,129 @@ BMatrixType computeBMatrix(DNDX_Type const& dNdx, ...@@ -81,5 +85,129 @@ BMatrixType computeBMatrix(DNDX_Type const& dNdx,
return B; return B;
} }
template <int DisplacementDim, int NPOINTS, typename ShapeFunction,
typename BBarMatrixType, typename ShapeMatricesType, typename IpData>
BBarMatrixType computeDilatationalBbar(
std::vector<IpData, Eigen::aligned_allocator<IpData>> const& ip_data,
MeshLib::Element const& element,
NumLib::GenericIntegrationMethod const& integration_method,
const bool is_axially_symmetric)
{
unsigned const n_integration_points =
integration_method.getNumberOfPoints();
BBarMatrixType B_bar = BBarMatrixType::Zero(3, ShapeFunction::NPOINTS);
// Compute the element volume
double volume = 0.0;
for (unsigned ip = 0; ip < n_integration_points; ip++)
{
auto const& w = ip_data[ip].integration_weight;
volume += w;
}
for (int i = 0; i < NPOINTS; i++)
{
auto B_bar_i = B_bar.col(i);
for (unsigned ip = 0; ip < n_integration_points; ip++)
{
auto const& N = ip_data[ip].N_u;
auto const& dNdx = ip_data[ip].dNdx_u;
auto const dNidx = dNdx.col(i);
auto const& w = ip_data[ip].integration_weight;
B_bar_i.template segment<DisplacementDim>(0) += dNidx * w;
if (is_axially_symmetric)
{
auto const x_coord =
NumLib::interpolateXCoordinate<ShapeFunction,
ShapeMatricesType>(element,
N);
B_bar_i[2] += w * N(i) / x_coord;
}
}
}
return B_bar / volume;
}
namespace detail
{
template <int DisplacementDim, int NPOINTS, typename BBarMatrixType,
typename BMatrixType>
void applyBbar(BBarMatrixType const& B_bar, BMatrixType& B,
const bool is_axially_symmetric)
{
if constexpr (DisplacementDim == 3)
{
for (int i = 0; i < NPOINTS; ++i)
{
auto const B_bar_i = B_bar.col(i);
// The following loop is based on the following facts:
// B1 (dN/dx) is the 1st element of the 1st column of B,
// B2 (dN/dy) is the 2nd element of the 2nd column of B,
// B3 (dN/dz) is the 3rd element of the 3rd column of B.
for (int k = 0; k < 3; k++)
{
// k-th column of B matrix at node i
auto B_i_k = B.col(k * NPOINTS + i);
B_i_k.template segment<3>(0) -=
Eigen::Vector3d::Constant((B_i_k[k] - B_bar_i[k]) / 3.0);
}
}
return;
}
// 2D or axisymmetry
for (int i = 0; i < NPOINTS; ++i)
{
auto B_i_0 = B.col(i);
auto B_i_1 = B.col(NPOINTS + i);
auto const B_bar_i = B_bar.col(i);
double const b0_dil_pertubation =
is_axially_symmetric
? (B_i_0[0] - B_bar_i[0] + B_i_0[2] - B_bar_i[2])
: (B_i_0[0] - B_bar_i[0]);
B_i_0.template segment<3>(0) -=
Eigen::Vector3d::Constant((b0_dil_pertubation) / 3.);
B_i_1.template segment<3>(0) -=
Eigen::Vector3d::Constant((B_i_1[1] - B_bar_i[1]) / 3.);
}
}
} // namespace detail
/// Fills a B matrix, or a B bar matrix if required.
template <int DisplacementDim, int NPOINTS, typename BBarMatrixType,
typename BMatrixType, typename N_Type, typename DNDX_Type>
BMatrixType computeBMatrixPossiblyWithBbar(
DNDX_Type const& dNdx,
N_Type const& N,
std::optional<BBarMatrixType> const& B_dil_bar,
const double radius,
const bool is_axially_symmetric)
{
auto B = computeBMatrix<DisplacementDim, NPOINTS, BMatrixType, N_Type,
DNDX_Type>(dNdx, N, radius, is_axially_symmetric);
if (!B_dil_bar)
{
return B;
}
detail::applyBbar<DisplacementDim, NPOINTS, BBarMatrixType, BMatrixType>(
*B_dil_bar, B, is_axially_symmetric);
return B;
}
} // namespace LinearBMatrix } // namespace LinearBMatrix
} // namespace ProcessLib } // namespace ProcessLib
...@@ -111,6 +111,9 @@ std::unique_ptr<Process> createSmallDeformationProcess( ...@@ -111,6 +111,9 @@ std::unique_ptr<Process> createSmallDeformationProcess(
std::copy_n(b.data(), b.size(), specific_body_force.data()); std::copy_n(b.data(), b.size(), specific_body_force.data());
} }
//! \ogs_file_param{prj__processes__process__SMALL_DEFORMATION__use_b_bar}
auto const use_b_bar = config.getConfigParameter<bool>("use_b_bar", false);
auto media_map = auto media_map =
MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh); MaterialPropertyLib::createMaterialSpatialDistributionMap(media, mesh);
DBUG( DBUG(
...@@ -144,7 +147,8 @@ std::unique_ptr<Process> createSmallDeformationProcess( ...@@ -144,7 +147,8 @@ std::unique_ptr<Process> createSmallDeformationProcess(
std::move(solid_constitutive_relations), std::move(solid_constitutive_relations),
initial_stress, initial_stress,
specific_body_force, specific_body_force,
reference_temperature}; reference_temperature,
use_b_bar};
SecondaryVariableCollection secondary_variables; SecondaryVariableCollection secondary_variables;
......
...@@ -53,15 +53,15 @@ std::vector<double> const& getMaterialForces( ...@@ -53,15 +53,15 @@ std::vector<double> const& getMaterialForces(
for (unsigned ip = 0; ip < n_integration_points; ip++) for (unsigned ip = 0; ip < n_integration_points; ip++)
{ {
auto const& sigma = stress_data[ip].stress_data.sigma; auto const& sigma = stress_data[ip].stress_data.sigma;
auto const& N = _ip_data[ip].N; auto const& N = _ip_data[ip].N_u;
auto const& dNdx = _ip_data[ip].dNdx; auto const& dNdx = _ip_data[ip].dNdx_u;
auto const& psi = auto const& psi =
output_data[ip].free_energy_density_data.free_energy_density; output_data[ip].free_energy_density_data.free_energy_density;
auto const x_coord = auto const x_coord =
NumLib::interpolateXCoordinate<ShapeFunction, ShapeMatricesType>( NumLib::interpolateXCoordinate<ShapeFunction, ShapeMatricesType>(
element, _ip_data[ip].N); element, _ip_data[ip].N_u);
// For the 2D case the 33-component is needed (and the four entries // For the 2D case the 33-component is needed (and the four entries
// of the non-symmetric matrix); In 3d there are nine entries. // of the non-symmetric matrix); In 3d there are nine entries.
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <limits> #include <limits>
#include <memory> #include <memory>
#include <optional>
#include <vector> #include <vector>
#include "LocalAssemblerInterface.h" #include "LocalAssemblerInterface.h"
...@@ -41,8 +42,8 @@ template <typename BMatricesType, typename ShapeMatricesType, ...@@ -41,8 +42,8 @@ template <typename BMatricesType, typename ShapeMatricesType,
struct IntegrationPointData final struct IntegrationPointData final
{ {
double integration_weight; double integration_weight;
typename ShapeMatricesType::NodalRowVectorType N; typename ShapeMatricesType::NodalRowVectorType N_u;
typename ShapeMatricesType::GlobalDimNodalMatrixType dNdx; typename ShapeMatricesType::GlobalDimNodalMatrixType dNdx_u;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW; EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
}; };
...@@ -68,6 +69,7 @@ public: ...@@ -68,6 +69,7 @@ public:
using BMatricesType = BMatrixPolicyType<ShapeFunction, DisplacementDim>; using BMatricesType = BMatrixPolicyType<ShapeFunction, DisplacementDim>;
using BMatrixType = typename BMatricesType::BMatrixType; using BMatrixType = typename BMatricesType::BMatrixType;
using BBarMatrixType = typename BMatricesType::BBarMatrixType;
using StiffnessMatrixType = typename BMatricesType::StiffnessMatrixType; using StiffnessMatrixType = typename BMatricesType::StiffnessMatrixType;
using NodalForceVectorType = typename BMatricesType::NodalForceVectorType; using NodalForceVectorType = typename BMatricesType::NodalForceVectorType;
using NodalDisplacementVectorType = using NodalDisplacementVectorType =
...@@ -114,8 +116,8 @@ public: ...@@ -114,8 +116,8 @@ public:
this->integration_method_.getWeightedPoint(ip).getWeight() * this->integration_method_.getWeightedPoint(ip).getWeight() *
sm.integralMeasure * sm.detJ; sm.integralMeasure * sm.detJ;
ip_data.N = sm.N; ip_data.N_u = sm.N;
ip_data.dNdx = sm.dNdx; ip_data.dNdx_u = sm.dNdx;
_secondary_data.N[ip] = shape_matrices[ip].N; _secondary_data.N[ip] = shape_matrices[ip].N;
} }
...@@ -134,7 +136,7 @@ public: ...@@ -134,7 +136,7 @@ public:
MathLib::Point3d( MathLib::Point3d(
NumLib::interpolateCoordinates<ShapeFunction, NumLib::interpolateCoordinates<ShapeFunction,
ShapeMatricesType>( ShapeMatricesType>(
this->element_, ip_data.N))}; this->element_, ip_data.N_u))};
/// Set initial stress from parameter. /// Set initial stress from parameter.
if (this->process_data_.initial_stress != nullptr) if (this->process_data_.initial_stress != nullptr)
...@@ -163,12 +165,10 @@ public: ...@@ -163,12 +165,10 @@ public:
typename ConstitutiveRelations::ConstitutiveData<DisplacementDim> typename ConstitutiveRelations::ConstitutiveData<DisplacementDim>
updateConstitutiveRelations( updateConstitutiveRelations(
Eigen::Ref<Eigen::VectorXd const> const& u, BMatrixType const& B, Eigen::Ref<Eigen::VectorXd const> const& u,
Eigen::Ref<Eigen::VectorXd const> const& u_prev, Eigen::Ref<Eigen::VectorXd const> const& u_prev,
ParameterLib::SpatialPosition const& x_position, double const t, ParameterLib::SpatialPosition const& x_position, double const t,
double const dt, double const dt,
IntegrationPointData<BMatricesType, ShapeMatricesType, DisplacementDim>&
ip_data,
typename ConstitutiveRelations::ConstitutiveSetting<DisplacementDim>& typename ConstitutiveRelations::ConstitutiveSetting<DisplacementDim>&
CS, CS,
MaterialPropertyLib::Medium const& medium, MaterialPropertyLib::Medium const& medium,
...@@ -180,17 +180,6 @@ public: ...@@ -180,17 +180,6 @@ public:
typename ConstitutiveRelations::OutputData<DisplacementDim>& typename ConstitutiveRelations::OutputData<DisplacementDim>&
output_data) const output_data) const
{ {
auto const& N = ip_data.N;
auto const& dNdx = ip_data.dNdx;
auto const x_coord =
NumLib::interpolateXCoordinate<ShapeFunction, ShapeMatricesType>(
this->element_, N);
auto const B =
LinearBMatrix::computeBMatrix<DisplacementDim,
ShapeFunction::NPOINTS,
typename BMatricesType::BMatrixType>(
dNdx, N, x_coord, this->is_axially_symmetric_);
double const T_ref = double const T_ref =
this->process_data_.reference_temperature this->process_data_.reference_temperature
? (*this->process_data_.reference_temperature)(t, x_position)[0] ? (*this->process_data_.reference_temperature)(t, x_position)[0]
...@@ -223,6 +212,20 @@ public: ...@@ -223,6 +212,20 @@ public:
"implemented."); "implemented.");
} }
std::optional<BBarMatrixType> getDilatationalBBarMatrix() const
{
if (!(this->process_data_.use_b_bar))
{
return std::nullopt;
}
return LinearBMatrix::computeDilatationalBbar<
DisplacementDim, ShapeFunction::NPOINTS, ShapeFunction,
BBarMatrixType, ShapeMatricesType, IpData>(
_ip_data, this->element_, this->integration_method_,
this->is_axially_symmetric_);
}
void assembleWithJacobian(double const t, double const dt, void assembleWithJacobian(double const t, double const dt,
std::vector<double> const& local_x, std::vector<double> const& local_x,
std::vector<double> const& local_x_prev, std::vector<double> const& local_x_prev,
...@@ -253,27 +256,28 @@ public: ...@@ -253,27 +256,28 @@ public:
auto const& medium = auto const& medium =
*this->process_data_.media_map.getMedium(this->element_.getID()); *this->process_data_.media_map.getMedium(this->element_.getID());
auto const B_dil_bar = getDilatationalBBarMatrix();
for (unsigned ip = 0; ip < n_integration_points; ip++) for (unsigned ip = 0; ip < n_integration_points; ip++)
{ {
x_position.setIntegrationPoint(ip); x_position.setIntegrationPoint(ip);
auto const& w = _ip_data[ip].integration_weight; auto const& w = _ip_data[ip].integration_weight;
auto const& N = _ip_data[ip].N; auto const& N = _ip_data[ip].N_u;
auto const& dNdx = _ip_data[ip].dNdx; auto const& dNdx = _ip_data[ip].dNdx_u;
auto const x_coord = auto const x_coord =
NumLib::interpolateXCoordinate<ShapeFunction, NumLib::interpolateXCoordinate<ShapeFunction,
ShapeMatricesType>( ShapeMatricesType>(
this->element_, N); this->element_, N);
auto const B = LinearBMatrix::computeBMatrix< auto const B = LinearBMatrix::computeBMatrixPossiblyWithBbar<
DisplacementDim, ShapeFunction::NPOINTS, DisplacementDim, ShapeFunction::NPOINTS, BBarMatrixType,
typename BMatricesType::BMatrixType>( typename BMatricesType::BMatrixType>(
dNdx, N, x_coord, this->is_axially_symmetric_); dNdx, N, B_dil_bar, x_coord, this->is_axially_symmetric_);
auto const CD = updateConstitutiveRelations( auto const CD = updateConstitutiveRelations(
u, u_prev, x_position, t, dt, _ip_data[ip], B, u, u_prev, x_position, t, dt, constitutive_setting, medium,
constitutive_setting, medium, this->current_states_[ip], this->current_states_[ip], this->prev_states_[ip],
this->prev_states_[ip], this->material_states_[ip], this->material_states_[ip], this->output_data_[ip]);
this->output_data_[ip]);
auto const& sigma = this->current_states_[ip].stress_data.sigma; auto const& sigma = this->current_states_[ip].stress_data.sigma;
auto const& b = *CD.volumetric_body_force; auto const& b = *CD.volumetric_body_force;
...@@ -302,12 +306,25 @@ public: ...@@ -302,12 +306,25 @@ public:
auto const& medium = auto const& medium =
*this->process_data_.media_map.getMedium(this->element_.getID()); *this->process_data_.media_map.getMedium(this->element_.getID());
auto const B_dil_bar = getDilatationalBBarMatrix();
for (unsigned ip = 0; ip < n_integration_points; ip++) for (unsigned ip = 0; ip < n_integration_points; ip++)
{ {
x_position.setIntegrationPoint(ip); x_position.setIntegrationPoint(ip);
auto const& N = _ip_data[ip].N_u;
auto const& dNdx = _ip_data[ip].dNdx_u;
auto const x_coord =
NumLib::interpolateXCoordinate<ShapeFunction,
ShapeMatricesType>(
this->element_, N);
auto const B = LinearBMatrix::computeBMatrixPossiblyWithBbar<
DisplacementDim, ShapeFunction::NPOINTS, BBarMatrixType,
typename BMatricesType::BMatrixType>(
dNdx, N, B_dil_bar, x_coord, this->is_axially_symmetric_);
updateConstitutiveRelations( updateConstitutiveRelations(
local_x, local_x_prev, x_position, t, dt, _ip_data[ip], B, local_x, local_x_prev, x_position, t, dt,
constitutive_setting, medium, this->current_states_[ip], constitutive_setting, medium, this->current_states_[ip],
this->prev_states_[ip], this->material_states_[ip], this->prev_states_[ip], this->material_states_[ip],
this->output_data_[ip]); this->output_data_[ip]);
......
...@@ -51,6 +51,10 @@ struct SmallDeformationProcessData ...@@ -51,6 +51,10 @@ struct SmallDeformationProcessData
ParameterLib::Parameter<double> const* const reference_temperature; ParameterLib::Parameter<double> const* const reference_temperature;
/// An indicator to use the B bar method \cite hughes1980generalization to
/// tackle the volumetric locking.
const bool use_b_bar;
std::array<MeshLib::PropertyVector<double>*, 3> principal_stress_vector = { std::array<MeshLib::PropertyVector<double>*, 3> principal_stress_vector = {
nullptr, nullptr, nullptr}; nullptr, nullptr, nullptr};
MeshLib::PropertyVector<double>* principal_stress_values = nullptr; MeshLib::PropertyVector<double>* principal_stress_values = nullptr;
......
...@@ -60,6 +60,12 @@ if (NOT OGS_USE_MPI) ...@@ -60,6 +60,12 @@ if (NOT OGS_USE_MPI)
OgsTest(PROJECTFILE Mechanics/InitialStates/non_equilibrium_initial_state.prj) OgsTest(PROJECTFILE Mechanics/InitialStates/non_equilibrium_initial_state.prj)
OgsTest(PROJECTFILE Mechanics/InitialStates/soil_column_nonequilibrium_sigma_elementwise.prj) OgsTest(PROJECTFILE Mechanics/InitialStates/soil_column_nonequilibrium_sigma_elementwise.prj)
OgsTest(PROJECTFILE Mechanics/Excavation/time_linear_excavation.prj RUNTIME 4) OgsTest(PROJECTFILE Mechanics/Excavation/time_linear_excavation.prj RUNTIME 4)
OgsTest(PROJECTFILE Mechanics/CooksMembrane/CooksMembrane.prj RUNTIME 4)
OgsTest(PROJECTFILE Mechanics/CooksMembrane/CooksMembraneSDRefinedMesh10.xml RUNTIME 4)
OgsTest(PROJECTFILE Mechanics/CooksMembrane/CooksMembraneSDRefinedMesh15.xml RUNTIME 4)
OgsTest(PROJECTFILE Mechanics/CooksMembrane/CooksMembraneSDRefinedMesh20.xml RUNTIME 4)
OgsTest(PROJECTFILE Mechanics/CooksMembrane/CooksMembraneSDRefinedMesh25.xml RUNTIME 4)
OgsTest(PROJECTFILE Mechanics/CooksMembrane/CooksMembraneSDRefinedMesh30.xml RUNTIME 4)
endif() endif()
OgsTest(PROJECTFILE Mechanics/Linear/PythonPiston/piston.prj) OgsTest(PROJECTFILE Mechanics/Linear/PythonPiston/piston.prj)
......
<?xml version='1.0' encoding='ISO-8859-1'?>
<OpenGeoSysProject>
<mesh>mesh.vtu</mesh>
<geometry>boundary.gml</geometry>
<processes>
<process>
<name>SD</name>
<type>SMALL_DEFORMATION</type>
<integration_order>3</integration_order>
<specific_body_force>0 0</specific_body_force>
<use_b_bar>true</use_b_bar>
<constitutive_relation>
<type>LinearElasticIsotropic</type>
<youngs_modulus>E</youngs_modulus>
<poissons_ratio>nu</poissons_ratio>
</constitutive_relation>
<process_variables>
<process_variable>displacement</process_variable>
</process_variables>
<secondary_variables>
<secondary_variable internal_name="sigma" output_name="sigma"/>
<secondary_variable internal_name="epsilon" output_name="epsilon"/>
</secondary_variables>
</process>
</processes>
<media>
<medium>
<phases>
<phase>
<type>Solid</type>
<properties>
<property>
<name>density</name>
<type>Constant</type>
<value>0.0</value>
</property>
</properties>
</phase>
</phases>
</medium>
</media>
<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>2</repeat>
<delta_t>1.0</delta_t>
</pair>
</timesteps>
</time_stepping>
</process>
</processes>
<output>
<type>VTK</type>
<prefix>cooks_membrane_sd_edge_div_4</prefix>
<timesteps>
<pair>
<repeat>1</repeat>
<each_steps>10000000</each_steps>
</pair>
</timesteps>
<variables>
<variable>displacement</variable>
<variable>sigma</variable>
<variable>epsilon</variable>
</variables>
<suffix>_ts_{:timestep}_t_{:time}</suffix>
</output>
</time_loop>
<parameters>
<parameter>
<name>E</name>
<type>Constant</type>
<value>240.565e6</value>
</parameter>
<parameter>
<name>nu</name>
<type>Constant</type>
<value>0.4999</value>
</parameter>
<parameter>
<name>displacement0</name>
<type>Constant</type>
<values>0 0</values>
</parameter>
<parameter>
<name>Zero</name>
<type>Constant</type>
<value>0.</value>
</parameter>
<parameter>
<name>Dirichlet_bottom</name>
<type>Constant</type>
<value>0.</value>
</parameter>
<parameter>
<name>F</name>
<type>Constant</type>
<!-- F = 100/16 N/mm -->
<value>6250e3</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>geometry</geometrical_set>
<geometry>left</geometry>
<type>Dirichlet</type>
<component>0</component>
<parameter>Zero</parameter>
</boundary_condition>
<boundary_condition>
<geometrical_set>geometry</geometrical_set>
<geometry>left</geometry>
<type>Dirichlet</type>
<component>1</component>
<parameter>Zero</parameter>
</boundary_condition>
<boundary_condition>
<geometrical_set>geometry</geometrical_set>
<geometry>right</geometry>
<type>Neumann</type>
<component>1</component>
<parameter>F</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>cooks_membrane_sd_edge_div_4_ts_1_t_1.000000.vtu</file>
<field>displacement</field>
<absolute_tolerance>1e-14</absolute_tolerance>
<relative_tolerance>1e-12</relative_tolerance>
</vtkdiff>
<vtkdiff>
<file>cooks_membrane_sd_edge_div_4_ts_1_t_1.000000.vtu</file>
<field>epsilon</field>
<absolute_tolerance>1e-14</absolute_tolerance>
<relative_tolerance>1e-12</relative_tolerance>
</vtkdiff>
<vtkdiff>
<file>cooks_membrane_sd_edge_div_4_ts_1_t_1.000000.vtu</file>
<field>sigma</field>
<absolute_tolerance>1e-9</absolute_tolerance>
<relative_tolerance>5e-7</relative_tolerance>
</vtkdiff>
</test_definition>
</OpenGeoSysProject>
<?xml version='1.0' encoding='ISO-8859-1'?>
<OpenGeoSysProjectDiff base_file="CooksMembrane.prj">
<replace msel="/*/mesh/text()"> mesh_n10.vtu</replace>
<replace msel="/*/time_loop/output/prefix/text()">cooks_membrane_sd_refined_mesh_10</replace>
<replace msel="/*/test_definition/vtkdiff[1]/file/text()">cooks_membrane_sd_refined_mesh_10_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[2]/file/text()">cooks_membrane_sd_refined_mesh_10_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[3]/file/text()">cooks_membrane_sd_refined_mesh_10_ts_1_t_1.000000.vtu</replace>
</OpenGeoSysProjectDiff>
<?xml version='1.0' encoding='ISO-8859-1'?>
<OpenGeoSysProjectDiff base_file="CooksMembrane.prj">
<replace msel="/*/mesh/text()"> mesh_n15.vtu</replace>
<replace msel="/*/time_loop/output/prefix/text()">cooks_membrane_sd_refined_mesh_15</replace>
<replace msel="/*/test_definition/vtkdiff[1]/file/text()">cooks_membrane_sd_refined_mesh_15_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[2]/file/text()">cooks_membrane_sd_refined_mesh_15_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[3]/file/text()">cooks_membrane_sd_refined_mesh_15_ts_1_t_1.000000.vtu</replace>
</OpenGeoSysProjectDiff>
<?xml version='1.0' encoding='ISO-8859-1'?>
<OpenGeoSysProjectDiff base_file="CooksMembrane.prj">
<replace msel="/*/mesh/text()"> mesh_n20.vtu</replace>
<replace msel="/*/time_loop/output/prefix/text()">cooks_membrane_sd_refined_mesh_20</replace>
<replace msel="/*/test_definition/vtkdiff[1]/file/text()">cooks_membrane_sd_refined_mesh_20_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[2]/file/text()">cooks_membrane_sd_refined_mesh_20_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[3]/file/text()">cooks_membrane_sd_refined_mesh_20_ts_1_t_1.000000.vtu</replace>
</OpenGeoSysProjectDiff>
<?xml version='1.0' encoding='ISO-8859-1'?>
<OpenGeoSysProjectDiff base_file="CooksMembrane.prj">
<replace msel="/*/mesh/text()"> mesh_n25.vtu</replace>
<replace msel="/*/time_loop/output/prefix/text()">cooks_membrane_sd_refined_mesh_25</replace>
<replace msel="/*/linear_solvers/linear_solver/eigen/solver_type/text()">BiCGSTAB</replace>
<replace msel="/*/linear_solvers/linear_solver/eigen/precon_type/text()">ILUT</replace>
<replace msel="/*/test_definition/vtkdiff[1]/file/text()">cooks_membrane_sd_refined_mesh_25_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[2]/file/text()">cooks_membrane_sd_refined_mesh_25_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[3]/file/text()">cooks_membrane_sd_refined_mesh_25_ts_1_t_1.000000.vtu</replace>
</OpenGeoSysProjectDiff>
<?xml version='1.0' encoding='ISO-8859-1'?>
<OpenGeoSysProjectDiff base_file="CooksMembrane.prj">
<replace msel="/*/mesh/text()"> mesh_n30.vtu</replace>
<replace msel="/*/time_loop/output/prefix/text()">cooks_membrane_sd_refined_mesh_30</replace>
<replace msel="/*/linear_solvers/linear_solver/eigen/solver_type/text()">BiCGSTAB</replace>
<replace msel="/*/linear_solvers/linear_solver/eigen/precon_type/text()">ILUT</replace>
<replace msel="/*/test_definition/vtkdiff[1]/file/text()">cooks_membrane_sd_refined_mesh_30_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[2]/file/text()">cooks_membrane_sd_refined_mesh_30_ts_1_t_1.000000.vtu</replace>
<replace msel="/*/test_definition/vtkdiff[3]/file/text()">cooks_membrane_sd_refined_mesh_30_ts_1_t_1.000000.vtu</replace>
</OpenGeoSysProjectDiff>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="OpenGeoSysGLI.xsl"?>
<OpenGeoSysGLI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogs="http://www.opengeosys.org">
<name>geometry</name>
<points>
<point id="0" x="0." y="0." z="0." />
<point id="1" x="48.0e-3" y="44.0e-3" z="0." />
<point id="2" x="48.0e-3" y="60.0e-3" z="0." name="pnt0" />
<point id="3" x="0." y="44.0e-3" z="0." />
</points>
<polylines>
<polyline id="1" name="left">
<pnt>0</pnt>
<pnt>3</pnt>
</polyline>
<polyline id="2" name="right">
<pnt>1</pnt>
<pnt>2</pnt>
</polyline>
</polylines>
</OpenGeoSysGLI>
<?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian" header_type="UInt64" compressor="vtkZLibDataCompressor">
<UnstructuredGrid>
<FieldData>
<DataArray type="Int8" Name="OGS_VERSION" NumberOfTuples="25" format="appended" RangeMin="45" RangeMax="121" offset="0" />
</FieldData>
<Piece NumberOfPoints="25" NumberOfCells="16" >
<PointData>
<DataArray type="Float64" Name="NodalForces" NumberOfComponents="2" format="appended" RangeMin="1.4456536813e-08" RangeMax="160284.25979" offset="88" />
<DataArray type="Float64" Name="displacement" NumberOfComponents="2" format="appended" RangeMin="0" RangeMax="0.0082675313416" offset="516" />
<DataArray type="Float64" Name="epsilon" NumberOfComponents="4" format="appended" RangeMin="0.014804859301" RangeMax="0.090268068497" offset="1028" />
<DataArray type="Float64" Name="sigma" NumberOfComponents="4" format="appended" RangeMin="3694282.3969" RangeMax="25937612.529" offset="2156" />
</PointData>
<CellData>
</CellData>
<Points>
<DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="0.076837490849" offset="3284" />
</Points>
<Cells>
<DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="3652" />
<DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="3840" />
<DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="3952" />
</Cells>
</Piece>
</UnstructuredGrid>
<AppendedData encoding="base64">
_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eF7j5EQFAATYAJE=
</AppendedData>
</VTKFile>
<?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian" header_type="UInt64" compressor="vtkZLibDataCompressor">
<UnstructuredGrid>
<FieldData>
<DataArray type="Int8" Name="OGS_VERSION" NumberOfTuples="25" format="appended" RangeMin="45" RangeMax="121" offset="0" />
</FieldData>
<Piece NumberOfPoints="121" NumberOfCells="100" >
<PointData>
<DataArray type="Float64" Name="NodalForces" NumberOfComponents="2" format="appended" RangeMin="2.7283343377e-09" RangeMax="102874.068" offset="88" />
<DataArray type="Float64" Name="displacement" NumberOfComponents="2" format="appended" RangeMin="0" RangeMax="0.0094888457896" offset="1588" />
<DataArray type="Float64" Name="epsilon" NumberOfComponents="4" format="appended" RangeMin="0.0016330832249" RangeMax="0.1226580874" offset="3984" />
<DataArray type="Float64" Name="sigma" NumberOfComponents="4" format="appended" RangeMin="2567159.5597" RangeMax="39999801.12" offset="9028" />
</PointData>
<CellData>
</CellData>
<Points>
<DataArray type="Float64" Name="Points" NumberOfComponents="3" format="appended" RangeMin="0" RangeMax="0.076837490849" offset="14072" />
</Points>
<Cells>
<DataArray type="Int64" Name="connectivity" format="appended" RangeMin="" RangeMax="" offset="15704" />
<DataArray type="Int64" Name="offsets" format="appended" RangeMin="" RangeMax="" offset="16472" />
<DataArray type="UInt8" Name="types" format="appended" RangeMin="" RangeMax="" offset="16780" />
</Cells>
</Piece>
</UnstructuredGrid>
<AppendedData encoding="base64">
_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eF7j5KQ9AACx7gOF
</AppendedData>
</VTKFile>
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