Skip to content

Commit

Permalink
Merge pull request #960 from epernod/topo_mapping
Browse files Browse the repository at this point in the history
[SofaTopologyMapping] Fix crashes in Tetra2TriangleTopologicalMapping
  • Loading branch information
guparan committed Mar 22, 2019
2 parents 2b87383 + 2534cab commit 5e7d846
Show file tree
Hide file tree
Showing 7 changed files with 385 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<?xml version="1.0" ?>
<Node name="root" dt="0.05" showBoundingTree="0" gravity="0 0 0">
<VisualStyle displayFlags="showBehaviorModels showVisual" />
<CollisionPipeline verbose="0" />
Expand All @@ -21,7 +22,6 @@
<Tetra2TriangleTopologicalMapping input="@../Container" output="@Container" noNewTriangles="1" />
<TriangularFEMForceField name="FEM" youngModulus="60" poissonRatio="0.3" method="large" />
<TriangularBendingSprings name="FEM-Bend" stiffness="300" damping="1.0" />
<TrianglePressureForceField normal="0 0 1" dmin="0.9" dmax="1.1" pressure="0.4 0 0" />
<Node name="Visu">
<OglModel name="Visual" color="blue" />
<IdentityMapping input="@../../Volume" output="@Visual" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
<BruteForceDetection name="N2" />
<DefaultContactManager response="default" />
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<MeshGmshLoader name="loader" filename="mesh/cube_low_res.msh" />

<Node name="TT">
<EulerImplicitSolver name="cg_odesolver" rayleighStiffness="0.1" rayleighMass="0.1" />
<CGLinearSolver iterations="25" name="linear solver" />
<MeshGmshLoader name="loader" filename="mesh/cube_low_res.msh" />
<MechanicalObject src="@loader" name="Volume" />
<TetrahedronSetTopologyContainer name="Tetra_topo" tetrahedra="@loader.tetrahedra" />

<MechanicalObject src="@../loader" name="Volume" translation="4 0 0"/>
<TetrahedronSetTopologyContainer name="Tetra_topo" tetrahedra="@../loader.tetrahedra" />
<TetrahedronSetTopologyModifier name="Modifier" />
<TetrahedronSetTopologyAlgorithms name="TopoAlgo" template="Vec3d" />
<TetrahedronSetGeometryAlgorithms name="GeomAlgo" template="Vec3d" />
<TetrahedronSetGeometryAlgorithms name="GeomAlgo" template="Vec3d" drawTetrahedra="0" showTetrahedraIndices="0"/>

<DiagonalMass massDensity="1.0" />
<FixedConstraint name="fix" indices="7 8 14 15" />
Expand All @@ -26,7 +28,10 @@
<TriangleSetTopologyAlgorithms template="Vec3d" name="TopoAlgo" />
<TriangleSetGeometryAlgorithms template="Vec3d" name="GeomAlgo" drawTriangles="1" drawNormals="1" drawNormalLength="1.0"/>
<Tetra2TriangleTopologicalMapping input="@../Tetra_topo" output="@Triangle_topo" printLog="1"/>

<TriangularFEMForceField name="FEM" youngModulus="60" poissonRatio="0.3" method="large" />
<TriangularBendingSprings name="FEM-Bend" stiffness="300" damping="1.0" />

<Node name="Visu">
<OglModel name="Visual" color="yellow" />
<IdentityMapping input="@../" output="@Visual" />
Expand All @@ -35,4 +40,39 @@

<TopologicalChangeProcessor listening="1" filename="RemovingTetra2TriangleProcess.txt" />
</Node>


<Node name="TT_2">
<EulerImplicitSolver name="cg_odesolver" rayleighStiffness="0.1" rayleighMass="0.1" />
<CGLinearSolver iterations="25" name="linear solver" />

<MechanicalObject src="@../loader" name="Volume" translation="-4 0 0"/>
<TetrahedronSetTopologyContainer name="Tetra_topo" tetrahedra="@../loader.tetrahedra" />
<TetrahedronSetTopologyModifier name="Modifier" />
<TetrahedronSetTopologyAlgorithms name="TopoAlgo" template="Vec3d" />
<TetrahedronSetGeometryAlgorithms name="GeomAlgo" template="Vec3d" drawTetrahedra="0" showTetrahedraIndices="0"/>

<DiagonalMass massDensity="1.0" />
<FixedConstraint name="fix" indices="7 8 14 15" />
<TetrahedralCorotationalFEMForceField name="FEM" youngModulus="360" poissonRatio="0.3" method="large" />

<Node name="T_2">
<TriangleSetTopologyContainer name="Triangle_topo" />
<TriangleSetTopologyModifier name="Modifier" />
<TriangleSetTopologyAlgorithms template="Vec3d" name="TopoAlgo" />
<TriangleSetGeometryAlgorithms template="Vec3d" name="GeomAlgo" drawTriangles="1" drawNormals="1" drawNormalLength="1.0"/>
<Tetra2TriangleTopologicalMapping input="@../Tetra_topo" output="@Triangle_topo" printLog="1"/>

<TriangularFEMForceField name="FEM" youngModulus="60" poissonRatio="0.3" method="large" />
<TriangularBendingSprings name="FEM-Bend" stiffness="300" damping="1.0" />

<Node name="Visu_2">
<OglModel name="Visual" color="yellow" />
<IdentityMapping input="@../" output="@Visual" />
</Node>
</Node>

<TopologicalChangeProcessor listening="1" filename="RemovingTetra2TriangleProcess2.txt" />
</Node>

</Node>
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
T= 0.1
REMOVE= 1
0
T= 0.15
REMOVE= 1
0
T= 0.2
REMOVE= 1
0
T= 0.25
REMOVE= 1
0
T= 0.3
REMOVE= 1
0
T= 0.35
REMOVE= 1
0
T= 0.4
REMOVE= 1
0
T= 0.45
REMOVE= 1
0
T= 0.50
REMOVE= 1
0
T= 0.55
REMOVE= 1
0
T= 0.6
REMOVE= 1
0
T= 0.65
REMOVE= 1
0
T= 0.7
REMOVE= 1
0
T= 0.75
REMOVE= 1
0
T= 0.8
REMOVE= 1
0
T= 0.85
REMOVE= 1
0
T= 0.9
REMOVE= 1
0
T= 0.95
REMOVE= 1
0
T= 1.0
REMOVE= 1
0
T= 1.05
REMOVE= 1
0
T= 1.1
REMOVE= 1
0
T= 1.15
REMOVE= 1
0
T= 1.2
REMOVE= 1
0
T= 1.25
REMOVE= 1
0
T= 1.3
REMOVE= 1
0
T= 1.35
REMOVE= 1
0
T= 1.4
REMOVE= 1
0
T= 1.45
REMOVE= 1
0
T= 1.5
REMOVE= 1
0
T= 1.55
REMOVE= 1
0
T= 1.6
REMOVE= 1
0
T= 1.65
REMOVE= 1
0
T= 1.7
REMOVE= 1
0
T= 1.75
REMOVE= 1
0
T= 1.8
REMOVE= 1
0
T= 1.85
REMOVE= 1
0
T= 1.9
REMOVE= 1
0
T= 1.95
REMOVE= 1
0
T= 2.0
REMOVE= 1
0
T= 2.05
REMOVE= 1
0
T= 2.1
REMOVE= 1
0
T= 2.15
REMOVE= 1
0
T= 2.2
REMOVE= 1
0
T= 2.25
REMOVE= 1
0
T= 2.3
REMOVE= 1
0
T= 2.35
REMOVE= 1
0
T= 2.4
REMOVE= 1
0
T= 2.45
REMOVE= 1
0
T= 2.5
REMOVE= 1
0
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?xml version="1.0" ?>
<!-- Automatic Tetrahedron removing with Tetra2Triangle mapping example: Element removed are define in: ./RemovingTetra2TriangleProcess.txt -->
<Node name="root" dt="0.01" showBoundingTree="0" gravity="0 -9 0">
<VisualStyle displayFlags="showBehaviorModels showVisual showWireframe hideForceFields" />
<DefaultPipeline verbose="0" />
<BruteForceDetection name="N2" />
<DefaultContactManager response="default" />
<MinProximityIntersection name="Proximity" alarmDistance="0.8" contactDistance="0.5" />
<MeshGmshLoader name="loader" filename="mesh/cube_low_res.msh" />

<Node name="TT">
<EulerImplicitSolver name="cg_odesolver" rayleighStiffness="0.1" rayleighMass="0.1" />
<CGLinearSolver iterations="25" name="linear solver" />

<MechanicalObject src="@../loader" name="Volume" translation="4 0 0"/>
<TetrahedronSetTopologyContainer name="Tetra_topo" tetrahedra="@../loader.tetrahedra" />
<TetrahedronSetTopologyModifier name="Modifier" />
<TetrahedronSetTopologyAlgorithms name="TopoAlgo" template="Vec3d" />
<TetrahedronSetGeometryAlgorithms name="GeomAlgo" template="Vec3d" />

<DiagonalMass massDensity="1.0" />
<FixedConstraint name="fix" indices="7 8 14 15" />
<TetrahedralCorotationalFEMForceField name="FEM" youngModulus="360" poissonRatio="0.3" method="large" />

<Node name="T_out">
<include href="Objects/TriangleSetTopology.xml" src="@" tags=" " />
<Tetra2TriangleTopologicalMapping input="@../Tetra_topo" output="@Container" noNewTriangles="1" />
<TriangularFEMForceField name="FEM" youngModulus="60" poissonRatio="0.3" method="large" />
<TriangularBendingSprings name="FEM-Bend" stiffness="300" damping="1.0" />
<Node name="Visu">
<OglModel name="Visual" color="blue" />
<IdentityMapping input="@../../Volume" output="@Visual" />
</Node>
</Node>
<Node name="T_in">
<include href="Objects/TriangleSetTopology.xml" src="@" tags=" " />
<Tetra2TriangleTopologicalMapping input="@../Tetra_topo" output="@Container" noInitialTriangles="1" />
<Node name="Visu">
<OglModel name="Visual" color="red" />
<IdentityMapping input="@../../Volume" output="@Visual" />
</Node>
</Node>

<TopologicalChangeProcessor listening="1" filename="RemovingTetra2TriangleProcess.txt" />
</Node>


<Node name="TT">
<EulerImplicitSolver name="cg_odesolver" rayleighStiffness="0.1" rayleighMass="0.1" />
<CGLinearSolver iterations="25" name="linear solver" />

<MechanicalObject src="@../loader" name="Volume" translation="-4 0 0"/>
<TetrahedronSetTopologyContainer name="Tetra_topo" tetrahedra="@../loader.tetrahedra" />
<TetrahedronSetTopologyModifier name="Modifier" />
<TetrahedronSetTopologyAlgorithms name="TopoAlgo" template="Vec3d" />
<TetrahedronSetGeometryAlgorithms name="GeomAlgo" template="Vec3d" />

<DiagonalMass massDensity="1.0" />
<FixedConstraint name="fix" indices="7 8 14 15" />
<TetrahedralCorotationalFEMForceField name="FEM" youngModulus="360" poissonRatio="0.3" method="large" />

<Node name="T_out">
<include href="Objects/TriangleSetTopology.xml" src="@" tags=" " />
<Tetra2TriangleTopologicalMapping input="@../Tetra_topo" output="@Container" noNewTriangles="1" />
<TriangularFEMForceField name="FEM" youngModulus="60" poissonRatio="0.3" method="large" />
<TriangularBendingSprings name="FEM-Bend" stiffness="300" damping="1.0" />
<Node name="Visu">
<OglModel name="Visual" color="blue" />
<IdentityMapping input="@../../Volume" output="@Visual" />
</Node>
</Node>
<Node name="T_in">
<include href="Objects/TriangleSetTopology.xml" src="@" tags=" " />
<Tetra2TriangleTopologicalMapping input="@../Tetra_topo" output="@Container" noInitialTriangles="1" />
<Node name="Visu">
<OglModel name="Visual" color="red" />
<IdentityMapping input="@../../Volume" output="@Visual" />
</Node>
</Node>

<TopologicalChangeProcessor listening="1" filename="RemovingTetra2TriangleProcess2.txt" />
</Node>

</Node>
8 changes: 6 additions & 2 deletions examples/RegressionTopologyScenes.regression-tests
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,25 @@
Components/topology/Tetra2TriangleTopologicalMapping.scn 30 1e-4 1

### Topology Modifier scenes ###
# Triangle and Triangle2Edge tests
Components/topology/TopologicalModifiers/RemovingTrianglesProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/RemovingTriangle2EdgeProcess.scn 30 1e-4
Components/topology/TopologicalModifiers/AddingTrianglesProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/AddingTriangle2EdgeProcess.scn 30 1e-4 1

# Tetra and Tetra2Triangle tests
Components/topology/TopologicalModifiers/RemovingTetraProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/RemovingTetra2TriangleProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/RemovingTetra2TriangleProcess_withOptions.scn 30 1e-4 1
Components/topology/TopologicalModifiers/AddingTetraProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/AddingTetra2TriangleProcess.scn 30 1e-4 1

# Hexa and Hexa2Quand tests
Components/topology/TopologicalModifiers/RemovingHexa2QuadProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/RemovingQuad2TriangleProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/AddingHexa2QuadProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/AddingQuad2TriangleProcess.scn 30 1e-4 1

#never worked: Components/topology/TopologicalModifiers/RemovingHexa2TetraProcess.scn

Components/topology/TopologicalModifiers/AddingHexa2QuadProcess.scn 30 1e-4 1
Components/topology/TopologicalModifiers/AddingQuad2TriangleProcess.scn 30 1e-4 1

Loading

0 comments on commit 5e7d846

Please sign in to comment.