Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f8c3eea
introduce applyJacobianVectorProduct method and deprecated applyJ method
alxbilger Oct 6, 2026
7e819c6
apply changes to Mapping class
alxbilger Oct 6, 2026
7cd193d
compatibility
alxbilger Oct 7, 2026
0c912b1
adapt Multi2Mapping
alxbilger Oct 7, 2026
3f800ff
adapt MultiMapping
alxbilger Oct 7, 2026
7148d7f
replacement in base typed classes
alxbilger Oct 7, 2026
75b22e3
adapt RigidMapping
alxbilger Oct 7, 2026
b965019
adapt BaseNonLinearMapping
alxbilger Oct 7, 2026
311967f
adapt BarycentricMapping
alxbilger Oct 7, 2026
1075253
adapt LineSetSkinningMapping
alxbilger Oct 7, 2026
e094d5b
adapt TubularMapping
alxbilger Oct 7, 2026
9841e64
adapt CenterOfMassMapping
alxbilger Oct 7, 2026
01d3377
adapt VoidMapping
alxbilger Oct 7, 2026
b29ce70
adapt BeamLinearMapping
alxbilger Oct 7, 2026
d5bfa05
adapt IdentityMapping
alxbilger Oct 7, 2026
290f425
adapt SubsetMapping
alxbilger Oct 7, 2026
f6a0bfa
adapt DistanceToPlaneMapping
alxbilger Oct 7, 2026
9e5767d
adapt SkinningMapping
alxbilger Oct 7, 2026
67a7ded
adapt HexahedronCompositeFEMMapping
alxbilger Oct 7, 2026
63fffed
adapt IdentityMultiMapping
alxbilger Oct 7, 2026
326be5a
adapt SubsetMultiMapping
alxbilger Oct 7, 2026
6502428
adapt CenterOfMassMultiMapping
alxbilger Oct 7, 2026
1d66945
adapt DistanceMultiMapping
alxbilger Oct 7, 2026
726fd0d
adapt Mesh2PointMechanicalMapping
alxbilger Oct 7, 2026
feb940b
adapt SimpleTesselatedTetraMechanicalMapping
alxbilger Oct 7, 2026
8ce8eb5
fix
alxbilger Oct 7, 2026
a95a676
adapt CenterOfMassMulti2Mapping
alxbilger Oct 7, 2026
89f2e29
adapt DeformableOnRigidFrameMapping
alxbilger Oct 7, 2026
2b3dd2c
adapt BeamLinearMapping_mt
alxbilger Oct 7, 2026
23c8e34
adapt Sofa.CUDA
alxbilger Oct 7, 2026
55b93d2
adapt tests
alxbilger Oct 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@ class BarycentricMapping : public LinearMapping<TIn, TOut>
void init() override;
void reinit() override;
void apply(const core::MechanicalParams *mparams, Data< typename Out::VecCoord >& out, const Data< typename In::VecCoord >& in) override;
void applyJ(const core::MechanicalParams *mparams, Data< typename Out::VecDeriv >& out, const Data< typename In::VecDeriv >& in) override;
void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn,
const DataVecCoord_t<In>& positionIn) override;
void applyJT(const core::MechanicalParams *mparams, Data< typename In::VecDeriv >& out, const Data< typename Out::VecDeriv >& in) override;
void applyJT(const core::ConstraintParams *cparams, Data< typename In::MatrixDeriv >& out, const Data< typename Out::MatrixDeriv >& in) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -303,14 +303,19 @@ void BarycentricMapping<TIn, TOut>::apply(const core::MechanicalParams * mparams
}

template <class TIn, class TOut>
void BarycentricMapping<TIn, TOut>::applyJ (const core::MechanicalParams * mparams, Data< typename Out::VecDeriv >& _out, const Data< typename In::VecDeriv >& in)
void BarycentricMapping<TIn, TOut>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn,
const DataVecCoord_t<In>& positionIn)
{
SOFA_UNUSED(mparams);
SOFA_UNUSED(positionIn);

if (d_mapper != nullptr)
{
auto outWriteAccessor = sofa::helper::getWriteAccessor(_out);
d_mapper->applyJ(outWriteAccessor.wref(), in.getValue());
auto outWriteAccessor = sofa::helper::getWriteAccessor(tangentOut);
d_mapper->applyJ(outWriteAccessor.wref(), tangentIn.getValue());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ class BeamLinearMapping : public LinearMapping<TIn, TOut>

void apply(const core::MechanicalParams *mparams, Data< typename Out::VecCoord >& out, const Data< typename In::VecCoord >& in) override;

void applyJ(const core::MechanicalParams *mparams, Data< typename Out::VecDeriv >& out, const Data< typename In::VecDeriv >& in) override;
void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn,
const DataVecCoord_t<In>& positionIn) override;

void applyJT(const core::MechanicalParams *mparams, Data< typename In::VecDeriv >& out, const Data< typename Out::VecDeriv >& in) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,15 @@ void BeamLinearMapping<TIn, TOut>::apply(const core::MechanicalParams * /*mparam
}

template <class TIn, class TOut>
void BeamLinearMapping<TIn, TOut>::applyJ(const core::MechanicalParams * /*mparams*/, Data< typename Out::VecDeriv >& _out, const Data< typename In::VecDeriv >& _in)
void BeamLinearMapping<TIn, TOut>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams, DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn, const DataVecCoord_t<In>& positionIn)
{
helper::WriteAccessor< Data< typename Out::VecDeriv > > out = _out;
helper::ReadAccessor< Data< typename In::VecDeriv > > in = _in;
SOFA_UNUSED(mparams);
SOFA_UNUSED(positionIn);

helper::WriteAccessor< Data< typename Out::VecDeriv > > out = tangentOut;
helper::ReadAccessor< Data< typename In::VecDeriv > > in = tangentIn;

out.resize(points.size());
for(unsigned int i=0; i<points.size(); i++)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,11 @@ class CenterOfMassMapping : public LinearMapping<TIn, TOut>
void apply( const sofa::core::MechanicalParams* mparams, OutDataVecCoord& out, const InDataVecCoord& in) override;
//void apply( typename Out::VecCoord& out, const typename In::VecCoord& in );

void applyJ( const sofa::core::MechanicalParams* mparams, OutDataVecDeriv& out, const InDataVecDeriv& in) override;
//void applyJ( typename Out::VecDeriv& out, const typename In::VecDeriv& in );
void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn,
const DataVecCoord_t<In>& positionIn) override;

void applyJT( const sofa::core::MechanicalParams* mparams, InDataVecDeriv& out, const OutDataVecDeriv& in) override;
//void applyJT( typename In::VecDeriv& out, const typename Out::VecDeriv& in );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,16 @@ void CenterOfMassMapping<TIn, TOut>::apply( const sofa::core::MechanicalParams*
outData.endEdit();
}


template <class TIn, class TOut>
void CenterOfMassMapping<TIn, TOut>::applyJ( const sofa::core::MechanicalParams* mparams, OutDataVecDeriv& outData, const InDataVecDeriv& inData)
void CenterOfMassMapping<TIn, TOut>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams, DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn, const DataVecCoord_t<In>& positionIn)
{
SOFA_UNUSED(mparams);
SOFA_UNUSED(positionIn);

OutVecDeriv& childForces = *outData.beginEdit();
const InVecDeriv& parentForces = inData.getValue();
OutVecDeriv& childForces = *tangentOut.beginEdit();
const InVecDeriv& parentForces = tangentIn.getValue();

if(!masses || totalMass==0.0)
{
Expand All @@ -106,10 +108,9 @@ void CenterOfMassMapping<TIn, TOut>::applyJ( const sofa::core::MechanicalParams*

childForces[0] = outF / totalMass;

outData.endEdit();
tangentOut.endEdit();
}


template <class TIn, class TOut>
void CenterOfMassMapping<TIn, TOut>::applyJT( const sofa::core::MechanicalParams* mparams, InDataVecDeriv& outData, const OutDataVecDeriv& inData)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,13 @@ class CenterOfMassMulti2Mapping : public LinearMulti2Mapping<TIn1, TIn2, TOut>
const core::MechanicalParams* mparams, const type::vector<OutDataVecCoord*>& dataVecOutPos,
const type::vector<const In1DataVecCoord*>& dataVecIn1Pos ,
const type::vector<const In2DataVecCoord*>& dataVecIn2Pos) override;
void applyJ(
const core::MechanicalParams* mparams, const type::vector< OutDataVecDeriv*>& dataVecOutVel,
const type::vector<const In1DataVecDeriv*>& dataVecIn1Vel,
const type::vector<const In2DataVecDeriv*>& dataVecIn2Vel) override;
virtual void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
const type::vector< DataVecDeriv_t<Out>*>& dataVecTangentOut,
const type::vector<const DataVecDeriv_t<In1>*>& dataVecTangentIn1,
const type::vector<const DataVecDeriv_t<In2>*>& dataVecTangentIn2,
const type::vector<const DataVecCoord_t<In1>*>& dataVecPositionIn1,
const type::vector<const DataVecCoord_t<In2>*>& dataVecPositionIn2) override;
void applyJT(
const core::MechanicalParams* mparams, const type::vector< In1DataVecDeriv*>& dataVecOut1Force,
const type::vector< In2DataVecDeriv*>& dataVecOut2Force,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,31 +94,34 @@ void CenterOfMassMulti2Mapping< TIn1, TIn2, TOut >::apply(
for(unsigned int i=0; i<dataVecOutPos.size(); i++)
dataVecOutPos[i]->endEdit();
}

template <class TIn1, class TIn2, class TOut>
void CenterOfMassMulti2Mapping< TIn1, TIn2, TOut >::applyJ(
const core::MechanicalParams* mparams, const type::vector< OutDataVecDeriv*>& dataVecOutVel,
const type::vector<const In1DataVecDeriv*>& dataVecIn1Vel,
const type::vector<const In2DataVecDeriv*>& dataVecIn2Vel)
//applyJ(const type::vector< OutVecDeriv*>& outDeriv, const type::vector<const In1VecDeriv*>& inDeriv1, const type::vector<const In2VecDeriv*>& inDeriv2)
void CenterOfMassMulti2Mapping<TIn1, TIn2, TOut>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
const type::vector<DataVecDeriv_t<Out>*>& dataVecTangentOut,
const type::vector<const DataVecDeriv_t<In1>*>& dataVecTangentIn1,
const type::vector<const DataVecDeriv_t<In2>*>& dataVecTangentIn2,
const type::vector<const DataVecCoord_t<In1>*>& dataVecPositionIn1,
const type::vector<const DataVecCoord_t<In2>*>& dataVecPositionIn2)
{
SOFA_UNUSED(mparams);
SOFA_UNUSED(dataVecPositionIn1);
SOFA_UNUSED(dataVecPositionIn2);

assert( dataVecOutVel.size() == 1 );
assert( dataVecTangentOut.size() == 1 );
typedef typename type::vector<In1Deriv>::iterator iter_deriv1;
typedef typename type::vector<In2Deriv>::iterator iter_deriv2;

//Not optimized at all...
type::vector<OutVecDeriv*> outDeriv;
for(unsigned int i=0; i<dataVecOutVel.size(); i++)
outDeriv.push_back(dataVecOutVel[i]->beginEdit());
for(unsigned int i=0; i<dataVecTangentOut.size(); i++)
outDeriv.push_back(dataVecTangentOut[i]->beginEdit());

type::vector<const In1VecDeriv*> inDeriv1;
for(unsigned int i=0; i<dataVecIn1Vel.size(); i++)
inDeriv1.push_back(&dataVecIn1Vel[i]->getValue());
for(unsigned int i=0; i<dataVecTangentIn1.size(); i++)
inDeriv1.push_back(&dataVecTangentIn1[i]->getValue());
type::vector<const In2VecDeriv*> inDeriv2;
for(unsigned int i=0; i<dataVecIn2Vel.size(); i++)
inDeriv2.push_back(&dataVecIn2Vel[i]->getValue());
for(unsigned int i=0; i<dataVecTangentIn2.size(); i++)
inDeriv2.push_back(&dataVecTangentIn2[i]->getValue());

SReal px=0,py=0,pz=0;

Expand Down Expand Up @@ -155,8 +158,8 @@ void CenterOfMassMulti2Mapping< TIn1, TIn2, TOut >::applyJ(
OutDataTypes::set((*outVecDeriv)[0], px,py,pz);

//Really Not optimized at all...
for(unsigned int i=0; i<dataVecOutVel.size(); i++)
dataVecOutVel[i]->endEdit();
for(unsigned int i=0; i<dataVecTangentOut.size(); i++)
dataVecTangentOut[i]->endEdit();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,11 @@ class CenterOfMassMultiMapping : public LinearMultiMapping<TIn, TOut>
void apply(const core::MechanicalParams* mparams, const type::vector<OutDataVecCoord*>& dataVecOutPos, const type::vector<const InDataVecCoord*>& dataVecInPos) override;
//virtual void apply(const type::vector<OutVecCoord*>& outPos, const vecConstInVecCoord& inPos);

void applyJ(const core::MechanicalParams* mparams, const type::vector<OutDataVecDeriv*>& dataVecOutVel, const type::vector<const InDataVecDeriv*>& dataVecInVel) override;
//virtual void applyJ(const type::vector<OutVecDeriv*>& outDeriv, const type::vector<const InVecDeriv*>& inDeriv);
virtual void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
const type::vector< DataVecDeriv_t<Out>*>& dataVecTangentOut,
const type::vector<const DataVecDeriv_t<In>*>& dataVecTangentIn,
const type::vector<const DataVecCoord_t<In>*>& dataVecPositionIn) override;

void applyJT(const core::MechanicalParams* mparams, const type::vector<InDataVecDeriv*>& dataVecOutForce, const type::vector<const OutDataVecDeriv*>& dataVecInForce) override;
//virtual void applyJT(const type::vector< InVecDeriv*>& outDeriv, const type::vector<const OutVecDeriv*>& inDeriv);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,22 +66,26 @@ void CenterOfMassMultiMapping< TIn, TOut >::apply(const core::MechanicalParams*
dataVecOutPos[i]->endEdit();
}


template <class TIn, class TOut>
void CenterOfMassMultiMapping< TIn, TOut >::applyJ(const core::MechanicalParams* mparams, const type::vector<OutDataVecDeriv*>& dataVecOutVel, const type::vector<const InDataVecDeriv*>& dataVecInVel)
void CenterOfMassMultiMapping<TIn, TOut>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
const type::vector<DataVecDeriv_t<Out>*>& dataVecTangentOut,
const type::vector<const DataVecDeriv_t<In>*>& dataVecTangentIn,
const type::vector<const DataVecCoord_t<In>*>& dataVecPositionIn)
{
SOFA_UNUSED(mparams);
SOFA_UNUSED(dataVecPositionIn);

typedef typename InVecDeriv::iterator iter_deriv;

//Not optimized at all...
type::vector<OutVecDeriv*> outDeriv;
for(unsigned int i=0; i<dataVecOutVel.size(); i++)
outDeriv.push_back(dataVecOutVel[i]->beginEdit());
for(unsigned int i=0; i<dataVecTangentOut.size(); i++)
outDeriv.push_back(dataVecTangentOut[i]->beginEdit());

type::vector<const InVecDeriv*> inDeriv;
for(unsigned int i=0; i<dataVecInVel.size(); i++)
inDeriv.push_back(&dataVecInVel[i]->getValue());
for(unsigned int i=0; i<dataVecTangentIn.size(); i++)
inDeriv.push_back(&dataVecTangentIn[i]->getValue());

assert( outDeriv.size() == 1 );

Expand All @@ -98,8 +102,8 @@ void CenterOfMassMultiMapping< TIn, TOut >::applyJ(const core::MechanicalParams*
OutDataTypes::set((*outVecDeriv)[0], x,y,z);

//Really Not optimized at all...
for(unsigned int i=0; i<dataVecOutVel.size(); i++)
dataVecOutVel[i]->endEdit();
for(unsigned int i=0; i<dataVecTangentOut.size(); i++)
dataVecTangentOut[i]->endEdit();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,13 @@ class DeformableOnRigidFrameMapping : public LinearMulti2Mapping<TIn, TInRoot, T

//ApplyJ
void applyJ( OutVecDeriv& out, const InVecDeriv& in, const InRootVecDeriv* inroot );
void applyJ(
const core::MechanicalParams* /* mparams */, const type::vector< OutDataVecDeriv*>& dataVecOutVel,
const type::vector<const InDataVecDeriv*>& dataVecInVel,
const type::vector<const InRootDataVecDeriv*>& dataVecInRootVel) override;
virtual void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
const type::vector< DataVecDeriv_t<Out>*>& dataVecTangentOut,
const type::vector<const DataVecDeriv_t<TIn>*>& dataVecTangentIn1,
const type::vector<const DataVecDeriv_t<TInRoot>*>& dataVecTangentIn2,
const type::vector<const DataVecCoord_t<TIn>*>& dataVecPositionIn1,
const type::vector<const DataVecCoord_t<TInRoot>*>& dataVecPositionIn2) override;

//ApplyJT Force
void applyJT( InVecDeriv& out, const OutVecDeriv& in, InRootVecDeriv* outroot );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,26 +281,33 @@ void DeformableOnRigidFrameMapping<TIn, TInRoot, TOut>::applyJ( typename Out::Ve
}

template <class TIn, class TInRoot, class TOut>
void DeformableOnRigidFrameMapping<TIn, TInRoot, TOut>::applyJ(
const core::MechanicalParams* /* mparams */, const type::vector< OutDataVecDeriv*>& dataVecOutVel,
const type::vector<const InDataVecDeriv*>& dataVecInVel,
const type::vector<const InRootDataVecDeriv*>& dataVecInRootVel)
void DeformableOnRigidFrameMapping<TIn, TInRoot, TOut>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
const type::vector<DataVecDeriv_t<Out>*>& dataVecTangentOut,
const type::vector<const DataVecDeriv_t<TIn>*>& dataVecTangentIn1,
const type::vector<const DataVecDeriv_t<TInRoot>*>& dataVecTangentIn2,
const type::vector<const DataVecCoord_t<TIn>*>& dataVecPositionIn1,
const type::vector<const DataVecCoord_t<TInRoot>*>& dataVecPositionIn2)
{
if(dataVecOutVel.empty() || dataVecInVel.empty())
SOFA_UNUSED(mparams);
SOFA_UNUSED(dataVecPositionIn1);
SOFA_UNUSED(dataVecPositionIn2);

if(dataVecTangentOut.empty() || dataVecTangentIn1.empty())
return;

const InRootVecDeriv* inroot = nullptr;

//We need only one input In model and input Root model (if present)
OutVecDeriv& out = *dataVecOutVel[0]->beginEdit();
const InVecDeriv& in = dataVecInVel[0]->getValue();
OutVecDeriv& out = *dataVecTangentOut[0]->beginEdit();
const InVecDeriv& in = dataVecTangentIn1[0]->getValue();

if (!dataVecInRootVel.empty())
inroot = &dataVecInRootVel[0]->getValue();
if (!dataVecTangentIn2.empty())
inroot = &dataVecTangentIn2[0]->getValue();

applyJ(out,in, inroot);

dataVecOutVel[0]->endEdit();
dataVecTangentOut[0]->endEdit();
}

template <class TIn, class TInRoot, class TOut>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@ class DistanceToPlaneMapping : public LinearMapping<TIn, defaulttype::Vec1Types>

void apply(const core::MechanicalParams *mparams, Data<VecCoord_t<TOut>>& out, const Data<VecCoord_t<TIn>>& in) override;

void applyJ(const core::MechanicalParams *mparams, Data<VecDeriv_t<TOut>>& out, const Data<VecDeriv_t<TIn>>& in) override;
void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
DataVecDeriv_t<TOut>& tangentOut,
const DataVecDeriv_t<TIn>& tangentIn,
const DataVecCoord_t<TIn>& positionIn) override;

void applyJT(const core::MechanicalParams *mparams, Data<VecDeriv_t<TIn>>& out, const Data<VecDeriv_t<TOut>>& in) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,17 +100,19 @@ void DistanceToPlaneMapping<TIn>::apply(const core::MechanicalParams *mparams, D
writeOut[i] = type::dot(TIn::getCPos(readIn[i]),planeNormal) - planeDistanceToOrigin;
}
}

template <class TIn>
void DistanceToPlaneMapping<TIn>::applyJ(const core::MechanicalParams *mparams, Data<VecDeriv_t<TOut>>& out, const Data<VecDeriv_t<TIn>>& in)
void DistanceToPlaneMapping<TIn>::doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams, DataVecDeriv_t<TOut>& tangentOut,
const DataVecDeriv_t<TIn>& tangentIn, const DataVecCoord_t<TIn>& positionIn)
{
SOFA_UNUSED(mparams);
SOFA_UNUSED(positionIn);

if (this-> d_componentState.getValue() != sofa::core::objectmodel::ComponentState::Valid)
return;

auto writeOut = helper::getWriteAccessor(out);
const auto readIn = helper::getReadAccessor(in);
auto writeOut = helper::getWriteAccessor(tangentOut);
const auto readIn = helper::getReadAccessor(tangentIn);
const auto planeNormal = d_planeNormal.getValue();

for ( unsigned i = 0; i<readIn.size(); i++ )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,11 @@ class IdentityMapping : public LinearMapping<TIn, TOut>

void apply(const core::MechanicalParams *mparams, Data<VecCoord>& out, const Data<InVecCoord>& in) override;

void applyJ(const core::MechanicalParams *mparams, Data<VecDeriv>& out, const Data<InVecDeriv>& in) override;
void doApplyJacobianVectorProduct(
const core::MechanicalParams* mparams,
DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn,
const DataVecCoord_t<In>& positionIn) override;

void applyJT(const core::MechanicalParams *mparams, Data<InVecDeriv>& out, const Data<VecDeriv>& in) override;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,18 @@ void IdentityMapping<TIn, TOut>::apply(const core::MechanicalParams * /*mparams*
}

template <class TIn, class TOut>
void IdentityMapping<TIn, TOut>::applyJ(const core::MechanicalParams * /*mparams*/, Data<VecDeriv>& dOut, const Data<InVecDeriv>& dIn)
void IdentityMapping<TIn, TOut>::doApplyJacobianVectorProduct(const core::MechanicalParams* mparams,
DataVecDeriv_t<Out>& tangentOut,
const DataVecDeriv_t<In>& tangentIn,
const DataVecCoord_t<In>& positionIn)
{
helper::WriteOnlyAccessor< Data<VecDeriv> > out = dOut;
helper::ReadAccessor< Data<InVecDeriv> > in = dIn;
SOFA_UNUSED(mparams);
SOFA_UNUSED(positionIn);

for( size_t i=0 ; i<out.size() ; ++i)
helper::WriteOnlyAccessor< Data<VecDeriv> > out = tangentOut;
helper::ReadAccessor< Data<InVecDeriv> > in = tangentIn;

for (size_t i = 0; i < out.size(); ++i)
{
core::eq(out[i], in[i]);
}
Expand Down
Loading
Loading