diff --git a/package.cmake b/package.cmake index f99628014..66ff268ee 100644 --- a/package.cmake +++ b/package.cmake @@ -1,100 +1,106 @@ #=============================================================================== # @file package.cmake # # @author Nicolas Richart # # # @brief package description for extra materials list # # @section LICENSE # # Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) # Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) # #=============================================================================== package_declare(extra_materials DESCRIPTION "Add the extra list of materials in Akantu" DEPENDS lapack) package_declare_sources(extra_materials material_extra_includes.hh material_damage/material_brittle.cc material_damage/material_brittle.hh material_damage/material_brittle_inline_impl.cc material_damage/material_damage_iterative.cc material_damage/material_damage_iterative.hh material_damage/material_damage_iterative_inline_impl.cc material_damage/material_damage_linear.cc material_damage/material_damage_linear.hh material_damage/material_damage_linear_inline_impl.cc material_damage/material_vreepeerlings.hh material_damage/material_vreepeerlings_inline_impl.cc material_damage/material_vreepeerlings_tmpl.hh material_plastic/material_viscoplastic.cc material_plastic/material_viscoplastic.hh material_plastic/material_viscoplastic_inline_impl.cc material_viscoelastic/material_stiffness_proportional.cc material_viscoelastic/material_stiffness_proportional.hh material_damage/material_orthotropic_damage.hh material_damage/material_orthotropic_damage_tmpl.hh material_damage/material_orthotropic_damage_iterative.cc material_damage/material_orthotropic_damage_iterative.hh material_damage/material_orthotropic_damage_iterative_inline_impl.cc + + material_FE2/material_FE2.hh + material_FE2/material_FE2.cc + material_FE2/material_FE2_inline_impl.cc + material_FE2/solid_mechanics_model_RVE.hh + material_FE2/solid_mechanics_model_RVE.cc ) package_declare_material_infos(extra_materials LIST AKANTU_EXTRA_MATERIAL_LIST INCLUDE material_extra_includes.hh ) package_declare_documentation_files(extra_materials manual-extra_materials.tex manual-appendix-materials-extra-materials.tex figures/stress_strain_visco.pdf ) package_declare_documentation(extra_materials "This package activates additional constitutive laws:" "\\begin{itemize}" " \\item Linear anisotropy" " \\item Linear orthotropy" " \\item Visco-plastic" "\\end{itemize}" ) package_declare(extra_materials_non_local DESCRIPTION "Add the extra list of non local materials in Akantu" DEPENDS extra_materials damage_non_local) package_declare_sources(extra_materials_non_local material_damage/material_orthotropic_damage_non_local.hh material_damage/material_vreepeerlings_non_local.cc material_damage/material_vreepeerlings_non_local.hh material_damage/material_brittle_non_local.hh material_damage/material_damage_iterative_non_local.hh material_damage/material_damage_iterative_non_local.cc material_damage/material_orthotropic_damage_iterative_non_local.hh material_damage/material_vreepeerlings_non_local_inline_impl.cc material_damage/material_brittle_non_local_inline_impl.cc material_damage/material_damage_iterative_non_local_inline_impl.cc material_damage/material_orthotropic_damage_iterative_non_local_inline_impl.cc material_non_local_extra_includes.hh ) package_declare_material_infos(extra_materials_non_local LIST AKANTU_DAMAGE_NON_LOCAL_MATERIAL_EXTRA_LIST INCLUDE material_extra_includes.hh ) diff --git a/src/material_FE2/material_FE2.cc b/src/material_FE2/material_FE2.cc new file mode 100644 index 000000000..ce4e3a299 --- /dev/null +++ b/src/material_FE2/material_FE2.cc @@ -0,0 +1,173 @@ +/** + * @file material_FE2.cc + * + * @author Aurelia Isabel Cuba Ramos + * + * @brief Material for multi-scale simulations. It stores an + * underlying RVE on each integration point of the material. + * + * @section LICENSE + * + * Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + */ + +/* -------------------------------------------------------------------------- */ +#include "material_FE2.hh" + +__BEGIN_AKANTU__ + +/* -------------------------------------------------------------------------- */ +template +MaterialFE2::MaterialFE2(SolidMechanicsModel & model, + const ID & id) : + Material(model, id), + C("material_stiffness", *this) + { + AKANTU_DEBUG_IN(); + + this->C.initialize(voigt_h::size * voigt_h::size); + this->initialize(); + + AKANTU_DEBUG_OUT(); +} + +/* -------------------------------------------------------------------------- */ +template +MaterialFE2::~MaterialFE2() { + for (UInt i = 0; i < RVEs.size(); ++i) { + delete RVEs[i]; + } +} + +/* -------------------------------------------------------------------------- */ +template +void MaterialFE2::initialize() { + this->registerParam("element_type" ,el_type, _triangle_3 , _pat_parsable | _pat_modifiable, "element type in RVE mesh" ); + this->registerParam("mesh_file" ,mesh_file , _pat_parsable | _pat_modifiable, "the mesh file for the RVE"); +} + +/* -------------------------------------------------------------------------- */ +template +void MaterialFE2::initMaterial() { + + Material::initMaterial(); + + /// compute the number of integration points in this material and resize the RVE vector + UInt nb_integration_points = this->element_filter(this->el_type, _not_ghost).getSize() + * this->fem->getNbIntegrationPoints(this->el_type); + RVEs.resize(nb_integration_points); + + /// create a SolidMechanicsModel on each integration point of the material + std::vector::iterator RVE_it = RVEs.begin(); + + Array::matrix_iterator C_it = + this->C(this->el_type).begin(voigt_h::size, voigt_h::size); + for (UInt i = 1; i < nb_integration_points+1; ++RVE_it, ++i, ++C_it) { + Mesh mesh(spatial_dimension, "RVE_mesh", i); + mesh.read(mesh_file); + *RVE_it = new SolidMechanicsModelRVE(mesh, true, _all_dimensions, "SMM_RVE", i); + (*RVE_it)->initFull(); + /// compute intial stiffness of the RVE + (*RVE_it)->homogenizeStiffness(*C_it); + } +} + +/* -------------------------------------------------------------------------- */ +template +void MaterialFE2::computeStress(ElementType el_type, + GhostType ghost_type) { + // Wikipedia convention: + // 2*eps_ij (i!=j) = voigt_eps_I + // http://en.wikipedia.org/wiki/Voigt_notation + AKANTU_DEBUG_IN(); + + Array::const_matrix_iterator C_it = this->C(el_type, ghost_type).begin(voigt_h::size, + voigt_h::size); + + // create vectors to store stress and strain in Voigt notation + // for efficient computation of stress + Vector voigt_strain(voigt_h::size); + Vector voigt_stress(voigt_h::size); + + MATERIAL_STRESS_QUADRATURE_POINT_LOOP_BEGIN(el_type, ghost_type); + + const Matrix & C_mat = *C_it; + + /// copy strains in Voigt notation + for(UInt I = 0; I < voigt_h::size; ++I) { + /// copy stress in + Real voigt_factor = voigt_h::factors[I]; + UInt i = voigt_h::vec[I][0]; + UInt j = voigt_h::vec[I][1]; + + voigt_strain(I) = voigt_factor * (grad_u(i, j) + grad_u(j, i)) / 2.; + } + + // compute stresses in Voigt notation + voigt_stress.mul(C_mat, voigt_strain); + + /// copy stresses back in full vectorised notation + for(UInt I = 0; I < voigt_h::size; ++I) { + UInt i = voigt_h::vec[I][0]; + UInt j = voigt_h::vec[I][1]; + sigma(i, j) = sigma(j, i) = voigt_stress(I); + } + + ++C_it; + + MATERIAL_STRESS_QUADRATURE_POINT_LOOP_END; +} + +/* -------------------------------------------------------------------------- */ +template +void MaterialFE2::computeTangentModuli(const ElementType & el_type, + Array & tangent_matrix, + GhostType ghost_type) { + AKANTU_DEBUG_IN(); + + Array::const_matrix_iterator C_it = this->C(el_type, ghost_type).begin(voigt_h::size, + voigt_h::size); + + MATERIAL_TANGENT_QUADRATURE_POINT_LOOP_BEGIN(tangent_matrix); + tangent.copy(*C_it); + ++C_it; + MATERIAL_TANGENT_QUADRATURE_POINT_LOOP_END; + + AKANTU_DEBUG_OUT(); +} + +/* -------------------------------------------------------------------------- */ +template +void MaterialFE2::advanceASR(const Matrix & prestrain) { + + std::vector::iterator RVE_it = RVEs.begin(); + std::vector::iterator RVE_end = RVEs.end(); + + Array::matrix_iterator C_it = + this->C(this->el_type).begin(voigt_h::size, voigt_h::size); + Array::matrix_iterator gradu_it = + this->gradu(this->el_type).begin(spatial_dimension, spatial_dimension); + Array::matrix_iterator eigen_gradu_it = + this->eigengradu(this->el_type).begin(spatial_dimension, spatial_dimension); + + for (; RVE_it != RVE_end; ++RVE_it, ++C_it, ++gradu_it, ++eigen_gradu_it) { + /// apply boundary conditions based on the current macroscopic displ. gradient + (*RVE_it)->applyBoundaryConditions(*gradu_it); + + /// advance the ASR in every RVE + (*RVE_it)->advanceASR(prestrain); + + /// compute the new effective stiffness of the RVE + (*RVE_it)->homogenizeStiffness(*C_it); + + /// compute the average eigen_grad_u + (*RVE_it)->homogenizeEigenGradU(*eigen_gradu_it); + } +} + +INSTANTIATE_MATERIAL(MaterialFE2); + + +__END_AKANTU__ diff --git a/src/material_FE2/material_FE2.hh b/src/material_FE2/material_FE2.hh new file mode 100644 index 000000000..b6e759886 --- /dev/null +++ b/src/material_FE2/material_FE2.hh @@ -0,0 +1,105 @@ +/** + * @file material_FE2.hh + * + * @author Aurelia Isabel Cuba Ramos + * + * + * @brief Material for multi-scale simulations. It stores an + * underlying RVE on each integration point of the material. + * + * @section LICENSE + * + * Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + */ + +/* -------------------------------------------------------------------------- */ +#include "aka_common.hh" +#include "material.hh" +#include "solid_mechanics_model_RVE.hh" +/* -------------------------------------------------------------------------- */ + +#ifndef __AKANTU_MATERIAL_FE_2_HH__ +#define __AKANTU_MATERIAL_FE_2_HH__ + +__BEGIN_AKANTU__ + +/* -------------------------------------------------------------------------- */ +/// /!\ This material works ONLY for meshes with a single element type!!!!! +/* -------------------------------------------------------------------------- */ + + +/** + * MaterialFE2 + * + * parameters in the material files : + * - mesh_file + */ +template +class MaterialFE2 : public virtual Material { + /* ------------------------------------------------------------------------ */ + /* Constructors/Destructors */ + /* ------------------------------------------------------------------------ */ +public: + + MaterialFE2(SolidMechanicsModel & model, const ID & id = ""); + + virtual ~MaterialFE2(); + + typedef VoigtHelper voigt_h; + + /* ------------------------------------------------------------------------ */ + /* Methods */ + /* ------------------------------------------------------------------------ */ +public: + + virtual void initMaterial(); + + /// constitutive law for all element of a type + virtual void computeStress(ElementType el_type, GhostType ghost_type = _not_ghost); + + /// compute the tangent stiffness matrix for an element type + void computeTangentModuli(const ElementType & el_type, + Array & tangent_matrix, + GhostType ghost_type = _not_ghost); + + /// advance alkali-silica reaction + void advanceASR(const Matrix & prestrain); + +private: + + void initialize(); + + /* ------------------------------------------------------------------------ */ + /* Accessors */ + /* ------------------------------------------------------------------------ */ +public: + + /* ------------------------------------------------------------------------ */ + /* Class Members */ + /* ------------------------------------------------------------------------ */ +protected: + + /// Underlying RVE at each integration point + std::vector RVEs; + + /// the element type of the associated mesh (this material handles only one type!!) + ElementType el_type; + + /// the name of RVE mesh file + ID mesh_file; + + /// Elastic stiffness tensor at each Gauss point (in voigt notation) + InternalField C; +}; + +/* -------------------------------------------------------------------------- */ +/* inline functions */ +/* -------------------------------------------------------------------------- */ + +#include "material_FE2_inline_impl.cc" + +__END_AKANTU__ + +#endif /* __AKANTU_MATERIAL_FE_2_HH__ */ diff --git a/src/material_FE2/material_FE2_inline_impl.cc b/src/material_FE2/material_FE2_inline_impl.cc new file mode 100644 index 000000000..6445211c7 --- /dev/null +++ b/src/material_FE2/material_FE2_inline_impl.cc @@ -0,0 +1,15 @@ +/** + * @file material_FE2_inline_impl.cc + * + * @author Aurelia Isabel Cuba Ramos + * + * + * @brief Implementation of inline functions of the MaterialFE2 + * + * @section LICENSE + * + * Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + */ + diff --git a/src/material_FE2/solid_mechanics_model_RVE.cc b/src/material_FE2/solid_mechanics_model_RVE.cc new file mode 100644 index 000000000..ed014c83f --- /dev/null +++ b/src/material_FE2/solid_mechanics_model_RVE.cc @@ -0,0 +1,456 @@ +/** + * @file solid_mechanics_model_RVE.cc + * @author Aurelia Isabel Cuba Ramos + * @date Wed Jan 13 15:32:35 2016 + * + * @brief Implementation of SolidMechanicsModelRVE + * + * @section LICENSE + * + * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + * Akantu is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * Akantu is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Akantu. If not, see . + * + */ + +/* -------------------------------------------------------------------------- */ +#include "solid_mechanics_model_RVE.hh" +#include "material_elastic.hh" +#ifdef AKANTU_USE_MUMPS +#include "solver_mumps.hh" +#endif +/* -------------------------------------------------------------------------- */ +__BEGIN_AKANTU__ + +/* -------------------------------------------------------------------------- */ +SolidMechanicsModelRVE::SolidMechanicsModelRVE(Mesh & mesh, bool use_RVE_mat_selector, UInt dim, const ID & id, const MemoryID & memory_id) : + SolidMechanicsModel(mesh, dim, id, memory_id), + volume(0.), + use_RVE_mat_selector(use_RVE_mat_selector), + static_communicator_dummy(StaticCommunicator::getStaticCommunicatorDummy()) { + + /// create node groups for PBCs + mesh.createGroupsFromMeshData("physical_names"); + /// find the four corner nodes of the RVE + findCornerNodes(); + + /// remove the corner nodes from the surface node groups: + /// This most be done because corner nodes a not periodic + mesh.getElementGroup("top").removeNode(corner_nodes(2)); + mesh.getElementGroup("top").removeNode(corner_nodes(3)); + mesh.getElementGroup("left").removeNode(corner_nodes(3)); + mesh.getElementGroup("left").removeNode(corner_nodes(0)); + mesh.getElementGroup("bottom").removeNode(corner_nodes(1)); + mesh.getElementGroup("bottom").removeNode(corner_nodes(0)); + mesh.getElementGroup("right").removeNode(corner_nodes(2)); + mesh.getElementGroup("right").removeNode(corner_nodes(1)); + + const ElementGroup & bottom = mesh.getElementGroup("bottom"); + bottom_nodes.insert( bottom.node_begin(), bottom.node_end() ); + + const ElementGroup & left = mesh.getElementGroup("left"); + left_nodes.insert( left.node_begin(), left.node_end() ); + + /// enforce periodicity on the displacement fluctuations + SurfacePair surface_pair_1 = std::make_pair("top","bottom"); + SurfacePair surface_pair_2 = std::make_pair("right","left"); + SurfacePairList surface_pairs_list; + surface_pairs_list.push_back(surface_pair_1); + surface_pairs_list.push_back(surface_pair_2); + this->setPBC(surface_pairs_list); +} + +/* -------------------------------------------------------------------------- */ +SolidMechanicsModelRVE::~SolidMechanicsModelRVE() { + delete static_communicator_dummy; +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::initFull(const ModelOptions & options) { + SolidMechanicsModel::initFull(options); + + this->initMaterials(); + + /// compute the volume of the RVE + FEEngine * fem = this->fems["SolidMechanicsFEEngine"]; + GhostType gt = _not_ghost; + Mesh::type_iterator it = mesh.firstType(spatial_dimension, gt, _ek_not_defined); + Mesh::type_iterator end = mesh.lastType(spatial_dimension, gt, _ek_not_defined); + for(; it != end; ++it) { + const ElementType element_type = *it; + Array Volume(this->mesh.getNbElement(element_type) * this->fems["SolidMechanicsFEEngine"]->getNbIntegrationPoints(element_type), 1, 1.); + this->volume = fem->integrate(Volume, element_type); + } + + std::cout << "The volume of the RVE is " << this->volume << std::endl; + + /// dumping + std::stringstream base_name; + base_name << "RVE_" << this->memory_id - 1; + this->setBaseName (base_name.str()); + this->addDumpFieldVector("displacement"); + this->addDumpField ("stress" ); + this->addDumpField ("grad_u" ); + this->addDumpField ("blocked_dofs" ); + this->addDumpField ("material_index" ); + + this->dump(); +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::applyBoundaryConditions(const Matrix & displacement_gradient) { + + /// get the position of the nodes + const Array & pos = mesh.getNodes(); + /// storage for the coordinates of a given node and the displacement that will be applied + Vector x(spatial_dimension); + Vector appl_disp(spatial_dimension); + + /// fix top right node + UInt node = this->corner_nodes(2); + x(0) = pos(node,0); x(1) = pos(node,1); + appl_disp.mul(displacement_gradient,x); + (*this->blocked_dofs)(node,0) = true; (*this->displacement)(node,0) = appl_disp(0); + (*this->blocked_dofs)(node,1) = true; (*this->displacement)(node,1) = appl_disp(1); + // (*this->blocked_dofs)(node,0) = true; (*this->displacement)(node,0) = 0.; + // (*this->blocked_dofs)(node,1) = true; (*this->displacement)(node,1) = 0.; + + /// apply Hx at all the other corner nodes; H: displ. gradient + node = this->corner_nodes(0); + x(0) = pos(node,0); x(1) = pos(node,1); + appl_disp.mul(displacement_gradient,x); + (*this->blocked_dofs)(node,0) = true; (*this->displacement)(node,0) = appl_disp(0); + (*this->blocked_dofs)(node,1) = true; (*this->displacement)(node,1) = appl_disp(1); + + node = this->corner_nodes(1); + x(0) = pos(node,0); x(1) = pos(node,1); + appl_disp.mul(displacement_gradient,x); + (*this->blocked_dofs)(node,0) = true; (*this->displacement)(node,0) = appl_disp(0); + (*this->blocked_dofs)(node,1) = true; (*this->displacement)(node,1) = appl_disp(1); + + node = this->corner_nodes(3); + x(0) = pos(node,0); x(1) = pos(node,1); + appl_disp.mul(displacement_gradient,x); + (*this->blocked_dofs)(node,0) = true; (*this->displacement)(node,0) = appl_disp(0); + (*this->blocked_dofs)(node,1) = true; (*this->displacement)(node,1) = appl_disp(1); +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::findCornerNodes() { + mesh.computeBoundingBox(); + + // find corner nodes + const Array & position = mesh.getNodes(); + const Vector & lower_bounds = mesh.getLowerBounds(); + const Vector & upper_bounds = mesh.getUpperBounds(); + + AKANTU_DEBUG_ASSERT(spatial_dimension == 2, "This is 2D only!"); + corner_nodes.resize(4); + corner_nodes.set(UInt(-1)); + + for (UInt n = 0; n < mesh.getNbNodes(); ++n) { + // node 1 + if (Math::are_float_equal(position(n, 0), lower_bounds(0)) && + Math::are_float_equal(position(n, 1), lower_bounds(1))) { + corner_nodes(0) = n; + } + // node 2 + else if (Math::are_float_equal(position(n, 0), upper_bounds(0)) && + Math::are_float_equal(position(n, 1), lower_bounds(1))) { + corner_nodes(1) = n; + } + // node 3 + else if (Math::are_float_equal(position(n, 0), upper_bounds(0)) && + Math::are_float_equal(position(n, 1), upper_bounds(1))) { + corner_nodes(2) = n; + } + // node 4 + else if (Math::are_float_equal(position(n, 0), lower_bounds(0)) && + Math::are_float_equal(position(n, 1), upper_bounds(1))) { + corner_nodes(3) = n; + } + } + + for (UInt i = 0; i < corner_nodes.getSize(); ++i) { + if (corner_nodes(i) == UInt(-1)) + AKANTU_DEBUG_ERROR("The corner node " << i + 1 << " wasn't found"); + } +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::advanceASR(const Matrix & prestrain) { + + /// apply the new eigenstrain + GhostType gt = _not_ghost; + + Mesh::type_iterator it = mesh.firstType(spatial_dimension, gt, _ek_not_defined); + Mesh::type_iterator end = mesh.lastType(spatial_dimension, gt, _ek_not_defined); + for(; it != end; ++it) { + const ElementType element_type = *it; + Array & prestrain_vect = const_cast &>(this->getMaterial("gel").getInternal("eigen_grad_u")(element_type, gt)); + Array::iterator< Matrix > prestrain_it = prestrain_vect.begin(spatial_dimension, spatial_dimension); + Array::iterator< Matrix > prestrain_end = prestrain_vect.end(spatial_dimension, spatial_dimension); + + for (; prestrain_it != prestrain_end; ++prestrain_it) + (*prestrain_it) = prestrain; + } + + /// solve the system for the given boundary conditions + Real error = 0; + bool converged = this->solveStep<_scm_newton_raphson_tangent, _scc_increment>(1e-10, error, 2, false, *static_communicator_dummy); + AKANTU_DEBUG_ASSERT(converged, "Did not converge"); +} + + +/* -------------------------------------------------------------------------- */ +Real SolidMechanicsModelRVE::averageTensorField(UInt row_index, UInt col_index, const ID & field_type) { + + FEEngine * fem = this->fems["SolidMechanicsFEEngine"]; + Real average = 0; + GhostType gt = _not_ghost; + + Mesh::type_iterator it = mesh.firstType(spatial_dimension, gt, _ek_not_defined); + Mesh::type_iterator end = mesh.lastType(spatial_dimension, gt, _ek_not_defined); + for(; it != end; ++it) { + const ElementType element_type = *it; + if (field_type == "stress") { + for(UInt m = 0; m < this->materials.size(); ++m) { + const Array & stress_vec = this->materials[m]->getStress(element_type); + const Array & elem_filter = this->materials[m]->getElementFilter(element_type); + Array int_stress_vec(elem_filter.getSize(), spatial_dimension*spatial_dimension, "int_of_stress"); + + fem->integrate(stress_vec, int_stress_vec, spatial_dimension*spatial_dimension, element_type, _not_ghost, elem_filter); + + for (UInt k = 0; k < elem_filter.getSize(); ++k) + average += int_stress_vec(k, row_index * spatial_dimension + col_index); //3 is the value for the yy (in 3D, the value is 4) + } + } + + else if (field_type == "strain") { + for(UInt m = 0; m < this->materials.size(); ++m) { + const Array & gradu_vec = this->materials[m]->getGradU(element_type); + const Array & elem_filter = this->materials[m]->getElementFilter(element_type); + Array int_gradu_vec(elem_filter.getSize(), spatial_dimension*spatial_dimension, "int_of_gradu"); + + fem->integrate(gradu_vec, int_gradu_vec, spatial_dimension*spatial_dimension, element_type, _not_ghost, elem_filter); + + for (UInt k = 0; k < elem_filter.getSize(); ++k) + /// averaging is done only for normal components, so stress and strain are equal + average += 0.5 * (int_gradu_vec(k, row_index * spatial_dimension + col_index) + int_gradu_vec(k, col_index * spatial_dimension + row_index)); + } + } + + else if (field_type == "eigen_grad_u") { + for(UInt m = 0; m < this->materials.size(); ++m) { + const Array & eigen_gradu_vec = this->materials[m]->getInternal("eigen_grad_u")(element_type); + const Array & elem_filter = this->materials[m]->getElementFilter(element_type); + Array int_eigen_gradu_vec(elem_filter.getSize(), spatial_dimension*spatial_dimension, "int_of_gradu"); + + fem->integrate(eigen_gradu_vec, int_eigen_gradu_vec, spatial_dimension*spatial_dimension, element_type, _not_ghost, elem_filter); + + for (UInt k = 0; k < elem_filter.getSize(); ++k) + /// averaging is done only for normal components, so stress and strain are equal + average += int_eigen_gradu_vec(k, row_index * spatial_dimension + col_index); + } + } + + else + AKANTU_DEBUG_ERROR("Averaging not implemented for this field!!!"); + } + return average/this->volume; +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::homogenizeStiffness(Matrix & C_macro) { + + const UInt dim = 2; + AKANTU_DEBUG_ASSERT(this->spatial_dimension == dim, "Is only implemented for 2D!!!"); + + /// apply three independent loading states to determine C + /// 1. eps_el = (1;0;0) 2. eps_el = (0,1,0) 3. eps_el = (0,0,0.5) + + /// storage for results of 3 different loading states + UInt voigt_size = VoigtHelper::size; + Matrix stresses(voigt_size, voigt_size, 0.); + Matrix strains(voigt_size, voigt_size, 0.); + Matrix H(dim, dim, 0.); + + /// virtual test 1: + H(0,0) = 1; + this->performVirtualTesting(H, stresses, strains, 0); + + /// virtual test 2: + H.clear(); + H(1,1) = 1.; + this->performVirtualTesting(H, stresses, strains, 1); + + /// virtual test 3: + H.clear(); + H(0,1) = 1.; + this->performVirtualTesting(H, stresses, strains, 2); + + /// compute effective stiffness + Matrix eps_inverse(voigt_size, voigt_size); + eps_inverse.inverse(strains); + C_macro.mul(stresses, eps_inverse); +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::performVirtualTesting(const Matrix & H, Matrix & eff_stresses, Matrix & eff_strains, const UInt test_no) { + + this->applyBoundaryConditions(H); + + /// solve system + this->assembleStiffnessMatrix(); + Real error = 0; + bool converged= this->solveStep<_scm_newton_raphson_tangent_not_computed, _scc_increment>(1e-12, error, 2, false, *static_communicator_dummy); + AKANTU_DEBUG_ASSERT(converged, "Did not converge"); + + /// get average stress and strain + eff_stresses(0, test_no) = this->averageTensorField(0,0, "stress"); + eff_strains(0, test_no) = this->averageTensorField(0,0, "strain"); + eff_stresses(1, test_no) = this->averageTensorField(1,1, "stress"); + eff_strains(1, test_no) = this->averageTensorField(1,1, "strain"); + eff_stresses(2, test_no) = this->averageTensorField(1,0, "stress"); + eff_strains(2, test_no) = 2. * this->averageTensorField(1,0, "strain"); + +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::homogenizeEigenGradU(Matrix & eigen_gradu_macro) { + eigen_gradu_macro(0,0) = this->averageTensorField(0,0, "eigen_grad_u"); + eigen_gradu_macro(1,1) = this->averageTensorField(1,1, "eigen_grad_u"); + eigen_gradu_macro(0,1) = this->averageTensorField(0,1, "eigen_grad_u"); + eigen_gradu_macro(1,0) = this->averageTensorField(1,0, "eigen_grad_u"); +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::initMaterials() { + AKANTU_DEBUG_IN(); + + // make sure the material are instantiated + if(!are_materials_instantiated) instantiateMaterials(); + + if (use_RVE_mat_selector) { + const Vector & lowerBounds = mesh.getLowerBounds(); + const Vector & upperBounds = mesh.getUpperBounds(); + Real bottom = lowerBounds(1); + Real top = upperBounds(1); + Real box_size = std::abs(top-bottom); + Real eps = box_size * 1e-6; + + + if(is_default_material_selector) delete material_selector; + material_selector = new GelMaterialSelector(*this, box_size, "gel", 1, eps); + is_default_material_selector = false; + } + + SolidMechanicsModel::initMaterials(); + + AKANTU_DEBUG_OUT(); +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::initSolver(__attribute__((unused)) SolverOptions & options) { +#if !defined(AKANTU_USE_MUMPS) && !defined(AKANTU_USE_PETSC)// or other solver in the future \todo add AKANTU_HAS_SOLVER in CMake + AKANTU_DEBUG_ERROR("You should at least activate one solver."); +#else + UInt nb_global_nodes = mesh.getNbGlobalNodes(); + + delete jacobian_matrix; + std::stringstream sstr; sstr << id << ":jacobian_matrix"; + +#ifdef AKANTU_USE_PETSC + jacobian_matrix = new PETScMatrix(nb_global_nodes * spatial_dimension, _symmetric, sstr.str(), memory_id); +#else +jacobian_matrix = new SparseMatrix(nb_global_nodes * spatial_dimension, _unsymmetric, sstr.str(), memory_id, 1); +#endif //AKANTU_USE PETSC + jacobian_matrix->buildProfile(mesh, *dof_synchronizer, spatial_dimension); + + if (!isExplicit()) { + delete stiffness_matrix; + std::stringstream sstr_sti; sstr_sti << id << ":stiffness_matrix"; +#ifdef AKANTU_USE_PETSC + stiffness_matrix = new SparseMatrix(nb_global_nodes * spatial_dimension, _symmetric, sstr.str(), memory_id, 1); + stiffness_matrix->buildProfile(mesh, *dof_synchronizer, spatial_dimension); +#else + stiffness_matrix = new SparseMatrix(*jacobian_matrix, sstr_sti.str(), memory_id); +#endif //AKANTU_USE_PETSC + } + + delete solver; + std::stringstream sstr_solv; sstr_solv << id << ":solver"; +#ifdef AKANTU_USE_PETSC + solver = new SolverPETSc(*jacobian_matrix, sstr_solv.str(), memory_id); +#elif defined(AKANTU_USE_MUMPS) + solver = new SolverMumps(*jacobian_matrix, sstr_solv.str(), memory_id, + *static_communicator_dummy); + dof_synchronizer->initScatterGatherCommunicationScheme(); +#else + AKANTU_DEBUG_ERROR("You should at least activate one solver."); +#endif //AKANTU_USE_MUMPS + + SolverMumpsOptions opt(SolverMumpsOptions::_not_parallel); + + if(solver) + solver->initialize(opt); +#endif //AKANTU_HAS_SOLVER +} + +/* -------------------------------------------------------------------------- */ +void SolidMechanicsModelRVE::initArrays() { + AKANTU_DEBUG_IN(); + + UInt nb_nodes = mesh.getNbNodes(); + std::stringstream sstr_disp; sstr_disp << id << ":displacement"; + // std::stringstream sstr_mass; sstr_mass << id << ":mass"; + std::stringstream sstr_velo; sstr_velo << id << ":velocity"; + std::stringstream sstr_acce; sstr_acce << id << ":acceleration"; + std::stringstream sstr_forc; sstr_forc << id << ":force"; + std::stringstream sstr_resi; sstr_resi << id << ":residual"; + std::stringstream sstr_boun; sstr_boun << id << ":blocked_dofs"; + + displacement = &(alloc(sstr_disp.str(), nb_nodes, spatial_dimension, REAL_INIT_VALUE)); + // mass = &(alloc(sstr_mass.str(), nb_nodes, spatial_dimension, 0)); + velocity = &(alloc(sstr_velo.str(), nb_nodes, spatial_dimension, REAL_INIT_VALUE)); + acceleration = &(alloc(sstr_acce.str(), nb_nodes, spatial_dimension, REAL_INIT_VALUE)); + force = &(alloc(sstr_forc.str(), nb_nodes, spatial_dimension, REAL_INIT_VALUE)); + residual = &(alloc(sstr_resi.str(), nb_nodes, spatial_dimension, REAL_INIT_VALUE)); + blocked_dofs = &(alloc(sstr_boun.str(), nb_nodes, spatial_dimension, false)); + + std::stringstream sstr_curp; sstr_curp << id << ":current_position"; + current_position = &(alloc(sstr_curp.str(), 0, spatial_dimension, REAL_INIT_VALUE)); + + for(UInt g = _not_ghost; g <= _ghost; ++g) { + GhostType gt = (GhostType) g; + Mesh::type_iterator it = mesh.firstType(spatial_dimension, gt, _ek_not_defined); + Mesh::type_iterator end = mesh.lastType(spatial_dimension, gt, _ek_not_defined); + for(; it != end; ++it) { + UInt nb_element = mesh.getNbElement(*it, gt); + material_index.alloc(nb_element, 1, *it, gt); + material_local_numbering.alloc(nb_element, 1, *it, gt); + } + } + + dof_synchronizer = new DOFSynchronizer(mesh, spatial_dimension, + *static_communicator_dummy); + dof_synchronizer->initLocalDOFEquationNumbers(); + dof_synchronizer->initGlobalDOFEquationNumbers(); + + AKANTU_DEBUG_OUT(); +} + + +__END_AKANTU__ diff --git a/src/material_FE2/solid_mechanics_model_RVE.hh b/src/material_FE2/solid_mechanics_model_RVE.hh new file mode 100644 index 000000000..4fb070567 --- /dev/null +++ b/src/material_FE2/solid_mechanics_model_RVE.hh @@ -0,0 +1,269 @@ +/** + * @file solid_mechanics_model_RVE.hh + * @author Aurelia Isabel Cuba Ramos + * @date Wed Jan 13 14:54:18 2016 + * + * @brief SMM for RVE computations in FE2 simulations + * + * @section LICENSE + * + * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + * Akantu is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * Akantu is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Akantu. If not, see . + * + */ + +/* -------------------------------------------------------------------------- */ +#ifndef __AKANTU_SOLID_MECHANICS_MODEL_RVE_HH__ +#define __AKANTU_SOLID_MECHANICS_MODEL_RVE_HH__ + + +/* -------------------------------------------------------------------------- */ +#include "solid_mechanics_model.hh" +#include "aka_grid_dynamic.hh" +#include +/* -------------------------------------------------------------------------- */ + +__BEGIN_AKANTU__ + + +class SolidMechanicsModelRVE : public SolidMechanicsModel { + + /* ------------------------------------------------------------------------ */ + /* Constructors/Destructors */ + /* ------------------------------------------------------------------------ */ + +public: + SolidMechanicsModelRVE(Mesh & mesh, bool use_RVE_mat_selector = true, + UInt spatial_dimension = _all_dimensions, + const ID & id = "solid_mechanics_model", + const MemoryID & memory_id = 0); + + virtual ~SolidMechanicsModelRVE(); + + /* ------------------------------------------------------------------------ */ + /* Methods */ + /* ------------------------------------------------------------------------ */ +public: + + /// initialize completely the model + virtual void initFull(const ModelOptions & options = SolidMechanicsModelOptions(_static, true)); + + /// initialize the materials + virtual void initMaterials(); + + /// apply boundary contions based on macroscopic deformation gradient + virtual void applyBoundaryConditions(const Matrix & displacement_gradient); + + /// advance the reactions -> grow gel and apply homogenized properties + void advanceASR(const Matrix & prestrain); + + /// compute average stress or strain in the model + Real averageTensorField(UInt row_index, UInt col_index, const ID & field_type); + + /// compute effective stiffness of the RVE + void homogenizeStiffness(Matrix & C_macro); + + /// compute average eigenstrain + void homogenizeEigenGradU(Matrix & eigen_gradu_macro); + + /// initialize the solver and the jacobian_matrix (called by initImplicit) + virtual void initSolver(SolverOptions & options = _solver_no_options); + + /// allocate all vectors + virtual void initArrays(); + + /* ------------------------------------------------------------------------ */ + /* Data Accessor inherited members */ + /* ------------------------------------------------------------------------ */ + + inline virtual void unpackData(CommunicationBuffer & buffer, + const UInt index, + SynchronizationTag tag); + + /* ------------------------------------------------------------------------ */ + /* Accessors */ + /* ------------------------------------------------------------------------ */ +public: + + AKANTU_GET_MACRO(CornerNodes, corner_nodes, const Array &); + AKANTU_GET_MACRO(Volume, volume, Real); + +private: + + /// find the corner nodes + void findCornerNodes(); + + /// perform virtual testing + void performVirtualTesting(const Matrix & H, Matrix & eff_stresses, Matrix & eff_strains, const UInt test_no); + + /* ------------------------------------------------------------------------ */ + /* Members */ + /* ------------------------------------------------------------------------ */ + + /// volume of the RVE + Real volume; + + /// corner nodes 1, 2, 3, 4 (see Leonardo's thesis, page 98) + Array corner_nodes; + + /// bottom nodes + std::unordered_set bottom_nodes; + + /// left nodes + std::unordered_set left_nodes; + + /// standard mat selector or user one + bool use_RVE_mat_selector; + + StaticCommunicator * static_communicator_dummy; +}; + + +inline void SolidMechanicsModelRVE::unpackData(CommunicationBuffer & buffer, + const UInt index, + SynchronizationTag tag) { + SolidMechanicsModel::unpackData(buffer, index, tag); + + if (tag == _gst_smm_uv) { + Array::vector_iterator disp_it + = displacement->begin(spatial_dimension); + + Vector current_disp(disp_it[index]); + + // if node is at the bottom, u_bottom = u_top +u_2 -u_3 + if ( bottom_nodes.count(index) ) { + current_disp += Vector(disp_it[corner_nodes(1)]); + current_disp -= Vector(disp_it[corner_nodes(2)]); + } + // if node is at the left, u_left = u_right +u_4 -u_3 + else if ( left_nodes.count(index) ) { + current_disp += Vector(disp_it[corner_nodes(3)]); + current_disp -= Vector(disp_it[corner_nodes(2)]); + } + } +} + +/* -------------------------------------------------------------------------- */ +/* ASR material selector */ +/* -------------------------------------------------------------------------- */ +class GelMaterialSelector : public MeshDataMaterialSelector { +public: + GelMaterialSelector(SolidMechanicsModel & model, + const Real box_size, + const std::string & gel_material, + const UInt nb_gel_pockets, + Real tolerance = 0.) : + MeshDataMaterialSelector("physical_names", model), + model(model), + gel_material(gel_material), + nb_gel_pockets(nb_gel_pockets), + nb_placed_gel_pockets(0), + box_size(box_size) { + + Mesh & mesh = this->model.getMesh(); + UInt spatial_dimension = model.getSpatialDimension(); + + const Vector & lower_bounds = mesh.getLowerBounds(); + const Vector & upper_bounds = mesh.getUpperBounds(); + + Vector gcenter(spatial_dimension); + for (UInt i = 0; i < spatial_dimension; ++i) { + gcenter[i] = (upper_bounds[i] + lower_bounds[i]) / 2.; + } + + Real grid_box_size = upper_bounds[0] - lower_bounds[0]; + Real grid_spacing = grid_box_size/7; + Vector gspacing(spatial_dimension, grid_spacing); + + SpatialGrid grid(spatial_dimension, gspacing, gcenter); + + + ElementType type = _triangle_3; + GhostType ghost_type = _not_ghost; + UInt nb_element = mesh.getNbElement(type, ghost_type); + Element el; + el.type = type; + el.ghost_type = ghost_type; + Array barycenter(0,2); + barycenter.resize(nb_element); + Array::vector_iterator bary_it = barycenter.begin(spatial_dimension); + for (UInt elem = 0; elem < nb_element; ++bary_it, ++elem) { + mesh.getBarycenter(elem, type, bary_it->storage(), ghost_type); + el.element = elem; + grid.insert(el, *bary_it); + } + + /// generate the gel pockets + srand(0.); + Vector center(model.getSpatialDimension()); + for (UInt i = 0; i < this->nb_gel_pockets; ++i) { + center.clear(); + center(0) = -box_size/2. + (box_size) * ((Real) rand() / (RAND_MAX)); + center(1) = -box_size/2. + (box_size) * ((Real) rand() / (RAND_MAX)); + Real min_dist = box_size; + el.element = 0; + bary_it = barycenter.begin(spatial_dimension); + /// find cell in which current bary center lies + SpatialGrid::CellID cell_id = grid.getCellID(center); + SpatialGrid::Cell::const_iterator first_el = + grid.beginCell(cell_id); + SpatialGrid::Cell::const_iterator last_el = + grid.endCell(cell_id); + /// loop over all the elements in that cell + for (;first_el != last_el; ++first_el){ + const Element & elem = *first_el; + Vector bary = bary_it[elem.element]; + if (center.distance(bary) <= min_dist) { + min_dist = center.distance(bary); + el.element = elem.element; + } + } + gel_pockets.push_back(el); + } + } + + UInt operator()(const Element & elem) { + UInt temp_index = MeshDataMaterialSelector::operator()(elem); + if (temp_index == 1) + return temp_index; + std::vector::const_iterator iit = gel_pockets.begin(); + std::vector::const_iterator eit = gel_pockets.end(); + if(std::find(iit, eit, elem) != eit) { + nb_placed_gel_pockets += 1; + std::cout << nb_placed_gel_pockets << " gelpockets placed" << std::endl; + return model.getMaterialIndex(gel_material);; + } + return 0; + } + + +protected: + SolidMechanicsModel & model; + std::string gel_material; + std::vector gel_pockets; + UInt nb_gel_pockets; + UInt nb_placed_gel_pockets; + Real box_size; +}; + + +__END_AKANTU__ + + +///#include "material_selector_tmpl.hh" + +#endif /* __AKANTU_SOLID_MECHANICS_MODEL_RVE_HH__ */ + diff --git a/src/material_extra_includes.hh b/src/material_extra_includes.hh index ab236d166..2da992f19 100644 --- a/src/material_extra_includes.hh +++ b/src/material_extra_includes.hh @@ -1,63 +1,67 @@ /** * @file material_extra_includes.hh * * @author Nicolas Richart * * * @brief Extra list of materials * * @section LICENSE * * Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) * */ /* -------------------------------------------------------------------------- */ #ifndef __AKANTU_MATERIAL_EXTRA_INCLUDES_HH__ #define __AKANTU_MATERIAL_EXTRA_INCLUDES_HH__ #ifndef AKANTU_CMAKE_LIST_MATERIALS // visco-elastic materials #include "material_stiffness_proportional.hh" // damage materials #include "material_brittle.hh" #include "material_damage_iterative.hh" #include "material_damage_linear.hh" #include "material_vreepeerlings.hh" #include "material_orthotropic_damage_iterative.hh" // plasticity #include "material_viscoplastic.hh" +// multi-scale simulations +#include "material_FE2.hh" + #endif #if defined(AKANTU_DAMAGE_NON_LOCAL) #ifndef AKANTU_CMAKE_LIST_MATERIALS # include "material_vreepeerlings_non_local.hh" # include "material_brittle_non_local.hh" # include "material_damage_iterative_non_local.hh" # include "material_orthotropic_damage_iterative_non_local.hh" # include "material_orthotropic_damage_non_local.hh" #endif #define AKANTU_DAMAGE_NON_LOCAL_MATERIAL_EXTRA_LIST \ ((2, (brittle_non_local , MaterialBrittleNonLocal))) \ ((2, (damage_iterative_non_local , MaterialDamageIterativeNonLocal))) \ ((2, (damage_orthotropic_iterative_non_local , MaterialOrthotropicDamageIterativeNonLocal))) #else # define AKANTU_DAMAGE_NON_LOCAL_MATERIAL_EXTRA_LIST #endif #define AKANTU_EXTRA_MATERIAL_LIST \ ((2, (damage_linear , MaterialDamageLinear ))) \ ((2, (brittle , MaterialBrittle ))) \ + ((2, (material_FE2 , MaterialFE2 ))) \ ((2, (damage_iterative , MaterialDamageIterative ))) \ ((2, (vreepeerlings , MaterialVreePeerlings ))) \ ((2, (ve_stiffness_prop , MaterialStiffnessProportional ))) \ ((2, (visco_plastic , MaterialViscoPlastic ))) \ ((2, (orthotropic_damage_iterative , MaterialOrthotropicDamageIterative ))) #endif /* __AKANTU_MATERIAL_EXTRA_INCLUDES_HH__ */ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2dfad1536..8a8a2007f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,18 +1,20 @@ #=============================================================================== # @file CMakeLists.txt # # @author Aurelia Cuba Ramos # # # @brief configuration for extra-material tests # # @section LICENSE # # Copyright (©) 2010-2012, 2014 EPFL (Ecole Polytechnique Fédérale de Lausanne) # Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) # # @section DESCRIPTION # #=============================================================================== -add_akantu_test(test_material_damage "Test the damage materials in the extra-mat. package") +add_akantu_test(test_material_damage "Test the damage materials in the extra-mat package") + +add_akantu_test(test_material_FE2 "Test the FE2 material in the extra-material package") diff --git a/test/test_material_FE2/material.dat b/test/test_material_FE2/material.dat new file mode 100644 index 000000000..7fc367902 --- /dev/null +++ b/test/test_material_FE2/material.dat @@ -0,0 +1,42 @@ +seed = 1 + +material damage_iterative [ + name = aggregates + rho = 2.7e-9 # density + E = 60e9 # young's modulus + nu = 0.3 # poisson's ratio + Sc = 26.4e6 weibull [6.6e6, 5.] + prescribed_dam = 0.1 + max_damage = 0.9999 +] + +material damage_iterative [ + name = paste + rho = 2.2e-9 # density + E = 12e9 # young's modulus + nu = 0.3 # poisson's ratio + Sc = 9.6e6 weibull [2.4e6, 5.] + prescribed_dam = 0.1 + max_damage = 0.9999 +] + +material elastic [ + name = gel + rho = 2.7e-9 # density + E = 22e9 # young's modulus + nu = 0.18 # poisson's ratio +] + +material material_FE2 [ + name = FE2_mat + element_type = _triangle_3 + mesh_file = ./periodic_plate.msh +] + +user parameter [ + mesh_file = ./square.msh + total_steps = 0 + p = 0.00065 + prestrain_increment = [[p, 0],\ + [0, p]] +] diff --git a/test/test_material_FE2/mesoscale_materials.dat b/test/test_material_FE2/mesoscale_materials.dat new file mode 100644 index 000000000..cdbc7de75 --- /dev/null +++ b/test/test_material_FE2/mesoscale_materials.dat @@ -0,0 +1,18 @@ +seed = 1 + +material damage_iterative [ + name = aggregates + rho = 2.7e-9 # density + E = 60e9 # young's modulus + nu = 0.3 # poisson's ratio + Sc = 26.4e6 weibull [6.6e6, 5.] + prescribed_dam = 0.1 + max_damage = 0.9999 +] + +material elastic [ + name = gel + rho = 2.7e-9 # density + E = 22e9 # young's modulus + nu = 0.18 # poisson's ratio +] diff --git a/test/test_material_FE2/one_inclusion.msh b/test/test_material_FE2/one_inclusion.msh new file mode 100644 index 000000000..88db59028 --- /dev/null +++ b/test/test_material_FE2/one_inclusion.msh @@ -0,0 +1,1759 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$PhysicalNames +6 +1 3 "bottom" +1 4 "right" +1 5 "top" +1 6 "left" +2 1 "gel" +2 2 "aggregates" +$EndPhysicalNames +$Nodes +581 +1 -1.25 -1.25 0 +2 -0.75 -1.25 0 +3 -0.75 -0.75 0 +4 -1.25 -0.75 0 +5 0 0 0 +6 -2 0 0 +7 -2 -2 0 +8 0 -2 0 +9 -1.25 -0.8499999999999998 0 +10 -1.25 -0.9499999999999998 0 +11 -1.25 -1.05 0 +12 -1.25 -1.15 0 +13 -1.15 -1.25 0 +14 -1.05 -1.25 0 +15 -0.9500000000000002 -1.25 0 +16 -0.8500000000000001 -1.25 0 +17 -0.75 -1.15 0 +18 -0.75 -1.05 0 +19 -0.75 -0.9500000000000002 0 +20 -0.75 -0.8500000000000001 0 +21 -0.8499999999999998 -0.75 0 +22 -0.9499999999999998 -0.75 0 +23 -1.05 -0.75 0 +24 -1.15 -0.75 0 +25 0 -1.899999999999584 0 +26 0 -1.799999999999167 0 +27 0 -1.699999999999306 0 +28 0 -1.6 0 +29 0 -1.500000000000693 0 +30 0 -1.400000000001387 0 +31 0 -1.30000000000208 0 +32 0 -1.200000000002774 0 +33 0 -1.100000000003467 0 +34 0 -1.000000000004117 0 +35 0 -0.9000000000037447 0 +36 0 -0.8000000000033287 0 +37 0 -0.7000000000029127 0 +38 0 -0.6000000000024965 0 +39 0 -0.5000000000020806 0 +40 0 -0.4000000000016644 0 +41 0 -0.3000000000012482 0 +42 0 -0.200000000000832 0 +43 0 -0.100000000000416 0 +44 -0.0999999999997993 0 0 +45 -0.1999999999996293 0 0 +46 -0.2999999999994072 0 0 +47 -0.3999999999991157 0 0 +48 -0.4999999999988242 0 0 +49 -0.5999999999985328 0 0 +50 -0.6999999999982413 0 0 +51 -0.7999999999979498 0 0 +52 -0.8999999999976585 0 0 +53 -0.9999999999973885 0 0 +54 -1.09999999999763 0 0 +55 -1.199999999997894 0 0 +56 -1.299999999998157 0 0 +57 -1.39999999999842 0 0 +58 -1.499999999998683 0 0 +59 -1.599999999998947 0 0 +60 -1.69999999999921 0 0 +61 -1.799999999999474 0 0 +62 -1.899999999999737 0 0 +63 -2 -0.0999999999997993 0 +64 -2 -0.1999999999996293 0 +65 -2 -0.2999999999994072 0 +66 -2 -0.3999999999991157 0 +67 -2 -0.4999999999988242 0 +68 -2 -0.5999999999985328 0 +69 -2 -0.6999999999982413 0 +70 -2 -0.7999999999979498 0 +71 -2 -0.8999999999976585 0 +72 -2 -0.9999999999973885 0 +73 -2 -1.09999999999763 0 +74 -2 -1.199999999997894 0 +75 -2 -1.299999999998157 0 +76 -2 -1.39999999999842 0 +77 -2 -1.499999999998683 0 +78 -2 -1.599999999998947 0 +79 -2 -1.69999999999921 0 +80 -2 -1.799999999999474 0 +81 -2 -1.899999999999737 0 +82 -1.899999999999584 -2 0 +83 -1.799999999999167 -2 0 +84 -1.699999999999306 -2 0 +85 -1.6 -2 0 +86 -1.500000000000693 -2 0 +87 -1.400000000001387 -2 0 +88 -1.30000000000208 -2 0 +89 -1.200000000002774 -2 0 +90 -1.100000000003467 -2 0 +91 -1.000000000004117 -2 0 +92 -0.9000000000037447 -2 0 +93 -0.8000000000033287 -2 0 +94 -0.7000000000029127 -2 0 +95 -0.6000000000024965 -2 0 +96 -0.5000000000020806 -2 0 +97 -0.4000000000016644 -2 0 +98 -0.3000000000012482 -2 0 +99 -0.200000000000832 -2 0 +100 -0.100000000000416 -2 0 +101 -0.9999999999999999 -0.9999999999999999 0 +102 -1.10625 -0.8937500000000002 0 +103 -0.89375 -0.8937499999999999 0 +104 -1.10625 -1.10625 0 +105 -0.89375 -1.10625 0 +106 -0.9948369565217391 -1.1480322265625 0 +107 -0.8519677734375 -0.9948369565217393 0 +108 -1.1480322265625 -1.005163043478261 0 +109 -1.005163043478261 -0.8519677734375 0 +110 -1.167768912837244 -0.8322310871627561 0 +111 -0.8322310871627563 -0.8322310871627563 0 +112 -0.8285069444444442 -1.171493055555556 0 +113 -1.169027069160998 -1.169027069160998 0 +114 -1.065828325627715 -0.965172155753835 0 +115 -1.034482985841449 -1.065726153869454 0 +116 -0.962235415847752 -0.9416023120800084 0 +117 -0.9415235212507914 -1.037711830552259 0 +118 -1.095836391263101 -0.8155897721200512 0 +119 -1.094022805136547 -1.184661859144699 0 +120 -1.184410227879949 -0.9062288261282032 0 +121 -0.8155897721200512 -0.9041636087368992 0 +122 -0.9034187801932367 -1.185155056423611 0 +123 -0.8148449435763887 -1.094516002415459 0 +124 -0.9062288261282033 -0.8155897721200512 0 +125 -1.184661859144699 -1.096088022527852 0 +126 -1.567410768516905 -1.5558554824214 0 +127 -0.444144517578603 -1.567410768516865 0 +128 -1.555855482421373 -0.4325892314832666 0 +129 -0.4325892314833062 -0.4441445175786323 0 +130 -1.150000000003121 -1.626666666666644 0 +131 -0.3733333333333563 -1.150000000003121 0 +132 -1.626666666666657 -0.8499999999978043 0 +133 -0.8514400080418671 -0.366387778913131 0 +134 -0.7703168732077628 -1.659098736373781 0 +135 -0.3409012636262279 -0.770316873207699 0 +136 -1.659098736373943 -1.229683126792638 0 +137 -1.2296831267927 -0.3409012636260664 0 +138 -1.73312827926957 -1.762910227698366 0 +139 -0.2370897723017038 -1.733128279269558 0 +140 -1.762910227698396 -0.2668717207305586 0 +141 -0.2668717207305693 -0.2370897723016738 0 +142 -1.376277153829546 -1.753154371922034 0 +143 -0.2468456280779582 -1.376277153829524 0 +144 -1.753154371921886 -0.6237228461709293 0 +145 -0.6184777500876835 -0.2542852438860693 0 +146 -0.5723822900720588 -1.752103668880937 0 +147 -1.752103668881043 -1.427617709928359 0 +148 -0.2478963311190961 -0.572382290072029 0 +149 -1.427617709928389 -0.2478963311189896 0 +150 -1.346804544350124 -1.465687454966966 0 +151 -1.465687454967118 -0.6531954556501632 0 +152 -0.5343125450330103 -1.346804544350078 0 +153 -0.6531954556502099 -0.5343125450328582 0 +154 -0.9676266503770885 -1.487399741495254 0 +155 -0.512600258504751 -0.9676266503770854 0 +156 -1.487399741495269 -1.03237334962382 0 +157 -1.032373349623823 -0.5126002585047356 0 +158 -0.9752277499679582 -1.77324626858712 0 +159 -0.2267537314128906 -0.9752277499679325 0 +160 -1.773246268587235 -1.024772250032598 0 +161 -1.024772250032623 -0.2267537314127752 0 +162 -1.305426619122727 -0.5545332059181325 0 +163 -1.44546679408187 -1.305426619122341 0 +164 -0.5545332059181241 -0.6945733808772814 0 +165 -0.694573380877668 -1.44546679408188 0 +166 -1.583837042501711 -1.81933113947241 0 +167 -0.1806688605276047 -1.583837042501709 0 +168 -1.819331139472468 -0.4161629574981801 0 +169 -0.4246148414731445 -0.1880303257050366 0 +170 -1.231762038476405 -1.821074316140969 0 +171 -0.1789256838590361 -1.231762038476387 0 +172 -1.821074316140974 -0.7682379615240826 0 +173 -0.7917606542411513 -0.1860898421795609 0 +174 -1.144908015959757 -1.443005492176598 0 +175 -0.5569945078234038 -1.144908015959748 0 +176 -1.443005492176576 -0.8550919840410298 0 +177 -0.8550919840410371 -0.5569945078234246 0 +178 -0.7490243605443486 -1.82240808023283 0 +179 -0.1775919197671801 -0.7490243605443214 0 +180 -1.822408080232929 -1.250975639456334 0 +181 -1.250975639456361 -0.1775919197670806 0 +182 -1.831508917561946 -1.587331688176999 0 +183 -0.412668311823326 -1.831508917561844 0 +184 -1.587331688176959 -0.1684910824380113 0 +185 -0.1684910824381127 -0.4126683118233664 0 +186 -1.591985895045787 -1.395492132292566 0 +187 -0.6045078677073794 -1.591985895045631 0 +188 -1.395492132292758 -0.4080141049541368 0 +189 -0.4080141049542926 -0.6045078677071878 0 +190 -1.856319332479974 -0.1429067881178993 0 +191 -0.1429067881179407 -0.1436806675201018 0 +192 -1.857093211882196 -1.85631933248 0 +193 -0.1436806675200765 -1.857093211882154 0 +194 -0.6001093590746409 -0.8398438205665716 0 +195 -0.8398438205668378 -1.399890640925229 0 +196 -1.1601561794338 -0.600109359074923 0 +197 -1.399890640924947 -1.160156179433533 0 +198 -1.298583695503883 -1.618470567992351 0 +199 -0.3815294320076477 -1.298583695503884 0 +200 -1.618470567992499 -0.7014163044970879 0 +201 -0.7014163044970882 -0.3815294320074995 0 +202 -1.001684584448846 -1.627308233761972 0 +203 -0.3726917662380312 -1.001684584448848 0 +204 -1.62730823376201 -0.9983154155520881 0 +205 -0.998315415552085 -0.3726917662379921 0 +206 -1.688235708371973 -1.617786124126241 0 +207 -0.3822138758737116 -1.688235708371903 0 +208 -1.61778612412611 -0.3117642916279726 0 +209 -0.3117642916280424 -0.3822138758738443 0 +210 -1.611065901027773 -0.5658818038810237 0 +211 -0.5639343235509842 -0.3880526532353109 0 +212 -1.43411819611927 -1.611065901027875 0 +213 -0.3889340989721091 -1.434118196119216 0 +214 -1.431224008079152 -1.869099223876274 0 +215 -0.1309007761237347 -1.431224008079161 0 +216 -1.869099223876224 -0.5687759919210946 0 +217 -0.5601287127365874 -0.1285495622882056 0 +218 -1.075390635226622 -1.866939862986499 0 +219 -0.1330601370135004 -1.075390635226597 0 +220 -1.866939862986448 -0.9246093647739528 0 +221 -0.9246093647739796 -0.1330601370135507 0 +222 -1.460945431399342 -0.534874829278311 0 +223 -1.46512517072191 -1.460945431399319 0 +224 -0.5348748292783762 -0.5390545686005728 0 +225 -0.5390545686005963 -1.465125170721845 0 +226 -1.691615144969389 -1.856703322446797 0 +227 -0.143296677553219 -1.691615144969384 0 +228 -1.856703322446922 -0.3083848550304298 0 +229 -0.3095922670268578 -0.1443483154355923 0 +230 -0.8905369270462922 -1.873696512729073 0 +231 -0.1263034872709277 -0.8905369270462679 0 +232 -1.873696512729025 -1.10946307295437 0 +233 -1.109463072954393 -0.1263034872709755 0 +234 -1.873115432133201 -1.697980915178353 0 +235 -0.302019084821941 -1.873115432133162 0 +236 -1.697980915178297 -0.1268845678668036 0 +237 -0.1268845678668428 -0.3020190848219981 0 +238 -1.873252018556223 -1.340127582249148 0 +239 -1.340127582249162 -0.1267479814437837 0 +240 -0.6598724177515761 -1.873252018556129 0 +241 -0.1267479814438784 -0.6598724177515611 0 +242 -1.040841049724677 -1.381272341446047 0 +243 -0.6187276585539536 -1.040841049724672 0 +244 -1.381272341445979 -0.9591589502761727 0 +245 -0.9591589502761747 -0.6187276585540207 0 +246 -1.346958936867969 -0.666857910033366 0 +247 -0.6668579100334221 -0.6530410631320127 0 +248 -1.333142089966788 -1.346958936867707 0 +249 -0.6530410631322747 -1.333142089966733 0 +250 -0.1190272772172528 -1.308393283692328 0 +251 -1.308393283692329 -1.880972722782761 0 +252 -0.6892490353274117 -0.1263421349039108 0 +253 -1.880972722782744 -0.6916067163080923 0 +254 -1.541810364117203 -1.141964626407279 0 +255 -1.141964626407373 -0.458189635882768 0 +256 -0.8580353735933255 -1.541810364117132 0 +257 -0.4581896358828397 -0.8580353735932319 0 +258 -1.585711314548304 -1.697676848923946 0 +259 -0.3023231510760611 -1.585711314548268 0 +260 -1.69767684892395 -0.4142886854516796 0 +261 -0.4138658078183632 -0.2983298735006925 0 +262 -1.092246960561361 -1.736308704105289 0 +263 -0.2636912958947111 -1.092246960561342 0 +264 -1.736308704105297 -0.9077530394392752 0 +265 -0.9019250222308923 -0.2765535467979561 0 +266 -0.8493283172181638 -1.72972933178732 0 +267 -0.2702706682126891 -0.8493283172181295 0 +268 -1.729729331787396 -1.15067168278235 0 +269 -1.150671682782383 -0.2702706682126141 0 +270 -0.6930854599346211 -1.714521181976122 0 +271 -0.2854788180238956 -0.6930854599345869 0 +272 -1.714521181976279 -1.306914540065919 0 +273 -1.306914540065953 -0.2854788180237389 0 +274 -0.4913826238307824 -1.662147132027541 0 +275 -1.662147132027634 -1.508617376169398 0 +276 -0.3378528679724853 -0.4913826238307554 0 +277 -1.508617376169425 -0.3378528679723929 0 +278 -1.077094109964925 -1.539591812697967 0 +279 -0.4604081873020319 -1.077094109964926 0 +280 -1.539591812697947 -0.9229058900360064 0 +281 -0.9223184501899727 -0.4576277367897352 0 +282 -0.5085643105469395 -1.881569387938672 0 +283 -1.881569387938774 -1.491435689453547 0 +284 -0.1184306120613096 -0.5085643105469446 0 +285 -1.491435689453541 -0.1184306120612068 0 +286 -1.251888165902761 -1.53025932240266 0 +287 -0.4697406775973387 -1.251888165902733 0 +288 -1.530259322402734 -0.7481118340978239 0 +289 -0.7593825264944745 -0.4765879337370469 0 +290 -1.351308882303738 -0.7836781420671436 0 +291 -0.7836781420671752 -0.648691117696274 0 +292 -1.216321857933216 -1.351308882303658 0 +293 -0.6486911176963537 -1.216321857933184 0 +294 -0.7078299065260801 -1.555586176314844 0 +295 -0.4444138236851293 -0.7078299065258495 0 +296 -1.555586176314901 -1.292170093474065 0 +297 -1.292170093474295 -0.4444138236850709 0 +298 -1.281183522114732 -1.71787972693935 0 +299 -0.2821202730606479 -1.281183522114715 0 +300 -1.717879726939341 -0.7188164778858697 0 +301 -0.7643400825443118 -0.3012863875720335 0 +302 -1.732085792763776 -0.5163600165168984 0 +303 -1.483639983483415 -1.732085792764077 0 +304 -0.5179936664162416 -0.2821396934016795 0 +305 -0.2679142072358953 -1.483639983483386 0 +306 -0.8748073189552588 -1.630062296573088 0 +307 -0.3699377034269233 -0.8748073189552146 0 +308 -1.630062296573231 -1.125192681045329 0 +309 -1.125192681045372 -0.3699377034267795 0 +310 -0.653617405060736 -0.912287932360583 0 +311 -0.9122879323606741 -1.346382594939223 0 +312 -1.087712067639846 -0.6536174050608976 0 +313 -1.346382594939061 -1.087712067639756 0 +314 -0.9810108422322708 -1.879806496268668 0 +315 -0.1201935037313322 -0.9810108422322482 0 +316 -1.879806496268611 -1.018989157768459 0 +317 -1.01898915776848 -0.1201935037313886 0 +318 -0.07639086339732354 -1.545083414055603 0 +319 -1.545083414055598 -1.923609136602685 0 +320 -0.4672677747449934 -0.09066375930909157 0 +321 -1.923609136602765 -0.4549165859440545 0 +322 -0.6494066232059902 -0.7521320603219943 0 +323 -0.7521320603222537 -1.350593376793967 0 +324 -1.247867939678162 -0.6494066232062071 0 +325 -1.350593376793752 -1.247867939677903 0 +326 -0.0903174071822018 -1.147443110119016 0 +327 -1.147443110119027 -1.9096825928178 0 +328 -0.8559172745555909 -0.09134085837086052 0 +329 -1.909682592817789 -0.8525568898817149 0 +330 -1.653612138381769 -1.764403346782745 0 +331 -0.2355966532172858 -1.653612138381777 0 +332 -1.764403346782841 -0.3463878616182256 0 +333 -0.3477073499522222 -0.2362280568578507 0 +334 -1.912165051903643 -0.2223356640083488 0 +335 -0.2225368993410992 -0.08801022107678677 0 +336 -1.777664335991261 -1.912165051903697 0 +337 -0.08783494809631651 -1.777664335991247 0 +338 -1.334443334929255 -0.8923121583486631 0 +339 -0.8923121583486679 -0.6655566650707464 0 +340 -1.10768784165181 -1.334443334929321 0 +341 -0.6655566650706806 -1.107687841651803 0 +342 -1.928196632044764 -1.268858334782675 0 +343 -1.268858334782683 -0.0718033679552397 0 +344 -0.7311416652182664 -1.928196632044729 0 +345 -0.07180336795527499 -0.7311416652182581 0 +346 -0.7082945038449261 -0.2195918419826632 0 +347 -1.777864483294668 -1.508000395386939 0 +348 -1.508000395386973 -0.2221355167053555 0 +349 -0.4919996046134749 -1.7778644832946 0 +350 -0.2221355167054244 -0.4919996046134404 0 +351 -1.927611900878007 -1.62623597124134 0 +352 -0.3737640287590964 -1.927611900877988 0 +353 -1.626235971241317 -0.07238809912198255 0 +354 -0.07238809912200167 -0.3737640287591207 0 +355 -1.413513419666229 -1.529301004679949 0 +356 -0.4706989953200307 -1.413513419666167 0 +357 -1.52930100468001 -0.5864865803339707 0 +358 -0.5860970842680143 -0.4705227061725911 0 +359 -0.6131194585401797 -1.417212064509919 0 +360 -1.41721206450997 -1.386880541459761 0 +361 -0.5827879354903223 -0.6131194585399594 0 +362 -1.386880541459981 -0.5827879354902696 0 +363 -1.16898376693453 -1.71540606815567 0 +364 -0.2845939318443273 -1.168983766934519 0 +365 -1.715406068155619 -0.8310162330661954 0 +366 -1.770850494583839 -1.669987988125298 0 +367 -0.3300120118748598 -1.77085049458379 0 +368 -1.669987988125242 -0.2291495054161923 0 +369 -0.2291495054162387 -0.330012011874916 0 +370 -1.376523961573374 -0.4947232301928646 0 +371 -1.505276769807252 -1.376523961572833 0 +372 -0.4947232301929581 -0.623476038426617 0 +373 -0.6234760384271624 -1.505276769807161 0 +374 -1.783140014884638 -0.08448786966217264 0 +375 -0.08448786966224733 -0.2168599851155679 0 +376 -1.915512130337901 -1.783140014884613 0 +377 -0.2168599851155926 -1.915512130337826 0 +378 -0.9340786047681329 -1.558025658105569 0 +379 -0.4419743418944343 -0.9340786047681238 0 +380 -1.558025658105611 -1.065921395232738 0 +381 -1.065921395232747 -0.4419743418943909 0 +382 -0.5692283326147647 -1.257875132902853 0 +383 -1.257875132902887 -1.430771667385234 0 +384 -0.7438019391213528 -0.5675501396195732 0 +385 -1.43077166738532 -0.7421248670974786 0 +386 -0.6136028388463718 -1.678694245066598 0 +387 -1.678694245066763 -1.386397161154121 0 +388 -0.3213057549333743 -0.6136028388463486 0 +389 -1.386397161154142 -0.3213057549332097 0 +390 -1.54596925051054 -1.475731085036509 0 +391 -0.5242689149634978 -1.545969250510458 0 +392 -1.475731085036588 -0.4540307494895558 0 +393 -0.4540307494896386 -0.5242689149634183 0 +394 -1.914650425096779 -0.08534957490315351 0 +395 -0.08534957490313853 -0.08534957490322888 0 +396 -1.914650425096816 -1.914650425096839 0 +397 -0.0853495749031695 -1.914650425096831 0 +398 -0.5255358299264343 -0.7894342003589413 0 +399 -0.7894342003591348 -1.474464170073548 0 +400 -1.210565799641414 -0.5255358299263841 0 +401 -1.474464170073598 -1.210565799641221 0 +402 -1.792615490966433 -1.342255421887159 0 +403 -1.342255421887199 -0.2073845090335847 0 +404 -0.6577445781132988 -1.792615490966241 0 +405 -0.2073845090337773 -0.6577445781132572 0 +406 -0.07765407365169817 -1.237519686458517 0 +407 -1.237519686458523 -1.922345926348306 0 +408 -0.767385392824069 -0.08075456709086645 0 +409 -1.922345926348301 -0.7624803135420162 0 +410 -1.830091062832679 -0.2220420739030772 0 +411 -0.2222433092358615 -0.1700842101478 0 +412 -1.777957926096987 -1.830091062832631 0 +413 -0.1699089371674313 -1.77795792609694 0 +414 -1.62836669799778 -0.4720754838000086 0 +415 -0.4748024610692896 -0.3715894407007926 0 +416 -1.527924516200127 -1.628366697997903 0 +417 -0.371633302002089 -1.527924516200084 0 +418 -1.742446820302845 -1.226694631022188 0 +419 -1.226694631022225 -0.257553179697166 0 +420 -0.7733053689782744 -1.74244682030276 0 +421 -0.2575531796972498 -0.7733053689782375 0 +422 -1.036827316200419 -1.465336291045019 0 +423 -0.5346637089549822 -1.036827316200416 0 +424 -1.465336291044995 -0.9631726838004745 0 +425 -0.9653245729294759 -0.531501254315236 0 +426 -0.6870438122577168 -0.2995666746067934 0 +427 -1.368575328541155 -1.664085078381289 0 +428 -0.3359149216187055 -1.36857532854112 0 +429 -1.664085078381305 -0.6314246714593004 0 +430 -1.019329325723441 -1.716890314968925 0 +431 -0.2831096850310773 -1.019329325723423 0 +432 -1.716890314968929 -0.9806706742772335 0 +433 -0.9796993380758485 -0.2852533935149477 0 +434 -0.07843815171281963 -1.377023085193925 0 +435 -1.377023085193921 -1.92156184828719 0 +436 -0.6235803796734463 -0.07803680496954146 0 +437 -1.921561848287163 -0.6229769148062574 0 +438 -1.314361258499692 -1.79930838682725 0 +439 -0.2006916131727594 -1.314361258499678 0 +440 -1.799308386827221 -0.6856387415007625 0 +441 -0.4486176535173166 -1.931504719775387 0 +442 -1.931504719775373 -1.551382346483188 0 +443 -0.06849528022459801 -0.4486176535173368 0 +444 -1.551382346483169 -0.06849528022461035 0 +445 -0.08007128029562945 -1.624107120305201 0 +446 -1.624107120305201 -1.919928719704378 0 +447 -0.3802949766487038 -0.08460848008994407 0 +448 -1.919928719704431 -0.3758928796942375 0 +449 -0.6215821578303552 -0.1693937395997384 0 +450 -1.639977246955534 -1.322131410755862 0 +451 -1.32213141075597 -0.3600227530444446 0 +452 -0.677868589244443 -1.639977246955395 0 +453 -0.360022753044584 -0.6778685892443344 0 +454 -1.552360750886074 -0.838066359050609 0 +455 -0.8395616722529096 -0.4520271308335714 0 +456 -1.161933640950207 -1.552360750886146 0 +457 -0.4476392491138494 -1.161933640950201 0 +458 -0.5399062315765453 -0.896332376731501 0 +459 -0.8963323767315955 -1.460093768423424 0 +460 -1.10366762326914 -0.5399062315765885 0 +461 -1.460093768423381 -1.103667623269046 0 +462 -1.055494345673848 -1.935261353281766 0 +463 -0.06473864671823126 -1.055494345673842 0 +464 -1.935261353281699 -0.9445056543272741 0 +465 -0.9448485507225726 -0.06484308051305808 0 +466 -1.914648794469168 -1.170443742087339 0 +467 -1.170443742087352 -0.08535120553083236 0 +468 -0.8295562579135649 -1.914648794469187 0 +469 -0.08535120553081427 -0.8295562579135508 0 +470 -0.3675815275897543 -1.220717066027847 0 +471 -1.220717066027854 -1.63241847241024 0 +472 -1.632418472410201 -0.779282933972977 0 +473 -1.075942942531009 -1.65025546368317 0 +474 -0.3497445363168194 -1.075942942531007 0 +475 -1.65025546368297 -0.9240570574699205 0 +476 -0.9257965903073337 -0.3502542999919778 0 +477 -0.6764035405996086 -0.8250146557422561 0 +478 -0.825014655742432 -1.323596459400363 0 +479 -1.174985344258004 -0.6764035405998069 0 +480 -1.323596459400166 -1.174985344257829 0 +481 -0.7785667946070244 -0.3984876577438277 0 +482 -1.547375084027939 -0.5100775282858818 0 +483 -1.489922471714284 -1.547375084028028 0 +484 -0.5101239569613096 -0.4524937735689887 0 +485 -0.4526249159719569 -1.489922471714229 0 +486 -1.561016071512974 -0.6549027202032625 0 +487 -0.6584799984794344 -0.4435602355569926 0 +488 -1.345097279797015 -1.561016071512696 0 +489 -0.4389839284873108 -1.345097279796948 0 +490 -1.002055204010759 -1.316025684025791 0 +491 -0.6839743159742071 -1.002055204010752 0 +492 -1.316025684025593 -0.9979447959894048 0 +493 -0.9979447959894108 -0.6839743159744051 0 +494 -1.682172500877368 -1.692145111743418 0 +495 -1.692145111743397 -0.3178274991227552 0 +496 -0.3078548882565875 -1.682172500877397 0 +497 -0.3178819579845236 -0.3076506928038206 0 +498 -0.1787572935049501 -0.2332909552970096 0 +499 -1.766738256866538 -0.1787237542827839 0 +500 -0.2332617431336008 -1.821276245717238 0 +501 -1.821276245717282 -1.766738256866543 0 +502 -0.5798174908739786 -1.925617785743687 0 +503 -0.07438221425630374 -0.5798174908739889 0 +504 -1.925617785743727 -1.420182509126596 0 +505 -1.420182509126584 -0.07438221425626229 0 +506 -1.460062840860031 -1.92816101667076 0 +507 -0.07183898332924901 -1.460062840860037 0 +508 -1.928161016670831 -0.5399371591399014 0 +509 -0.5499999999986785 -0.05719792099121907 0 +510 -1.435171183529011 -1.804212059323936 0 +511 -0.1957879406760668 -1.435171183528999 0 +512 -1.804212059323841 -0.5648288164713126 0 +513 -0.5140975422986004 -0.1905218886076704 0 +514 -1.847682360979017 -1.936729639420867 0 +515 -0.06327036057914857 -1.847682360979013 0 +516 -1.936729639420683 -0.1523176390206636 0 +517 -0.1523463869253439 -0.06329539957653484 0 +518 -0.6208624330630343 -0.3321725630704478 0 +519 -1.612797067589117 -1.616564036486586 0 +520 -0.3834359635134024 -1.612797067589064 0 +521 -1.616564036486551 -0.3872029324108214 0 +522 -0.3872029324108752 -0.3834359635134378 0 +523 -0.9338810696577836 -1.714109864507807 0 +524 -0.2858901354921994 -0.9338810696577562 0 +525 -1.714109864507867 -1.066118930342776 0 +526 -1.06600329508073 -0.2861453388830779 0 +527 -1.127072294827154 -1.807638306357762 0 +528 -0.1923616936422395 -1.127072294827135 0 +529 -1.046607257644978 -1.796418293940345 0 +530 -0.2035817060596602 -1.046607257644953 0 +531 -1.807638306357754 -0.8729277051734724 0 +532 -0.8764334560153856 -0.1909866958625132 0 +533 -1.796418293940397 -0.9533927423556137 0 +534 -0.9533927423556374 -0.2035817060596068 0 +535 -1.833837139230145 -1.421603218005291 0 +536 -1.421603218005308 -0.1661628607698637 0 +537 -0.5783967819952209 -1.833837139230044 0 +538 -0.1661628607699649 -0.5783967819952034 0 +539 -1.813580688990508 -1.167044096923154 0 +540 -0.8329559030774624 -1.81358068899046 0 +541 -1.167044096923181 -0.1864193110094991 0 +542 -0.186419311009547 -0.8329559030774345 0 +543 -0.9059841867641318 -1.798554594421587 0 +544 -0.2014454055784214 -0.9059841867641009 0 +545 -1.798554594421683 -1.094015813236346 0 +546 -1.094015813236376 -0.2014454055783264 0 +547 -0.4311764439295668 -0.7900933222296587 0 +548 -0.7900933222297644 -1.568823556070478 0 +549 -1.209906677770701 -0.4311764439291295 0 +550 -1.568823556070915 -1.209906677770596 0 +551 -0.05314156668556928 -0.6500000000027046 0 +552 -0.6500000000027046 -1.946858433314444 0 +553 -1.349999999998288 -0.05314156668546592 0 +554 -1.946858433314546 -1.349999999998289 0 +555 -0.8309956779350621 -0.2552940847535443 0 +556 -0.06254884653666531 -0.1491780455080293 0 +557 -0.1491780455080173 -1.937451153463362 0 +558 -1.85082195449212 -0.06254884653664508 0 +559 -1.937451153463383 -1.850821954492132 0 +560 -1.003462253151882 -1.535532347421156 0 +561 -0.464467652578846 -1.00346225315188 0 +562 -1.535532347421166 -0.9965377468490257 0 +563 -0.9968506367056208 -0.4632790715484179 0 +564 -0.1635029359448098 -1.372521219387556 0 +565 -1.372521219387536 -1.836497064055228 0 +566 -1.836497064055234 -0.6274787806129043 0 +567 -1.412683209307979 -1.026979944904976 0 +568 -1.026979944904978 -0.5873167906920201 0 +569 -0.9730200550959762 -1.412683209308018 0 +570 -0.5873167906919808 -0.9730200550959718 0 +571 -1.931782955656066 -1.082944878776769 0 +572 -1.082944878776789 -0.06821704434393601 0 +573 -0.9170551212240518 -1.931782955656062 0 +574 -0.0682170443439393 -0.917055121224031 0 +575 -0.421655285603231 -1.746121347167936 0 +576 -1.746121347168012 -1.578344714396975 0 +577 -0.2538786528320607 -0.4216552856032646 0 +578 -1.578344714396942 -0.2538786528319849 0 +579 -1.498265861429121 -1.850301590336616 0 +580 -0.1496984096634 -1.498265861429129 0 +581 -1.850301590336801 -0.5017341385709485 0 +$EndNodes +$Elements +1160 +1 1 2 4 5 8 25 +2 1 2 4 5 25 26 +3 1 2 4 5 26 27 +4 1 2 4 5 27 28 +5 1 2 4 5 28 29 +6 1 2 4 5 29 30 +7 1 2 4 5 30 31 +8 1 2 4 5 31 32 +9 1 2 4 5 32 33 +10 1 2 4 5 33 34 +11 1 2 4 5 34 35 +12 1 2 4 5 35 36 +13 1 2 4 5 36 37 +14 1 2 4 5 37 38 +15 1 2 4 5 38 39 +16 1 2 4 5 39 40 +17 1 2 4 5 40 41 +18 1 2 4 5 41 42 +19 1 2 4 5 42 43 +20 1 2 4 5 43 5 +21 1 2 5 6 5 44 +22 1 2 5 6 44 45 +23 1 2 5 6 45 46 +24 1 2 5 6 46 47 +25 1 2 5 6 47 48 +26 1 2 5 6 48 49 +27 1 2 5 6 49 50 +28 1 2 5 6 50 51 +29 1 2 5 6 51 52 +30 1 2 5 6 52 53 +31 1 2 5 6 53 54 +32 1 2 5 6 54 55 +33 1 2 5 6 55 56 +34 1 2 5 6 56 57 +35 1 2 5 6 57 58 +36 1 2 5 6 58 59 +37 1 2 5 6 59 60 +38 1 2 5 6 60 61 +39 1 2 5 6 61 62 +40 1 2 5 6 62 6 +41 1 2 6 7 6 63 +42 1 2 6 7 63 64 +43 1 2 6 7 64 65 +44 1 2 6 7 65 66 +45 1 2 6 7 66 67 +46 1 2 6 7 67 68 +47 1 2 6 7 68 69 +48 1 2 6 7 69 70 +49 1 2 6 7 70 71 +50 1 2 6 7 71 72 +51 1 2 6 7 72 73 +52 1 2 6 7 73 74 +53 1 2 6 7 74 75 +54 1 2 6 7 75 76 +55 1 2 6 7 76 77 +56 1 2 6 7 77 78 +57 1 2 6 7 78 79 +58 1 2 6 7 79 80 +59 1 2 6 7 80 81 +60 1 2 6 7 81 7 +61 1 2 3 8 7 82 +62 1 2 3 8 82 83 +63 1 2 3 8 83 84 +64 1 2 3 8 84 85 +65 1 2 3 8 85 86 +66 1 2 3 8 86 87 +67 1 2 3 8 87 88 +68 1 2 3 8 88 89 +69 1 2 3 8 89 90 +70 1 2 3 8 90 91 +71 1 2 3 8 91 92 +72 1 2 3 8 92 93 +73 1 2 3 8 93 94 +74 1 2 3 8 94 95 +75 1 2 3 8 95 96 +76 1 2 3 8 96 97 +77 1 2 3 8 97 98 +78 1 2 3 8 98 99 +79 1 2 3 8 99 100 +80 1 2 3 8 100 8 +81 2 2 1 10 105 117 106 +82 2 2 1 10 106 117 115 +83 2 2 1 10 102 114 109 +84 2 2 1 10 109 114 116 +85 2 2 1 10 108 115 114 +86 2 2 1 10 104 115 108 +87 2 2 1 10 103 116 107 +88 2 2 1 10 107 116 117 +89 2 2 1 10 18 19 107 +90 2 2 1 10 22 23 109 +91 2 2 1 10 14 15 106 +92 2 2 1 10 10 11 108 +93 2 2 1 10 1 13 113 +94 2 2 1 10 1 113 12 +95 2 2 1 10 3 111 20 +96 2 2 1 10 2 17 112 +97 2 2 1 10 4 9 110 +98 2 2 1 10 3 21 111 +99 2 2 1 10 4 110 24 +100 2 2 1 10 2 112 16 +101 2 2 1 10 105 123 107 +102 2 2 1 10 18 107 123 +103 2 2 1 10 104 119 106 +104 2 2 1 10 105 106 122 +105 2 2 1 10 102 109 118 +106 2 2 1 10 14 106 119 +107 2 2 1 10 102 120 108 +108 2 2 1 10 23 118 109 +109 2 2 1 10 11 125 108 +110 2 2 1 10 15 122 106 +111 2 2 1 10 22 109 124 +112 2 2 1 10 10 108 120 +113 2 2 1 10 103 124 109 +114 2 2 1 10 104 108 125 +115 2 2 1 10 19 121 107 +116 2 2 1 10 103 107 121 +117 2 2 1 10 105 107 117 +118 2 2 1 10 104 106 115 +119 2 2 1 10 101 115 117 +120 2 2 1 10 102 108 114 +121 2 2 1 10 101 116 114 +122 2 2 1 10 103 109 116 +123 2 2 1 10 101 114 115 +124 2 2 1 10 101 117 116 +125 2 2 1 10 21 22 124 +126 2 2 1 10 19 20 121 +127 2 2 1 10 13 14 119 +128 2 2 1 10 17 18 123 +129 2 2 1 10 11 12 125 +130 2 2 1 10 23 24 118 +131 2 2 1 10 9 10 120 +132 2 2 1 10 15 16 122 +133 2 2 1 10 21 124 111 +134 2 2 1 10 20 111 121 +135 2 2 1 10 9 120 110 +136 2 2 1 10 24 110 118 +137 2 2 1 10 12 113 125 +138 2 2 1 10 13 119 113 +139 2 2 1 10 17 123 112 +140 2 2 1 10 16 112 122 +141 2 2 1 10 102 110 120 +142 2 2 1 10 102 118 110 +143 2 2 1 10 105 122 112 +144 2 2 1 10 103 111 124 +145 2 2 1 10 103 121 111 +146 2 2 1 10 105 112 123 +147 2 2 1 10 104 113 119 +148 2 2 1 10 104 125 113 +149 2 2 2 12 166 226 446 +150 2 2 2 12 167 227 445 +151 2 2 2 12 168 228 448 +152 2 2 2 12 169 229 447 +153 2 2 2 12 256 306 548 +154 2 2 2 12 257 307 547 +155 2 2 2 12 254 308 550 +156 2 2 2 12 255 309 549 +157 2 2 2 12 212 303 427 +158 2 2 2 12 213 305 428 +159 2 2 2 12 210 302 429 +160 2 2 2 12 135 547 307 +161 2 2 2 12 134 548 306 +162 2 2 2 12 137 549 309 +163 2 2 2 12 136 550 308 +164 2 2 2 12 142 427 303 +165 2 2 2 12 143 428 305 +166 2 2 2 12 144 429 302 +167 2 2 2 12 151 362 222 +168 2 2 2 12 150 360 223 +169 2 2 2 12 153 361 224 +170 2 2 2 12 152 359 225 +171 2 2 2 12 84 226 336 +172 2 2 2 12 27 227 337 +173 2 2 2 12 65 228 334 +174 2 2 2 12 46 229 335 +175 2 2 2 12 166 330 226 +176 2 2 2 12 167 331 227 +177 2 2 2 12 138 226 330 +178 2 2 2 12 139 227 331 +179 2 2 2 12 168 332 228 +180 2 2 2 12 169 333 229 +181 2 2 2 12 140 228 332 +182 2 2 2 12 141 229 333 +183 2 2 2 12 501 138 366 +184 2 2 2 12 499 140 368 +185 2 2 2 12 500 139 367 +186 2 2 2 12 498 141 369 +187 2 2 2 12 178 344 240 +188 2 2 2 12 179 345 241 +189 2 2 2 12 180 342 238 +190 2 2 2 12 181 343 239 +191 2 2 2 12 151 222 357 +192 2 2 2 12 153 224 358 +193 2 2 2 12 150 223 355 +194 2 2 2 12 152 225 356 +195 2 2 2 12 234 501 366 +196 2 2 2 12 236 499 368 +197 2 2 2 12 235 500 367 +198 2 2 2 12 237 498 369 +199 2 2 2 12 170 251 407 +200 2 2 2 12 171 250 406 +201 2 2 2 12 172 253 409 +202 2 2 2 12 173 252 408 +203 2 2 2 12 60 374 236 +204 2 2 2 12 79 376 234 +205 2 2 2 12 41 375 237 +206 2 2 2 12 98 377 235 +207 2 2 2 12 4 246 290 +208 2 2 2 12 3 247 291 +209 2 2 2 12 1 248 292 +210 2 2 2 12 2 249 293 +211 2 2 2 12 138 412 226 +212 2 2 2 12 140 410 228 +213 2 2 2 12 139 413 227 +214 2 2 2 12 141 411 229 +215 2 2 2 12 84 446 226 +216 2 2 2 12 27 445 227 +217 2 2 2 12 65 448 228 +218 2 2 2 12 46 447 229 +219 2 2 2 12 79 234 351 +220 2 2 2 12 60 236 353 +221 2 2 2 12 98 235 352 +222 2 2 2 12 41 237 354 +223 2 2 2 12 19 310 20 +224 2 2 2 12 15 311 16 +225 2 2 2 12 23 312 24 +226 2 2 2 12 11 313 12 +227 2 2 2 12 184 348 285 +228 2 2 2 12 182 347 283 +229 2 2 2 12 185 350 284 +230 2 2 2 12 183 349 282 +231 2 2 2 12 164 247 322 +232 2 2 2 12 162 246 324 +233 2 2 2 12 165 249 323 +234 2 2 2 12 163 248 325 +235 2 2 2 12 1 292 13 +236 2 2 2 12 4 290 9 +237 2 2 2 12 2 293 17 +238 2 2 2 12 3 291 21 +239 2 2 2 12 168 448 321 +240 2 2 2 12 169 447 320 +241 2 2 2 12 166 446 319 +242 2 2 2 12 167 445 318 +243 2 2 2 12 150 248 360 +244 2 2 2 12 151 246 362 +245 2 2 2 12 152 249 359 +246 2 2 2 12 153 247 361 +247 2 2 2 12 14 340 490 +248 2 2 2 12 18 341 491 +249 2 2 2 12 10 338 492 +250 2 2 2 12 22 339 493 +251 2 2 2 12 150 383 248 +252 2 2 2 12 152 382 249 +253 2 2 2 12 151 385 246 +254 2 2 2 12 153 384 247 +255 2 2 2 12 16 311 478 +256 2 2 2 12 20 310 477 +257 2 2 2 12 12 313 480 +258 2 2 2 12 24 312 479 +259 2 2 2 12 182 234 366 +260 2 2 2 12 183 235 367 +261 2 2 2 12 184 236 368 +262 2 2 2 12 185 237 369 +263 2 2 2 12 166 303 258 +264 2 2 2 12 167 305 259 +265 2 2 2 12 168 302 260 +266 2 2 2 12 169 304 261 +267 2 2 2 12 127 274 520 +268 2 2 2 12 207 520 274 +269 2 2 2 12 126 275 519 +270 2 2 2 12 206 519 275 +271 2 2 2 12 129 276 522 +272 2 2 2 12 209 522 276 +273 2 2 2 12 128 277 521 +274 2 2 2 12 208 521 277 +275 2 2 2 12 254 380 308 +276 2 2 2 12 255 381 309 +277 2 2 2 12 256 378 306 +278 2 2 2 12 257 379 307 +279 2 2 2 12 242 490 340 +280 2 2 2 12 243 491 341 +281 2 2 2 12 244 492 338 +282 2 2 2 12 245 493 339 +283 2 2 2 12 211 304 518 +284 2 2 2 12 134 306 266 +285 2 2 2 12 135 307 267 +286 2 2 2 12 136 308 268 +287 2 2 2 12 137 309 269 +288 2 2 2 12 13 292 340 +289 2 2 2 12 17 293 341 +290 2 2 2 12 9 290 338 +291 2 2 2 12 21 291 339 +292 2 2 2 12 182 351 234 +293 2 2 2 12 183 352 235 +294 2 2 2 12 184 353 236 +295 2 2 2 12 185 354 237 +296 2 2 2 12 158 529 314 +297 2 2 2 12 159 530 315 +298 2 2 2 12 160 533 316 +299 2 2 2 12 161 534 317 +300 2 2 2 12 158 314 543 +301 2 2 2 12 159 315 544 +302 2 2 2 12 160 316 545 +303 2 2 2 12 161 317 546 +304 2 2 2 12 170 407 327 +305 2 2 2 12 171 406 326 +306 2 2 2 12 172 409 329 +307 2 2 2 12 173 408 328 +308 2 2 2 12 3 322 247 +309 2 2 2 12 2 323 249 +310 2 2 2 12 4 324 246 +311 2 2 2 12 1 325 248 +312 2 2 2 12 345 179 469 +313 2 2 2 12 344 178 468 +314 2 2 2 12 343 181 467 +315 2 2 2 12 342 180 466 +316 2 2 2 12 286 471 456 +317 2 2 2 12 287 470 457 +318 2 2 2 12 288 472 454 +319 2 2 2 12 178 540 468 +320 2 2 2 12 179 542 469 +321 2 2 2 12 180 539 466 +322 2 2 2 12 181 541 467 +323 2 2 2 12 285 348 536 +324 2 2 2 12 283 347 535 +325 2 2 2 12 284 350 538 +326 2 2 2 12 282 349 537 +327 2 2 2 12 187 386 274 +328 2 2 2 12 186 387 275 +329 2 2 2 12 189 388 276 +330 2 2 2 12 188 389 277 +331 2 2 2 12 180 238 402 +332 2 2 2 12 178 240 404 +333 2 2 2 12 181 239 403 +334 2 2 2 12 179 241 405 +335 2 2 2 12 171 439 250 +336 2 2 2 12 170 438 251 +337 2 2 2 12 172 440 253 +338 2 2 2 12 186 275 390 +339 2 2 2 12 187 274 391 +340 2 2 2 12 188 277 392 +341 2 2 2 12 189 276 393 +342 2 2 2 12 174 242 340 +343 2 2 2 12 175 243 341 +344 2 2 2 12 176 244 338 +345 2 2 2 12 177 245 339 +346 2 2 2 12 133 555 265 +347 2 2 2 12 174 422 242 +348 2 2 2 12 175 423 243 +349 2 2 2 12 176 424 244 +350 2 2 2 12 177 425 245 +351 2 2 2 12 208 277 578 +352 2 2 2 12 206 275 576 +353 2 2 2 12 209 276 577 +354 2 2 2 12 207 274 575 +355 2 2 2 12 166 258 330 +356 2 2 2 12 167 259 331 +357 2 2 2 12 168 260 332 +358 2 2 2 12 169 261 333 +359 2 2 2 12 145 513 449 +360 2 2 2 12 31 250 434 +361 2 2 2 12 88 251 435 +362 2 2 2 12 50 252 436 +363 2 2 2 12 69 253 437 +364 2 2 2 12 162 362 246 +365 2 2 2 12 163 360 248 +366 2 2 2 12 164 361 247 +367 2 2 2 12 165 359 249 +368 2 2 2 12 71 464 329 +369 2 2 2 12 52 465 328 +370 2 2 2 12 90 462 327 +371 2 2 2 12 33 463 326 +372 2 2 2 12 198 471 286 +373 2 2 2 12 199 470 287 +374 2 2 2 12 200 472 288 +375 2 2 2 12 173 346 252 +376 2 2 2 12 31 406 250 +377 2 2 2 12 88 407 251 +378 2 2 2 12 50 408 252 +379 2 2 2 12 69 409 253 +380 2 2 2 12 211 518 487 +381 2 2 2 12 212 416 303 +382 2 2 2 12 213 417 305 +383 2 2 2 12 210 414 302 +384 2 2 2 12 211 415 304 +385 2 2 2 12 217 513 320 +386 2 2 2 12 146 274 386 +387 2 2 2 12 148 276 388 +388 2 2 2 12 147 275 387 +389 2 2 2 12 149 277 389 +390 2 2 2 12 145 518 304 +391 2 2 2 12 133 265 476 +392 2 2 2 12 164 322 398 +393 2 2 2 12 165 323 399 +394 2 2 2 12 162 324 400 +395 2 2 2 12 163 325 401 +396 2 2 2 12 145 304 513 +397 2 2 2 12 127 391 274 +398 2 2 2 12 126 390 275 +399 2 2 2 12 129 393 276 +400 2 2 2 12 128 392 277 +401 2 2 2 12 163 401 296 +402 2 2 2 12 165 399 294 +403 2 2 2 12 162 400 297 +404 2 2 2 12 164 398 295 +405 2 2 2 12 183 282 441 +406 2 2 2 12 182 283 442 +407 2 2 2 12 185 284 443 +408 2 2 2 12 184 285 444 +409 2 2 2 12 248 383 292 +410 2 2 2 12 249 382 293 +411 2 2 2 12 246 385 290 +412 2 2 2 12 247 384 291 +413 2 2 2 12 131 457 470 +414 2 2 2 12 130 456 471 +415 2 2 2 12 132 454 472 +416 2 2 2 12 130 473 278 +417 2 2 2 12 131 474 279 +418 2 2 2 12 202 278 473 +419 2 2 2 12 203 279 474 +420 2 2 2 12 132 475 280 +421 2 2 2 12 133 476 281 +422 2 2 2 12 204 280 475 +423 2 2 2 12 205 281 476 +424 2 2 2 12 41 42 375 +425 2 2 2 12 60 61 374 +426 2 2 2 12 98 99 377 +427 2 2 2 12 79 80 376 +428 2 2 2 12 134 266 420 +429 2 2 2 12 135 267 421 +430 2 2 2 12 136 268 418 +431 2 2 2 12 137 269 419 +432 2 2 2 12 213 428 489 +433 2 2 2 12 212 427 488 +434 2 2 2 12 210 429 486 +435 2 2 2 12 134 270 452 +436 2 2 2 12 135 271 453 +437 2 2 2 12 136 272 450 +438 2 2 2 12 137 273 451 +439 2 2 2 12 13 340 14 +440 2 2 2 12 17 341 18 +441 2 2 2 12 9 338 10 +442 2 2 2 12 21 339 22 +443 2 2 2 12 277 348 578 +444 2 2 2 12 275 347 576 +445 2 2 2 12 276 350 577 +446 2 2 2 12 274 349 575 +447 2 2 2 12 220 329 464 +448 2 2 2 12 221 328 465 +449 2 2 2 12 218 327 462 +450 2 2 2 12 219 326 463 +451 2 2 2 12 89 90 327 +452 2 2 2 12 32 33 326 +453 2 2 2 12 70 71 329 +454 2 2 2 12 51 52 328 +455 2 2 2 12 230 543 314 +456 2 2 2 12 231 544 315 +457 2 2 2 12 232 545 316 +458 2 2 2 12 233 546 317 +459 2 2 2 12 147 347 275 +460 2 2 2 12 146 349 274 +461 2 2 2 12 149 348 277 +462 2 2 2 12 148 350 276 +463 2 2 2 12 134 420 270 +464 2 2 2 12 135 421 271 +465 2 2 2 12 136 418 272 +466 2 2 2 12 137 419 273 +467 2 2 2 12 218 314 529 +468 2 2 2 12 219 315 530 +469 2 2 2 12 220 316 533 +470 2 2 2 12 221 317 534 +471 2 2 2 12 176 385 288 +472 2 2 2 12 177 384 289 +473 2 2 2 12 174 383 286 +474 2 2 2 12 175 382 287 +475 2 2 2 12 178 404 270 +476 2 2 2 12 179 405 271 +477 2 2 2 12 180 402 272 +478 2 2 2 12 181 403 273 +479 2 2 2 12 168 581 302 +480 2 2 2 12 166 579 303 +481 2 2 2 12 167 580 305 +482 2 2 2 12 201 487 518 +483 2 2 2 12 302 581 512 +484 2 2 2 12 303 579 510 +485 2 2 2 12 305 580 511 +486 2 2 2 12 83 84 336 +487 2 2 2 12 26 27 337 +488 2 2 2 12 64 65 334 +489 2 2 2 12 45 46 335 +490 2 2 2 12 178 270 420 +491 2 2 2 12 179 271 421 +492 2 2 2 12 180 272 418 +493 2 2 2 12 181 273 419 +494 2 2 2 12 264 475 365 +495 2 2 2 12 262 473 363 +496 2 2 2 12 263 474 364 +497 2 2 2 12 78 79 351 +498 2 2 2 12 59 60 353 +499 2 2 2 12 97 98 352 +500 2 2 2 12 40 41 354 +501 2 2 2 12 174 456 278 +502 2 2 2 12 175 457 279 +503 2 2 2 12 176 454 280 +504 2 2 2 12 177 455 281 +505 2 2 2 12 241 345 551 +506 2 2 2 12 240 344 552 +507 2 2 2 12 239 343 553 +508 2 2 2 12 238 342 554 +509 2 2 2 12 6 63 394 +510 2 2 2 12 5 44 395 +511 2 2 2 12 6 394 62 +512 2 2 2 12 5 395 43 +513 2 2 2 12 7 396 81 +514 2 2 2 12 7 82 396 +515 2 2 2 12 8 25 397 +516 2 2 2 12 8 397 100 +517 2 2 2 12 200 288 486 +518 2 2 2 12 151 486 288 +519 2 2 2 12 201 289 487 +520 2 2 2 12 153 487 289 +521 2 2 2 12 198 286 488 +522 2 2 2 12 199 287 489 +523 2 2 2 12 150 488 286 +524 2 2 2 12 152 489 287 +525 2 2 2 12 174 278 422 +526 2 2 2 12 175 279 423 +527 2 2 2 12 176 280 424 +528 2 2 2 12 177 281 425 +529 2 2 2 12 132 365 475 +530 2 2 2 12 130 363 473 +531 2 2 2 12 131 364 474 +532 2 2 2 12 272 402 387 +533 2 2 2 12 147 387 402 +534 2 2 2 12 270 404 386 +535 2 2 2 12 273 403 389 +536 2 2 2 12 146 386 404 +537 2 2 2 12 149 389 403 +538 2 2 2 12 271 405 388 +539 2 2 2 12 148 388 405 +540 2 2 2 12 133 301 555 +541 2 2 2 12 217 320 509 +542 2 2 2 12 174 286 456 +543 2 2 2 12 175 287 457 +544 2 2 2 12 176 288 454 +545 2 2 2 12 177 289 455 +546 2 2 2 12 194 398 322 +547 2 2 2 12 195 399 323 +548 2 2 2 12 196 400 324 +549 2 2 2 12 197 401 325 +550 2 2 2 12 296 401 550 +551 2 2 2 12 297 400 549 +552 2 2 2 12 294 399 548 +553 2 2 2 12 295 398 547 +554 2 2 2 12 77 283 504 +555 2 2 2 12 58 285 505 +556 2 2 2 12 96 282 502 +557 2 2 2 12 39 284 503 +558 2 2 2 12 202 560 278 +559 2 2 2 12 203 561 279 +560 2 2 2 12 204 562 280 +561 2 2 2 12 205 563 281 +562 2 2 2 12 202 523 306 +563 2 2 2 12 203 524 307 +564 2 2 2 12 204 525 308 +565 2 2 2 12 205 526 309 +566 2 2 2 12 169 320 513 +567 2 2 2 12 170 298 438 +568 2 2 2 12 171 299 439 +569 2 2 2 12 172 300 440 +570 2 2 2 12 142 298 427 +571 2 2 2 12 143 299 428 +572 2 2 2 12 198 427 298 +573 2 2 2 12 199 428 299 +574 2 2 2 12 144 300 429 +575 2 2 2 12 200 429 300 +576 2 2 2 12 130 278 456 +577 2 2 2 12 131 279 457 +578 2 2 2 12 132 280 454 +579 2 2 2 12 133 281 455 +580 2 2 2 12 202 430 523 +581 2 2 2 12 203 431 524 +582 2 2 2 12 204 432 525 +583 2 2 2 12 205 433 526 +584 2 2 2 12 176 290 385 +585 2 2 2 12 177 291 384 +586 2 2 2 12 174 292 383 +587 2 2 2 12 175 293 382 +588 2 2 2 12 201 481 289 +589 2 2 2 12 197 313 461 +590 2 2 2 12 196 312 460 +591 2 2 2 12 195 311 459 +592 2 2 2 12 194 310 458 +593 2 2 2 12 77 442 283 +594 2 2 2 12 96 441 282 +595 2 2 2 12 58 444 285 +596 2 2 2 12 39 443 284 +597 2 2 2 12 213 489 356 +598 2 2 2 12 212 488 355 +599 2 2 2 12 211 487 358 +600 2 2 2 12 210 486 357 +601 2 2 2 12 150 286 383 +602 2 2 2 12 152 287 382 +603 2 2 2 12 151 288 385 +604 2 2 2 12 153 289 384 +605 2 2 2 12 176 338 290 +606 2 2 2 12 177 339 291 +607 2 2 2 12 174 340 292 +608 2 2 2 12 175 341 293 +609 2 2 2 12 134 452 294 +610 2 2 2 12 135 453 295 +611 2 2 2 12 136 450 296 +612 2 2 2 12 137 451 297 +613 2 2 2 12 173 301 346 +614 2 2 2 12 256 459 378 +615 2 2 2 12 257 458 379 +616 2 2 2 12 254 461 380 +617 2 2 2 12 255 460 381 +618 2 2 2 12 183 441 352 +619 2 2 2 12 182 442 351 +620 2 2 2 12 185 443 354 +621 2 2 2 12 184 444 353 +622 2 2 2 12 164 295 372 +623 2 2 2 12 189 372 295 +624 2 2 2 12 162 297 370 +625 2 2 2 12 188 370 297 +626 2 2 2 12 165 294 373 +627 2 2 2 12 187 373 294 +628 2 2 2 12 163 296 371 +629 2 2 2 12 186 371 296 +630 2 2 2 12 28 29 318 +631 2 2 2 12 85 86 319 +632 2 2 2 12 47 48 320 +633 2 2 2 12 66 67 321 +634 2 2 2 12 170 363 298 +635 2 2 2 12 171 364 299 +636 2 2 2 12 172 365 300 +637 2 2 2 12 149 536 348 +638 2 2 2 12 147 535 347 +639 2 2 2 12 148 538 350 +640 2 2 2 12 146 537 349 +641 2 2 2 12 313 567 461 +642 2 2 2 12 312 568 460 +643 2 2 2 12 311 569 459 +644 2 2 2 12 310 570 458 +645 2 2 2 12 194 477 310 +646 2 2 2 12 195 478 311 +647 2 2 2 12 196 479 312 +648 2 2 2 12 197 480 313 +649 2 2 2 12 155 379 458 +650 2 2 2 12 154 378 459 +651 2 2 2 12 157 381 460 +652 2 2 2 12 156 380 461 +653 2 2 2 12 225 373 391 +654 2 2 2 12 223 371 390 +655 2 2 2 12 224 372 393 +656 2 2 2 12 222 370 392 +657 2 2 2 12 258 303 416 +658 2 2 2 12 259 305 417 +659 2 2 2 12 260 302 414 +660 2 2 2 12 261 304 415 +661 2 2 2 12 186 390 371 +662 2 2 2 12 187 391 373 +663 2 2 2 12 188 392 370 +664 2 2 2 12 189 393 372 +665 2 2 2 12 223 390 483 +666 2 2 2 12 225 391 485 +667 2 2 2 12 222 392 482 +668 2 2 2 12 224 393 484 +669 2 2 2 12 217 449 513 +670 2 2 2 12 170 527 363 +671 2 2 2 12 171 528 364 +672 2 2 2 12 172 531 365 +673 2 2 2 12 199 489 428 +674 2 2 2 12 198 488 427 +675 2 2 2 12 200 486 429 +676 2 2 2 12 133 481 301 +677 2 2 2 12 201 301 481 +678 2 2 2 12 34 574 315 +679 2 2 2 12 91 573 314 +680 2 2 2 12 53 572 317 +681 2 2 2 12 72 571 316 +682 2 2 2 12 30 31 434 +683 2 2 2 12 87 88 435 +684 2 2 2 12 49 50 436 +685 2 2 2 12 68 69 437 +686 2 2 2 12 259 520 496 +687 2 2 2 12 258 519 494 +688 2 2 2 12 261 522 497 +689 2 2 2 12 260 521 495 +690 2 2 2 12 34 35 574 +691 2 2 2 12 91 92 573 +692 2 2 2 12 53 54 572 +693 2 2 2 12 72 73 571 +694 2 2 2 12 262 363 527 +695 2 2 2 12 263 364 528 +696 2 2 2 12 264 365 531 +697 2 2 2 12 74 75 342 +698 2 2 2 12 55 56 343 +699 2 2 2 12 93 94 344 +700 2 2 2 12 36 37 345 +701 2 2 2 12 230 468 540 +702 2 2 2 12 231 469 542 +703 2 2 2 12 232 466 539 +704 2 2 2 12 233 467 541 +705 2 2 2 12 76 77 504 +706 2 2 2 12 57 58 505 +707 2 2 2 12 95 96 502 +708 2 2 2 12 38 39 503 +709 2 2 2 12 136 296 550 +710 2 2 2 12 134 294 548 +711 2 2 2 12 137 297 549 +712 2 2 2 12 135 295 547 +713 2 2 2 12 187 294 452 +714 2 2 2 12 189 295 453 +715 2 2 2 12 186 296 450 +716 2 2 2 12 188 297 451 +717 2 2 2 12 318 507 580 +718 2 2 2 12 319 506 579 +719 2 2 2 12 321 508 581 +720 2 2 2 12 198 298 471 +721 2 2 2 12 199 299 470 +722 2 2 2 12 200 300 472 +723 2 2 2 12 29 507 318 +724 2 2 2 12 86 506 319 +725 2 2 2 12 48 509 320 +726 2 2 2 12 67 508 321 +727 2 2 2 12 202 306 378 +728 2 2 2 12 203 307 379 +729 2 2 2 12 204 308 380 +730 2 2 2 12 205 309 381 +731 2 2 2 12 2 478 323 +732 2 2 2 12 3 477 322 +733 2 2 2 12 1 480 325 +734 2 2 2 12 4 479 324 +735 2 2 2 12 173 555 301 +736 2 2 2 12 2 16 478 +737 2 2 2 12 3 20 477 +738 2 2 2 12 1 12 480 +739 2 2 2 12 4 24 479 +740 2 2 2 12 84 85 446 +741 2 2 2 12 27 28 445 +742 2 2 2 12 65 66 448 +743 2 2 2 12 46 47 447 +744 2 2 2 12 126 483 390 +745 2 2 2 12 127 485 391 +746 2 2 2 12 128 482 392 +747 2 2 2 12 129 484 393 +748 2 2 2 12 201 426 301 +749 2 2 2 12 142 438 298 +750 2 2 2 12 143 439 299 +751 2 2 2 12 144 440 300 +752 2 2 2 12 259 496 331 +753 2 2 2 12 258 494 330 +754 2 2 2 12 261 497 333 +755 2 2 2 12 260 495 332 +756 2 2 2 12 218 527 327 +757 2 2 2 12 219 528 326 +758 2 2 2 12 170 327 527 +759 2 2 2 12 171 326 528 +760 2 2 2 12 220 531 329 +761 2 2 2 12 221 532 328 +762 2 2 2 12 173 328 532 +763 2 2 2 12 172 329 531 +764 2 2 2 12 92 93 468 +765 2 2 2 12 73 74 466 +766 2 2 2 12 35 36 469 +767 2 2 2 12 54 55 467 +768 2 2 2 12 226 412 336 +769 2 2 2 12 227 413 337 +770 2 2 2 12 228 410 334 +771 2 2 2 12 229 411 335 +772 2 2 2 12 75 554 342 +773 2 2 2 12 56 553 343 +774 2 2 2 12 94 552 344 +775 2 2 2 12 37 551 345 +776 2 2 2 12 567 492 244 +777 2 2 2 12 568 493 245 +778 2 2 2 12 569 490 242 +779 2 2 2 12 570 491 243 +780 2 2 2 12 313 492 567 +781 2 2 2 12 312 493 568 +782 2 2 2 12 311 490 569 +783 2 2 2 12 310 491 570 +784 2 2 2 12 207 496 520 +785 2 2 2 12 206 494 519 +786 2 2 2 12 209 497 522 +787 2 2 2 12 208 495 521 +788 2 2 2 12 142 303 510 +789 2 2 2 12 144 302 512 +790 2 2 2 12 143 305 511 +791 2 2 2 12 169 513 304 +792 2 2 2 12 257 398 458 +793 2 2 2 12 194 458 398 +794 2 2 2 12 256 399 459 +795 2 2 2 12 195 459 399 +796 2 2 2 12 255 400 460 +797 2 2 2 12 196 460 400 +798 2 2 2 12 254 401 461 +799 2 2 2 12 197 461 401 +800 2 2 2 12 266 306 523 +801 2 2 2 12 267 307 524 +802 2 2 2 12 268 308 525 +803 2 2 2 12 269 309 526 +804 2 2 2 12 225 359 373 +805 2 2 2 12 223 360 371 +806 2 2 2 12 224 361 372 +807 2 2 2 12 222 362 370 +808 2 2 2 12 34 315 463 +809 2 2 2 12 91 314 462 +810 2 2 2 12 218 462 314 +811 2 2 2 12 219 463 315 +812 2 2 2 12 72 316 464 +813 2 2 2 12 53 317 465 +814 2 2 2 12 220 464 316 +815 2 2 2 12 221 465 317 +816 2 2 2 12 19 491 310 +817 2 2 2 12 15 490 311 +818 2 2 2 12 23 493 312 +819 2 2 2 12 11 492 313 +820 2 2 2 12 31 32 406 +821 2 2 2 12 88 89 407 +822 2 2 2 12 50 51 408 +823 2 2 2 12 69 70 409 +824 2 2 2 12 32 326 406 +825 2 2 2 12 89 327 407 +826 2 2 2 12 51 328 408 +827 2 2 2 12 70 329 409 +828 2 2 2 12 215 580 507 +829 2 2 2 12 214 579 506 +830 2 2 2 12 216 581 508 +831 2 2 2 12 223 483 355 +832 2 2 2 12 225 485 356 +833 2 2 2 12 222 482 357 +834 2 2 2 12 224 484 358 +835 2 2 2 12 163 371 360 +836 2 2 2 12 165 373 359 +837 2 2 2 12 162 370 362 +838 2 2 2 12 164 372 361 +839 2 2 2 12 77 78 442 +840 2 2 2 12 58 59 444 +841 2 2 2 12 96 97 441 +842 2 2 2 12 39 40 443 +843 2 2 2 12 28 318 445 +844 2 2 2 12 85 319 446 +845 2 2 2 12 47 320 447 +846 2 2 2 12 66 321 448 +847 2 2 2 12 92 468 573 +848 2 2 2 12 73 466 571 +849 2 2 2 12 35 469 574 +850 2 2 2 12 54 467 572 +851 2 2 2 12 230 314 573 +852 2 2 2 12 231 315 574 +853 2 2 2 12 232 316 571 +854 2 2 2 12 233 317 572 +855 2 2 2 12 301 426 346 +856 2 2 2 12 254 550 401 +857 2 2 2 12 255 549 400 +858 2 2 2 12 256 548 399 +859 2 2 2 12 257 547 398 +860 2 2 2 12 252 346 449 +861 2 2 2 12 145 449 346 +862 2 2 2 12 63 64 516 +863 2 2 2 12 44 45 517 +864 2 2 2 12 82 83 514 +865 2 2 2 12 25 26 515 +866 2 2 2 12 190 334 410 +867 2 2 2 12 191 335 411 +868 2 2 2 12 192 336 412 +869 2 2 2 12 193 337 413 +870 2 2 2 12 252 449 436 +871 2 2 2 12 217 436 449 +872 2 2 2 12 166 319 579 +873 2 2 2 12 167 318 580 +874 2 2 2 12 168 321 581 +875 2 2 2 12 194 322 477 +876 2 2 2 12 195 323 478 +877 2 2 2 12 196 324 479 +878 2 2 2 12 197 325 480 +879 2 2 2 12 90 91 462 +880 2 2 2 12 33 34 463 +881 2 2 2 12 71 72 464 +882 2 2 2 12 52 53 465 +883 2 2 2 12 14 490 15 +884 2 2 2 12 18 491 19 +885 2 2 2 12 10 492 11 +886 2 2 2 12 22 493 23 +887 2 2 2 12 145 346 426 +888 2 2 2 12 158 523 430 +889 2 2 2 12 159 524 431 +890 2 2 2 12 160 525 432 +891 2 2 2 12 161 526 433 +892 2 2 2 12 86 87 506 +893 2 2 2 12 29 30 507 +894 2 2 2 12 67 68 508 +895 2 2 2 12 48 49 509 +896 2 2 2 12 78 351 442 +897 2 2 2 12 59 353 444 +898 2 2 2 12 97 352 441 +899 2 2 2 12 40 354 443 +900 2 2 2 12 192 514 336 +901 2 2 2 12 193 515 337 +902 2 2 2 12 190 516 334 +903 2 2 2 12 191 517 335 +904 2 2 2 12 138 501 412 +905 2 2 2 12 140 499 410 +906 2 2 2 12 139 500 413 +907 2 2 2 12 141 498 411 +908 2 2 2 12 298 363 471 +909 2 2 2 12 300 365 472 +910 2 2 2 12 299 364 470 +911 2 2 2 12 138 330 494 +912 2 2 2 12 139 331 496 +913 2 2 2 12 140 332 495 +914 2 2 2 12 141 333 497 +915 2 2 2 12 94 95 552 +916 2 2 2 12 37 38 551 +917 2 2 2 12 75 76 554 +918 2 2 2 12 56 57 553 +919 2 2 2 12 42 43 556 +920 2 2 2 12 61 62 558 +921 2 2 2 12 99 100 557 +922 2 2 2 12 80 81 559 +923 2 2 2 12 191 375 556 +924 2 2 2 12 190 374 558 +925 2 2 2 12 193 377 557 +926 2 2 2 12 192 376 559 +927 2 2 2 12 260 414 521 +928 2 2 2 12 128 521 414 +929 2 2 2 12 261 415 522 +930 2 2 2 12 129 522 415 +931 2 2 2 12 258 416 519 +932 2 2 2 12 126 519 416 +933 2 2 2 12 259 417 520 +934 2 2 2 12 127 520 417 +935 2 2 2 12 138 494 366 +936 2 2 2 12 140 495 368 +937 2 2 2 12 206 366 494 +938 2 2 2 12 208 368 495 +939 2 2 2 12 139 496 367 +940 2 2 2 12 141 497 369 +941 2 2 2 12 207 367 496 +942 2 2 2 12 209 369 497 +943 2 2 2 12 74 342 466 +944 2 2 2 12 55 343 467 +945 2 2 2 12 93 344 468 +946 2 2 2 12 36 345 469 +947 2 2 2 12 147 402 535 +948 2 2 2 12 238 535 402 +949 2 2 2 12 149 403 536 +950 2 2 2 12 239 536 403 +951 2 2 2 12 146 404 537 +952 2 2 2 12 148 405 538 +953 2 2 2 12 240 537 404 +954 2 2 2 12 241 538 405 +955 2 2 2 12 190 558 394 +956 2 2 2 12 191 556 395 +957 2 2 2 12 192 559 396 +958 2 2 2 12 193 557 397 +959 2 2 2 12 64 334 516 +960 2 2 2 12 45 335 517 +961 2 2 2 12 83 336 514 +962 2 2 2 12 26 337 515 +963 2 2 2 12 201 518 426 +964 2 2 2 12 187 452 386 +965 2 2 2 12 189 453 388 +966 2 2 2 12 186 450 387 +967 2 2 2 12 188 451 389 +968 2 2 2 12 154 459 569 +969 2 2 2 12 155 458 570 +970 2 2 2 12 156 461 567 +971 2 2 2 12 157 460 568 +972 2 2 2 12 262 430 473 +973 2 2 2 12 264 432 475 +974 2 2 2 12 263 431 474 +975 2 2 2 12 265 433 476 +976 2 2 2 12 262 529 430 +977 2 2 2 12 158 430 529 +978 2 2 2 12 263 530 431 +979 2 2 2 12 159 431 530 +980 2 2 2 12 264 533 432 +981 2 2 2 12 160 432 533 +982 2 2 2 12 265 534 433 +983 2 2 2 12 161 433 534 +984 2 2 2 12 278 560 422 +985 2 2 2 12 279 561 423 +986 2 2 2 12 154 422 560 +987 2 2 2 12 155 423 561 +988 2 2 2 12 280 562 424 +989 2 2 2 12 156 424 562 +990 2 2 2 12 281 563 425 +991 2 2 2 12 157 425 563 +992 2 2 2 12 266 540 420 +993 2 2 2 12 267 542 421 +994 2 2 2 12 178 420 540 +995 2 2 2 12 179 421 542 +996 2 2 2 12 268 539 418 +997 2 2 2 12 269 541 419 +998 2 2 2 12 180 418 539 +999 2 2 2 12 181 419 541 +1000 2 2 2 12 142 510 565 +1001 2 2 2 12 144 512 566 +1002 2 2 2 12 143 511 564 +1003 2 2 2 12 142 565 438 +1004 2 2 2 12 143 564 439 +1005 2 2 2 12 144 566 440 +1006 2 2 2 12 212 355 483 +1007 2 2 2 12 213 356 485 +1008 2 2 2 12 210 357 482 +1009 2 2 2 12 211 358 484 +1010 2 2 2 12 150 355 488 +1011 2 2 2 12 152 356 489 +1012 2 2 2 12 151 357 486 +1013 2 2 2 12 153 358 487 +1014 2 2 2 12 283 535 504 +1015 2 2 2 12 238 504 535 +1016 2 2 2 12 282 537 502 +1017 2 2 2 12 285 536 505 +1018 2 2 2 12 239 505 536 +1019 2 2 2 12 240 502 537 +1020 2 2 2 12 241 503 538 +1021 2 2 2 12 284 538 503 +1022 2 2 2 12 63 516 394 +1023 2 2 2 12 44 517 395 +1024 2 2 2 12 82 514 396 +1025 2 2 2 12 25 515 397 +1026 2 2 2 12 130 471 363 +1027 2 2 2 12 131 470 364 +1028 2 2 2 12 132 472 365 +1029 2 2 2 12 182 576 347 +1030 2 2 2 12 184 578 348 +1031 2 2 2 12 183 575 349 +1032 2 2 2 12 185 577 350 +1033 2 2 2 12 192 396 514 +1034 2 2 2 12 193 397 515 +1035 2 2 2 12 190 394 516 +1036 2 2 2 12 191 395 517 +1037 2 2 2 12 216 512 581 +1038 2 2 2 12 214 510 579 +1039 2 2 2 12 215 511 580 +1040 2 2 2 12 272 387 450 +1041 2 2 2 12 270 386 452 +1042 2 2 2 12 273 389 451 +1043 2 2 2 12 271 388 453 +1044 2 2 2 12 202 378 560 +1045 2 2 2 12 203 379 561 +1046 2 2 2 12 204 380 562 +1047 2 2 2 12 205 381 563 +1048 2 2 2 12 191 498 375 +1049 2 2 2 12 190 499 374 +1050 2 2 2 12 193 500 377 +1051 2 2 2 12 192 501 376 +1052 2 2 2 12 133 455 481 +1053 2 2 2 12 289 481 455 +1054 2 2 2 12 237 375 498 +1055 2 2 2 12 236 374 499 +1056 2 2 2 12 235 377 500 +1057 2 2 2 12 234 376 501 +1058 2 2 2 12 210 482 414 +1059 2 2 2 12 128 414 482 +1060 2 2 2 12 211 484 415 +1061 2 2 2 12 129 415 484 +1062 2 2 2 12 212 483 416 +1063 2 2 2 12 126 416 483 +1064 2 2 2 12 213 485 417 +1065 2 2 2 12 127 417 485 +1066 2 2 2 12 250 564 434 +1067 2 2 2 12 215 434 564 +1068 2 2 2 12 251 565 435 +1069 2 2 2 12 214 435 565 +1070 2 2 2 12 253 566 437 +1071 2 2 2 12 216 437 566 +1072 2 2 2 12 191 411 498 +1073 2 2 2 12 190 410 499 +1074 2 2 2 12 193 413 500 +1075 2 2 2 12 192 412 501 +1076 2 2 2 12 207 575 367 +1077 2 2 2 12 183 367 575 +1078 2 2 2 12 206 576 366 +1079 2 2 2 12 182 366 576 +1080 2 2 2 12 209 577 369 +1081 2 2 2 12 185 369 577 +1082 2 2 2 12 208 578 368 +1083 2 2 2 12 184 368 578 +1084 2 2 2 12 61 558 374 +1085 2 2 2 12 42 556 375 +1086 2 2 2 12 80 559 376 +1087 2 2 2 12 99 557 377 +1088 2 2 2 12 154 560 378 +1089 2 2 2 12 155 561 379 +1090 2 2 2 12 156 562 380 +1091 2 2 2 12 157 563 381 +1092 2 2 2 12 154 569 422 +1093 2 2 2 12 155 570 423 +1094 2 2 2 12 242 422 569 +1095 2 2 2 12 243 423 570 +1096 2 2 2 12 156 567 424 +1097 2 2 2 12 244 424 567 +1098 2 2 2 12 157 568 425 +1099 2 2 2 12 245 425 568 +1100 2 2 2 12 232 571 466 +1101 2 2 2 12 233 572 467 +1102 2 2 2 12 230 573 468 +1103 2 2 2 12 231 574 469 +1104 2 2 2 12 202 473 430 +1105 2 2 2 12 203 474 431 +1106 2 2 2 12 204 475 432 +1107 2 2 2 12 205 476 433 +1108 2 2 2 12 62 394 558 +1109 2 2 2 12 81 396 559 +1110 2 2 2 12 43 395 556 +1111 2 2 2 12 100 397 557 +1112 2 2 2 12 68 437 508 +1113 2 2 2 12 49 436 509 +1114 2 2 2 12 87 435 506 +1115 2 2 2 12 30 434 507 +1116 2 2 2 12 216 508 437 +1117 2 2 2 12 217 509 436 +1118 2 2 2 12 214 506 435 +1119 2 2 2 12 215 507 434 +1120 2 2 2 12 145 426 518 +1121 2 2 2 12 158 543 523 +1122 2 2 2 12 159 544 524 +1123 2 2 2 12 266 523 543 +1124 2 2 2 12 267 524 544 +1125 2 2 2 12 160 545 525 +1126 2 2 2 12 161 546 526 +1127 2 2 2 12 268 525 545 +1128 2 2 2 12 269 526 546 +1129 2 2 2 12 218 529 527 +1130 2 2 2 12 219 530 528 +1131 2 2 2 12 262 527 529 +1132 2 2 2 12 263 528 530 +1133 2 2 2 12 220 533 531 +1134 2 2 2 12 221 534 532 +1135 2 2 2 12 264 531 533 +1136 2 2 2 12 265 532 534 +1137 2 2 2 12 268 545 539 +1138 2 2 2 12 266 543 540 +1139 2 2 2 12 269 546 541 +1140 2 2 2 12 267 544 542 +1141 2 2 2 12 232 539 545 +1142 2 2 2 12 233 541 546 +1143 2 2 2 12 230 540 543 +1144 2 2 2 12 231 542 544 +1145 2 2 2 12 214 565 510 +1146 2 2 2 12 215 564 511 +1147 2 2 2 12 216 566 512 +1148 2 2 2 12 250 439 564 +1149 2 2 2 12 251 438 565 +1150 2 2 2 12 253 440 566 +1151 2 2 2 12 173 532 555 +1152 2 2 2 12 265 555 532 +1153 2 2 2 12 240 552 502 +1154 2 2 2 12 241 551 503 +1155 2 2 2 12 95 502 552 +1156 2 2 2 12 38 503 551 +1157 2 2 2 12 238 554 504 +1158 2 2 2 12 239 553 505 +1159 2 2 2 12 76 504 554 +1160 2 2 2 12 57 505 553 +$EndElements diff --git a/test/test_material_FE2/periodic_plate.msh b/test/test_material_FE2/periodic_plate.msh new file mode 100644 index 000000000..b2d439235 --- /dev/null +++ b/test/test_material_FE2/periodic_plate.msh @@ -0,0 +1,520 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$PhysicalNames +6 +1 3 "bottom" +1 4 "right" +1 5 "top" +1 6 "left" +2 1 "aggregates" +2 2 "paste" +$EndPhysicalNames +$Nodes +168 +1 -0.25 -0.5 0 +2 -0.5 -0.25 0 +3 -0.75 -0.5 0 +4 -0.5 -0.75 0 +5 0 0 0 +6 -1 0 0 +7 -1 -1 0 +8 0 -1 0 +9 -0.2690301168720945 -0.4043291419089297 0 +10 -0.3232233047030084 -0.3232233047037178 0 +11 -0.40432914190846 -0.2690301168722891 0 +12 -0.5956708580910105 -0.2690301168720698 0 +13 -0.67677669529628 -0.3232233047030063 0 +14 -0.7309698831277104 -0.4043291419084588 0 +15 -0.7309698831279273 -0.5956708580910174 0 +16 -0.6767766952969564 -0.6767766952963173 0 +17 -0.5956708580915413 -0.7309698831277104 0 +18 -0.4043291419089228 -0.7309698831279026 0 +19 -0.3232233047036805 -0.6767766952969543 0 +20 -0.2690301168722892 -0.59567085809154 0 +21 0 -0.8999999999995836 0 +22 0 -0.7999999999999998 0 +23 0 -0.7000000000006934 0 +24 0 -0.6000000000013869 0 +25 0 -0.5000000000020587 0 +26 0 -0.4000000000016644 0 +27 0 -0.3000000000012483 0 +28 0 -0.2000000000008322 0 +29 0 -0.100000000000416 0 +30 -0.09999999999981467 0 0 +31 -0.1999999999995579 0 0 +32 -0.2999999999992664 0 0 +33 -0.3999999999989749 0 0 +34 -0.4999999999986943 0 0 +35 -0.5999999999989468 0 0 +36 -0.69999999999921 0 0 +37 -0.7999999999994734 0 0 +38 -0.8999999999997368 0 0 +39 -1 -0.09999999999981467 0 +40 -1 -0.1999999999995579 0 +41 -1 -0.2999999999992664 0 +42 -1 -0.3999999999989749 0 +43 -1 -0.4999999999986943 0 +44 -1 -0.5999999999989468 0 +45 -1 -0.69999999999921 0 +46 -1 -0.7999999999994734 0 +47 -1 -0.8999999999997368 0 +48 -0.8999999999995836 -1 0 +49 -0.7999999999999998 -1 0 +50 -0.7000000000006934 -1 0 +51 -0.6000000000013869 -1 0 +52 -0.5000000000020587 -1 0 +53 -0.4000000000016644 -1 0 +54 -0.3000000000012483 -1 0 +55 -0.2000000000008322 -1 0 +56 -0.100000000000416 -1 0 +57 -0.5 -0.5 0 +58 -0.5347330859274653 -0.3830661645674932 0 +59 -0.3927552914245614 -0.4418752926065881 0 +60 -0.6253911071766008 -0.5140344267890783 0 +61 -0.4207515329919329 -0.5982497045749522 0 +62 -0.5493927901403391 -0.6192447438399409 0 +63 -0.353723761178711 -0.5290961529554228 0 +64 -0.6240070074580426 -0.4171411666639515 0 +65 -0.4379088420292366 -0.3500986843239669 0 +66 -0.4801302897655843 -0.6674744258467031 0 +67 -0.6313976070261523 -0.6074634391258523 0 +68 -0.6827886552064533 -0.473342944376282 0 +69 -0.3518318638249927 -0.6103565080277071 0 +70 -0.3213548659751747 -0.4550545863225975 0 +71 -0.5945399789000836 -0.3418976075103435 0 +72 -0.4706708580911961 -0.4291931878312015 0 +73 -0.5706420640999161 -0.4714991025641458 0 +74 -0.4298953395912052 -0.5297983047154097 0 +75 -0.5556648119799311 -0.5467948336306893 0 +76 -0.4895849456681746 -0.5745759568762345 0 +77 -0.5344871588628486 -0.3149958389304356 0 +78 -0.3447961992639904 -0.3935684070560744 0 +79 -0.6869561378443657 -0.5381750126541076 0 +80 -0.3943264234999745 -0.6589504191197803 0 +81 -0.8205239238855317 -0.8254388395436698 0 +82 -0.1745611604563354 -0.8205239238855341 0 +83 -0.8254388395436668 -0.1794760761144569 0 +84 -0.1794760761144543 -0.1745611604563384 0 +85 -0.6715364587306766 -0.8562937472169145 0 +86 -0.1437062527830895 -0.6715364587306863 0 +87 -0.8562937472169159 -0.3284635412693159 0 +88 -0.328463541269306 -0.1437062527830883 0 +89 -0.856293747216714 -0.6715364587306681 0 +90 -0.671536458730653 -0.1437062527832807 0 +91 -0.328463541269312 -0.8562937472166632 0 +92 -0.1437062527833316 -0.328463541269327 0 +93 -0.1306247582288338 -0.4688519934286416 0 +94 -0.4697964114466902 -0.8689687202745495 0 +95 -0.8687568921098066 -0.5288001987363897 0 +96 -0.529834561327561 -0.1307978700605724 0 +97 -0.162036624288407 -0.5756790951509929 0 +98 -0.5765785408824711 -0.8375762123814845 0 +99 -0.425282422802478 -0.1615009330284926 0 +100 -0.8381506199744156 -0.4244729216441693 0 +101 -0.8839324981136203 -0.884751650723285 0 +102 -0.115248349276716 -0.8839324981136375 0 +103 -0.8847516507232508 -0.1160675018863824 0 +104 -0.116067501886365 -0.1152483492767503 0 +105 -0.751048638878286 -0.9092405916781271 0 +106 -0.09075940832187548 -0.7510486388782918 0 +107 -0.9092405916781501 -0.2489513611216598 0 +108 -0.2489513611216542 -0.09075940832185218 0 +109 -0.9030263260602355 -0.7638694300664526 0 +110 -0.7638694300664364 -0.0969736739397583 0 +111 -0.2361305699335783 -0.9030263260601823 0 +112 -0.09697367393981124 -0.2361305699335945 0 +113 -0.2299623721282185 -0.7301954841823314 0 +114 -0.7299868218416593 -0.7709981768058805 0 +115 -0.2698045158176539 -0.2299623721282252 0 +116 -0.7700376278717775 -0.2698045158176536 0 +117 -0.7703657036089723 -0.6802496741782329 0 +118 -0.679834854054445 -0.2308136600624819 0 +119 -0.3201651459455493 -0.7691863399374834 0 +120 -0.2308136600625009 -0.3201651459455547 0 +121 -0.06901742222859635 -0.5415002378391992 0 +122 -0.5442471631068269 -0.9300367843491143 0 +123 -0.4584997621611413 -0.06901742222863395 0 +124 -0.930077070952221 -0.4557137338612537 0 +125 -0.1854531529472375 -0.4009462903235035 0 +126 -0.4009462903234918 -0.8145468470527606 0 +127 -0.8148737834653415 -0.5996535666815392 0 +128 -0.5990537096765798 -0.1854531529472676 0 +129 -0.3906323520719684 -0.9071704868375146 0 +130 -0.09278434410730478 -0.390527416736641 0 +131 -0.9071832766427842 -0.6092783665045468 0 +132 -0.6093266449030049 -0.09280357875532505 0 +133 -0.0733139459124951 -0.6433071589560412 0 +134 -0.6500000000010401 -0.9352313981365078 0 +135 -0.3567996763722424 -0.07325442466137984 0 +136 -0.9352313981365531 -0.3499999999991206 0 +137 -0.2144371601490974 -0.6469329559847155 0 +138 -0.6469329559847075 -0.7855628398509081 0 +139 -0.3530670440152853 -0.2144371601490948 0 +140 -0.7855628398509111 -0.3530670440152936 0 +141 -0.8184942848320219 -0.7408954967137494 0 +142 -0.7407121141726903 -0.1816351420120664 0 +143 -0.2592878858273031 -0.8183648579878831 0 +144 -0.1816351420120992 -0.2592878858273117 0 +145 -0.9310401749575037 -0.6772865930284175 0 +146 -0.6939860769653075 -0.07348081509537931 0 +147 -0.3227015027819372 -0.9310384696501084 0 +148 -0.06895550780919807 -0.3226875114039029 0 +149 -0.8306635539813906 -0.9333577126706775 0 +150 -0.06664228732931628 -0.8306635539813891 0 +151 -0.9333577126707623 -0.8306635539812964 0 +152 -0.8306635539813149 -0.06664228732925355 0 +153 -0.1693364460187191 -0.9333577126708269 0 +154 -0.06664228732918877 -0.1693364460187006 0 +155 -0.9333577126705893 -0.169336446018602 0 +156 -0.1693364460186032 -0.06664228732940401 0 +157 -0.4518495156226273 -0.94658307544395 0 +158 -0.05341692455605478 -0.45184951562264 0 +159 -0.946583075443611 -0.5481504843774301 0 +160 -0.5481504843774172 -0.05341692455639398 0 +161 -0.9298740423437302 -0.9299650593003774 0 +162 -0.07003494069964279 -0.9298740423437576 0 +163 -0.9299650593002945 -0.0701259576561947 0 +164 -0.07012595765616719 -0.07003494069972567 0 +165 -0.1611274076677758 -0.7421320064093561 0 +166 -0.7420972293525711 -0.8390326838212437 0 +167 -0.2578679935906084 -0.1611274076677668 0 +168 -0.838872592332237 -0.2578679935906145 0 +$EndNodes +$Elements +334 +1 1 2 4 5 8 21 +2 1 2 4 5 21 22 +3 1 2 4 5 22 23 +4 1 2 4 5 23 24 +5 1 2 4 5 24 25 +6 1 2 4 5 25 26 +7 1 2 4 5 26 27 +8 1 2 4 5 27 28 +9 1 2 4 5 28 29 +10 1 2 4 5 29 5 +11 1 2 5 6 5 30 +12 1 2 5 6 30 31 +13 1 2 5 6 31 32 +14 1 2 5 6 32 33 +15 1 2 5 6 33 34 +16 1 2 5 6 34 35 +17 1 2 5 6 35 36 +18 1 2 5 6 36 37 +19 1 2 5 6 37 38 +20 1 2 5 6 38 6 +21 1 2 6 7 6 39 +22 1 2 6 7 39 40 +23 1 2 6 7 40 41 +24 1 2 6 7 41 42 +25 1 2 6 7 42 43 +26 1 2 6 7 43 44 +27 1 2 6 7 44 45 +28 1 2 6 7 45 46 +29 1 2 6 7 46 47 +30 1 2 6 7 47 7 +31 1 2 3 8 7 48 +32 1 2 3 8 48 49 +33 1 2 3 8 49 50 +34 1 2 3 8 50 51 +35 1 2 3 8 51 52 +36 1 2 3 8 52 53 +37 1 2 3 8 53 54 +38 1 2 3 8 54 55 +39 1 2 3 8 55 56 +40 1 2 3 8 56 8 +41 2 2 1 10 17 66 62 +42 2 2 1 10 17 62 67 +43 2 2 1 10 4 66 17 +44 2 2 1 10 16 17 67 +45 2 2 1 10 11 2 65 +46 2 2 1 10 11 65 10 +47 2 2 1 10 1 63 20 +48 2 2 1 10 13 14 64 +49 2 2 1 10 2 77 65 +50 2 2 1 10 10 65 78 +51 2 2 1 10 58 73 72 +52 2 2 1 10 59 72 74 +53 2 2 1 10 59 74 63 +54 2 2 1 10 58 64 73 +55 2 2 1 10 58 65 77 +56 2 2 1 10 59 78 65 +57 2 2 1 10 15 16 67 +58 2 2 1 10 4 18 66 +59 2 2 1 10 57 72 73 +60 2 2 1 10 57 74 72 +61 2 2 1 10 1 70 63 +62 2 2 1 10 13 64 71 +63 2 2 1 10 20 63 69 +64 2 2 1 10 14 68 64 +65 2 2 1 10 60 64 68 +66 2 2 1 10 61 69 63 +67 2 2 1 10 59 63 70 +68 2 2 1 10 58 71 64 +69 2 2 1 10 60 73 64 +70 2 2 1 10 61 63 74 +71 2 2 1 10 15 67 79 +72 2 2 1 10 18 80 66 +73 2 2 1 10 62 66 76 +74 2 2 1 10 3 68 14 +75 2 2 1 10 19 20 69 +76 2 2 1 10 9 70 1 +77 2 2 1 10 12 13 71 +78 2 2 1 10 61 76 66 +79 2 2 1 10 60 67 75 +80 2 2 1 10 62 75 67 +81 2 2 1 10 18 19 80 +82 2 2 1 10 3 15 79 +83 2 2 1 10 10 78 9 +84 2 2 1 10 2 12 77 +85 2 2 1 10 58 72 65 +86 2 2 1 10 59 65 72 +87 2 2 1 10 60 79 67 +88 2 2 1 10 61 66 80 +89 2 2 1 10 60 75 73 +90 2 2 1 10 57 73 75 +91 2 2 1 10 62 76 75 +92 2 2 1 10 61 74 76 +93 2 2 1 10 57 76 74 +94 2 2 1 10 3 79 68 +95 2 2 1 10 19 69 80 +96 2 2 1 10 60 68 79 +97 2 2 1 10 61 80 69 +98 2 2 1 10 9 78 70 +99 2 2 1 10 12 71 77 +100 2 2 1 10 59 70 78 +101 2 2 1 10 58 77 71 +102 2 2 1 10 57 75 76 +103 2 2 2 12 1 97 93 +104 2 2 2 12 4 98 94 +105 2 2 2 12 2 99 96 +106 2 2 2 12 3 100 95 +107 2 2 2 12 1 93 125 +108 2 2 2 12 4 94 126 +109 2 2 2 12 3 95 127 +110 2 2 2 12 2 96 128 +111 2 2 2 12 85 134 98 +112 2 2 2 12 86 133 97 +113 2 2 2 12 87 136 100 +114 2 2 2 12 88 135 99 +115 2 2 2 12 98 134 122 +116 2 2 2 12 121 97 133 +117 2 2 2 12 100 136 124 +118 2 2 2 12 123 99 135 +119 2 2 2 12 4 17 98 +120 2 2 2 12 1 20 97 +121 2 2 2 12 3 14 100 +122 2 2 2 12 11 99 2 +123 2 2 2 12 81 101 149 +124 2 2 2 12 82 102 150 +125 2 2 2 12 81 151 101 +126 2 2 2 12 82 153 102 +127 2 2 2 12 83 103 155 +128 2 2 2 12 83 152 103 +129 2 2 2 12 84 154 104 +130 2 2 2 12 84 104 156 +131 2 2 2 12 23 133 106 +132 2 2 2 12 50 134 105 +133 2 2 2 12 32 135 108 +134 2 2 2 12 41 136 107 +135 2 2 2 12 81 149 105 +136 2 2 2 12 82 150 106 +137 2 2 2 12 83 155 107 +138 2 2 2 12 84 156 108 +139 2 2 2 12 109 151 81 +140 2 2 2 12 111 153 82 +141 2 2 2 12 83 110 152 +142 2 2 2 12 84 112 154 +143 2 2 2 12 22 23 106 +144 2 2 2 12 49 50 105 +145 2 2 2 12 54 55 111 +146 2 2 2 12 45 46 109 +147 2 2 2 12 27 28 112 +148 2 2 2 12 36 37 110 +149 2 2 2 12 31 32 108 +150 2 2 2 12 40 41 107 +151 2 2 2 12 3 127 15 +152 2 2 2 12 2 128 12 +153 2 2 2 12 9 1 125 +154 2 2 2 12 4 126 18 +155 2 2 2 12 86 106 133 +156 2 2 2 12 85 105 134 +157 2 2 2 12 88 108 135 +158 2 2 2 12 87 107 136 +159 2 2 2 12 54 111 147 +160 2 2 2 12 27 112 148 +161 2 2 2 12 45 109 145 +162 2 2 2 12 36 110 146 +163 2 2 2 12 53 147 129 +164 2 2 2 12 26 148 130 +165 2 2 2 12 44 145 131 +166 2 2 2 12 35 146 132 +167 2 2 2 12 53 54 147 +168 2 2 2 12 26 27 148 +169 2 2 2 12 44 45 145 +170 2 2 2 12 35 36 146 +171 2 2 2 12 94 98 122 +172 2 2 2 12 93 97 121 +173 2 2 2 12 100 124 95 +174 2 2 2 12 99 123 96 +175 2 2 2 12 17 138 98 +176 2 2 2 12 20 137 97 +177 2 2 2 12 14 140 100 +178 2 2 2 12 11 139 99 +179 2 2 2 12 19 113 137 +180 2 2 2 12 10 115 139 +181 2 2 2 12 16 114 138 +182 2 2 2 12 13 116 140 +183 2 2 2 12 19 137 20 +184 2 2 2 12 11 10 139 +185 2 2 2 12 16 138 17 +186 2 2 2 12 13 140 14 +187 2 2 2 12 86 97 137 +188 2 2 2 12 85 98 138 +189 2 2 2 12 88 99 139 +190 2 2 2 12 87 100 140 +191 2 2 2 12 12 118 13 +192 2 2 2 12 15 117 16 +193 2 2 2 12 10 9 120 +194 2 2 2 12 18 119 19 +195 2 2 2 12 9 125 120 +196 2 2 2 12 12 128 118 +197 2 2 2 12 18 126 119 +198 2 2 2 12 15 127 117 +199 2 2 2 12 81 114 141 +200 2 2 2 12 82 113 143 +201 2 2 2 12 83 116 142 +202 2 2 2 12 84 115 144 +203 2 2 2 12 21 150 162 +204 2 2 2 12 48 149 161 +205 2 2 2 12 30 156 164 +206 2 2 2 12 39 155 163 +207 2 2 2 12 47 161 151 +208 2 2 2 12 56 162 153 +209 2 2 2 12 38 163 152 +210 2 2 2 12 29 164 154 +211 2 2 2 12 19 119 113 +212 2 2 2 12 16 117 114 +213 2 2 2 12 10 120 115 +214 2 2 2 12 13 118 116 +215 2 2 2 12 150 102 162 +216 2 2 2 12 101 151 161 +217 2 2 2 12 101 161 149 +218 2 2 2 12 104 164 156 +219 2 2 2 12 155 103 163 +220 2 2 2 12 102 153 162 +221 2 2 2 12 103 152 163 +222 2 2 2 12 154 164 104 +223 2 2 2 12 114 117 141 +224 2 2 2 12 118 142 116 +225 2 2 2 12 119 143 113 +226 2 2 2 12 120 144 115 +227 2 2 2 12 94 122 157 +228 2 2 2 12 121 158 93 +229 2 2 2 12 95 124 159 +230 2 2 2 12 123 160 96 +231 2 2 2 12 120 125 92 +232 2 2 2 12 119 126 91 +233 2 2 2 12 89 117 127 +234 2 2 2 12 118 128 90 +235 2 2 2 12 92 125 130 +236 2 2 2 12 127 131 89 +237 2 2 2 12 126 129 91 +238 2 2 2 12 90 128 132 +239 2 2 2 12 93 130 125 +240 2 2 2 12 94 129 126 +241 2 2 2 12 95 131 127 +242 2 2 2 12 96 132 128 +243 2 2 2 12 24 25 121 +244 2 2 2 12 51 52 122 +245 2 2 2 12 33 34 123 +246 2 2 2 12 42 43 124 +247 2 2 2 12 48 49 149 +248 2 2 2 12 21 22 150 +249 2 2 2 12 39 40 155 +250 2 2 2 12 30 31 156 +251 2 2 2 12 46 47 151 +252 2 2 2 12 37 38 152 +253 2 2 2 12 55 56 153 +254 2 2 2 12 28 29 154 +255 2 2 2 12 24 121 133 +256 2 2 2 12 51 122 134 +257 2 2 2 12 33 123 135 +258 2 2 2 12 42 124 136 +259 2 2 2 12 109 141 89 +260 2 2 2 12 110 142 90 +261 2 2 2 12 111 143 91 +262 2 2 2 12 92 112 144 +263 2 2 2 12 109 81 141 +264 2 2 2 12 83 142 110 +265 2 2 2 12 111 82 143 +266 2 2 2 12 84 144 112 +267 2 2 2 12 85 166 105 +268 2 2 2 12 86 165 106 +269 2 2 2 12 87 168 107 +270 2 2 2 12 88 167 108 +271 2 2 2 12 81 105 166 +272 2 2 2 12 82 106 165 +273 2 2 2 12 83 107 168 +274 2 2 2 12 84 108 167 +275 2 2 2 12 109 89 145 +276 2 2 2 12 110 90 146 +277 2 2 2 12 111 91 147 +278 2 2 2 12 92 148 112 +279 2 2 2 12 49 105 149 +280 2 2 2 12 22 106 150 +281 2 2 2 12 40 107 155 +282 2 2 2 12 31 108 156 +283 2 2 2 12 46 151 109 +284 2 2 2 12 37 152 110 +285 2 2 2 12 55 153 111 +286 2 2 2 12 28 154 112 +287 2 2 2 12 23 24 133 +288 2 2 2 12 50 51 134 +289 2 2 2 12 32 33 135 +290 2 2 2 12 41 42 136 +291 2 2 2 12 52 157 122 +292 2 2 2 12 25 158 121 +293 2 2 2 12 43 159 124 +294 2 2 2 12 34 160 123 +295 2 2 2 12 86 137 113 +296 2 2 2 12 85 138 114 +297 2 2 2 12 88 139 115 +298 2 2 2 12 87 140 116 +299 2 2 2 12 82 165 113 +300 2 2 2 12 81 166 114 +301 2 2 2 12 84 167 115 +302 2 2 2 12 83 168 116 +303 2 2 2 12 86 113 165 +304 2 2 2 12 85 114 166 +305 2 2 2 12 88 115 167 +306 2 2 2 12 87 116 168 +307 2 2 2 12 7 48 161 +308 2 2 2 12 8 21 162 +309 2 2 2 12 5 164 29 +310 2 2 2 12 6 163 38 +311 2 2 2 12 7 161 47 +312 2 2 2 12 6 39 163 +313 2 2 2 12 8 162 56 +314 2 2 2 12 5 30 164 +315 2 2 2 12 25 26 158 +316 2 2 2 12 52 53 157 +317 2 2 2 12 34 35 160 +318 2 2 2 12 43 44 159 +319 2 2 2 12 89 141 117 +320 2 2 2 12 118 90 142 +321 2 2 2 12 119 91 143 +322 2 2 2 12 120 92 144 +323 2 2 2 12 89 131 145 +324 2 2 2 12 90 132 146 +325 2 2 2 12 92 130 148 +326 2 2 2 12 91 129 147 +327 2 2 2 12 44 131 159 +328 2 2 2 12 35 132 160 +329 2 2 2 12 26 130 158 +330 2 2 2 12 53 129 157 +331 2 2 2 12 94 157 129 +332 2 2 2 12 93 158 130 +333 2 2 2 12 95 159 131 +334 2 2 2 12 96 160 132 +$EndElements diff --git a/test/test_material_FE2/square.geo b/test/test_material_FE2/square.geo new file mode 100644 index 000000000..5e30cf867 --- /dev/null +++ b/test/test_material_FE2/square.geo @@ -0,0 +1,21 @@ +el_size = 10.0; +box_size = 10.0; // this is the edge length of the box + +Point(1) = {0, 0, 0, el_size}; +Point(2) = {-box_size, 0, 0, el_size}; +Point(3) = {-box_size, -box_size, 0, el_size}; +Point(4) = {0, -box_size, 0, el_size}; +Line(1) = {4, 1}; +Line(2) = {1, 2}; +Line(3) = {2, 3}; +Line(4) = {3, 4}; +Line Loop(5) = {1,2,3,4}; +Plane Surface(6) = {5}; + +Transfinite Surface "*"; + +Physical Surface(7) = {6}; +Physical Line("bottom") = {4}; +Physical Line("right") = {1}; +Physical Line("top") = {2}; +Physical Line("left") = {3}; diff --git a/test/test_material_FE2/square.msh b/test/test_material_FE2/square.msh new file mode 100644 index 000000000..21d9989cc --- /dev/null +++ b/test/test_material_FE2/square.msh @@ -0,0 +1,26 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$PhysicalNames +4 +1 8 "bottom" +1 9 "right" +1 10 "top" +1 11 "left" +$EndPhysicalNames +$Nodes +4 +1 0 0 0 +2 -10 0 0 +3 -10 -10 0 +4 0 -10 0 +$EndNodes +$Elements +6 +1 1 2 9 1 4 1 +2 1 2 10 2 1 2 +3 1 2 11 3 2 3 +4 1 2 8 4 3 4 +5 2 2 7 6 4 1 3 +6 2 2 7 6 3 1 2 +$EndElements diff --git a/test/test_material_FE2/test_eigenstrain_homogenization.cc b/test/test_material_FE2/test_eigenstrain_homogenization.cc new file mode 100644 index 000000000..d376863e2 --- /dev/null +++ b/test/test_material_FE2/test_eigenstrain_homogenization.cc @@ -0,0 +1,91 @@ +/** + * @file test_eigenstrain_homogenization.cc + * @author Aurelia Isabel Cuba Ramos + * @date Sun Jan 31 12:27:02 2016 + * + * @brief test the eigenstrain homogenization + * + * @section LICENSE + * + * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + * Akantu is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * Akantu is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Akantu. If not, see . + * + */ + +/* -------------------------------------------------------------------------- */ +#include "solid_mechanics_model_RVE.hh" + +using namespace akantu; + +/* -------------------------------------------------------------------------- */ +/* Main */ +/* -------------------------------------------------------------------------- */ +int main(int argc, char *argv[]) { + + akantu::initialize("mesoscale_materials.dat", argc, argv); + + const UInt spatial_dimension = 2; + Mesh mesh(spatial_dimension); + mesh.read("one_inclusion.msh"); + SolidMechanicsModelRVE model(mesh, false); + MeshDataMaterialSelector * mat_selector; + mat_selector = new MeshDataMaterialSelector("physical_names", model); + model.setMaterialSelector(*mat_selector); + + /// model initialization + model.initFull(); + + /// apply boundary conditions + Matrix grad_u_macro(spatial_dimension, spatial_dimension, 0.); + model.applyBoundaryConditions(grad_u_macro); + + model.setBaseName ("one-inclusion" ); + model.addDumpFieldVector("displacement"); + model.addDumpField ("stress" ); + model.addDumpField ("grad_u" ); + model.addDumpField ("blocked_dofs" ); + model.addDumpField ("material_index" ); + model.addDumpField ("eigen_grad_u" ); + model.dump(); + + /// apply eigenstrain + Matrix prestrain(spatial_dimension, spatial_dimension, 0.); + for (UInt i = 0; i < spatial_dimension; ++i) + prestrain(i,i) = 0.02; + model.advanceASR(prestrain); + + model.dump(); + + Matrix macro_strain(spatial_dimension, spatial_dimension, 0.); + model.homogenizeEigenGradU(macro_strain); + + std::cout << "the average eigen_gradu is " << macro_strain << std::endl; + + Matrix exact_eigenstrain(spatial_dimension, spatial_dimension, 0.); + for(UInt i = 0; i < spatial_dimension; ++i) + exact_eigenstrain(i,i) = 0.00125; + + macro_strain -= exact_eigenstrain; + + if (macro_strain.norm() > 1.e-10) { + std::cout << "the test failed!!" << std::endl; + finalize(); + return EXIT_FAILURE; + } + + finalize(); + return EXIT_SUCCESS; +} diff --git a/test/test_material_FE2/test_material_FE2.cc b/test/test_material_FE2/test_material_FE2.cc new file mode 100644 index 000000000..a53157831 --- /dev/null +++ b/test/test_material_FE2/test_material_FE2.cc @@ -0,0 +1,119 @@ +/** + * @file test_material_FE2.cc + * @author Aurelia Isabel Cuba Ramos + * @date Sun Jan 31 12:27:02 2016 + * + * @brief test the material FE2 + * + * @section LICENSE + * + * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne) + * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides) + * + * Akantu is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * Akantu is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Akantu. If not, see . + * + */ + +/* -------------------------------------------------------------------------- */ +#include "solid_mechanics_model.hh" +#include "material_FE2.hh" + +using namespace akantu; + +/* -------------------------------------------------------------------------- */ +/* Main */ +/* -------------------------------------------------------------------------- */ +int main(int argc, char *argv[]) { + const ElementType element_type = _triangle_3; + debug::setDebugLevel(dblWarning); + + initialize("material.dat" ,argc, argv); + + StaticCommunicator & comm = akantu::StaticCommunicator::getStaticCommunicator(); + Int psize = comm.getNbProc(); + Int prank = comm.whoAmI(); + + /// input parameters for the simulation + const UInt spatial_dimension = 2; + const ParserSection & parser = getUserParser(); + std::string mesh_file = parser.getParameter("mesh_file" ); + Matrix prestrain_increment = parser.getParameter("prestrain_increment"); + UInt total_steps = parser.getParameter("total_steps"); + + Mesh mesh(spatial_dimension); + akantu::MeshPartition * partition = NULL; + + if(prank == 0) { + + mesh.read(mesh_file); + + + /// partition the mesh + partition = new MeshPartitionScotch(mesh, spatial_dimension); + + partition->partitionate(psize); + } + + /// model creation + SolidMechanicsModel model(mesh); + + /// model intialization + model.initParallel(partition); + delete partition; + + /// set the material selector + MaterialSelector * mat_selector; + mat_selector = new MaterialSelector(); + mat_selector->setFallback(3); + model.setMaterialSelector(*mat_selector); + + model.initFull(SolidMechanicsModelOptions(_static)); + +/* -------------------------------------------------------------------------- */ + /// boundary conditions + mesh.createGroupsFromMeshData("physical_names"); // creates groups from mesh names + model.applyBC(BC::Dirichlet::FixedValue(0, _x), "left"); + model.applyBC(BC::Dirichlet::FixedValue(0, _y), "bottom"); + model.applyBC(BC::Dirichlet::FixedValue(1.e-2, _y), "top"); + + model.setBaseName ("macro_mesh"); + model.addDumpFieldVector("displacement"); + model.addDumpField ("stress" ); + model.addDumpField ("grad_u" ); + model.addDumpField ("blocked_dofs" ); + model.addDumpField ("material_index" ); + model.addDumpField ("material_stiffness" ); + + model.dump(); + + /// solve system + model.assembleStiffnessMatrix(); + Real error = 0; + bool converged= model.solveStep<_scm_newton_raphson_tangent_not_computed, _scc_increment>(1e-12, error, 2); + AKANTU_DEBUG_ASSERT(converged, "Did not converge"); + + /// simulate the advancement of the reaction + MaterialFE2 & mat = dynamic_cast & >(model.getMaterial("FE2_mat")); + Matrix current_prestrain(spatial_dimension, spatial_dimension, 0.); + for (UInt i = 0; i < total_steps; ++i) { + current_prestrain += prestrain_increment; + mat.advanceASR(current_prestrain); + } + + model.dump(); + + finalize(); + + return EXIT_SUCCESS; +}