Skip to main content

Constitutive hyperelastic material formulations for FElupe

Project description

Constitutive hyperelastic material formulations for FElupe.

PyPI version shields.io License: GPL v3 Made with love in Graz (Austria) codecov DOI Codestyle black Documentation Status PDF Documentation

This package provides the essential building blocks for constitutive hyperelastic material formulations. This includes material behaviour-independent spaces and frameworks as well as material behaviour-dependent model formulations.

Spaces (hyperelastic.spaces) are full or partial deformations on which a given material formulation should be projected to, e.g. to the distortional (part of the deformation) space. Generalized Total-Lagrange Frameworks (hyperelastic.frameworks) for isotropic hyperelastic material formulations based on the invariants of the right Cauchy-Green deformation tensor and the principal stretches enable a clean coding of isotropic material formulations.

The hyperelastic.math-module provides helpers in reduced vector (Voigt) storage for symmetric three-dimensional second-order tensors along with a matrix storage for (at least minor) symmetric three-dimensional fourth-order tensors. Shear terms are not doubled for strain-like tensors, instead all math operations take care of the reduced vector storage.

$$ \boldsymbol{C} = \begin{bmatrix} C_{11} & C_{22} & C_{33} & C_{12} & C_{23} & C_{13} \end{bmatrix}^T $$

Installation

Install Python, fire up 🔥 a terminal and run 🏃

pip install hyperelastic

Usage

Material model formulations have to be created as classes with methods for the evaluation of the gradient (stress) and the hessian (elasticity) of the strain energy function. It depends on the framework which derivatives have to be defined, e.g. the derivatives w.r.t. the invariants of the right Cauchy-Green deformation tensor or w.r.t. the principal stretches. An instance of a Framework has to be finalized by the application on a Space.

Note Define your own material model formulation with manual, automatic or symbolic differentiation with the help of your favourite package, e.g. PyTorch, JAX, Tensorflow, TensorTRAX, SymPy, etc.

First, let's import hyperelastic (and its math module).

import hyperelastic as hel
import hyperelastic.math as hm

Invariant-based material formulations

A minimal template for an invariant-based material formulation applied on the distortional space:

class MyInvariantsModel:
    def gradient(self, I1, I2, I3, statevars):
        """The gradient as the partial derivative of the strain energy function w.r.t.
        the invariants of the right Cauchy-Green deformation tensor."""

        # user code
        dWdI1 = None
        dWdI2 = None
        dWdI3 = None

        return dWdI1, dWdI2, dWdI3, statevars

    def hessian(self, I1, I2, I3, statevars_old):
        """The hessian as the second partial derivatives of the strain energy function
        w.r.t. the invariants of the right Cauchy-Green deformation tensor."""

        # user code
        d2WdI1I1 = None
        d2WdI2I2 = None
        d2WdI3I3 = None
        d2WdI1I2 = None
        d2WdI2I3 = None
        d2WdI1I3 = None

        return d2WdI1I1, d2WdI2I2, d2WdI3I3, d2WdI1I2, d2WdI2I3, d2WdI1I3


model = MyInvariantsModel()
framework = hel.InvariantsFramework(model)
umat = hel.DistortionalSpace(framework)

Available isotropic hyperelastic invariant-based material formulations

The typical polynomial-based material formulations (Neo-Hooke, Mooney-Rivlin, Yeoh) are all available as submodels of the third order deformation material formulation.

Principal stretch-based material formulations

A minimal template for a principal stretch-based material formulation applied on the distortional space:

class MyStretchesModel:
    def gradient(self, λ, statevars):
        """The gradient as the partial derivative of the strain energy function w.r.t.
        the principal stretches."""

        # user code
        dWdλ1, dWdλ2, dWdλ3 = 0 * λ

        return [dWdλ1, dWdλ2, dWdλ3], statevars

    def hessian(self, λ, statevars_old):
        """The hessian as the second partial derivatives of the strain energy function
        w.r.t. the principal stretches."""

        # user code
        d2Wdλ1dλ1 = None
        d2Wdλ2dλ2 = None
        d2Wdλ3dλ3 = None
        d2Wdλ1dλ2 = None
        d2Wdλ2dλ3 = None
        d2Wdλ1dλ3 = None

        return d2Wdλ1dλ1, d2Wdλ2dλ2, d2Wdλ3dλ3, d2Wdλ1dλ2, d2Wdλ2dλ3, d2Wdλ1dλ3


model = MyStretchesModel()
framework = hel.StretchesFramework(model)
umat = hel.DistortionalSpace(framework)

Available isotropic hyperelastic stretch-based material formulations

Lab

By using matadi's LabIncompressible, numeric experiments on homogeneous incompressible loadcases on hyperelastic material formulations are performed. Ensure to have matadi installed - run pip install matadi in your terminal.

mooney_rivlin = hel.models.invariants.ThirdOrderDeformation(C10=0.3, C01=0.2)
framework = hel.InvariantsFramework(mooney_rivlin)
umat = hel.DistortionalSpace(framework)

import matadi

lab = matadi.LabIncompressible(umat, title="Mooney Rivlin")
data = lab.run(
    ux=True,
    bx=True,
    ps=True,
    stretch_min=0.7,
    stretch_max=2.5,
)
fig, ax = lab.plot(data, stability=True)

lab_mooney-rivlin

License

Hyperelastic - Constitutive hyperelastic material formulations for FElupe (C) 2023 Andreas Dutzler, Graz (Austria).

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hyperelastic-0.8.0.tar.gz (68.2 kB view details)

Uploaded Source

Built Distribution

hyperelastic-0.8.0-py3-none-any.whl (59.6 kB view details)

Uploaded Python 3

File details

Details for the file hyperelastic-0.8.0.tar.gz.

File metadata

  • Download URL: hyperelastic-0.8.0.tar.gz
  • Upload date:
  • Size: 68.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for hyperelastic-0.8.0.tar.gz
Algorithm Hash digest
SHA256 4822869cf49036c8d7ef1c50a825e8e5adc742e37e3995a13ea0dbed9beced0c
MD5 9e6df99d256325ace3c8d4c0358bac05
BLAKE2b-256 e69528e9b3de55eac3b9c8341ad10939882f009e326e8dfd0f3f8f8e8e9446fd

See more details on using hashes here.

File details

Details for the file hyperelastic-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hyperelastic-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 253d469ef2e6619a9d801875860a81542142467fb927cf29ae7ae8151e736e70
MD5 e760f213dae1ac01871f5b9371cdd653
BLAKE2b-256 c5c1c8bdb218d737c2700c958e81ce347fb6a764bde1c28a6ac2e4e0727b556a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page