Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GeoMechanicsApplication] Add a minimal 3+3 line interface element #12649

Closed
rfaasse opened this issue Aug 27, 2024 · 0 comments · Fixed by #12674
Closed

[GeoMechanicsApplication] Add a minimal 3+3 line interface element #12649

rfaasse opened this issue Aug 27, 2024 · 0 comments · Fixed by #12674
Assignees

Comments

@rfaasse
Copy link
Contributor

rfaasse commented Aug 27, 2024

As a developer, I would like to have a minimal 3+3 line interface element. It should use 3-point Lobatto integration and it should support the simplest material behavior (i.e. a linear-elastic response). To fit it properly in the new element class hierarchy, it should derive from Element directly.

The minimal interface that must be implemented (by supplying overrides) includes:

  • Pointer Create(IndexType, const NodesArrayType&, PropertiesType::Pointer) const
  • Pointer Create(IndexType, GeometryType::Pointer, PropertiesType::Pointer) const
  • void EquationIdVector(EquationIdVectorType&, const ProcessInfo&) const
  • void GetDofList(DofsVectorType&, const ProcessInfo&) const
  • void CalculateLocalSystem(MatrixType&, VectorType&, const ProcessInfo&)
  • void CalculateLeftHandSide(MatrixType&, const ProcessInfo&)
  • void CalculateRightHandSide(VectorType&, const ProcessInfo&)
  • void CalculateOnIntegrationPoints(...) (for relative displacements, tractions, and fluxes)
  • void InitializeSolutionStep(...)
  • void FinalizeSolutionStep(...)
  • void Finalize(...) (if necessary)

Acceptance criteria

Note: We may need to use forces (Neumann) rather than prescribed displacements (Dirichlet).

Given a single non-zero-thickness 3+3 U-Pw interface element with linear-elastic material behavior
When on one side the interface is fixed (i.e. its displacement DOFs are set to zero) and on the other side a prescribed normal displacement opens the interface
Then the normal (tensile) traction is proportional to the relative normal displacement and the shear traction must be equal to zero.

Given a single zero-thickness 3+3 U-Pw interface element with linear-elastic material behavior
When on one side the interface is fixed (i.e. its displacement DOFs are set to zero) and on the other side a prescribed tangential displacement slides the interface
Then the normal (tensile) traction must be equal to zero and the shear traction is proportional to the relative tangential displacement.

Given a single zero-thickness 3+3 U-Pw interface element with linear-elastic material behavior
When on one side the interface is fixed (i.e. its displacement DOFs are set to zero) and on the other side both a prescribed normal displacement opens the interface and a prescribed tangential displacement slides the interface
Then the normal (tensile) traction is proportional to the relative normal displacement and the shear traction is proportional to the relative tangential displacement.

Given a single zero-thickness 3+3 U-Pw interface element with linear-elastic material behavior and a permeability that only acts in normal direction
When on one side the water pressures are fixed at zero and at the other side the water pressure is prescribed
Then the flux is proportional to the pressure difference and the permeability.

Implementation details

Create

To avoid code duplication, variant Pointer Create(IndexType, const NodesArrayType&, PropertiesType::Pointer) const should call variant Pointer Create(IndexType, GeometryType::Pointer, PropertiesType::Pointer) const, where the GeometryType::Pointer object is constructed using GetGeometry().Create(rNodes), where rNodes are the given nodes of the element.

EquationIdVector

Here we should be able to reuse Geo::DofUtilities::ExtractEquationIdsFrom given the list of degrees of freedom of this element.

GetDofList

Here we should be able to reuse Geo::DofUtilities::ExtractUPwDofsFromNodes, which we probably want to wrap in a helper member function GetDofs (see for instance U_Pw_base_element.cpp, line 482). We need to carefully consider the model dimension to provide, since GetGeometry().WorkingSpaceDimension() may not work as expected. But let's test that first.

CalculateLocalSystem

Contrary to what has been done for other elements, I would not implement a member CalculateAll, which then receives flags to instruct what to calculate exactly. I'd rather let this member function call CalculateLeftHandSide and CalculateRightHandSide, to make clear that both the left hand side and the right hand side are calculated. The behavior will then automatically be consistent with these two members.

CalculateLeftHandSide

Since this is a minimal element implementation, let's only take the stiffness matrix into account. Forget about the damping and mass matrices. What about the water pressure part??

CalculateRightHandSide

Again, let's stick to a minimal implementation here. How should that look like??

@rfaasse rfaasse self-assigned this Aug 27, 2024
@rfaasse rfaasse converted this from a draft issue Aug 27, 2024
@github-project-automation github-project-automation bot moved this from 👀 In Review to ✅ Done in Kratos Product Backlog Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants