CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Hyperelastic material (https://www.cfd-online.com/Forums/openfoam-programming-development/97056-hyperelastic-material.html)

ZKM February 8, 2012 02:36

Hyperelastic material
 
Hello,

How can I define a hyperelastic material? In another word how can I have access to deformation gradient to calculate the left Cauchy-Green deformation tensor?

I know that the Saint Venant–Kirchhoff model has been already implemented but it doesn't give any clue since this model doesn't use invariants or principle stretches.

Thanks in advance
ZKM

bigphil February 10, 2012 17:46

Hi ZKM,

You can see how other solid material models are implemented in $FOAM_SOLVERS/newStressAnalysis/materialModels/rheologyModel/rheologyLaws, in OpenFOAM-1.6-ext.

The deformation gradient is grad(U).T() in total Lagrangian solver like newStressedFoam.

Best regards,
Philip

ZKM February 11, 2012 14:56

Perfect Philip! Thanks!

I've never gone into that directory; It has very interesting stuffs.

Other questions:

Is there any specific operator for eigenvalue calculations in OpenFoam? I want to use it for calculating principle stretches.

Is there any documentation for rheologyLaws?

I saw cohesive zone there. Can it be used for crack modelling? Is there any example?

bigphil February 11, 2012 16:05

ZKM,

I have never calculated eigenvalues/principal stretches in OpenFOAM but I think the EigenSolver class can do what you want located at:
$FOAM_SRC/OpenFOAM/matrices/Matrix/tools/EigenSolver

Unfortunately there is no documentation that I know of for rheologyLaws (as yet).

Yes OpenFOAM can model crack propagation (search for Ivankovic in sciencedirect). Our research group here in Dublin work on many fracture mechanics problems with OpenFOAM.

I will prepare you a simple crack propagation case on Monday and post it here for you to try. Hopefully we will add our solid mechanics solvers (small strain, large strain, plasticity, cracks etc) to OpenFOAM-1.6-ext in the next year so more people can use them.

Philip

ZKM February 12, 2012 02:23

Thanks Philip for your response.

The example would be a great help.

bigphil February 14, 2012 18:30

ZKM,

I have emailed you the solver and test case. If anyone else wants it, just drop me a PM with your email.

I found some code for calculating principal stresses, you could do something similar to find the principal strains/stretches.
Code:


    Info << "\nCalculate maximal principal stress ..." << flush;
    // Principal stresses
    volVectorField sigmaMax
    (
        IOobject
        (
            "sigmaMax",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        mesh,
        dimensionedVector("sigmaMax", dimPressure, vector::zero)
    );
    vectorField& sigmaMaxI = sigmaMax.internalField();

    forAll (sigmaMaxI, cellI)
    {
        vector eValues = eigenValues(sigma.internalField()[cellI]);
        tensor eVectors = eigenVectors(sigma.internalField()[cellI]);

        scalar maxEValue = 0;
        label iMax = -1;
        forAll(eValues, i)
        {
            if (eValues[i] > maxEValue)
            {
                maxEValue = eValues[i];
                iMax = i;
            }
        }

        if (iMax != -1)
        {
            if (iMax == 0)
            {
                sigmaMaxI[cellI] = eVectors.x()*eValues.x();
            }
            else if (iMax == 1)
            {
                sigmaMaxI[cellI] = eVectors.y()*eValues.y();
            }
            else if (iMax == 2)
            {
                sigmaMaxI[cellI] = eVectors.z()*eValues.z();
            }
        }
    }

Philip

bigphil July 21, 2012 07:16

Quote:

Originally Posted by bigphil (Post 343870)
The deformation gradient is grad(U).T() in total Lagrangian solver like newStressedFoam.

Actually, I made a mistake, this is wrong.

The displacement gradient, also known as the Jacobian matrix (J) is grad(U):
J = fvc::grad(U)

The deformation gradient (F) is (I + J) which is (I + grad(U)):
F = (I + J) = I + fvc::grad(U)

Philip

bigphil December 11, 2013 09:07

Quote:

Originally Posted by bigphil (Post 372767)
The displacement gradient, also known as the Jacobian matrix (J) is grad(U):
J = fvc::grad(U)

The deformation gradient (F) is (I + J) which is (I + grad(U)):
F = (I + J) = I + fvc::grad(U)

Third time lucky:
The displacement gradient, also known as the transpose of the Jacobian matrix (J) is grad(U):
J = fvc::grad(U).T()

The deformation gradient (F) is (I + J) which is (I + grad(U).T()):
F = (I + J) = I + fvc::grad(U).T()

Phew.


All times are GMT -4. The time now is 05:42.