You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
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??
The text was updated successfully, but these errors were encountered:
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
override
s) 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 variantPointer Create(IndexType, GeometryType::Pointer, PropertiesType::Pointer) const
, where theGeometryType::Pointer
object is constructed usingGetGeometry().Create(rNodes)
, whererNodes
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 functionGetDofs
(see for instanceU_Pw_base_element.cpp
, line 482). We need to carefully consider the model dimension to provide, sinceGetGeometry().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 callCalculateLeftHandSide
andCalculateRightHandSide
, 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??
The text was updated successfully, but these errors were encountered: