-
Notifications
You must be signed in to change notification settings - Fork 249
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 linear elastic constitutive law for line interfaces #12654
[GeoMechanicsApplication] Add a linear elastic constitutive law for line interfaces #12654
Conversation
…ement and stiffness values
…lative displacement and previous traction from the constructor to `InitializeMaterial`
…ept by the law itself by using `FinalizeMaterialResponseCauchy`
- When checking the constitutive law, also call the `Check` member of the base class. - Replaced a few intermediate variables by using temporaries (return by other functions).
They now have the same order as in class `ConstitutiveLaw`.
- Renamed a test case. - Set a Z coordinate to zero (since we assume a 2D model). - Introduced a constant for the adopted relative tolerance.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
## Incremental linear elastic interface law | ||
The constitutive law for an interface element relates tractions $\tau$ to relative displacement $\Delta u$. | ||
Relative displacement for interface element is the differential motion between the two sides of the interface. As a | ||
consequence the relative displacement has unit of length [L] and the stiffness has unit of force over cubic length [F/L^3]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Preferly to be "m" and "N" replacing of L and F.
I know that you don't want to relate it to any specific unit system like SI, and wanted to write it as symbolic. But in the standard units symbols, F is a dependent unit and it hasn't specific symbol. The force then becomes [M L T^-2].
Moreover: The unit is preferly to be written as "$\mathrm{[UNIT]}$" , to account for powers, For example, "$\mathrm{[F/L^3]}$" or "$\mathrm{[N/m^3]}$"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We will make use of the formula editor for correct formatting. However, in engineering it is very common to use the derived unit for Force i.s.o. mass * length * time^-2. To be independent of the system used ( S.I or imperical etc. ) we will express in L, F, t, T (i.e. quantities) i.s.o. mm, kN, days and Fahrenheit (i.e. some units).
consequence the relative displacement has unit of length [L] and the stiffness has unit of force over cubic length [F/L^3]. | ||
|
||
### Relative displacement and traction | ||
In 2D plane strain y is the opening/closing direction of the interface, while differential motion in the tangential direction |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"y" is a variable, so it has to be in italic (equation form). So, i think better to use "$y$" instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
|
||
$$ \Delta u = \begin{bmatrix} \Delta u_y \\ \Delta u_x \end{bmatrix} $$ | ||
|
||
$$ \tau = \begin{bmatrix} \tau_{yy} \\ \tau_{xy} \end{bmatrix} $$ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure whether I am correct in the case of interface, but in the normal stress tensors, the normal components are defined by
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The name for stress in an interface is traction, and it is denoted by
$$ C = \begin{bmatrix} C_{yy} & 0 \\ | ||
0 & C_{xy} \end{bmatrix}$$ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What are the
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added the dimension of the stiffness values to be more explicit about what is expected. The normal and shear stiffness terms are clear from the input parameter names.
const auto result = BaseType::Check(rMaterialProperties, rElementGeometry, rCurrentProcessInfo); | ||
|
||
KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(INTERFACE_NORMAL_STIFFNESS)) | ||
<< "No interface normal stiffness defined" << std::endl; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"No interface normal stiffness is defined"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
<< rMaterialProperties[INTERFACE_NORMAL_STIFFNESS] << std::endl; | ||
|
||
KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(INTERFACE_SHEAR_STIFFNESS)) | ||
<< "No interface shear stiffness defined" << std::endl; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is defined
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for implementing this constitutive law as a well tested + documented package. I have a few questions and suggestions, but nothing major and mostly just to gain a bit of understanding myself
...cation/tests/cpp_tests/custom_constitutive/test_incremental_linear_elastic_interface_law.cpp
Outdated
Show resolved
Hide resolved
...cation/tests/cpp_tests/custom_constitutive/test_incremental_linear_elastic_interface_law.cpp
Outdated
Show resolved
Hide resolved
applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp
Show resolved
Hide resolved
|
||
ConstitutiveLaw::SizeType GeoIncrementalLinearElasticInterfaceLaw::WorkingSpaceDimension() | ||
{ | ||
return 2; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could this ever become 3d (e.g. when using it for a interface plane, where you have multiple 'tangential' directions and a normal)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can imagine that at some point we will extend this class towards 3D models. In that case, I would suggest to supply the desired dimension on construction of an instance of this class, and store it with the object. Then this query should return whatever value the corresponding data member contains. Do you think this might work, or do you foresee any issues there?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see any issues in this particular function, I think the challenge is more in the formulation, since then there is more than one 'SHEAR' direction. I don't know enough to see if this way of formulating it, makes it harder to go to 3D at some point.
...ons/GeoMechanicsApplication/custom_constitutive/incremental_linear_elastic_interface_law.cpp
Show resolved
Hide resolved
...ons/GeoMechanicsApplication/custom_constitutive/incremental_linear_elastic_interface_law.cpp
Show resolved
Hide resolved
...ons/GeoMechanicsApplication/custom_constitutive/incremental_linear_elastic_interface_law.cpp
Show resolved
Hide resolved
Matrix GeoIncrementalLinearElasticInterfaceLaw::MakeConstitutiveMatrix(double NormalStiffness, | ||
double ShearStiffness) const | ||
{ | ||
auto result = Matrix{ZeroMatrix{GetStrainSize(), GetStrainSize()}}; | ||
result(0, 0) = NormalStiffness; | ||
result(1, 1) = ShearStiffness; | ||
return result; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is more of a personal preference, but I'd put this function close to where it's called (i.e. directly below CalculateMaterialResponseCauchy)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The definitions of the member functions in the implementation file have the same ordering as the declarations in the header file. So first the public
member functions, then the private
member functions. The public members are all override
s of the interface defined by class ConstitutiveLaw
, and they are in the same order as in the header file of ConstitutiveLaw
. From this point of view, I'm a bit reluctant to rearrange their order. Is that acceptable to you, or would you still insist on having the definition of MakeConstitutiveMatrix
close to CalculateMaterialResponseCauchy
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I get that reasoning as well. Since I think it improves readability, I still prefer moving it, but this is your PR and I'm also completely fine with choosing for consistency with the base class and header file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have one comment left about a render issue in the README.md, other than that it's good to go.
I also added one question, but that's out of curiosity and doesn't at all block the PR
## Incremental linear elastic interface law | ||
The constitutive law for an interface element relates tractions $\tau$ to relative displacement $\Delta u$. | ||
Relative displacement for interface element is the differential motion between the two sides of the interface. As a | ||
consequence the relative displacement has unit of length [$\mathrm{L}$] and the stiffness has unit of force over cubic length [$\mathrm{F/L^3}$]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These mathrms don't render correctly, I think reversing dollar and [
should work $[\mathrm{F/L^3}]$
(would look like [
and $
also works
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch. Done.
KRATOS_ERROR_IF_NOT(rMaterialProperties[INTERFACE_NORMAL_STIFFNESS] > 0.0) | ||
<< "Interface normal stiffness must be positive, but got " | ||
<< rMaterialProperties[INTERFACE_NORMAL_STIFFNESS] << std::endl; | ||
|
||
KRATOS_ERROR_IF_NOT(rMaterialProperties.Has(INTERFACE_SHEAR_STIFFNESS)) | ||
<< "No interface shear stiffness is defined" << std::endl; | ||
|
||
KRATOS_ERROR_IF_NOT(rMaterialProperties[INTERFACE_SHEAR_STIFFNESS] > 0.0) | ||
<< "Interface shear stiffness must be positive, but got " | ||
<< rMaterialProperties[INTERFACE_SHEAR_STIFFNESS] << std::endl; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just out of curiosity, would it every be reasonable that the stiffnesses depend on something else (and thus become time-dependent)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Stiffness can depend on many things e.g. time, age, temperature, strain, stress etc. That is what you might use when doing computations that involve improving ground stability by grouting.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot for your work on this and also for adding documentation for it.
I've only reviewed the ReadMe file for now and my comments are more on the style of the documentation.
|
||
|
||
## Incremental linear elastic interface law | ||
The constitutive law for an interface element relates tractions $\tau$ to relative displacement $\Delta u$. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest to add the word 'linearly' to the sentence below to be more explicit about the nature of the relation:
The constitutive law for an interface element relates tractions $\tau$ to relative displacement $\Delta u$. | |
The constitutive law for an interface element linearly relates tractions $\tau$ to relative displacement $\Delta u$. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, being more explicit about the nature of the relation may be clearer. Done.
|
||
### Relative displacement and traction | ||
In 2D plane strain $y$ is the opening/closing direction of the interface, while differential motion in the tangential direction | ||
gives shear. Like for a continuum, normal behaviour is placed first in the relative displacement and traction vector. Shear |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
gives shear. Like for a continuum, normal behaviour is placed first in the relative displacement and traction vector. Shear | |
gives shear. Similar to the continuum, the normal behaviour is placed first in the relative displacement and traction vector. The shear |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
### Relative displacement and traction | ||
In 2D plane strain $y$ is the opening/closing direction of the interface, while differential motion in the tangential direction | ||
gives shear. Like for a continuum, normal behaviour is placed first in the relative displacement and traction vector. Shear | ||
is placed after the normal motion or traction. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is placed after the normal motion or traction. | |
behavior follows after the normal motion or traction in these vectors. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
$$ \tau = \begin{bmatrix} \tau_{yy} \\ \tau_{xy} \end{bmatrix} $$ | ||
|
||
### 2D Elastic constitutive tensor | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest to add something here just for a clearer documentation:
The elastic behavior of the interface is characterized by the elastic constitutive tensor (or 2D Elastic constitutive tensor) 𝐶, which relates the traction and relative displacement vectors. The constitutive tensor in 2D is expressed as:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
Where $C_{yy}$ is input as `INTERFACE_NORMAL_STIFFNESS` and $C_{xy}$ is input as `INTERFACE_SHEAR_STIFFNESS`. Both stiffness values have dimension $\mathrm{F/L^3}$. | ||
|
||
### Incremental relation | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also here, I suggest again to add something like:
The relation between the traction and the relative displacement at a given time increment is given by the following incremental equation:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
|
||
$$ \Delta u = \begin{bmatrix} \Delta u_y \\ \Delta u_x \end{bmatrix} $$ | ||
|
||
$$ \tau = \begin{bmatrix} \tau_{yy} \\ \tau_{xy} \end{bmatrix} $$ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is more style and I only suggest it because sometimes you just want to quickly check the formula and what the parameters stand for. So I would suggest adding the following: (if correct to my understanding)
Where:
-
$\Delta u_𝑦$ : Relative displacement in the 𝑦-direction (normal to the interface). -
$\Delta u_𝑥$ : Relative displacement in the 𝑥-direction (tangential to the interface). -
$\tau_{𝑦𝑦}$ : Traction in the 𝑦-direction (normal to the interface). -
$\tau_{𝑥𝑦}$ : Shear traction in the 𝑥-direction (tangential to the interface).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
$$ C = \begin{bmatrix} C_{yy} & 0 \\ | ||
0 & C_{xy} \end{bmatrix}$$ | ||
|
||
Where $C_{yy}$ is input as `INTERFACE_NORMAL_STIFFNESS` and $C_{xy}$ is input as `INTERFACE_SHEAR_STIFFNESS`. Both stiffness values have dimension $\mathrm{F/L^3}$. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also for this one:
Where:
-
$C$ : Represents the 2D elastic constitutive tensor. -
$C_{𝑦𝑦}$ : Represents theINTERFACE_NORMAL_STIFFNESS
, which characterizes the stiffness in the normal direction. -
$C_{𝑥𝑦}$ : Represents theINTERFACE_SHEAR_STIFFNESS
, which characterizes the stiffness in the tangential direction.
Both stiffness values have dimension
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
### Incremental relation | ||
|
||
$$ \tau_{t + \Delta t} = \tau_t + C \cdot \Delta u $$ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also for this one:
Where:
-
$\tau_{t + \Delta t}$ : The traction at the updated time 𝑡 + Δ𝑡. -
$\tau_t$ : The traction at the current time 𝑡. -
$C$ : The elastic constitutive tensor. -
$\Delta u$ : The incremental relative displacement vector.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
## Incremental linear elastic interface law | ||
The constitutive law for an interface element relates tractions $\tau$ to relative displacement $\Delta u$. | ||
Relative displacement for interface element is the differential motion between the two sides of the interface. As a | ||
consequence the relative displacement has unit of length [$\mathrm{L}$] and the stiffness has unit of force over cubic length [$\mathrm{F/L^3}$]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
consequence the relative displacement has unit of length [$\mathrm{L}$] and the stiffness has unit of force over cubic length [$\mathrm{F/L^3}$]. | |
consequence the relative displacement has unit of length $[\mathrm{L}]$ and the stiffness has unit of force over cubic length $[\mathrm{F/L^3}]$. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
Many thanks to @mnabideltares, @rfaasse, and @indigocoral for your valuable suggestions. We feel that those have improved the quality of this PR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the hard work, to me this looks ready to be merged and used!
📝 Description
Added a linear elastic constitutive law that uses an incremental formulation for line interface elements. This new constitutive law will eventually replace the existing classes
LinearElastic2DInterfaceLaw
andLinearElastic3DInterfaceLaw
. So far it aims at 2D models only. In addition to theREADME
file, the unit tests of classGeoIncrementalLinearElasticInterfaceLaw
document its intended behavior.🆕 Changelog
Other changes in this PR include adding two new variables to the GeoMechanicsApplication:
INTERFACE_NORMAL_STIFFNESS
andINTERFACE_SHEAR_STIFFNESS
.@indigocoral: Could you please read the
README
file carefully and see whether it makes sense to you? Any suggestions from your side are greatly appreciated. Thanks!