Skip to content

Commit 04ce00f

Browse files
fredroyhugtalbotepernod
authored
[All] Eigen: fix cmake to find Eigen 5 and fix compilation (#5769)
* fix cmake file to find eigen v5 * fix compilation with eigenv5 --------- Co-authored-by: Hugo <hugo.talbot@sofa-framework.org> Co-authored-by: erik pernod <erik.pernod@gmail.com>
1 parent 01ac844 commit 04ce00f

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

Sofa/Component/SolidMechanics/FEM/Elastic/src/sofa/component/solidmechanics/fem/elastic/TriangularFEMForceField.inl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -609,16 +609,15 @@ void TriangularFEMForceField<DataTypes>::computePrincipalStrain(Index elementInd
609609
{
610610
SOFA_UNUSED(elementIndex);
611611

612-
Eigen::Matrix<Real, -1, -1> e;
613-
e.resize(2, 2);
612+
Eigen::Matrix<Real, 2, 2> e;
614613

615614
e(0,0) = triangleInfo.strain[0];
616615
e(0,1) = triangleInfo.strain[2];
617616
e(1,0) = triangleInfo.strain[2];
618617
e(1,1) = triangleInfo.strain[1];
619618

620619
//compute eigenvalues and eigenvectors
621-
Eigen::JacobiSVD svd(e, Eigen::ComputeThinU | Eigen::ComputeThinV);
620+
Eigen::JacobiSVD<Eigen::Matrix<Real, 2, 2>> svd(e, Eigen::ComputeThinU | Eigen::ComputeThinV);
622621

623622
const auto& S = svd.singularValues();
624623
const auto& V = svd.matrixV();
@@ -640,8 +639,7 @@ void TriangularFEMForceField<DataTypes>::computePrincipalStress(Index elementInd
640639
{
641640
SOFA_UNUSED(elementIndex);
642641

643-
Eigen::Matrix<Real, -1, -1> e;
644-
e.resize(2, 2);
642+
Eigen::Matrix<Real, 2, 2> e;
645643

646644
//voigt notation to symmetric matrix
647645
e(0,0) = triangleInfo.stress[0];
@@ -650,7 +648,7 @@ void TriangularFEMForceField<DataTypes>::computePrincipalStress(Index elementInd
650648
e(1,1) = triangleInfo.stress[1];
651649

652650
//compute eigenvalues and eigenvectors
653-
Eigen::JacobiSVD svd(e, Eigen::ComputeThinU | Eigen::ComputeThinV);
651+
Eigen::JacobiSVD<Eigen::Matrix<Real, 2, 2>> svd(e, Eigen::ComputeThinU | Eigen::ComputeThinV);
654652

655653
const auto& S = svd.singularValues();
656654
const auto& V = svd.matrixV();

Sofa/Component/SolidMechanics/FEM/HyperElastic/src/sofa/component/solidmechanics/fem/hyperelastic/material/PlasticMaterial.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,15 @@ void PlasticMaterial::computeDStress(Vec3& dStress, Vec3& dStrain)
8989

9090
SReal PlasticMaterial::computeVonMisesStrain(Vec3 &strain)
9191
{
92-
Eigen::Matrix<SReal, -1, -1> e;
93-
e.resize(2, 2);
92+
Eigen::Matrix<SReal, 2, 2> e;
9493

9594
e(0,0) = strain[0];
9695
e(0,1) = strain[2];
9796
e(1,0) = strain[2];
9897
e(1,1) = strain[1];
9998

10099
//compute eigenvalues and eigenvectors
101-
const Eigen::JacobiSVD svd(e, Eigen::ComputeThinU | Eigen::ComputeThinV);
100+
const Eigen::JacobiSVD<Eigen::Matrix<SReal, 2, 2>> svd(e, Eigen::ComputeThinU | Eigen::ComputeThinV);
102101

103102
const auto& S = svd.singularValues();
104103

cmake/Modules/FindEigen3.cmake

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,27 @@ if(NOT Eigen3_FIND_VERSION)
3838
endif(NOT Eigen3_FIND_VERSION)
3939

4040
macro(_eigen3_check_version)
41-
file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
42-
43-
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
44-
set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
45-
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
46-
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
47-
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
48-
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
49-
50-
set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
41+
# file Version exists from Eigen3 5.0.0
42+
if (EXISTS "${EIGEN3_INCLUDE_DIR}/Eigen/Version")
43+
file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/Version" _eigen3_version_header)
44+
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
45+
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
46+
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
47+
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
48+
string(REGEX MATCH "define[ \t]+EIGEN_PATCH_VERSION[ \t]+([0-9]+)" _eigen3_patch_version_match "${_eigen3_version_header}")
49+
set(EIGEN3_PATCH_VERSION "${CMAKE_MATCH_1}")
50+
set(EIGEN3_VERSION ${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}.${EIGEN3_PATCH_VERSION})
51+
else()
52+
file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
53+
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
54+
set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
55+
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
56+
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
57+
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
58+
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
59+
set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
60+
endif()
61+
5162
if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
5263
set(EIGEN3_VERSION_OK FALSE)
5364
else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})

0 commit comments

Comments
 (0)