Skip to content

Conversation

@bakpaul
Copy link
Contributor

@bakpaul bakpaul commented Sep 17, 2024

This PR adds a first implementation of the augmented lagrangian collision (see A Surface-to-Surface Finite Element Algorithm for Large Deformation Frictional Contact).

To do so, because it is very close to the classical Unilateral constraint, I've tried to factorize code by adding a virtualization layer for both the constraints and the associated contact responses (see added class BaseContactLagrangianConstraint and BaseUnilateralContactResponse). It rely on a contact param template which is the only thing that differs in term of data and of course the type of ConstraintResolution used.

An example scene is introduced in the Demo folder, simply copying the falling beam example and replacing the response by the augmented lagrangian one.

There are still one todo for the future, even if this PR is already working on its own : adding the per-contact-point penalty modulation. This should be done by going back to the collision element using the DetectionOutput.elem attribute. This allows to go back to the topology. The only unknown is how to compute the element volume when the colliding topology is mapped to the simulated one.

[ci-depends-on https://github.com/SofaDefrost/ModelOrderReduction/pull/142]


By submitting this pull request, I acknowledge that
I have read, understand, and agree SOFA Developer Certificate of Origin (DCO).


Reviewers will merge this pull-request only if

  • it builds with SUCCESS for all platforms on the CI.
  • it does not generate new warnings.
  • it does not generate new unit test failures.
  • it does not generate new scene test failures.
  • it does not break API compatibility.
  • it is more than 1 week old (or has fast-merge label).

@bakpaul bakpaul added pr: status to review To notify reviewers to review this pull-request pr: new feature Implement a new feature pr: highlighted in next release Highlight this contribution in the notes of the upcoming release labels Sep 17, 2024
@bakpaul
Copy link
Contributor Author

bakpaul commented Sep 17, 2024

[ci-build][with-all-tests]

@bakpaul
Copy link
Contributor Author

bakpaul commented Sep 18, 2024

[ci-build][with-all-tests]

@sofabot
Copy link
Collaborator

sofabot commented Sep 18, 2024

[ci-depends-on] detected during build #5.

To unlock the merge button, you must

@bakpaul
Copy link
Contributor Author

bakpaul commented Sep 18, 2024

[ci-build][with-all-tests][force-full-build]

@sofabot
Copy link
Collaborator

sofabot commented Sep 18, 2024

[ci-depends-on] detected during build #6.

To unlock the merge button, you must

@fredroy fredroy force-pushed the test_augmented_lagrangians branch from e665d6f to 1fd7dfc Compare September 22, 2024 23:11
@sofabot
Copy link
Collaborator

sofabot commented Sep 22, 2024

[ci-depends-on] detected during build #7.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Sep 24, 2024

[ci-depends-on] detected during build #8.

To unlock the merge button, you must

@bakpaul
Copy link
Contributor Author

bakpaul commented Sep 24, 2024

[ci-build][with-all-tests][force-full-build]

@sofabot
Copy link
Collaborator

sofabot commented Sep 24, 2024

[ci-depends-on] detected during build #9.

To unlock the merge button, you must

@hugtalbot
Copy link
Contributor

[ci-build][with-all-tests][force-full-build]

@sofabot
Copy link
Collaborator

sofabot commented Sep 25, 2024

[ci-depends-on] detected during build #10.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Sep 30, 2024

[ci-depends-on] detected during build #11.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Sep 30, 2024

[ci-depends-on] detected during build #12.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Nov 12, 2024

[ci-depends-on] detected during build #13.

To unlock the merge button, you must

@bakpaul
Copy link
Contributor Author

bakpaul commented Nov 14, 2024

Ready to be reviewed !

@sofabot
Copy link
Collaborator

sofabot commented Dec 5, 2024

[ci-depends-on] detected during build #14.

To unlock the merge button, you must

@bakpaul bakpaul requested a review from alxbilger December 5, 2024 15:52
@sofabot
Copy link
Collaborator

sofabot commented Dec 9, 2024

[ci-depends-on] detected during build #15.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Dec 9, 2024

[ci-depends-on] detected during build #16.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Dec 10, 2024

[ci-depends-on] detected during build #17.

To unlock the merge button, you must

@hugtalbot hugtalbot added pr: status ready Approved a pull-request, ready to be squashed and removed pr: status to review To notify reviewers to review this pull-request labels Dec 11, 2024
@sofabot
Copy link
Collaborator

sofabot commented Dec 11, 2024

[ci-depends-on] detected during build #18.

To unlock the merge button, you must

, d_mu (initData(&d_mu, 0.0, "mu", "friction coefficient (0 for frictionless contacts)"))
, d_epsilon (initData(&d_epsilon, 0.0, "epsilon", "Penalty parameter. It can be think of as a proportional controller, the lagrange multiplier is augmented by the violation multiplied by this factor at each solving iteration."))
{

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly adding callback on both entry data to check their value when they're modified (possibly on the fly) by the user. That would allow to also remove other value checks in the code for my and epsilon

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those tests are only to check if there is friction. I don't think that relying on a boolean member that need to be kept updated is a better mechanism. It makes code more complex and error prone instead of testing it directly when needed. It is a simple double comparison, and it is not done that often that the computation difference makes it worth the potential errors.

@hugtalbot hugtalbot added pr: status to review To notify reviewers to review this pull-request and removed pr: status ready Approved a pull-request, ready to be squashed labels Dec 11, 2024
Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>
@sofabot
Copy link
Collaborator

sofabot commented Dec 13, 2024

[ci-depends-on] detected during build #19.

To unlock the merge button, you must

@sofabot
Copy link
Collaborator

sofabot commented Dec 13, 2024

[ci-depends-on] detected during build #20.

To unlock the merge button, you must

@bakpaul bakpaul requested a review from hugtalbot December 13, 2024 10:05
@hugtalbot hugtalbot added pr: status ready Approved a pull-request, ready to be squashed and removed pr: status to review To notify reviewers to review this pull-request labels Dec 13, 2024
@sofabot
Copy link
Collaborator

sofabot commented Dec 13, 2024

[ci-depends-on] detected during build #21.

To unlock the merge button, you must

@hugtalbot
Copy link
Contributor

[ci-build]

@sofabot
Copy link
Collaborator

sofabot commented Dec 13, 2024

[ci-depends-on] detected during build #22.

All dependencies are merged/closed and all ExternalProject pointers are up-to-date. Congrats! 👍

@hugtalbot hugtalbot merged commit 4eda9c7 into sofa-framework:master Dec 13, 2024
5 of 11 checks passed
bakpaul added a commit to bakpaul/sofa that referenced this pull request Jan 23, 2025
commit f8ed001
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Wed Jan 22 14:24:35 2025 +0100

    [tests] Template method design pattern from BaseTest in derived classes (sofa-framework#5162)

    * [tests] Template method design pattern from BaseTest in derived classes

    * rename

    * use the deprecated function

    * Make SetUp and TearDown final

    * fix SofaCarving test

    * missing override

commit 41bac37
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Tue Jan 21 16:21:12 2025 +0100

    [Helper] XCode: run in Debug (and load debug plugins) (sofa-framework#5168)

    remove deprecated cmake statement

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 723420c
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Tue Jan 21 16:18:00 2025 +0100

    [Project] Start dev phase v25.06 (sofa-framework#5218)

    * Add ChangeLog for v24.12

    * Bump dev version to v25.06.99

commit b445f57
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Tue Jan 21 16:16:25 2025 +0100

    [Helper] WriteAccessorVector: add resize method with default filler value (sofa-framework#5228)

    add resize with default filler value

commit 4ba3bbe
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Tue Jan 21 15:58:00 2025 +0100

    [Core] Move all LifeCycle classes in a dedicated namespace (sofa-framework#5225)

    Co-authored-by: Paul Baksic <30337881+bakpaul@users.noreply.github.com>

commit eb9fe59
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Mon Jan 20 05:45:39 2025 +0100

    [Type] Support structured binding for tuple-like types (sofa-framework#5208)

    * [Type] Support structured binding for tuple-like types

    * fix redefinition

    * fix test

commit aedc7ff
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Mon Jan 20 00:10:57 2025 +0100

    [Type] Simplification of the Rebind trait using concepts (sofa-framework#5200)

    * [Type] Simplification of the Rebind trait using concepts

    * fix

    * fix and test

    * parentheses

commit 1f11bee
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 12:39:13 2025 +0100

    [Type] Deprecate is_container trait (sofa-framework#5210)

commit 3635db7
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 08:19:18 2025 +0100

    [Type] Convert enable_if to concepts in fixed_array (sofa-framework#5205)

commit 1072217
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 05:42:59 2025 +0100

    [Type] Convert is_fixed_array trait to concept (sofa-framework#5209)

    Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>

commit d83d7ed
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 01:46:10 2025 +0100

    [Type] Convert is_vector trait to concept (sofa-framework#5201)

    * [Type] Concert is_vector trait to concept

    * fix

    * use the concept

commit 84e79d1
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 16 02:48:10 2025 +0100

    [Type] A concept for isRigidType (sofa-framework#5199)

    * [Type] A concept for isRigidType

    * fix

commit f28c570
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Wed Jan 15 14:29:40 2025 +0100

    [Helper] Fix warning in SelectableItem (sofa-framework#5163)

    * [Helper] Fix warning in SelectableItem

    * simpler code

    * simplify trait using concept

    * remove unused include

    ---------

    Co-authored-by: Alex Bilger <alexbilger0@gmail.com>

commit bf730d2
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Wed Jan 15 05:48:20 2025 +0100

    [SolidMechanics] Make Data innerRadius of BeamFEMFF not required (sofa-framework#5203)

commit 964136a
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Thu Jan 9 16:37:53 2025 +0100

    [Mapping] Fix draw in RigidMapping (sofa-framework#5204)

    * [Mapping] Fix draw in RigidMapping

    * Apply suggestions from code review

    Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>

    ---------

    Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>

commit 61d4924
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Thu Jan 9 14:35:29 2025 +0100

    [Engine] Fix drawLines from ValuesFromPositions (sofa-framework#5206)

commit 88320b8
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 9 07:39:53 2025 +0100

    [Config] Introduce SOFA modules data structure (sofa-framework#5148)

    * Introduce SOFA modules data structure

    * apply everywhere

    * don't shadow with unique name

    * try to fix

    * generate unit tests automatically

    * remove dependency to string and make modules constexpr

    * restore conversion to string

    * constexpr

    * remove ambiguity

    * include modules.h only when necessary

commit 1cbfa03
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 9 06:09:39 2025 +0100

    [DefaultType] Aliases defined twice (sofa-framework#5198)

commit 589ea72
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 9 01:34:09 2025 +0100

    [Core] Isolate the intrusive reference counting (sofa-framework#5149)

    * [Core] Isolate the intrusive reference counting

    * add unit tests

commit 7b3729f
Author: erik pernod <erik.pernod@gmail.com>
Date:   Wed Jan 8 23:33:30 2025 +0100

    [Topology] Add function in BaseMeshTopology to compute all topology containers (sofa-framework#3368)

    * [Topology] rename method initTpology into initContainers and provide access to it from BaseMeshTopology

    * [MultiThreading] Replace call to getter to init topology by call to initContainers

    * Fix MeshTopology initContainer

    * REname initContainers into computeCrossElementBuffers

    * restore comment

    * Fix compilation

    * Update MeshTopology.cpp

    * Update MeshTopology.cpp

    * Update applications/plugins/MultiThreading/src/MultiThreading/component/collision/detection/algorithm/ParallelBVHNarrowPhase.cpp

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    * Update MeshTopology, Keep method ComputeCorssElementBuffer to be call only if needed. Not called at init

    * Update MeshTopology.h

    * Update MeshTopology.cpp

    * Update MeshTopology.h

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 292f5bc
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Wed Jan 8 23:32:44 2025 +0100

    [tools] Update post-install fixup to fix rpath (sofa-framework#5197)

    Update post-install fixup to fix rpath

commit 0bc3fb9
Author: Damien Marchal <damien.marchal@univ-lille1.fr>
Date:   Mon Jan 6 15:30:09 2025 +0100

    [GUI.Qt] Fix invalid color of the warning sign on object (sofa-framework#5190)

    Fix invalid color of the warning sign on object.

commit b5c1f17
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Mon Dec 30 12:28:46 2024 +0100

    [all] Fix additional warnings (sofa-framework#5180)

    * [all] Fix additional warnings

    * Update Sofa/Component/Collision/Response/Mapper/src/sofa/component/collision/response/mapper/init.cpp

    Co-authored-by: erik pernod <erik.pernod@gmail.com>

    * Update Sofa/Component/Collision/Response/Mapper/src/sofa/component/collision/response/mapper/init.cpp

    ---------

    Co-authored-by: erik pernod <erik.pernod@gmail.com>

commit 82c4ea2
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Sun Dec 29 04:08:56 2024 +0900

    [Multithreading] Apply new factory registration mechanism (sofa-framework#5178)

    * apply new register mechanism to multithreading

    * fix test

    * Apply suggestions from code review (update descriptions)

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit bcc5a16
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Sat Dec 28 00:26:20 2024 +0900

    [Helper] PluginManager: support loading from Non-MSVC Multi-Configuration Build (sofa-framework#5133)

    * remove collections from searchable paths

    * cmake: pass config info and use it for search paths

    * remove typo in template parameters

    * add support for minsizerel

    * test existence of directory before browsing

    * just use the string

commit 07ce419
Author: erik pernod <erik.pernod@gmail.com>
Date:   Fri Dec 27 10:57:04 2024 +0100

    [Sofa.GL] Fix OglModel crash when texture file is not found (sofa-framework#5182)

    [OglModel] Backup fix on texture not found crash

commit 3711b9e
Author: erik pernod <erik.pernod@gmail.com>
Date:   Fri Dec 27 10:56:45 2024 +0100

    [Core] Fix VisualState.h compilation on windows (sofa-framework#5181)

    [Visual] Fix VisualState.h compilation

commit 238851c
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Dec 26 22:01:07 2024 +0100

    [SofaCUDA] Explicit the CUDA C++ standard version to 17 (sofa-framework#5165)

commit 30844d0
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Thu Dec 26 18:36:11 2024 +0100

    [Plugins] Remove unsupported plugins: InvertibleFVM, SofaSimpleGUI and SensableEmulation (sofa-framework#5175)

    Remove unsupported plugins

commit e2b9428
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Mon Dec 23 05:52:16 2024 +0100

    [Testing] Mitigate plugin import leakage between tests (sofa-framework#5161)

    * [Testing] ScopedPlugin

    * add version with lists

    * unload plugins at tear down

    * use ScopedPlugin in a test as an example

    * support multiple calls to loadPlugins

commit ca66554
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Dec 20 13:31:30 2024 +0100

    [Config] Upgrade to C++20 (sofa-framework#5111)

commit 642cdc6
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Fri Dec 20 04:54:50 2024 +0100

    [Lagrangian] Remove unused data numericalTolerance in BLC (sofa-framework#5164)

commit 3e508d3
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Dec 20 04:53:09 2024 +0100

    [Type] Test and clean BoundingBox (sofa-framework#5138)

    [Type] Test for BoundingBox

commit 3ecd69c
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Wed Dec 18 17:24:59 2024 +0100

    [SofaCUDA] Remove NO_CUDA condition (sofa-framework#5171)

commit 4aca268
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Wed Dec 18 21:28:35 2024 +0900

    [Core, Simulation.Core] Registration: (re)enable deprecation warnings (sofa-framework#5155)

    * enable deprecation warnings for RegisterObject

    * enable runtime deprecation warnings

    * re enable disabled tests

    * fix typo

    * fix units tests

    * expect a warning when loading pluginA

    * load plugins once (avoiding registering several times)

    * add more info when warning the user of a deprecated registration

    * set warnings only if dev mode is enabled (SOFA_WITH_DEVTOOLS enabled)

    * apply new mechanism registration to AugmentedLagrangianConstraint

commit 99df0a2
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Tue Dec 17 15:26:53 2024 +0100

    [Visual] Move, rename and clean OglCylinderModel (sofa-framework#5124)

    * move files

    * depreciation

    * rename

    * fix color management

    * remove string to color conversion and use the one from RGBAColor

    * remove unused private methods

    * cleaning

    * component change

    * remove Index alias

    * change the description

    * cache drawTool

    * remove calls to removed functions

commit 02b3366
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Tue Dec 17 02:06:24 2024 +0100

    [All] Fix visualisation (sofa-framework#5152)

    * Fix visualisation

    * Remove inheritance from visual model; Remove the use of visitor for VisualStyle and instead call the fwdDraw directly in the two visualVisitor

    * Change methods name

    * Update Sofa/framework/Core/src/sofa/core/visual/BaseVisualStyle.h

    Co-authored-by: Alex Bilger <alxbilger@users.noreply.github.com>

    ---------

    Co-authored-by: Alex Bilger <alxbilger@users.noreply.github.com>

commit 4eda9c7
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Fri Dec 13 15:52:24 2024 +0100

    [Constraint.Lagrangian] Add augmented lagrangians (sofa-framework#5003)

    * Add AugmentedLagrangianConstraint response

    * accelerate GS convergence

    * Added virtualization layer for constraints, but linker issue arise. Need to fix it then add virutalization in Contact response

    * FIX linking

    * Add virtualization layer for contact response

    * Fix OBBCapsule

    * Fix Distance grid and simplify fix for OBB

    * Fix default friction used by tests

    * Try fix macos compilation

    * Add tag for augmented lagrangian

    * add details to the description of epsilon data

    * remove multiple registration in factory

    * MAke parameters struct final

    * USe data accessor instead

    * fix compilation

    * Try fix scene tests

    * Apply suggestions from code review

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    * Add reference

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 8ba12f0
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Fri Dec 13 03:22:11 2024 +0100

    [examples] Make symplectic option explicit (sofa-framework#5159)

    [Explicit] Make symplectic option explicit

commit 6ae972f
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Wed Dec 11 13:56:40 2024 +0100

    [Constraint.Projective] Make LinearVelocityProjectiveConstraint work with FreeMotionAL (sofa-framework#5025)

    * Implement missing methods to work in FreeMotionAnimationLoop and add feature to keep the constraint applied after all the key event have passed

    * Apply suggestions from code review

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    * Use constexpr when possible

    * Add example scene

    * Simplify the example and added the complete scene in the demo folder

    * Refactor finished mechanism and fix behavior when finished

    * Update scenes and regression tests

    * Put the boolean test on wether the constraint is still active or not inside a method

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 6141aac
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Wed Dec 11 18:29:09 2024 +0900

    [All] Remove spam warnings (sofa-framework#5156)

    * fix duplicated macro

    * fix unused variables

    * use new vecids
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr: highlighted in next release Highlight this contribution in the notes of the upcoming release pr: new feature Implement a new feature pr: status ready Approved a pull-request, ready to be squashed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants