Skip to content

Commit 9b2ab1b

Browse files
committed
Apply template method on BaseForceField
1 parent 585400c commit 9b2ab1b

File tree

4 files changed

+17
-26
lines changed

4 files changed

+17
-26
lines changed

src/BeamAdapter/component/forcefield/AdaptiveBeamForceFieldAndMass.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,7 @@ class AdaptiveBeamForceFieldAndMass : public core::behavior::Mass<DataTypes>
168168
}
169169

170170
using sofa::core::behavior::ForceField<DataTypes>::addKToMatrix;
171-
void addKToMatrix(const MechanicalParams* mparams,
172-
const MultiMatrixAccessor* matrix) override;
171+
void addKToMatrix(sofa::linearalgebra::BaseMatrix * matrix, SReal kFact, unsigned int &offset) override;
173172

174173
void computeStiffness(int beam, BeamLocalMatrices& beamLocalMatrices);
175174
void computeMass(int beam, BeamLocalMatrices& beamMatrices);

src/BeamAdapter/component/forcefield/AdaptiveBeamForceFieldAndMass.inl

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -691,12 +691,8 @@ void AdaptiveBeamForceFieldAndMass<DataTypes>::addDForce(const MechanicalParams*
691691

692692

693693
template<class DataTypes>
694-
void AdaptiveBeamForceFieldAndMass<DataTypes>::addKToMatrix(const MechanicalParams* mparams,
695-
const MultiMatrixAccessor* matrix)
694+
void AdaptiveBeamForceFieldAndMass<DataTypes>::addKToMatrix(sofa::linearalgebra::BaseMatrix * matrix, SReal kFact, unsigned int &offset)
696695
{
697-
MultiMatrixAccessor::MatrixRef matrixRef = matrix->getMatrix(mstate);
698-
Real k = (Real)mparams->kFactor();
699-
700696
unsigned int numBeams = l_interpolation->getNumBeams();
701697

702698
for (unsigned int b=0; b<numBeams; b++)
@@ -716,18 +712,18 @@ void AdaptiveBeamForceFieldAndMass<DataTypes>::addKToMatrix(const MechanicalPara
716712

717713
int index0[6], index1[6];
718714
for (int i=0;i<6;i++)
719-
index0[i] = matrixRef.offset+node0Idx*6+i;
715+
index0[i] = offset+node0Idx*6+i;
720716
for (int i=0;i<6;i++)
721-
index1[i] = matrixRef.offset+node1Idx*6+i;
717+
index1[i] = offset+node1Idx*6+i;
722718

723719
for (int i=0;i<6;i++)
724720
{
725721
for (int j=0;j<6;j++)
726722
{
727-
matrixRef.matrix->add(index0[i], index0[j], - K00(i,j)*k);
728-
matrixRef.matrix->add(index0[i], index1[j], - K01(i,j)*k);
729-
matrixRef.matrix->add(index1[i], index0[j], - K10(i,j)*k);
730-
matrixRef.matrix->add(index1[i], index1[j], - K11(i,j)*k);
723+
matrix->add(index0[i], index0[j], - K00(i,j)*kFact);
724+
matrix->add(index0[i], index1[j], - K01(i,j)*kFact);
725+
matrix->add(index1[i], index0[j], - K10(i,j)*kFact);
726+
matrix->add(index1[i], index1[j], - K11(i,j)*kFact);
731727
}
732728
}
733729
}

src/BeamAdapter/component/forcefield/AdaptiveInflatableBeamForceField.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,7 @@ class AdaptiveInflatableBeamForceField : public Mass<DataTypes>
200200
}
201201

202202
using sofa::core::behavior::ForceField<DataTypes>::addKToMatrix;
203-
void addKToMatrix(const MechanicalParams* mparams,
204-
const MultiMatrixAccessor* matrix) override;
203+
void addKToMatrix(sofa::linearalgebra::BaseMatrix * matrix, SReal kFact, unsigned int & offset) override;
205204

206205
void computeStiffness(int beam, BeamLocalMatrices& beamLocalMatrices);
207206
void computeMass(int beam, BeamLocalMatrices& beamMatrices);

src/BeamAdapter/component/forcefield/AdaptiveInflatableBeamForceField.inl

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -673,12 +673,9 @@ void AdaptiveInflatableBeamForceField<DataTypes>::addDForce(const MechanicalPara
673673

674674

675675
template<class DataTypes>
676-
void AdaptiveInflatableBeamForceField<DataTypes>::addKToMatrix(const MechanicalParams* mparams,
677-
const MultiMatrixAccessor* matrix)
676+
void AdaptiveInflatableBeamForceField<DataTypes>::addKToMatrix(sofa::linearalgebra::BaseMatrix * matrix,
677+
SReal kFact, unsigned int & offset)
678678
{
679-
MultiMatrixAccessor::MatrixRef matrixRef = matrix->getMatrix(mstate);
680-
Real k = (Real)mparams->kFactor();
681-
682679
unsigned int numBeams = l_interpolation->getNumBeams();
683680

684681
for (unsigned int b=0; b<numBeams; b++)
@@ -699,18 +696,18 @@ void AdaptiveInflatableBeamForceField<DataTypes>::addKToMatrix(const MechanicalP
699696

700697
int index0[6], index1[6];
701698
for (int i=0;i<6;i++)
702-
index0[i] = matrixRef.offset+node0Idx*6+i;
699+
index0[i] = offset+node0Idx*6+i;
703700
for (int i=0;i<6;i++)
704-
index1[i] = matrixRef.offset+node1Idx*6+i;
701+
index1[i] = offset+node1Idx*6+i;
705702

706703
for (int i=0;i<6;i++)
707704
{
708705
for (int j=0;j<6;j++)
709706
{
710-
matrixRef.matrix->add(index0[i], index0[j], - K00(i,j)*k);
711-
matrixRef.matrix->add(index0[i], index1[j], - K01(i,j)*k);
712-
matrixRef.matrix->add(index1[i], index0[j], - K10(i,j)*k);
713-
matrixRef.matrix->add(index1[i], index1[j], - K11(i,j)*k);
707+
matrix->add(index0[i], index0[j], - K00(i,j)*kFact);
708+
matrix->add(index0[i], index1[j], - K01(i,j)*kFact);
709+
matrix->add(index1[i], index0[j], - K10(i,j)*kFact);
710+
matrix->add(index1[i], index1[j], - K11(i,j)*kFact);
714711
}
715712
}
716713
}

0 commit comments

Comments
 (0)