{"id":23524216,"url":"https://github.com/alxbilger/eigenlinearsolvers","last_synced_at":"2026-01-11T16:49:11.809Z","repository":{"id":42066691,"uuid":"472766738","full_name":"alxbilger/EigenLinearSolvers","owner":"alxbilger","description":"SOFA plugin wrapping the Eigen linear solvers into SOFA components","archived":false,"fork":false,"pushed_at":"2022-04-14T09:15:45.000Z","size":57,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-08T00:11:06.371Z","etag":null,"topics":["eigen","sofa-framework"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alxbilger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-22T12:54:12.000Z","updated_at":"2022-05-31T11:30:41.000Z","dependencies_parsed_at":"2022-08-12T03:51:09.132Z","dependency_job_id":null,"html_url":"https://github.com/alxbilger/EigenLinearSolvers","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FEigenLinearSolvers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FEigenLinearSolvers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FEigenLinearSolvers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FEigenLinearSolvers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alxbilger","download_url":"https://codeload.github.com/alxbilger/EigenLinearSolvers/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246785453,"owners_count":20833494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eigen","sofa-framework"],"created_at":"2024-12-25T18:15:01.168Z","updated_at":"2026-01-11T16:49:11.783Z","avatar_url":"https://github.com/alxbilger.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EigenLinearSolvers\nSOFA plugin wrapping the Eigen linear solvers into SOFA components\n\n- SOFA: [https://www.sofa-framework.org/](https://www.sofa-framework.org/)\n- Eigen: [https://eigen.tuxfamily.org/](https://eigen.tuxfamily.org/)\n\n## Components\n\n### EigenConjugateGradient\n\nThis linear solver component is based on `Eigen::ConjugateGradient` (https://eigen.tuxfamily.org/dox/classEigen_1_1ConjugateGradient.html).\nIts equivalent in SOFA is `CGLinearSolver` (without preconditioner), or `ShewchukPCGLinearSolver` (with preconditioner).\n\nThe available templates are:\n- EigenSparseMatrixd\n- CompressedRowSparseMatrixMat3x3d\n- CompressedRowSparseMatrixd\n\nIn XML, the declaration of this component looks like:\n```xml\n\u003cEigenConjugateGradient template=\"EigenSparseMatrixd\" iterations=\"1000\" tolerance=\"1e-9\" preconditioner=\"diagonal\"/\u003e\n```\n\nA [scene example](https://github.com/alxbilger/EigenLinearSolvers/blob/master/scenes/FEMBAR_EigenConjugateGradient.scn) is available.\n\n### EigenSimplicialLDLT\n\nThis linear solver component is based on `Eigen::SimplicialLDLT` (https://eigen.tuxfamily.org/dox/classEigen_1_1SimplicialLDLT.html).\nIts equivalent in SOFA is `SparseLDLSolver`.\n\nThe available templates are:\n- EigenSparseMatrixd\n- CompressedRowSparseMatrixMat3x3d\n- CompressedRowSparseMatrixd\n\nIn XML, the declaration of this component looks like:\n```xml\n\u003cEigenSimplicialLDLT template=\"CompressedRowSparseMatrixMat3x3d\"/\u003e\n```\n\nScene examples are available:\n- [FEMBAR_EigenSimplicialLDLT.scn](https://github.com/alxbilger/EigenLinearSolvers/blob/master/scenes/FEMBAR_EigenSimplicialLDLT.scn)\n- [Cylinder_EigenSimplicialLDLT.scn](https://github.com/alxbilger/EigenLinearSolvers/blob/master/scenes/Cylinder_EigenSimplicialLDLT.scn)\n\n## Choice of the template\n\nEigenConjugateGradient and EigenSimplicialLDLT can have the choice of a template based on an Eigen sparse matrix, or a SOFA type CompressedRowSparseMatrix.\nBoth templates have different approaches and can have an impact on the performances.\nIf possible, the use of `CompressedRowSparseMatrixMat3x3d` is preferable as it brings significant speed up of the matrix assembly.\n\n## Performances\n\nThe following measures are given on a indicative basis.\n\n### FEMBAR_EigenSimplicialLDLT.scn\n\nBoth solvers have been templated with `CompressedRowSparseMatrixMat3x3d`.\nThe measurements were made without GUI, running 1000 time steps.\n\n| Measure               | SparseLDLSolver | EigenSimplicialLDLT |\n|-----------------------|-----------------|---------------------|\n| total (s)             | 3.79887         | 2.45837             |\n| total (FPS)           | 263.236         | 406.774             |\n| MBKBuild (average ms) | 0.53            | 0.52                |\n| MBKSolve (average ms) | 3.07            | 1.74                |\n\nThe scene is available in [FEMBAR_EigenSimplicialLDLT.scn](https://github.com/alxbilger/EigenLinearSolvers/blob/master/scenes/FEMBAR_EigenSimplicialLDLT.scn).\n\n### Cylinder_EigenSimplicialLDLT.scn\n\nBoth solvers have been templated with `CompressedRowSparseMatrixMat3x3d`.\nThe measurements were made without GUI, running 1000 time steps.\n\n| Measure               | SparseLDLSolver | EigenSimplicialLDLT |\n|-----------------------|-----------------|---------------------|\n| total (s)             | 13.3605         | 10.5815             |\n| total (FPS)           | 74.8476         | 94.5048             |\n| MBKBuild (average ms) | 5.79            | 5.84                |\n| MBKSolve (average ms) | 7.02            | 4.16                |\n\nThe scene is available in [Cylinder_EigenSimplicialLDLT.scn](https://github.com/alxbilger/EigenLinearSolvers/blob/master/scenes/Cylinder_EigenSimplicialLDLT.scn)\n\n### DiamondRobot.py3scn\n\nBoth solvers have been templated with `CompressedRowSparseMatrixMat3x3d`.\nThe measurements were made without GUI, running 200 time steps.\n\n| Measure               | SparseLDLSolver | EigenSimplicialLDLT |\n|-----------------------|-----------------|---------------------|\n| total (s)             | 3.9661          | 3.30239             |\n| total (FPS)           | 50.4274         | 60.5622             |\n| MBKBuild (average ms) | 9.57            | 9.07                |\n| MBKSolve (average ms) | 7.75            | 4.96                |\n\nThe scene is available in [DiamondRobot.py3scn.scn](https://github.com/SofaDefrost/SoftRobots/blob/master/docs/sofapython3/tutorials/DiamondRobot/DiamondRobot.py3scn)\n\n## Build Instructions\n\nAs any SOFA plugin, follow the build procedure on [sofa-framework.org/community/doc/plugins/build-a-plugin-from-sources/](https://www.sofa-framework.org/community/doc/plugins/build-a-plugin-from-sources/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falxbilger%2Feigenlinearsolvers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falxbilger%2Feigenlinearsolvers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falxbilger%2Feigenlinearsolvers/lists"}