SPHinXsys icon indicating copy to clipboard operation
SPHinXsys copied to clipboard

Material API and Shell kinematics

Open FabienPean-Virtonomy opened this issue 8 months ago • 3 comments

The issue I want to raise is twofold.

First, the balance equation for shell implicitly relies on material parameters to set some part of the Almansi strain measure

https://github.com/Xiangyu-Hu/SPHinXsys/blob/9b947a11bc956fc5153d6c31e6ca71be7202b131/src/shared/particle_dynamics/solid_dynamics/thin_structure_dynamics.cpp#L169

This is a problem for nonlinear or anisotropic materials where the notion does not exist per say (or on a per-step basis). The formulation is obtained from a linear elastic assumption according to the manuscript on arxiv. Besides the plane stress condition is enforced after. The strain tensor is only one of the measure that may be used for a material formulation.

We often end up to the point where we need $\mathbf{B}$ which clutter the material with

SPH::Mat3d B = (I-2*e).inverse();

Differentiating for Cauchy stress and 2nd PK stress creates an asymmetry in the interface which is confusing during development, in simpler cases one should be able to compute on as function of the other.

The second point is about the frame into which those values are expressed. The Almansi strain is given in current shell-local coordinates. However anisotropic materials rely on one or more preferred directions, often expressed in reference coordinates. With shell working in shell-local coordinates, it means those directions must be transformed at some point of the stress calculation pipeline.

https://github.com/Xiangyu-Hu/SPHinXsys/blob/9b947a11bc956fc5153d6c31e6ca71be7202b131/src/shared/particle_dynamics/solid_dynamics/thin_structure_dynamics.cpp#L161-L181

Currently SPHinXsys dodges calculation of Cauchy stress for complex materials (see elastic_solid.cpp)

Standard approach and my recommendation is to provide the deformation gradient in global coordinates as input to the material (and return stress in global coordinates). It allows a uniform material formulation independent of the kinematics (beam,shell,volume) and would allow to reuse existing implementation of material (because then $\sigma=\mathbf{FSF}^T/J$ is true)

virtual SPH::Mat3d StressPK2(SPH::Mat3d const& F, size_t i) = 0;
virtual SPH::Mat3d StressCauchy(SPH::Mat3d const& F, size_t i) {return F * StressPK2(F,i) * F.transpose() / F.determinant();};

FabienPean-Virtonomy avatar Jun 14 '24 12:06 FabienPean-Virtonomy