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

Add nonlinear shell elements and solver #193

Merged
merged 190 commits into from
Oct 23, 2023
Merged

Add nonlinear shell elements and solver #193

merged 190 commits into from
Oct 23, 2023

Conversation

A-CGray
Copy link
Contributor

@A-CGray A-CGray commented Mar 24, 2023

This PR enables some geometrically nonlinear shell elements in TACS, and adds a set of nonlinear solvers to pyTACS which can be used in staticProblems but are extensible to use in other problems too.

Opening this as a draft to get your opinions on the current implementation

Summary of changes

  • Added shell elements using the nonlinear strain formulation and nonlinear rotation parameterisations to the TACS python interface, the elements using nonlinear strain and quadratic rotations are now included in the shell element unit tests
  • Fixed bug inTACSQuadraticRotation leading to inconsistency between residuals computed by assembleRes and assembleJacobian
  • Added 3 solver classes to the python interface:
    • BaseSolver (Abstract base class which defines the minimal solver interface)
    • NewtonSolver (A basic Newton solver with a critical point/energy line search and adaptive linear convergence)
    • ContinuationSolver (A continuation solver with adaptive load incrementation and the capability to compute predictor steps using arbitrary order equilibrium path extrapolation, relies on an "inner solver" object for the corrector phase of each increment)
  • Added a solver history class to the pyTACS utilities which handles the storage, printing and saving of values of interest during a nonlinear solution
  • Made various improvements to static problem
    • Split Jacobian and preconditioner updates into separate functions
    • Split the _factorOnNext attribute into _preconditionerUpdateRequired and _jacobianUpdateRequired
    • Add a getForces method which separates the internal and external components of the residual
  • Added a couple of nonlinear shell examples based on common geometrically nonlinear validation problems (taken from this paper)
  • Added a new nonlinear shell integration test
  • Added (very basic) docs pages for solver classes
  • Added method to pyTACS which checks whether problem is nonlinear by perturbing states and evaluating the residual. Based on this test, an isNonlinear flag is set in the pyTACS object, and this flag is passed on to any problems created from the object.
  • Replaced call to applyBCs in StaticProblem with setBCs so that StaticProblem works with non-zero Dirichlet boundary conditions

ToDo before merging:

  • Update MPhys interface
  • Change options handling so that nonlinear solver options are passed directly to nonlinear solver instead of through problem
  • Update static problem docs to include note on solver options
  • Incorporate comparison with analytic results into cantilever example
  • Expand documentation of nonlinear solver options
  • Check that docstrings for newly enabled element types match convention added in Adding info on number of nodes to each element docstring #256

This is a temporary implementation until I can figure out how to figure it out automatically from the element/contitutive objects.
@A-CGray A-CGray requested a review from timryanb October 22, 2023 20:42
@A-CGray A-CGray merged commit c12c5c9 into master Oct 23, 2023
5 checks passed
@timryanb timryanb deleted the NLSolverDev branch October 23, 2023 21:50
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 this pull request may close these issues.

3 participants