From da544b14fcf0c1d3929d6982d1bbe300990f8d11 Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Wed, 18 Mar 2026 10:32:14 +0900 Subject: [PATCH 1/3] remove buffer and use read accessor --- .../component/mapping/AdaptiveBeamMapping.inl | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl index abe14d30f..0bc4406a4 100644 --- a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl +++ b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl @@ -302,23 +302,13 @@ void AdaptiveBeamMapping< TIn, TOut>::applyJ(const core::MechanicalParams* mpara auto out = sofa::helper::getWriteOnlyAccessor(dOut); const InVecDeriv& in= dIn.getValue(); - - Data& dataInX = *this->getFromModel()->write(sofa::core::vec_id::write_access::position); - auto x = sofa::helper::getWriteOnlyAccessor(dataInX); + + const Data& dataInX = *this->getFromModel()->read(sofa::core::vec_id::read_access::position); + const InVecCoord& x = dataInX.getValue(); if (d_useCurvAbs.getValue() && !d_contactDuplicate.getValue()) computeDistribution(); - // TODO: check if m_isXBufferUsed is set somewhere else - // As far as I could see, m_isXBufferUsed is never set to true - InVecCoord xBuf2{}; - if (m_isXBufferUsed) - { - // TODO : solve this problem during constraint motion propagation !! - xBuf2 = x.ref(); - x.wref() = m_xBuffer; - } - // should not be necessary if apply() was called first if (!m_isSubMapping) { @@ -348,7 +338,7 @@ void AdaptiveBeamMapping< TIn, TOut>::applyJ(const core::MechanicalParams* mpara Deriv vResult(sofa::type::NOINIT); - applyJonPoint(elementID, vDOF0, vDOF1, vResult, x.ref()); + applyJonPoint(elementID, vDOF0, vDOF1, vResult, x); if (m_isSubMapping) { @@ -370,12 +360,6 @@ void AdaptiveBeamMapping< TIn, TOut>::applyJ(const core::MechanicalParams* mpara assert(taskScheduler); simulation::forEachRange(execution, *taskScheduler, m_pointBeamDistribution.begin(), m_pointBeamDistribution.end(), applyJ_impl); - - if(m_isXBufferUsed) - { - x.wref() = xBuf2; - m_isXBufferUsed = false; - } } From de44fb0ef8342aa94654b879e5d88cf31170471d Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Wed, 18 Mar 2026 10:37:56 +0900 Subject: [PATCH 2/3] same in applyJT --- src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl index 0bc4406a4..366773336 100644 --- a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl +++ b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl @@ -417,9 +417,6 @@ void AdaptiveBeamMapping< TIn, TOut>::applyJT(const core::ConstraintParams* cpar const Data& dataInX = *this->getFromModel()->read(sofa::core::vec_id::read_access::position); const InVecCoord& x = dataInX.getValue(); - m_isXBufferUsed = false; - m_xBuffer = x ; - //////////// What's for ?? it seems not useful////////// bool proximity_lever = false; if (d_proximity.getValue() > 0.0) From d2ddd52116c95784b15cc2a373bee134cc9eab07 Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Wed, 18 Mar 2026 10:41:14 +0900 Subject: [PATCH 3/3] remove completely the members related to the non-used buffer mechanism --- src/BeamAdapter/component/mapping/AdaptiveBeamMapping.cpp | 2 -- src/BeamAdapter/component/mapping/AdaptiveBeamMapping.h | 3 --- src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl | 2 -- 3 files changed, 7 deletions(-) diff --git a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.cpp b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.cpp index 1ee514202..0e7d13409 100644 --- a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.cpp +++ b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.cpp @@ -53,8 +53,6 @@ SOFA_BEAMADAPTER_API void AdaptiveBeamMapping::apply( auto out = sofa::helper::getWriteOnlyAccessor(dOut); const InVecCoord& in= dIn.getValue(); - m_isXBufferUsed=false; - // When using an adaptatif controller, one need to redistribute the points at each time step if (d_useCurvAbs.getValue() && !d_contactDuplicate.getValue()) computeDistribution(); diff --git a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.h b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.h index daf7ceb4e..b9dfc3c7c 100644 --- a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.h +++ b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.h @@ -191,9 +191,6 @@ class AdaptiveBeamMapping : public Mapping TopologyContainer* m_topology; - bool m_isXBufferUsed; - typename In::VecCoord m_xBuffer; - type::vector< PosPointDefinition > m_pointBeamDistribution; /// for continuous_friction_contact: diff --git a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl index 366773336..ed3af7f09 100644 --- a/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl +++ b/src/BeamAdapter/component/mapping/AdaptiveBeamMapping.inl @@ -205,8 +205,6 @@ void AdaptiveBeamMapping< TIn, TOut>::apply(const MechanicalParams* mparams, Dat auto out = sofa::helper::getWriteOnlyAccessor(dOut); const InVecCoord& in = dIn.getValue(); - m_isXBufferUsed=false; - // When using an adaptatif controller, one need to redistribute the points at each time step { SCOPED_TIMER("computeDistribution");