diff --git a/src/solid_ele/4C_solid_ele.hpp b/src/solid_ele/4C_solid_ele.hpp index 3d7d0f9ec3d..9a07f9e4166 100644 --- a/src/solid_ele/4C_solid_ele.hpp +++ b/src/solid_ele/4C_solid_ele.hpp @@ -188,6 +188,12 @@ namespace Discret::Elements solid_ele_property_.element_technology == ElementTechnology::shell_eas_ans; } + [[nodiscard]] double reference_thickness() const + requires(dim == 2) + { + return solid_ele_property_.reference_thickness; + } + void vis_names(std::map& names) const override; void set_integration_rule(const Core::FE::GaussIntegration& integration_rule); diff --git a/src/solid_ele/4C_solid_ele_line.cpp b/src/solid_ele/4C_solid_ele_line.cpp index 78fefd2f056..aac7b9a73d6 100644 --- a/src/solid_ele/4C_solid_ele_line.cpp +++ b/src/solid_ele/4C_solid_ele_line.cpp @@ -13,6 +13,7 @@ #include "4C_legacy_enum_definitions_element_actions.hpp" #include "4C_linalg_serialdensematrix.hpp" #include "4C_linalg_tensor.hpp" +#include "4C_solid_ele.hpp" #include "4C_solid_ele_neumann_evaluator.hpp" #include "4C_utils_exceptions.hpp" @@ -235,6 +236,24 @@ int Discret::Elements::SolidLine::evaluate_neumann(Teuchos::ParameterList& return params.get("total time", -1.0); }); + const auto& load_type = condition.parameters().get("TYPE"); + if (load_type == "pseudo_orthopressure" || load_type == "orthopressure") + { + if constexpr (dim == 2) + { + const auto* parent_solid = dynamic_cast*>(parent_element()); + FOUR_C_ASSERT_ALWAYS( + parent_solid != nullptr, "Solid line has no two-dimensional solid parent."); + Discret::Elements::evaluate_normal_pressure_by_element(*this, discretization, condition, lm, + elevec1, elemat1, total_time, parent_solid->reference_thickness()); + return 0; + } + else + { + FOUR_C_THROW("Normal pressure on a solid line is only supported in two dimensions."); + } + } + Discret::Elements::evaluate_neumann_by_element( *this, discretization, condition, elevec1, total_time); return 0; diff --git a/src/solid_ele/4C_solid_ele_neumann_evaluator.cpp b/src/solid_ele/4C_solid_ele_neumann_evaluator.cpp index c485b3166d5..7b3c9659caa 100644 --- a/src/solid_ele/4C_solid_ele_neumann_evaluator.cpp +++ b/src/solid_ele/4C_solid_ele_neumann_evaluator.cpp @@ -11,6 +11,7 @@ #include "4C_fem_general_cell_type_traits.hpp" #include "4C_fem_general_element.hpp" #include "4C_fem_general_element_integration.hpp" +#include "4C_fem_general_extract_values.hpp" #include "4C_fem_general_utils_gausspoints.hpp" #include "4C_fem_general_utils_local_connectivity_matrices.hpp" #include "4C_global_data.hpp" @@ -21,6 +22,99 @@ FOUR_C_NAMESPACE_OPEN +namespace +{ + template + void evaluate_normal_pressure(Core::Elements::Element& element, + const Core::FE::Discretization& discretization, const Core::Conditions::Condition& condition, + const std::vector& dof_index_array, Core::LinAlg::SerialDenseVector& force, + Core::LinAlg::SerialDenseMatrix* load_linearization, const double total_time, + const double reference_thickness, const std::string& displacement_state) + { + constexpr int num_nodes = Core::FE::num_nodes(celltype); + const int num_dof_per_node = element.num_dof_per_node(*element.nodes()[0]); + const auto& onoff = condition.parameters().get>("ONOFF"); + const auto& values = condition.parameters().get>("VAL"); + const auto& function_ids = condition.parameters().get>>("FUNCT"); + FOUR_C_ASSERT_ALWAYS(onoff.size() >= 2 && values.size() >= 2 && function_ids.size() >= 2, + "A two-dimensional pressure condition requires at least two entries in ONOFF, VAL, and " + "FUNCT."); + FOUR_C_ASSERT_ALWAYS( + onoff[0] == 1 && onoff[1] == 0, "Normal pressure must be activated on the first dof only."); + + const auto displacement = discretization.get_state(displacement_state); + FOUR_C_ASSERT_ALWAYS( + displacement != nullptr, "Cannot get state vector '{}'.", displacement_state); + const std::vector local_displacement = + Core::FE::extract_values(*displacement, dof_index_array); + + Core::LinAlg::Matrix current_coordinates; + for (int node = 0; node < num_nodes; ++node) + for (int component = 0; component < 2; ++component) + current_coordinates(node, component) = + element.nodes()[node]->x()[component] + + local_displacement[node * num_dof_per_node + component]; + + const auto integration = Core::FE::create_gauss_integration( + Discret::Elements::get_gauss_rule_stiffness_matrix()); + for (int gp = 0; gp < integration.num_points(); ++gp) + { + const auto xi = Core::Elements::evaluate_parameter_coordinate(integration, gp); + Core::Elements::ElementNodes nodes{.coordinates = current_coordinates}; + const auto shape = Core::Elements::evaluate_shape_functions_and_derivs(xi, nodes); + + Core::LinAlg::Matrix<2, 1> current_coordinate; + current_coordinate.multiply_tn(current_coordinates, shape.values); + const double function_factor = + function_ids[0].has_value() && function_ids[0].value() > 0 + ? Global::Problem::instance() + ->function_by_id(function_ids[0].value()) + .evaluate(current_coordinate.as_span(), total_time, 0) + : 1.0; + + Discret::Elements::add_normal_pressure_load(shape, current_coordinates, + values[0] * function_factor * integration.weight(gp), reference_thickness, + num_dof_per_node, force, load_linearization); + } + } +} // namespace + +void Discret::Elements::evaluate_normal_pressure_by_element(Core::Elements::Element& element, + const Core::FE::Discretization& discretization, const Core::Conditions::Condition& condition, + const std::vector& dof_index_array, Core::LinAlg::SerialDenseVector& force, + Core::LinAlg::SerialDenseMatrix* load_linearization, const double total_time, + const double reference_thickness) +{ + const auto& type = condition.parameters().get("TYPE"); + std::string displacement_state; + if (type == "pseudo_orthopressure") + { + displacement_state = "displacement"; + load_linearization = nullptr; + } + else if (type == "orthopressure") + { + FOUR_C_ASSERT_ALWAYS( + Global::Problem::instance()->structural_dynamic_params().get("LOADLIN"), + "If you use NEUMANN CONDITIONS with TYPE: \"orthopressure\" you need to set " + "'LOADLIN: true' in 'STRUCTURAL DYNAMIC'."); + displacement_state = "displacement new"; + } + else + { + FOUR_C_THROW("Expected a normal-pressure condition, got TYPE '{}'.", type); + } + + using supported_celltypes = + Core::FE::CelltypeSequence; + Core::FE::cell_type_switch(element.shape(), + [&](auto celltype_t) + { + evaluate_normal_pressure(element, discretization, condition, dof_index_array, + force, load_linearization, total_time, reference_thickness, displacement_state); + }); +} + template void Discret::Elements::evaluate_neumann_by_element(Core::Elements::Element& element, const Core::FE::Discretization& discretization, const Core::Conditions::Condition& condition, diff --git a/src/solid_ele/4C_solid_ele_neumann_evaluator.hpp b/src/solid_ele/4C_solid_ele_neumann_evaluator.hpp index cbc6bacd208..9fe0d25538e 100644 --- a/src/solid_ele/4C_solid_ele_neumann_evaluator.hpp +++ b/src/solid_ele/4C_solid_ele_neumann_evaluator.hpp @@ -10,8 +10,12 @@ #include "4C_config.hpp" #include "4C_fem_general_element.hpp" +#include "4C_fem_general_element_integration.hpp" +#include "4C_linalg_fixedsizematrix.hpp" +#include "4C_linalg_serialdensematrix.hpp" #include "4C_linalg_serialdensevector.hpp" +#include #include FOUR_C_NAMESPACE_OPEN @@ -23,6 +27,60 @@ namespace Core::FE namespace Discret::Elements { + template + requires(Core::FE::dim == 1) + /*! + * @brief Add pressure normal to a plane solid boundary. + * + * The pressure is multiplied by the parent solid's reference thickness. If requested, this + * function also assembles the consistent negative load linearization used by the structural + * residual. + */ + void add_normal_pressure_load(const Core::Elements::ShapeFunctionsAndDerivatives& shape, + const Core::LinAlg::Matrix& current_coordinates, + const double pressure_times_weight, const double reference_thickness, + const int num_dof_per_node, Core::LinAlg::SerialDenseVector& force, + Core::LinAlg::SerialDenseMatrix* load_linearization) + { + double radial_derivative = 0.0; + double axial_derivative = 0.0; + for (int node = 0; node < Core::FE::num_nodes(celltype); ++node) + { + radial_derivative += shape.derivatives(0, node) * current_coordinates(node, 0); + axial_derivative += shape.derivatives(0, node) * current_coordinates(node, 1); + } + + const std::array normal_measure{ + reference_thickness * axial_derivative, -reference_thickness * radial_derivative}; + for (int node = 0; node < Core::FE::num_nodes(celltype); ++node) + for (int component = 0; component < 2; ++component) + force[node * num_dof_per_node + component] += + shape.values(node) * pressure_times_weight * normal_measure[component]; + + if (load_linearization == nullptr) return; + + for (int force_node = 0; force_node < Core::FE::num_nodes(celltype); ++force_node) + for (int coordinate_node = 0; coordinate_node < Core::FE::num_nodes(celltype); + ++coordinate_node) + { + const double factor = shape.values(force_node) * pressure_times_weight * + reference_thickness * shape.derivatives(0, coordinate_node); + (*load_linearization)( + force_node* num_dof_per_node, coordinate_node* num_dof_per_node + 1) -= factor; + (*load_linearization)( + force_node* num_dof_per_node + 1, coordinate_node * num_dof_per_node) += factor; + } + } + + /*! + * @brief Evaluate pseudo-orthopressure or follower orthopressure on a plane solid boundary line. + */ + void evaluate_normal_pressure_by_element(Core::Elements::Element& element, + const Core::FE::Discretization& discretization, const Core::Conditions::Condition& condition, + const std::vector& dof_index_array, Core::LinAlg::SerialDenseVector& force, + Core::LinAlg::SerialDenseMatrix* load_linearization, double total_time, + double reference_thickness); + /*! * @brief Evaluates a Neumann condition @p condition for the element @p element. * diff --git a/tests/input_files/solid_ele_quad9_plane_strain_orthopressure.4C.yaml b/tests/input_files/solid_ele_quad9_plane_strain_orthopressure.4C.yaml new file mode 100644 index 00000000000..b63fc23ded3 --- /dev/null +++ b/tests/input_files/solid_ele_quad9_plane_strain_orthopressure.4C.yaml @@ -0,0 +1,422 @@ +TITLE: + - "Plane-strain quarter cylinder under internal orthopressure" +PROBLEM SIZE: + DIM: 2 + ELEMENTS: 48 + NODES: 225 + MATERIALS: 1 + NUMDF: 6 +PROBLEM TYPE: + PROBLEMTYPE: "Structure" +IO: + STRUCT_STRESS: "Cauchy" + STRUCT_STRAIN: "GL" +STRUCTURAL DYNAMIC: + DYNAMICTYPE: "Statics" + LOADLIN: true + RESULTSEVERY: 1 + RESTARTEVERY: 0 + TIMESTEP: 0.2 + NUMSTEP: 5 + MAXTIME: 1.0 + TOLDISP: 1.0e-11 + TOLRES: 1.0e-11 + NORMCOMBI_RESFDISP: "Or" + MAXITER: 20 + PREDICT: "TangDis" + LINEAR_SOLVER: 1 +SOLVER 1: + SOLVER: "UMFPACK" + NAME: "Structure_Solver" +FUNCT1: + - SYMBOLIC_FUNCTION_OF_SPACE_TIME: "t" +DESIGN LINE DIRICH CONDITIONS: + - E: 1 + NUMDOF: 2 + ONOFF: [0, 1] + VAL: [0.0, 0.0] + FUNCT: [0, 0] + - E: 2 + NUMDOF: 2 + ONOFF: [1, 0] + VAL: [0.0, 0.0] + FUNCT: [0, 0] +DESIGN LINE NEUMANN CONDITIONS: + - E: 3 + NUMDOF: 2 + ONOFF: [1, 0] + VAL: [-10.0, 0.0] + FUNCT: [1, 0] + TYPE: "orthopressure" +DLINE-NODE TOPOLOGY: + - "NODE 1 DLINE 1" + - "NODE 2 DLINE 1" + - "NODE 3 DLINE 1" + - "NODE 4 DLINE 1" + - "NODE 5 DLINE 1" + - "NODE 6 DLINE 1" + - "NODE 7 DLINE 1" + - "NODE 8 DLINE 1" + - "NODE 9 DLINE 1" + - "NODE 217 DLINE 2" + - "NODE 218 DLINE 2" + - "NODE 219 DLINE 2" + - "NODE 220 DLINE 2" + - "NODE 221 DLINE 2" + - "NODE 222 DLINE 2" + - "NODE 223 DLINE 2" + - "NODE 224 DLINE 2" + - "NODE 225 DLINE 2" + - "NODE 1 DLINE 3" + - "NODE 10 DLINE 3" + - "NODE 19 DLINE 3" + - "NODE 28 DLINE 3" + - "NODE 37 DLINE 3" + - "NODE 46 DLINE 3" + - "NODE 55 DLINE 3" + - "NODE 64 DLINE 3" + - "NODE 73 DLINE 3" + - "NODE 82 DLINE 3" + - "NODE 91 DLINE 3" + - "NODE 100 DLINE 3" + - "NODE 109 DLINE 3" + - "NODE 118 DLINE 3" + - "NODE 127 DLINE 3" + - "NODE 136 DLINE 3" + - "NODE 145 DLINE 3" + - "NODE 154 DLINE 3" + - "NODE 163 DLINE 3" + - "NODE 172 DLINE 3" + - "NODE 181 DLINE 3" + - "NODE 190 DLINE 3" + - "NODE 199 DLINE 3" + - "NODE 208 DLINE 3" + - "NODE 217 DLINE 3" +NODE COORDS: + - "NODE 1 COORD 4.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 2 COORD 4.1250000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 3 COORD 4.2500000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 4 COORD 4.3750000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 5 COORD 4.5000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 6 COORD 4.6250000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 7 COORD 4.7500000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 8 COORD 4.8750000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 9 COORD 5.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 10 COORD 3.9914356929544139e+00 2.6161251692057225e-01 0.0000000000000000e+00" + - "NODE 11 COORD 4.1161680583592393e+00 2.6978790807434011e-01 0.0000000000000000e+00" + - "NODE 12 COORD 4.2409004237640646e+00 2.7796329922810803e-01 0.0000000000000000e+00" + - "NODE 13 COORD 4.3656327891688900e+00 2.8613869038187589e-01 0.0000000000000000e+00" + - "NODE 14 COORD 4.4903651545737153e+00 2.9431408153564376e-01 0.0000000000000000e+00" + - "NODE 15 COORD 4.6150975199785407e+00 3.0248947268941168e-01 0.0000000000000000e+00" + - "NODE 16 COORD 4.7398298853833669e+00 3.1066486384317954e-01 0.0000000000000000e+00" + - "NODE 17 COORD 4.8645622507881923e+00 3.1884025499694740e-01 0.0000000000000000e+00" + - "NODE 18 COORD 4.9892946161930176e+00 3.2701564615071532e-01 0.0000000000000000e+00" + - "NODE 19 COORD 3.9657794454952415e+00 5.2210476888020629e-01 0.0000000000000000e+00" + - "NODE 20 COORD 4.0897100531669679e+00 5.3842054290771268e-01 0.0000000000000000e+00" + - "NODE 21 COORD 4.2136406608386938e+00 5.5473631693521919e-01 0.0000000000000000e+00" + - "NODE 22 COORD 4.3375712685104206e+00 5.7105209096272569e-01 0.0000000000000000e+00" + - "NODE 23 COORD 4.4615018761821466e+00 5.8736786499023208e-01 0.0000000000000000e+00" + - "NODE 24 COORD 4.5854324838538734e+00 6.0368363901773847e-01 0.0000000000000000e+00" + - "NODE 25 COORD 4.7093630915255993e+00 6.1999941304524497e-01 0.0000000000000000e+00" + - "NODE 26 COORD 4.8332936991973252e+00 6.3631518707275148e-01 0.0000000000000000e+00" + - "NODE 27 COORD 4.9572243068690520e+00 6.5263096110025787e-01 0.0000000000000000e+00" + - "NODE 28 COORD 3.9231411216129217e+00 7.8036128806451299e-01 0.0000000000000000e+00" + - "NODE 29 COORD 4.0457392816633257e+00 8.0474757831652899e-01 0.0000000000000000e+00" + - "NODE 30 COORD 4.1683374417137298e+00 8.2913386856854510e-01 0.0000000000000000e+00" + - "NODE 31 COORD 4.2909356017641329e+00 8.5352015882056109e-01 0.0000000000000000e+00" + - "NODE 32 COORD 4.4135337618145369e+00 8.7790644907257709e-01 0.0000000000000000e+00" + - "NODE 33 COORD 4.5361319218649410e+00 9.0229273932459320e-01 0.0000000000000000e+00" + - "NODE 34 COORD 4.6587300819153441e+00 9.2667902957660919e-01 0.0000000000000000e+00" + - "NODE 35 COORD 4.7813282419657481e+00 9.5106531982862519e-01 0.0000000000000000e+00" + - "NODE 36 COORD 4.9039264020161522e+00 9.7545161008064118e-01 0.0000000000000000e+00" + - "NODE 37 COORD 3.8637033051562732e+00 1.0352761804100830e+00 0.0000000000000000e+00" + - "NODE 38 COORD 3.9844440334424069e+00 1.0676285610478979e+00 0.0000000000000000e+00" + - "NODE 39 COORD 4.1051847617285402e+00 1.0999809416857131e+00 0.0000000000000000e+00" + - "NODE 40 COORD 4.2259254900146734e+00 1.1323333223235283e+00 0.0000000000000000e+00" + - "NODE 41 COORD 4.3466662183008076e+00 1.1646857029613433e+00 0.0000000000000000e+00" + - "NODE 42 COORD 4.4674069465869408e+00 1.1970380835991583e+00 0.0000000000000000e+00" + - "NODE 43 COORD 4.5881476748730741e+00 1.2293904642369735e+00 0.0000000000000000e+00" + - "NODE 44 COORD 4.7088884031592082e+00 1.2617428448747887e+00 0.0000000000000000e+00" + - "NODE 45 COORD 4.8296291314453415e+00 1.2940952255126037e+00 0.0000000000000000e+00" + - "NODE 46 COORD 3.7877205179804228e+00 1.2857578612126463e+00 0.0000000000000000e+00" + - "NODE 47 COORD 3.9060867841673108e+00 1.3259377943755415e+00 0.0000000000000000e+00" + - "NODE 48 COORD 4.0244530503541993e+00 1.3661177275384366e+00 0.0000000000000000e+00" + - "NODE 49 COORD 4.1428193165410878e+00 1.4062976607013320e+00 0.0000000000000000e+00" + - "NODE 50 COORD 4.2611855827279754e+00 1.4464775938642271e+00 0.0000000000000000e+00" + - "NODE 51 COORD 4.3795518489148639e+00 1.4866575270271223e+00 0.0000000000000000e+00" + - "NODE 52 COORD 4.4979181151017524e+00 1.5268374601900176e+00 0.0000000000000000e+00" + - "NODE 53 COORD 4.6162843812886400e+00 1.5670173933529128e+00 0.0000000000000000e+00" + - "NODE 54 COORD 4.7346506474755286e+00 1.6071973265158079e+00 0.0000000000000000e+00" + - "NODE 55 COORD 3.6955181300451470e+00 1.5307337294603591e+00 0.0000000000000000e+00" + - "NODE 56 COORD 3.8110030716090577e+00 1.5785691585059953e+00 0.0000000000000000e+00" + - "NODE 57 COORD 3.9264880131729685e+00 1.6264045875516315e+00 0.0000000000000000e+00" + - "NODE 58 COORD 4.0419729547368792e+00 1.6742400165972677e+00 0.0000000000000000e+00" + - "NODE 59 COORD 4.1574578963007900e+00 1.7220754456429039e+00 0.0000000000000000e+00" + - "NODE 60 COORD 4.2729428378647007e+00 1.7699108746885401e+00 0.0000000000000000e+00" + - "NODE 61 COORD 4.3884277794286124e+00 1.8177463037341766e+00 0.0000000000000000e+00" + - "NODE 62 COORD 4.5039127209925232e+00 1.8655817327798128e+00 0.0000000000000000e+00" + - "NODE 63 COORD 4.6193976625564339e+00 1.9134171618254490e+00 0.0000000000000000e+00" + - "NODE 64 COORD 3.5874909661307535e+00 1.7691547608760050e+00 0.0000000000000000e+00" + - "NODE 65 COORD 3.6996000588223397e+00 1.8244408471533802e+00 0.0000000000000000e+00" + - "NODE 66 COORD 3.8117091515139254e+00 1.8797269334307554e+00 0.0000000000000000e+00" + - "NODE 67 COORD 3.9238182442055116e+00 1.9350130197081306e+00 0.0000000000000000e+00" + - "NODE 68 COORD 4.0359273368970978e+00 1.9902991059855055e+00 0.0000000000000000e+00" + - "NODE 69 COORD 4.1480364295886840e+00 2.0455851922628807e+00 0.0000000000000000e+00" + - "NODE 70 COORD 4.2601455222802693e+00 2.1008712785402559e+00 0.0000000000000000e+00" + - "NODE 71 COORD 4.3722546149718555e+00 2.1561573648176311e+00 0.0000000000000000e+00" + - "NODE 72 COORD 4.4843637076634417e+00 2.2114434510950063e+00 0.0000000000000000e+00" + - "NODE 73 COORD 3.4641016151377548e+00 1.9999999999999998e+00 0.0000000000000000e+00" + - "NODE 74 COORD 3.5723547906108095e+00 2.0624999999999996e+00 0.0000000000000000e+00" + - "NODE 75 COORD 3.6806079660838646e+00 2.1249999999999996e+00 0.0000000000000000e+00" + - "NODE 76 COORD 3.7888611415569193e+00 2.1874999999999996e+00 0.0000000000000000e+00" + - "NODE 77 COORD 3.8971143170299740e+00 2.2499999999999996e+00 0.0000000000000000e+00" + - "NODE 78 COORD 4.0053674925030291e+00 2.3124999999999996e+00 0.0000000000000000e+00" + - "NODE 79 COORD 4.1136206679760843e+00 2.3749999999999996e+00 0.0000000000000000e+00" + - "NODE 80 COORD 4.2218738434491385e+00 2.4374999999999996e+00 0.0000000000000000e+00" + - "NODE 81 COORD 4.3301270189221936e+00 2.4999999999999996e+00 0.0000000000000000e+00" + - "NODE 82 COORD 3.3258784492101809e+00 2.2222809320784087e+00 0.0000000000000000e+00" + - "NODE 83 COORD 3.4298121507479991e+00 2.2917272112058589e+00 0.0000000000000000e+00" + - "NODE 84 COORD 3.5337458522858172e+00 2.3611734903333090e+00 0.0000000000000000e+00" + - "NODE 85 COORD 3.6376795538236353e+00 2.4306197694607596e+00 0.0000000000000000e+00" + - "NODE 86 COORD 3.7416132553614534e+00 2.5000660485882098e+00 0.0000000000000000e+00" + - "NODE 87 COORD 3.8455469568992715e+00 2.5695123277156600e+00 0.0000000000000000e+00" + - "NODE 88 COORD 3.9494806584370901e+00 2.6389586068431106e+00 0.0000000000000000e+00" + - "NODE 89 COORD 4.0534143599749077e+00 2.7084048859705607e+00 0.0000000000000000e+00" + - "NODE 90 COORD 4.1573480615127263e+00 2.7778511650980109e+00 0.0000000000000000e+00" + - "NODE 91 COORD 3.1734133611649407e+00 2.4350457160348826e+00 0.0000000000000000e+00" + - "NODE 92 COORD 3.2725825287013453e+00 2.5111408946609726e+00 0.0000000000000000e+00" + - "NODE 93 COORD 3.3717516962377494e+00 2.5872360732870630e+00 0.0000000000000000e+00" + - "NODE 94 COORD 3.4709208637741540e+00 2.6633312519131529e+00 0.0000000000000000e+00" + - "NODE 95 COORD 3.5700900313105581e+00 2.7394264305392428e+00 0.0000000000000000e+00" + - "NODE 96 COORD 3.6692591988469627e+00 2.8155216091653332e+00 0.0000000000000000e+00" + - "NODE 97 COORD 3.7684283663833669e+00 2.8916167877914232e+00 0.0000000000000000e+00" + - "NODE 98 COORD 3.8675975339197715e+00 2.9677119664175131e+00 0.0000000000000000e+00" + - "NODE 99 COORD 3.9667667014561756e+00 3.0438071450436031e+00 0.0000000000000000e+00" + - "NODE 100 COORD 3.0073592299159095e+00 2.6373832604002754e+00 0.0000000000000000e+00" + - "NODE 101 COORD 3.1013392058507816e+00 2.7198014872877838e+00 0.0000000000000000e+00" + - "NODE 102 COORD 3.1953191817856537e+00 2.8022197141752927e+00 0.0000000000000000e+00" + - "NODE 103 COORD 3.2892991577205262e+00 2.8846379410628011e+00 0.0000000000000000e+00" + - "NODE 104 COORD 3.3832791336553982e+00 2.9670561679503100e+00 0.0000000000000000e+00" + - "NODE 105 COORD 3.4772591095902703e+00 3.0494743948378185e+00 0.0000000000000000e+00" + - "NODE 106 COORD 3.5712390855251428e+00 3.1318926217253269e+00 0.0000000000000000e+00" + - "NODE 107 COORD 3.6652190614600149e+00 3.2143108486128358e+00 0.0000000000000000e+00" + - "NODE 108 COORD 3.7591990373948869e+00 3.2967290755003442e+00 0.0000000000000000e+00" + - "NODE 109 COORD 2.8284271247461903e+00 2.8284271247461898e+00 0.0000000000000000e+00" + - "NODE 110 COORD 2.9168154723945086e+00 2.9168154723945081e+00 0.0000000000000000e+00" + - "NODE 111 COORD 3.0052038200428273e+00 3.0052038200428268e+00 0.0000000000000000e+00" + - "NODE 112 COORD 3.0935921676911455e+00 3.0935921676911451e+00 0.0000000000000000e+00" + - "NODE 113 COORD 3.1819805153394642e+00 3.1819805153394638e+00 0.0000000000000000e+00" + - "NODE 114 COORD 3.2703688629877825e+00 3.2703688629877821e+00 0.0000000000000000e+00" + - "NODE 115 COORD 3.3587572106361008e+00 3.3587572106361003e+00 0.0000000000000000e+00" + - "NODE 116 COORD 3.4471455582844195e+00 3.4471455582844190e+00 0.0000000000000000e+00" + - "NODE 117 COORD 3.5355339059327378e+00 3.5355339059327373e+00 0.0000000000000000e+00" + - "NODE 118 COORD 2.6373832604002754e+00 3.0073592299159095e+00 0.0000000000000000e+00" + - "NODE 119 COORD 2.7198014872877838e+00 3.1013392058507816e+00 0.0000000000000000e+00" + - "NODE 120 COORD 2.8022197141752927e+00 3.1953191817856537e+00 0.0000000000000000e+00" + - "NODE 121 COORD 2.8846379410628011e+00 3.2892991577205262e+00 0.0000000000000000e+00" + - "NODE 122 COORD 2.9670561679503100e+00 3.3832791336553982e+00 0.0000000000000000e+00" + - "NODE 123 COORD 3.0494743948378185e+00 3.4772591095902703e+00 0.0000000000000000e+00" + - "NODE 124 COORD 3.1318926217253269e+00 3.5712390855251428e+00 0.0000000000000000e+00" + - "NODE 125 COORD 3.2143108486128358e+00 3.6652190614600149e+00 0.0000000000000000e+00" + - "NODE 126 COORD 3.2967290755003442e+00 3.7591990373948869e+00 0.0000000000000000e+00" + - "NODE 127 COORD 2.4350457160348826e+00 3.1734133611649407e+00 0.0000000000000000e+00" + - "NODE 128 COORD 2.5111408946609726e+00 3.2725825287013453e+00 0.0000000000000000e+00" + - "NODE 129 COORD 2.5872360732870630e+00 3.3717516962377494e+00 0.0000000000000000e+00" + - "NODE 130 COORD 2.6633312519131529e+00 3.4709208637741540e+00 0.0000000000000000e+00" + - "NODE 131 COORD 2.7394264305392428e+00 3.5700900313105581e+00 0.0000000000000000e+00" + - "NODE 132 COORD 2.8155216091653332e+00 3.6692591988469627e+00 0.0000000000000000e+00" + - "NODE 133 COORD 2.8916167877914232e+00 3.7684283663833669e+00 0.0000000000000000e+00" + - "NODE 134 COORD 2.9677119664175131e+00 3.8675975339197715e+00 0.0000000000000000e+00" + - "NODE 135 COORD 3.0438071450436031e+00 3.9667667014561756e+00 0.0000000000000000e+00" + - "NODE 136 COORD 2.2222809320784096e+00 3.3258784492101805e+00 0.0000000000000000e+00" + - "NODE 137 COORD 2.2917272112058598e+00 3.4298121507479986e+00 0.0000000000000000e+00" + - "NODE 138 COORD 2.3611734903333104e+00 3.5337458522858167e+00 0.0000000000000000e+00" + - "NODE 139 COORD 2.4306197694607605e+00 3.6376795538236348e+00 0.0000000000000000e+00" + - "NODE 140 COORD 2.5000660485882107e+00 3.7416132553614529e+00 0.0000000000000000e+00" + - "NODE 141 COORD 2.5695123277156613e+00 3.8455469568992711e+00 0.0000000000000000e+00" + - "NODE 142 COORD 2.6389586068431115e+00 3.9494806584370892e+00 0.0000000000000000e+00" + - "NODE 143 COORD 2.7084048859705616e+00 4.0534143599749077e+00 0.0000000000000000e+00" + - "NODE 144 COORD 2.7778511650980118e+00 4.1573480615127254e+00 0.0000000000000000e+00" + - "NODE 145 COORD 2.0000000000000004e+00 3.4641016151377544e+00 0.0000000000000000e+00" + - "NODE 146 COORD 2.0625000000000004e+00 3.5723547906108091e+00 0.0000000000000000e+00" + - "NODE 147 COORD 2.1250000000000004e+00 3.6806079660838642e+00 0.0000000000000000e+00" + - "NODE 148 COORD 2.1875000000000004e+00 3.7888611415569189e+00 0.0000000000000000e+00" + - "NODE 149 COORD 2.2500000000000004e+00 3.8971143170299736e+00 0.0000000000000000e+00" + - "NODE 150 COORD 2.3125000000000004e+00 4.0053674925030283e+00 0.0000000000000000e+00" + - "NODE 151 COORD 2.3750000000000004e+00 4.1136206679760834e+00 0.0000000000000000e+00" + - "NODE 152 COORD 2.4375000000000004e+00 4.2218738434491385e+00 0.0000000000000000e+00" + - "NODE 153 COORD 2.5000000000000004e+00 4.3301270189221928e+00 0.0000000000000000e+00" + - "NODE 154 COORD 1.7691547608760050e+00 3.5874909661307535e+00 0.0000000000000000e+00" + - "NODE 155 COORD 1.8244408471533802e+00 3.6996000588223397e+00 0.0000000000000000e+00" + - "NODE 156 COORD 1.8797269334307554e+00 3.8117091515139254e+00 0.0000000000000000e+00" + - "NODE 157 COORD 1.9350130197081306e+00 3.9238182442055116e+00 0.0000000000000000e+00" + - "NODE 158 COORD 1.9902991059855055e+00 4.0359273368970978e+00 0.0000000000000000e+00" + - "NODE 159 COORD 2.0455851922628807e+00 4.1480364295886840e+00 0.0000000000000000e+00" + - "NODE 160 COORD 2.1008712785402559e+00 4.2601455222802693e+00 0.0000000000000000e+00" + - "NODE 161 COORD 2.1561573648176311e+00 4.3722546149718555e+00 0.0000000000000000e+00" + - "NODE 162 COORD 2.2114434510950063e+00 4.4843637076634417e+00 0.0000000000000000e+00" + - "NODE 163 COORD 1.5307337294603593e+00 3.6955181300451470e+00 0.0000000000000000e+00" + - "NODE 164 COORD 1.5785691585059956e+00 3.8110030716090577e+00 0.0000000000000000e+00" + - "NODE 165 COORD 1.6264045875516318e+00 3.9264880131729685e+00 0.0000000000000000e+00" + - "NODE 166 COORD 1.6742400165972680e+00 4.0419729547368792e+00 0.0000000000000000e+00" + - "NODE 167 COORD 1.7220754456429042e+00 4.1574578963007900e+00 0.0000000000000000e+00" + - "NODE 168 COORD 1.7699108746885406e+00 4.2729428378647007e+00 0.0000000000000000e+00" + - "NODE 169 COORD 1.8177463037341768e+00 4.3884277794286124e+00 0.0000000000000000e+00" + - "NODE 170 COORD 1.8655817327798130e+00 4.5039127209925232e+00 0.0000000000000000e+00" + - "NODE 171 COORD 1.9134171618254492e+00 4.6193976625564339e+00 0.0000000000000000e+00" + - "NODE 172 COORD 1.2857578612126468e+00 3.7877205179804223e+00 0.0000000000000000e+00" + - "NODE 173 COORD 1.3259377943755419e+00 3.9060867841673104e+00 0.0000000000000000e+00" + - "NODE 174 COORD 1.3661177275384373e+00 4.0244530503541984e+00 0.0000000000000000e+00" + - "NODE 175 COORD 1.4062976607013324e+00 4.1428193165410869e+00 0.0000000000000000e+00" + - "NODE 176 COORD 1.4464775938642276e+00 4.2611855827279754e+00 0.0000000000000000e+00" + - "NODE 177 COORD 1.4866575270271229e+00 4.3795518489148630e+00 0.0000000000000000e+00" + - "NODE 178 COORD 1.5268374601900181e+00 4.4979181151017515e+00 0.0000000000000000e+00" + - "NODE 179 COORD 1.5670173933529132e+00 4.6162843812886400e+00 0.0000000000000000e+00" + - "NODE 180 COORD 1.6071973265158084e+00 4.7346506474755277e+00 0.0000000000000000e+00" + - "NODE 181 COORD 1.0352761804100830e+00 3.8637033051562732e+00 0.0000000000000000e+00" + - "NODE 182 COORD 1.0676285610478979e+00 3.9844440334424069e+00 0.0000000000000000e+00" + - "NODE 183 COORD 1.0999809416857131e+00 4.1051847617285402e+00 0.0000000000000000e+00" + - "NODE 184 COORD 1.1323333223235283e+00 4.2259254900146734e+00 0.0000000000000000e+00" + - "NODE 185 COORD 1.1646857029613433e+00 4.3466662183008076e+00 0.0000000000000000e+00" + - "NODE 186 COORD 1.1970380835991583e+00 4.4674069465869408e+00 0.0000000000000000e+00" + - "NODE 187 COORD 1.2293904642369735e+00 4.5881476748730741e+00 0.0000000000000000e+00" + - "NODE 188 COORD 1.2617428448747887e+00 4.7088884031592082e+00 0.0000000000000000e+00" + - "NODE 189 COORD 1.2940952255126037e+00 4.8296291314453415e+00 0.0000000000000000e+00" + - "NODE 190 COORD 7.8036128806451333e-01 3.9231411216129217e+00 0.0000000000000000e+00" + - "NODE 191 COORD 8.0474757831652932e-01 4.0457392816633257e+00 0.0000000000000000e+00" + - "NODE 192 COORD 8.2913386856854543e-01 4.1683374417137298e+00 0.0000000000000000e+00" + - "NODE 193 COORD 8.5352015882056143e-01 4.2909356017641329e+00 0.0000000000000000e+00" + - "NODE 194 COORD 8.7790644907257753e-01 4.4135337618145369e+00 0.0000000000000000e+00" + - "NODE 195 COORD 9.0229273932459353e-01 4.5361319218649410e+00 0.0000000000000000e+00" + - "NODE 196 COORD 9.2667902957660953e-01 4.6587300819153441e+00 0.0000000000000000e+00" + - "NODE 197 COORD 9.5106531982862563e-01 4.7813282419657481e+00 0.0000000000000000e+00" + - "NODE 198 COORD 9.7545161008064163e-01 4.9039264020161522e+00 0.0000000000000000e+00" + - "NODE 199 COORD 5.2210476888020685e-01 3.9657794454952415e+00 0.0000000000000000e+00" + - "NODE 200 COORD 5.3842054290771335e-01 4.0897100531669679e+00 0.0000000000000000e+00" + - "NODE 201 COORD 5.5473631693521974e-01 4.2136406608386938e+00 0.0000000000000000e+00" + - "NODE 202 COORD 5.7105209096272624e-01 4.3375712685104206e+00 0.0000000000000000e+00" + - "NODE 203 COORD 5.8736786499023275e-01 4.4615018761821466e+00 0.0000000000000000e+00" + - "NODE 204 COORD 6.0368363901773914e-01 4.5854324838538734e+00 0.0000000000000000e+00" + - "NODE 205 COORD 6.1999941304524564e-01 4.7093630915255993e+00 0.0000000000000000e+00" + - "NODE 206 COORD 6.3631518707275214e-01 4.8332936991973252e+00 0.0000000000000000e+00" + - "NODE 207 COORD 6.5263096110025853e-01 4.9572243068690520e+00 0.0000000000000000e+00" + - "NODE 208 COORD 2.6161251692057308e-01 3.9914356929544139e+00 0.0000000000000000e+00" + - "NODE 209 COORD 2.6978790807434100e-01 4.1161680583592393e+00 0.0000000000000000e+00" + - "NODE 210 COORD 2.7796329922810892e-01 4.2409004237640646e+00 0.0000000000000000e+00" + - "NODE 211 COORD 2.8613869038187678e-01 4.3656327891688900e+00 0.0000000000000000e+00" + - "NODE 212 COORD 2.9431408153564470e-01 4.4903651545737153e+00 0.0000000000000000e+00" + - "NODE 213 COORD 3.0248947268941262e-01 4.6150975199785407e+00 0.0000000000000000e+00" + - "NODE 214 COORD 3.1066486384318054e-01 4.7398298853833669e+00 0.0000000000000000e+00" + - "NODE 215 COORD 3.1884025499694846e-01 4.8645622507881923e+00 0.0000000000000000e+00" + - "NODE 216 COORD 3.2701564615071632e-01 4.9892946161930176e+00 0.0000000000000000e+00" + - "NODE 217 COORD 2.4492935982947064e-16 4.0000000000000000e+00 0.0000000000000000e+00" + - "NODE 218 COORD 2.5258340232414159e-16 4.1250000000000000e+00 0.0000000000000000e+00" + - "NODE 219 COORD 2.6023744481881253e-16 4.2500000000000000e+00 0.0000000000000000e+00" + - "NODE 220 COORD 2.6789148731348353e-16 4.3750000000000000e+00 0.0000000000000000e+00" + - "NODE 221 COORD 2.7554552980815448e-16 4.5000000000000000e+00 0.0000000000000000e+00" + - "NODE 222 COORD 2.8319957230282542e-16 4.6250000000000000e+00 0.0000000000000000e+00" + - "NODE 223 COORD 2.9085361479749637e-16 4.7500000000000000e+00 0.0000000000000000e+00" + - "NODE 224 COORD 2.9850765729216737e-16 4.8750000000000000e+00 0.0000000000000000e+00" + - "NODE 225 COORD 3.0616169978683831e-16 5.0000000000000000e+00 0.0000000000000000e+00" +STRUCTURE ELEMENTS: + - "1 SOLID QUAD9 1 3 21 19 2 12 20 10 11 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "2 SOLID QUAD9 3 5 23 21 4 14 22 12 13 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "3 SOLID QUAD9 5 7 25 23 6 16 24 14 15 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "4 SOLID QUAD9 7 9 27 25 8 18 26 16 17 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "5 SOLID QUAD9 19 21 39 37 20 30 38 28 29 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "6 SOLID QUAD9 21 23 41 39 22 32 40 30 31 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "7 SOLID QUAD9 23 25 43 41 24 34 42 32 33 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "8 SOLID QUAD9 25 27 45 43 26 36 44 34 35 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "9 SOLID QUAD9 37 39 57 55 38 48 56 46 47 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "10 SOLID QUAD9 39 41 59 57 40 50 58 48 49 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "11 SOLID QUAD9 41 43 61 59 42 52 60 50 51 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "12 SOLID QUAD9 43 45 63 61 44 54 62 52 53 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "13 SOLID QUAD9 55 57 75 73 56 66 74 64 65 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "14 SOLID QUAD9 57 59 77 75 58 68 76 66 67 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "15 SOLID QUAD9 59 61 79 77 60 70 78 68 69 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "16 SOLID QUAD9 61 63 81 79 62 72 80 70 71 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "17 SOLID QUAD9 73 75 93 91 74 84 92 82 83 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "18 SOLID QUAD9 75 77 95 93 76 86 94 84 85 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "19 SOLID QUAD9 77 79 97 95 78 88 96 86 87 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "20 SOLID QUAD9 79 81 99 97 80 90 98 88 89 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION plane_strain" + - "21 SOLID QUAD9 91 93 111 109 92 102 110 100 101 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "22 SOLID QUAD9 93 95 113 111 94 104 112 102 103 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "23 SOLID QUAD9 95 97 115 113 96 106 114 104 105 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "24 SOLID QUAD9 97 99 117 115 98 108 116 106 107 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "25 SOLID QUAD9 109 111 129 127 110 120 128 118 119 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "26 SOLID QUAD9 111 113 131 129 112 122 130 120 121 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "27 SOLID QUAD9 113 115 133 131 114 124 132 122 123 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "28 SOLID QUAD9 115 117 135 133 116 126 134 124 125 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "29 SOLID QUAD9 127 129 147 145 128 138 146 136 137 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "30 SOLID QUAD9 129 131 149 147 130 140 148 138 139 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "31 SOLID QUAD9 131 133 151 149 132 142 150 140 141 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "32 SOLID QUAD9 133 135 153 151 134 144 152 142 143 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "33 SOLID QUAD9 145 147 165 163 146 156 164 154 155 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "34 SOLID QUAD9 147 149 167 165 148 158 166 156 157 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "35 SOLID QUAD9 149 151 169 167 150 160 168 158 159 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "36 SOLID QUAD9 151 153 171 169 152 162 170 160 161 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "37 SOLID QUAD9 163 165 183 181 164 174 182 172 173 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "38 SOLID QUAD9 165 167 185 183 166 176 184 174 175 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "39 SOLID QUAD9 167 169 187 185 168 178 186 176 177 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "40 SOLID QUAD9 169 171 189 187 170 180 188 178 179 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "41 SOLID QUAD9 181 183 201 199 182 192 200 190 191 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "42 SOLID QUAD9 183 185 203 201 184 194 202 192 193 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "43 SOLID QUAD9 185 187 205 203 186 196 204 194 195 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "44 SOLID QUAD9 187 189 207 205 188 198 206 196 197 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "45 SOLID QUAD9 199 201 219 217 200 210 218 208 209 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "46 SOLID QUAD9 201 203 221 219 202 212 220 210 211 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "47 SOLID QUAD9 203 205 223 221 204 214 222 212 213 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" + - "48 SOLID QUAD9 205 207 225 223 206 216 224 214 215 MAT 1 KINEM linear THICKNESS 2.0 PLANE_ASSUMPTION + plane_strain" +MATERIALS: + - MAT: 1 + MAT_Struct_StVenantKirchhoff: + YOUNG: 1000.0 + NUE: 0.3 + DENS: 0.0 +RESULT DESCRIPTION: + - STRUCTURE: + DIS: "structure" + NODE: 1 + QUANTITY: "dispx" + VALUE: 1.90041504119862981e-01 + TOLERANCE: 1.0e-10 + - STRUCTURE: + DIS: "structure" + NODE: 9 + QUANTITY: "dispx" + VALUE: 1.69463775578177989e-01 + TOLERANCE: 1.0e-10 + - STRUCTURE: + DIS: "structure" + NODE: 217 + QUANTITY: "dispy" + VALUE: 1.90041504119926208e-01 + TOLERANCE: 1.0e-10 diff --git a/tests/list_of_tests.cmake b/tests/list_of_tests.cmake index eafe9bd779a..b38adfe5bc8 100644 --- a/tests/list_of_tests.cmake +++ b/tests/list_of_tests.cmake @@ -2032,6 +2032,7 @@ __four_c_test_vtk(BASED_ON ${current} PVD_RESULT xxx-structure.pvd PVD_REFERENCE four_c_test(TEST_FILE solid_ele_quad4_stvk_plane_strain.4C.yaml NP 2 RETURN_AS current) __four_c_test_restart(BASED_ON ${current} SAME_FILE NP 2 RESTART_STEP 1) __four_c_test_vtk(BASED_ON ${current} PVD_RESULT xxx-structure.pvd PVD_REFERENCE ref/solid_ele_quad4_stvk_plane_strain-structure.pvd TOLERANCE 1e-08) +four_c_test(TEST_FILE solid_ele_quad9_plane_strain_orthopressure.4C.yaml) four_c_test(TEST_FILE solid_ele_quad4_stvk_plane_strain_eas.4C.yaml NP 2 RETURN_AS current) __four_c_test_restart(BASED_ON ${current} SAME_FILE NP 2 RESTART_STEP 1) four_c_test(TEST_FILE solid_material_prestress_iterative_spring_dashpot.4C.yaml NP 2 RETURN_AS current) diff --git a/unittests/solid_ele/4C_solid_ele_neumann_evaluator_test.cpp b/unittests/solid_ele/4C_solid_ele_neumann_evaluator_test.cpp new file mode 100644 index 00000000000..f1e4f45f1e7 --- /dev/null +++ b/unittests/solid_ele/4C_solid_ele_neumann_evaluator_test.cpp @@ -0,0 +1,69 @@ +// This file is part of 4C multiphysics licensed under the +// GNU Lesser General Public License v3.0 or later. +// +// See the LICENSE.md file in the top-level for license information. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#include + +#include "4C_solid_ele_neumann_evaluator.hpp" + +#include "4C_fem_general_element_integration.hpp" +#include "4C_solid_ele_calc_lib_integration.hpp" + +namespace +{ + using namespace FourC; + + TEST(PlaneNormalPressure, ReferenceThicknessAndConsistentLinearization) + { + constexpr auto celltype = Core::FE::CellType::line2; + constexpr double pressure = 3.2; + constexpr double thickness = 2.75; + Core::LinAlg::Matrix<2, 2> coordinates; + coordinates(0, 0) = 2.0; + coordinates(0, 1) = 0.0; + coordinates(1, 0) = 3.0; + coordinates(1, 1) = 1.0; + + auto evaluate = [&](const Core::LinAlg::Matrix<2, 2>& evaluated_coordinates, + Core::LinAlg::SerialDenseMatrix* load_linearization) + { + Core::LinAlg::SerialDenseVector force(4); + const auto integration = Core::FE::create_gauss_integration( + Discret::Elements::get_gauss_rule_stiffness_matrix()); + for (int gp = 0; gp < integration.num_points(); ++gp) + { + const auto xi = Core::Elements::evaluate_parameter_coordinate(integration, gp); + const Core::Elements::ElementNodes nodes{.coordinates = evaluated_coordinates}; + const auto shape = Core::Elements::evaluate_shape_functions_and_derivs(xi, nodes); + Discret::Elements::add_normal_pressure_load(shape, evaluated_coordinates, + pressure * integration.weight(gp), thickness, 2, force, load_linearization); + } + return force; + }; + + Core::LinAlg::SerialDenseMatrix load_linearization(4, 4); + const auto force = evaluate(coordinates, &load_linearization); + EXPECT_NEAR(force[0] + force[2], pressure * thickness, 1.0e-13); + EXPECT_NEAR(force[1] + force[3], -pressure * thickness, 1.0e-13); + + constexpr double perturbation = 1.0e-7; + for (int column = 0; column < 4; ++column) + { + auto coordinates_plus = coordinates; + auto coordinates_minus = coordinates; + coordinates_plus(column / 2, column % 2) += perturbation; + coordinates_minus(column / 2, column % 2) -= perturbation; + const auto force_plus = evaluate(coordinates_plus, nullptr); + const auto force_minus = evaluate(coordinates_minus, nullptr); + for (int row = 0; row < 4; ++row) + { + const double finite_difference = + (force_plus[row] - force_minus[row]) / (2.0 * perturbation); + EXPECT_NEAR(-load_linearization(row, column), finite_difference, 1.0e-7); + } + } + } +} // namespace