|
Smith
0.1
Smith is an implicit thermal structural mechanics simulation code.
|
This class stores all ContactInteractions for a problem, calls Tribol functions that act on all contact interactions, and agglomerates fields that exist over different ContactInteractions. More...
#include <contact_data.hpp>
Public Member Functions | |
| ContactData (const mfem::ParMesh &mesh) | |
| The constructor. More... | |
| ~ContactData () | |
| Destructor to finalize Tribol. | |
| void | addContactInteraction (int interaction_id, const std::set< int > &bdry_attr_surf1, const std::set< int > &bdry_attr_surf2, ContactOptions contact_opts) |
| Add another contact interaction. More... | |
| void | updateGeometry (int cycle, double time, double &dt, std::optional< std::reference_wrapper< const mfem::Vector >> u_shape=std::nullopt, std::optional< std::reference_wrapper< const mfem::Vector >> u=std::nullopt, bool eval_jacobian=false) |
| Updates the contact geometry and gap data. More... | |
| void | updateForcesAndJacobian (int cycle, double time, double &dt, std::optional< std::reference_wrapper< const mfem::Vector >> u_shape=std::nullopt, std::optional< std::reference_wrapper< const mfem::Vector >> u=std::nullopt, std::optional< std::reference_wrapper< const mfem::Vector >> p=std::nullopt) |
| Updates the contact forces and Jacobian contributions for the current configuration. More... | |
| void | reset () |
| Resets the contact pressures to zero. | |
| FiniteElementDual | forces () const |
| Get the contact constraint residual (i.e. nodal forces) from all contact interactions. More... | |
| mfem::HypreParVector | mergedPressures () const |
| Returns pressures from all contact interactions on the contact surface true degrees of freedom. More... | |
| mfem::HypreParVector | mergedGaps (bool zero_inactive=false) const |
| Returns nodal gaps from all contact interactions on the contact surface true degrees of freedom. More... | |
| std::unique_ptr< mfem::BlockOperator > | mergedJacobian () const |
| Returns a 2x2 block Jacobian on displacement/pressure true degrees of freedom from contact constraints. More... | |
| void | residualFunction (const mfem::Vector &u_shape, const mfem::Vector &u, mfem::Vector &r) |
| Computes the residual including contact terms. More... | |
| std::unique_ptr< mfem::BlockOperator > | jacobianFunction (std::unique_ptr< mfem::HypreParMatrix > orig_J) const |
| Computes the Jacobian including contact terms, given the non-contact Jacobian terms. More... | |
| std::unique_ptr< mfem::HypreParMatrix > | contactSubspaceTransferOperator () |
| Computes the subspace transfer operator. More... | |
| bool | haveContactInteractions () const |
| Have there been contact interactions added? More... | |
| bool | haveLagrangeMultipliers () const |
| Are any contact interactions enforced using Lagrange multipliers? More... | |
| int | numPressureDofs () const |
| Get the number of Lagrange multiplier true degrees of freedom. More... | |
Protected Member Functions | |
| void | setPressures (const mfem::Vector &merged_pressures) const |
| Set the pressure field. More... | |
| void | setDisplacements (const mfem::Vector &u_shape, const mfem::Vector &u) |
| Update the current coordinates based on the new displacement field. More... | |
This class stores all ContactInteractions for a problem, calls Tribol functions that act on all contact interactions, and agglomerates fields that exist over different ContactInteractions.
Definition at line 49 of file contact_data.hpp.
| smith::ContactData::ContactData | ( | const mfem::ParMesh & | mesh | ) |
The constructor.
| mesh | The volume mesh for the problem |
Definition at line 459 of file contact_data.cpp.
| void smith::ContactData::addContactInteraction | ( | int | interaction_id, |
| const std::set< int > & | bdry_attr_surf1, | ||
| const std::set< int > & | bdry_attr_surf2, | ||
| ContactOptions | contact_opts | ||
| ) |
Add another contact interaction.
| interaction_id | Unique identifier for the ContactInteraction (used in Tribol) |
| bdry_attr_surf1 | MFEM boundary attributes for the first (mortar) surface |
| bdry_attr_surf2 | MFEM boundary attributes for the second (nonmortar) surface |
| contact_opts | Defines contact method, enforcement, type, and penalty |
interaction_id as the unique key for its coupling schemes, so reusing an id (even across different ContactData instances) is an error. Definition at line 466 of file contact_data.cpp.
| std::unique_ptr< mfem::HypreParMatrix > smith::ContactData::contactSubspaceTransferOperator | ( | ) |
Computes the subspace transfer operator.
Definition at line 535 of file contact_data.cpp.
| FiniteElementDual smith::ContactData::forces | ( | ) | const |
Get the contact constraint residual (i.e. nodal forces) from all contact interactions.
Definition at line 489 of file contact_data.cpp.
|
inline |
Have there been contact interactions added?
Definition at line 203 of file contact_data.hpp.
|
inline |
Are any contact interactions enforced using Lagrange multipliers?
Definition at line 227 of file contact_data.hpp.
| std::unique_ptr< mfem::BlockOperator > smith::ContactData::jacobianFunction | ( | std::unique_ptr< mfem::HypreParMatrix > | orig_J | ) | const |
Computes the Jacobian including contact terms, given the non-contact Jacobian terms.
| orig_J | The non-contact terms of the Jacobian, not including essential boundary conditions |
Definition at line 515 of file contact_data.cpp.
| mfem::HypreParVector smith::ContactData::mergedGaps | ( | bool | zero_inactive = false | ) | const |
Returns nodal gaps from all contact interactions on the contact surface true degrees of freedom.
The type of gap (normal or vector-valued) is set by the ContactType in the ContactOptions struct for the contact interaction. TiedNormal and Frictionless (the two type supported in Tribol) correspond to scalar gap normal. Only linear (order = 1) gap fields are supported.
| [in] | zero_inactive | Sets inactive t-dofs to zero gap |
Definition at line 498 of file contact_data.cpp.
| std::unique_ptr< mfem::BlockOperator > smith::ContactData::mergedJacobian | ( | ) | const |
Returns a 2x2 block Jacobian on displacement/pressure true degrees of freedom from contact constraints.
The element Jacobian contributions are computed upon calling updateForcesAndJacobian(). This method does MPI communication to move Jacobian contributions to the correct rank, then assembles the contributions. The pressure degrees of freedom for all contact interactions are merged into a single block.
Definition at line 503 of file contact_data.cpp.
| mfem::HypreParVector smith::ContactData::mergedPressures | ( | ) | const |
Returns pressures from all contact interactions on the contact surface true degrees of freedom.
The type of pressure (normal or vector-valued) is set by the ContactType in the ContactOptions struct for the contact interaction. TiedNormal and Frictionless (the two type supported in Tribol) correspond to scalar normal pressure. Only linear (order = 1) pressure fields are supported.
Definition at line 496 of file contact_data.cpp.
|
inline |
Get the number of Lagrange multiplier true degrees of freedom.
Definition at line 234 of file contact_data.hpp.
| void smith::ContactData::residualFunction | ( | const mfem::Vector & | u_shape, |
| const mfem::Vector & | u, | ||
| mfem::Vector & | r | ||
| ) |
Computes the residual including contact terms.
| [in] | u_shape | Shape displacement vector (size of [displacement] block) |
| [in] | u | Solution vector ([displacement; pressure] block vector) |
| [in,out] | r | Residual vector ([force; gap] block vector); takes in initialized residual force vector and adds contact contributions |
Definition at line 510 of file contact_data.cpp.
|
protected |
Update the current coordinates based on the new displacement field.
| u_shape | Shape displacement vector |
| u | Current displacement dof values |
Definition at line 530 of file contact_data.cpp.
|
protected |
Set the pressure field.
This sets Tribol's pressure degrees of freedom based on 1) the values in merged_pressure for Lagrange multiplier enforcement 2) the nodal gaps and penalty for penalty enforcement
| merged_pressures | Current pressure true dof values in a merged mfem::Vector |
Definition at line 528 of file contact_data.cpp.
| void smith::ContactData::updateForcesAndJacobian | ( | int | cycle, |
| double | time, | ||
| double & | dt, | ||
| std::optional< std::reference_wrapper< const mfem::Vector >> | u_shape = std::nullopt, |
||
| std::optional< std::reference_wrapper< const mfem::Vector >> | u = std::nullopt, |
||
| std::optional< std::reference_wrapper< const mfem::Vector >> | p = std::nullopt |
||
| ) |
Updates the contact forces and Jacobian contributions for the current configuration.
| cycle | The current simulation cycle |
| time | The current time |
| dt | The timestep size to attempt |
| u_shape | Optional shape displacement vector; if provided with u, the geometry is refreshed first |
| u | Optional current displacement dof values; if provided with u_shape, the geometry is refreshed first |
| p | Optional current pressure true dof values. Required for Lagrange multiplier enforcement and ignored for penalty enforcement. |
Definition at line 481 of file contact_data.cpp.
| void smith::ContactData::updateGeometry | ( | int | cycle, |
| double | time, | ||
| double & | dt, | ||
| std::optional< std::reference_wrapper< const mfem::Vector >> | u_shape = std::nullopt, |
||
| std::optional< std::reference_wrapper< const mfem::Vector >> | u = std::nullopt, |
||
| bool | eval_jacobian = false |
||
| ) |
Updates the contact geometry and gap data.
| cycle | The current simulation cycle |
| time | The current time |
| dt | The timestep size to attempt |
| u_shape | Optional shape displacement vector |
| u | Optional current displacement dof values |
| eval_jacobian | Whether to also evaluate the Jacobian contributions (default false) |
Definition at line 474 of file contact_data.cpp.