Skip to content

Commit 44898fb

Browse files
committed
Add elasticStrain data field in TetrahedronFEMForcefield
1 parent 66b9fd0 commit 44898fb

2 files changed

Lines changed: 9 additions & 0 deletions

File tree

Sofa/Component/SolidMechanics/FEM/Elastic/src/sofa/component/solidmechanics/fem/elastic/TetrahedronFEMForceField.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ class TetrahedronFEMForceField : public BaseLinearElasticityFEMForceField<DataTy
191191
SOFA_ATTRIBUTE_DEPRECATED__RENAME_DATA_IN_SOLIDMECHANICS_FEM_ELASTIC()
192192
core::objectmodel::lifecycle::RenamedData<VecCoord> _initialPoints;
193193

194+
Data< sofa::type::vector<type::Vec6d> > d_DJT;
195+
194196
Data< VecCoord > d_initialPoints; ///< Initial Position
195197
int method;
196198

Sofa/Component/SolidMechanics/FEM/Elastic/src/sofa/component/solidmechanics/fem/elastic/TetrahedronFEMForceField.inl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ TetrahedronFEMForceField<DataTypes>::TetrahedronFEMForceField()
4343
: _indexedElements(nullptr)
4444
, needUpdateTopology(false)
4545
, m_VonMisesColorMap(nullptr)
46+
, d_DJT(initData(&d_DJT, "elasticStrain", "Elastic Strain"))
4647
, d_initialPoints(initData(&d_initialPoints, "initialPoints", "Initial Position"))
4748
, d_method(initData(&d_method, std::string("large"), "method", "\"small\", \"large\" (by QR), \"polar\" or \"svd\" displacements"))
4849
, d_localStiffnessFactor(initData(&d_localStiffnessFactor, "localStiffnessFactor", "Allow specification of different stiffness per element. If there are N element and M values are specified, the youngModulus factor for element i would be localStiffnessFactor[i*M/N]"))
@@ -66,6 +67,7 @@ TetrahedronFEMForceField<DataTypes>::TetrahedronFEMForceField()
6667
, d_showElementGapScale(initData(&d_showElementGapScale, (Real)0.333, "showElementGapScale", "draw gap between elements (when showWireFrame is disabled) [0,1]: 0: no gap, 1: no element"))
6768
, d_updateStiffness(initData(&d_updateStiffness, false, "updateStiffness", "update structures (precomputed in init) using stiffness parameters in each iteration (set listening=1)"))
6869
{
70+
d_DJT.setGroup("Plastic parameters");
6971
data.initPtrData(this);
7072
this->addAlias(&d_assembling, "assembling");
7173
minYoung = 0.0;
@@ -385,6 +387,9 @@ inline void TetrahedronFEMForceField<DataTypes>::computeForce( Displacement &F,
385387
J[ 6][5]*Depl[ 6]+/*J[ 7][5]*Depl[ 7]*/ J[ 8][5]*Depl[ 8]+
386388
J[ 9][5]*Depl[ 9]+/*J[10][5]*Depl[10]*/ J[11][5]*Depl[11];
387389

390+
auto djt = helper::getWriteAccessor(d_DJT);
391+
djt->push_back(JtD);
392+
388393
// eventually remove a part of the strain to simulate plasticity
389394
if(d_plasticMaxThreshold.getValue() > 0 )
390395
{
@@ -1584,6 +1589,8 @@ inline void TetrahedronFEMForceField<DataTypes>::addForce (const core::Mechanica
15841589
VecDeriv& f = *d_f.beginEdit();
15851590
const VecCoord& p = d_x.getValue();
15861591

1592+
auto djt = helper::getWriteAccessor(d_DJT);
1593+
djt.clear();
15871594

15881595
f.resize(p.size());
15891596

0 commit comments

Comments
 (0)