KratosMultiphysics / Kratos

Kratos Multiphysics (A.K.A Kratos) is a framework for building parallel multi-disciplinary simulation software. Modularity, extensibility and HPC are the main objectives. Kratos has BSD license and is written in C++ with extensive Python interface.
https://kratosmultiphysics.github.io/Kratos/
Other
1.04k stars 245 forks source link

[GeoMechanicsApplication] Extract the non-linear geometry functionality (Updated Lagrange) from elements #12058

Open rfaasse opened 9 months ago

rfaasse commented 9 months ago

As a developer, I want to extract the non-linear geometry functionality from the elements, such that the element classes are more maintainable and configurable, by only depending on the abstract interface of a newly created non-linear geometry policy.

Acceptance criteria

Note: For more details, see also the discussion in #12057

We need to understand how important this feature is. Also: what is the cost of delaying this?

rfaasse commented 6 months ago

This needs to be crystallized out regarding the:

  1. Extra CalculateOnIntegrationPoints functionality
  2. Geometric stiffness matrix (KG)

To be taken up by @avdg81 @WPK4FEM

Geometric stiffness contribution through matrix KG

Nested class UPwSmallStrainElement::ElementVariables has member ConsiderGeometricStiffness. It is set by member InitializeProperties of class UPwSmallStrainElement, by querying the element property CONSIDER_GEOMETRIC_STIFFNESS. However, it appears that this property is not set in any of our tests, and therefore it always defaults to false. Consequently, member CalculateAndAddGeometricStiffnessMatrix is never called when running the small test suite. A similar approach has been followed for the U-Pw diff order elements, which is also not exercised by our tests. It appeared that the geometrically nonlinear behavior can be triggered by setting the "move_mesh_flag" option to true, which updates the nodal positions by adding the displacement field to the initial nodal positions (see member SolvingStrategy::MoveMesh).

In class UPwUpdatedLagrangianElement:

In class UpdatedLagrangianUPwDiffOrderElement:

Extra CalculateOnIntegrationPoints functionality

In class UPwUpdatedLagrangianFICElement: