Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,8 @@ template bool Core::Nodes::have_nodal_fibers<Core::FE::CellType::quad8>(
const Core::Nodes::Node* const* nodes);
template bool Core::Nodes::have_nodal_fibers<Core::FE::CellType::quad9>(
const Core::Nodes::Node* const* nodes);
template bool Core::Nodes::have_nodal_fibers<Core::FE::CellType::nurbs9>(
const Core::Nodes::Node* const* nodes);
template bool Core::Nodes::have_nodal_fibers<Core::FE::CellType::tri3>(
const Core::Nodes::Node* const* nodes);
template bool Core::Nodes::have_nodal_fibers<Core::FE::CellType::tri6>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,15 @@ template void Core::FE::extrapolate_gp_quantity_to_nodes_and_assemble<Core::FE::
const Core::LinAlg::SerialDenseMatrix& gp_data, Core::LinAlg::MultiVector<double>& global_data,
bool nodal_average, const Core::FE::GaussIntegration& integration);

template void Core::FE::extrapolate_gp_quantity_to_nodes_and_assemble<Core::FE::CellType::nurbs9,
Core::FE::IntegrationPoints2D>(const Core::Elements::Element& ele,
const Core::LinAlg::SerialDenseMatrix& gp_data, Core::LinAlg::MultiVector<double>& global_data,
bool nodal_average, const Core::FE::IntegrationPoints2D& integration);
template void Core::FE::extrapolate_gp_quantity_to_nodes_and_assemble<Core::FE::CellType::nurbs9,
Core::FE::GaussIntegration>(const Core::Elements::Element& ele,
const Core::LinAlg::SerialDenseMatrix& gp_data, Core::LinAlg::MultiVector<double>& global_data,
bool nodal_average, const Core::FE::GaussIntegration& integration);

template void Core::FE::extrapolate_gp_quantity_to_nodes_and_assemble<Core::FE::CellType::tri3,
Core::FE::IntegrationPoints2D>(const Core::Elements::Element& ele,
const Core::LinAlg::SerialDenseMatrix& gp_data, Core::LinAlg::MultiVector<double>& global_data,
Expand Down
9 changes: 4 additions & 5 deletions src/solid_3D_ele/4C_solid_3D_ele.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ void Discret::Elements::SolidType<dim>::setup_element_definition(
defsgeneral[Core::FE::CellType::quad9] = get_default_input_spec<Core::FE::CellType::quad9>();
defsgeneral[Core::FE::CellType::tri3] = get_default_input_spec<Core::FE::CellType::tri3>();
defsgeneral[Core::FE::CellType::tri6] = get_default_input_spec<Core::FE::CellType::tri6>();

defsgeneral[Core::FE::CellType::nurbs9] = get_default_input_spec<Core::FE::CellType::nurbs9>();
}
else if constexpr (dim == 3)
{
Expand Down Expand Up @@ -180,11 +182,8 @@ void Discret::Elements::SolidType<dim>::setup_element_definition(
{.default_value = ElementTechnology::none}),
});

defsgeneral[Core::FE::CellType::nurbs27] = all_of({
parameter<int>("MAT"),
get_kinem_type_input_spec(),
get_integration_rule_input_spec<Core::FE::CellType::nurbs27>(),
});
defsgeneral[Core::FE::CellType::nurbs27] =
get_default_input_spec<Core::FE::CellType::nurbs27>();
}
}

Expand Down
8 changes: 7 additions & 1 deletion src/solid_3D_ele/4C_solid_3D_ele_calc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,9 @@ struct VerifyPackable
}
};

template struct VerifyPackable<Core::FE::CellType::hex8, Core::FE::CellType::hex18,
template struct VerifyPackable<Core::FE::CellType::quad4, Core::FE::CellType::quad8,
Core::FE::CellType::quad9, Core::FE::CellType::nurbs9, Core::FE::CellType::tri3,
Core::FE::CellType::tri6, Core::FE::CellType::hex8, Core::FE::CellType::hex18,
Core::FE::CellType::hex20, Core::FE::CellType::hex27, Core::FE::CellType::nurbs27,
Core::FE::CellType::tet4, Core::FE::CellType::tet10, Core::FE::CellType::pyramid5,
Core::FE::CellType::wedge6, Core::FE::CellType::hex8, Core::FE::CellType::hex8,
Expand All @@ -675,6 +677,8 @@ template class Discret::Elements::SolidEleCalc<Core::FE::CellType::quad8,
Discret::Elements::DisplacementBasedFormulation<Core::FE::CellType::quad8>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::quad9,
Discret::Elements::DisplacementBasedFormulation<Core::FE::CellType::quad9>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::nurbs9,
Discret::Elements::DisplacementBasedFormulation<Core::FE::CellType::nurbs9>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::tri3,
Discret::Elements::DisplacementBasedFormulation<Core::FE::CellType::tri3>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::tri6,
Expand Down Expand Up @@ -705,6 +709,8 @@ template class Discret::Elements::SolidEleCalc<Core::FE::CellType::quad8,
Discret::Elements::DisplacementBasedLinearKinematicsFormulation<Core::FE::CellType::quad8>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::quad9,
Discret::Elements::DisplacementBasedLinearKinematicsFormulation<Core::FE::CellType::quad9>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::nurbs9,
Discret::Elements::DisplacementBasedLinearKinematicsFormulation<Core::FE::CellType::nurbs9>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::tri3,
Discret::Elements::DisplacementBasedLinearKinematicsFormulation<Core::FE::CellType::tri3>>;
template class Discret::Elements::SolidEleCalc<Core::FE::CellType::tri6,
Expand Down
10 changes: 9 additions & 1 deletion src/solid_3D_ele/4C_solid_3D_ele_calc_lib_integration.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,20 @@ namespace Discret::Elements
};

template <Core::FE::CellType celltype>
requires(celltype == Core::FE::CellType::nurbs27)
requires(Core::FE::is_nurbs<celltype> && Core::FE::dim<celltype> == 3)
struct ApplicableIntegrationRules<celltype>
{
static constexpr std::array value =
ApplicableIntegrationRules<Core::FE::CellType::hex8>::value;
};

template <Core::FE::CellType celltype>
requires(Core::FE::is_nurbs<celltype> && Core::FE::dim<celltype> == 2)
struct ApplicableIntegrationRules<celltype>
{
static constexpr std::array value =
ApplicableIntegrationRules<Core::FE::CellType::quad4>::value;
};
} // namespace Internal

template <Core::FE::CellType celltype>
Expand Down
14 changes: 14 additions & 0 deletions src/solid_3D_ele/4C_solid_3D_ele_calc_lib_plane.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,12 @@ Discret::Elements::evaluate_material_stress<Core::FE::CellType::quad9>(Mat::So3M
const Core::LinAlg::Tensor<double, 2, 2>& defgrd,
const Core::LinAlg::SymmetricTensor<double, 2, 2>& gl_strain, Teuchos::ParameterList& params,
const Mat::EvaluationContext<2>& context, const int gp, const int eleGID);
template Discret::Elements::Stress<Core::FE::CellType::nurbs9>
Discret::Elements::evaluate_material_stress<Core::FE::CellType::nurbs9>(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::nurbs9>& element_properties,
const Core::LinAlg::Tensor<double, 2, 2>& defgrd,
const Core::LinAlg::SymmetricTensor<double, 2, 2>& gl_strain, Teuchos::ParameterList& params,
const Mat::EvaluationContext<2>& context, const int gp, const int eleGID);
template Discret::Elements::Stress<Core::FE::CellType::tri3>
Discret::Elements::evaluate_material_stress<Core::FE::CellType::tri3>(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::tri3>& element_properties,
Expand All @@ -385,6 +391,10 @@ template void Discret::Elements::update_material(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::quad9>& element_properties,
const Core::LinAlg::Tensor<double, 2, 2>& defgrd, Teuchos::ParameterList& params,
const Mat::EvaluationContext<2>& context, const int gp, const int eleGID);
template void Discret::Elements::update_material(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::nurbs9>& element_properties,
const Core::LinAlg::Tensor<double, 2, 2>& defgrd, Teuchos::ParameterList& params,
const Mat::EvaluationContext<2>& context, const int gp, const int eleGID);
template void Discret::Elements::update_material(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::tri3>& element_properties,
const Core::LinAlg::Tensor<double, 2, 2>& defgrd, Teuchos::ParameterList& params,
Expand All @@ -406,6 +416,10 @@ template double Discret::Elements::evaluate_material_strain_energy(Mat::So3Mater
const ElementProperties<Core::FE::CellType::quad9>& element_properties,
const Core::LinAlg::SymmetricTensor<double, 2, 2>& gl_strain, Teuchos::ParameterList& params,
const Mat::EvaluationContext<2>& context, const int gp, const int eleGID);
template double Discret::Elements::evaluate_material_strain_energy(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::nurbs9>& element_properties,
const Core::LinAlg::SymmetricTensor<double, 2, 2>& gl_strain, Teuchos::ParameterList& params,
const Mat::EvaluationContext<2>& context, const int gp, const int eleGID);
template double Discret::Elements::evaluate_material_strain_energy(Mat::So3Material& material,
const ElementProperties<Core::FE::CellType::tri3>& element_properties,
const Core::LinAlg::SymmetricTensor<double, 2, 2>& gl_strain, Teuchos::ParameterList& params,
Expand Down
6 changes: 3 additions & 3 deletions src/solid_3D_ele/4C_solid_3D_ele_factory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ namespace Discret::Elements
Core::FE::CellType::nurbs27, Core::FE::CellType::tet4, Core::FE::CellType::tet10,
Core::FE::CellType::wedge6, Core::FE::CellType::pyramid5>;

using ImplementedSolidCellTypes2D =
Core::FE::CelltypeSequence<Core::FE::CellType::quad4, Core::FE::CellType::quad8,
Core::FE::CellType::quad9, Core::FE::CellType::tri3, Core::FE::CellType::tri6>;
using ImplementedSolidCellTypes2D = Core::FE::CelltypeSequence<Core::FE::CellType::quad4,
Core::FE::CellType::quad8, Core::FE::CellType::quad9, Core::FE::CellType::tri3,
Core::FE::CellType::tri6, Core::FE::CellType::nurbs9>;

template <unsigned dim>
using ImplementedSolidCellTypes =
Expand Down
24 changes: 15 additions & 9 deletions src/solid_3D_ele/4C_solid_3D_ele_line.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,21 @@ Core::Elements::Element* Discret::Elements::SolidLine<dim>::clone() const
template <unsigned dim>
Core::FE::CellType Discret::Elements::SolidLine<dim>::shape() const
{
switch (num_node())
{
case 2:
return Core::FE::CellType::line2;
case 3:
return Core::FE::CellType::line3;
default:
FOUR_C_THROW("unexpected number of nodes {}", num_node());
}
return Core::FE::cell_type_switch(parent_element()->shape(),
[&](auto celltype_t)
{
switch (num_node())
{
case 2:
return Core::FE::is_nurbs<celltype_t()> ? Core::FE::CellType::nurbs2
: Core::FE::CellType::line2;
case 3:
return Core::FE::is_nurbs<celltype_t()> ? Core::FE::CellType::nurbs3
: Core::FE::CellType::line3;
default:
FOUR_C_THROW("unexpected number of nodes {}", num_node());
}
});
}

template <unsigned dim>
Expand Down
78 changes: 26 additions & 52 deletions tests/input_files/contact2D_nurbs9_dual_consistent.4C.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -238,58 +238,32 @@ NODE COORDS:
- "CP 63 COORD -2.00000000e+00 -2.06054700e+00 +0.000000000000e+00 +9.429096493835e-01"
- "CP 64 COORD -2.00000000e+00 -1.00000000e+00 +0.000000000000e+00 +9.238795325113e-01"
STRUCTURE ELEMENTS:
- "1 WALLNURBS NURBS9 1 2 3 6 7 8 11 12 13 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN plane_stress
GP 3 3"
- "2 WALLNURBS NURBS9 2 3 4 7 8 9 12 13 14 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN plane_stress
GP 3 3"
- "3 WALLNURBS NURBS9 3 4 5 8 9 10 13 14 15 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN plane_stress
GP 3 3"
- "4 WALLNURBS NURBS9 6 7 8 11 12 13 16 17 18 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN plane_stress
GP 3 3"
- "5 WALLNURBS NURBS9 7 8 9 12 13 14 17 18 19 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN plane_stress
GP 3 3"
- "6 WALLNURBS NURBS9 8 9 10 13 14 15 18 19 20 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN plane_stress
GP 3 3"
- "7 WALLNURBS NURBS9 11 12 13 16 17 18 21 22 23 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "8 WALLNURBS NURBS9 12 13 14 17 18 19 22 23 24 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "9 WALLNURBS NURBS9 13 14 15 18 19 20 23 24 25 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "10 WALLNURBS NURBS9 16 17 18 21 22 23 26 27 28 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "11 WALLNURBS NURBS9 17 18 19 22 23 24 27 28 29 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "12 WALLNURBS NURBS9 18 19 20 23 24 25 28 29 30 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "13 WALLNURBS NURBS9 21 22 23 26 27 28 31 32 33 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "14 WALLNURBS NURBS9 22 23 24 27 28 29 32 33 34 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "15 WALLNURBS NURBS9 23 24 25 28 29 30 33 34 35 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "16 WALLNURBS NURBS9 26 27 28 31 32 33 36 37 38 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "17 WALLNURBS NURBS9 27 28 29 32 33 34 37 38 39 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "18 WALLNURBS NURBS9 28 29 30 33 34 35 38 39 40 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "19 WALLNURBS NURBS9 41 42 43 45 46 47 49 50 51 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "20 WALLNURBS NURBS9 42 43 44 46 47 48 50 51 52 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "21 WALLNURBS NURBS9 45 46 47 49 50 51 53 54 55 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "22 WALLNURBS NURBS9 46 47 48 50 51 52 54 55 56 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "23 WALLNURBS NURBS9 49 50 51 53 54 55 57 58 59 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "24 WALLNURBS NURBS9 50 51 52 54 55 56 58 59 60 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "25 WALLNURBS NURBS9 53 54 55 57 58 59 61 62 63 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "26 WALLNURBS NURBS9 54 55 56 58 59 60 62 63 64 MAT 1 KINEM linear EAS none THICK 1.0 STRESS_STRAIN
plane_stress GP 3 3"
- "1 SOLID NURBS9 1 2 3 6 7 8 11 12 13 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "2 SOLID NURBS9 2 3 4 7 8 9 12 13 14 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "3 SOLID NURBS9 3 4 5 8 9 10 13 14 15 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "4 SOLID NURBS9 6 7 8 11 12 13 16 17 18 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "5 SOLID NURBS9 7 8 9 12 13 14 17 18 19 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "6 SOLID NURBS9 8 9 10 13 14 15 18 19 20 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "7 SOLID NURBS9 11 12 13 16 17 18 21 22 23 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "8 SOLID NURBS9 12 13 14 17 18 19 22 23 24 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "9 SOLID NURBS9 13 14 15 18 19 20 23 24 25 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "10 SOLID NURBS9 16 17 18 21 22 23 26 27 28 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "11 SOLID NURBS9 17 18 19 22 23 24 27 28 29 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "12 SOLID NURBS9 18 19 20 23 24 25 28 29 30 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "13 SOLID NURBS9 21 22 23 26 27 28 31 32 33 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "14 SOLID NURBS9 22 23 24 27 28 29 32 33 34 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "15 SOLID NURBS9 23 24 25 28 29 30 33 34 35 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "16 SOLID NURBS9 26 27 28 31 32 33 36 37 38 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "17 SOLID NURBS9 27 28 29 32 33 34 37 38 39 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "18 SOLID NURBS9 28 29 30 33 34 35 38 39 40 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "19 SOLID NURBS9 41 42 43 45 46 47 49 50 51 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "20 SOLID NURBS9 42 43 44 46 47 48 50 51 52 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "21 SOLID NURBS9 45 46 47 49 50 51 53 54 55 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "22 SOLID NURBS9 46 47 48 50 51 52 54 55 56 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "23 SOLID NURBS9 49 50 51 53 54 55 57 58 59 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "24 SOLID NURBS9 50 51 52 54 55 56 58 59 60 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "25 SOLID NURBS9 53 54 55 57 58 59 61 62 63 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
- "26 SOLID NURBS9 54 55 56 58 59 60 62 63 64 MAT 1 KINEM linear THICKNESS 1.0 PLANE_ASSUMPTION plane_stress"
RESULT DESCRIPTION:
- STRUCTURE:
DIS: "structure"
Expand Down
Loading
Loading