diff --git a/CMakeLists.txt b/CMakeLists.txt
index 43ef656eeac22617ca63c077839cdf64da499713..0f2651e5ed8be1515f61c146a95e9d1a934fefb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 11)
 
 find_package(TTKVTK REQUIRED)
 
-add_executable(projet-stage main.cpp triangulate.cpp vtkOFFReader.cxx)
+add_executable(projet-stage main.cpp operation_mesh.cpp vtkOFFReader.cxx)
 
 target_link_libraries(projet-stage
   PUBLIC
diff --git a/main.cpp b/main.cpp
index e8eff3c5ad53f8cb775b9073514f91bdd7102e70..dc343ec6607546069af4c68e72d85457421a8199 100644
--- a/main.cpp
+++ b/main.cpp
@@ -55,7 +55,7 @@
 #include <vtkAppendPolyData.h>
 #include <vtkSortDataArray.h>
 
-#include "triangulate.h"
+#include "operation_mesh.h"
 
 int main(int argc, char *argv[])
 {
@@ -78,7 +78,8 @@ int main(int argc, char *argv[])
     vtkNew<vtkOBJReader> reader;
     reader->SetFileName(filename.c_str());
     reader->Update();
-    source = triangulate::buildValidTriangulation(reader->GetOutput());
+    source = operation::buildValidTriangulation(reader->GetOutput());
+    vtkSmartPointer<vtkPolyData> toto = operation::closeMesh(reader->GetOutput());
   }
   else if (extension == ".off")
   {
@@ -93,7 +94,7 @@ int main(int argc, char *argv[])
     return EXIT_FAILURE;
   }
 
-  if (source->GetNumberOfCells() > 90000) // avoid segmentation fault
+  if (source->GetNumberOfCells() > 100000) // avoid segmentation fault
   {
     std::cerr << "Your mesh has too many polygones (" << source->GetNumberOfCells() << ") for this program to run properly.\n";
     return EXIT_FAILURE;
@@ -121,7 +122,7 @@ int main(int argc, char *argv[])
   vtkNew<vtkDoubleArray> shapeIndex;
   shapeIndex->SetName("Shape_Index");
 
-  for (vtkIdType i = 0; i < k1->GetNumberOfPoints(); ++i)
+  for (vtkIdType i = 0; i < k2->GetNumberOfPoints(); ++i)
   {
     double kmax = k1Array->GetVariantValue(i).ToDouble();
     double kmin = k2Array->GetVariantValue(i).ToDouble();
diff --git a/triangulate.cpp b/operation_mesh.cpp
similarity index 53%
rename from triangulate.cpp
rename to operation_mesh.cpp
index d985f360735a19056d7daf24b88c25f3cde3947d..51d504acc292df721aecc1562e8f34c21601084d 100644
--- a/triangulate.cpp
+++ b/operation_mesh.cpp
@@ -1,7 +1,6 @@
-#include <vtkTriangleFilter.h>
-#include "triangulate.h"
+#include "operation_mesh.h"
 
-vtkSmartPointer<vtkPolyData> triangulate::buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData)
+vtkSmartPointer<vtkPolyData> operation::buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData)
 {
     vtkSmartPointer<vtkPolyData> triPolyData = vtkSmartPointer<vtkPolyData>::New();
 
@@ -31,4 +30,33 @@ vtkSmartPointer<vtkPolyData> triangulate::buildValidTriangulation(vtkSmartPointe
     triangleFilter->Update();
 
     return triangleFilter->GetOutput();
-}
\ No newline at end of file
+}
+
+#include <vtkSmartPointer.h>
+#include <vtkPolyData.h>
+#include <vtkCellArray.h>
+#include <vtkIdList.h>
+#include <vtkTriangle.h>
+#include <vtkTetra.h>
+#include <vtkCleanPolyData.h>
+
+#include <vtkFeatureEdges.h>
+
+vtkSmartPointer<vtkPolyData> operation::closeMesh(vtkSmartPointer<vtkPolyData> polyData)
+{
+    // Check if the input mesh is open
+    vtkSmartPointer<vtkFeatureEdges> featureEdges = vtkSmartPointer<vtkFeatureEdges>::New();
+    featureEdges->SetInputData(polyData);
+    featureEdges->BoundaryEdgesOn();
+    featureEdges->NonManifoldEdgesOn();
+    featureEdges->FeatureEdgesOff();
+    featureEdges->Update();
+    vtkSmartPointer<vtkPolyData> output = featureEdges->GetOutput();
+    int numOpenEdges = output->GetNumberOfCells();
+
+    if (numOpenEdges != 0) {
+        std::cout << "There are " << numOpenEdges << " open edges.\n";
+    } else {
+        std::cout << "There are no open edges.\n";
+    }
+}
diff --git a/operation_mesh.h b/operation_mesh.h
new file mode 100644
index 0000000000000000000000000000000000000000..0dbec1b848850d114b84d20867fd7d97725d4224
--- /dev/null
+++ b/operation_mesh.h
@@ -0,0 +1,33 @@
+/**
+ * @class    operation_mesh
+ *
+ * @author   Astrid BEYER
+ * @date     2023
+ * @version  1.0
+ *
+ */
+
+#ifndef OPERATION_MESH_H
+#define OPERATION_MESH_H
+
+#include <vtkTriangleFilter.h>
+
+
+namespace operation
+{
+    /**
+     * @brief   buildValidTriangulation : transforms, if necessary, input's polyData so it ensure it's triangulated
+     * @param   polyData
+     * @returns vtkSmartPointer<vtkPolyData>
+     */
+    vtkSmartPointer<vtkPolyData> buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData);
+    /**
+     * @brief   closeMesh : close the surface of the mesh, if necessary
+     * @param   polyData
+     * @returns vtkSmartPointer<vtkPolyData>
+    */
+    vtkSmartPointer<vtkPolyData> closeMesh(vtkSmartPointer<vtkPolyData> polyData);
+    
+}
+
+#endif
diff --git a/triangulate.h b/triangulate.h
deleted file mode 100644
index f873fbfe4c2cdad71d5c9947ed59a6238c2c76d9..0000000000000000000000000000000000000000
--- a/triangulate.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * @class     triangulate
- *
- * @author   Astrid BEYER
- * @date     2023
- * @version  1.1
- *
- */
-
-#ifndef TRIANGULATE_H
-#define TRIANGULATE_H
-
-namespace triangulate
-{
-    /**
-     * @brief buildValidTriangulation : transforms, if necessary, input's polyData so it ensure it's triangulated
-     * @param polyData
-     * @returns vtkSmartPointer<vtkPolyData>
-     */
-    vtkSmartPointer<vtkPolyData> buildValidTriangulation(vtkSmartPointer<vtkPolyData> polyData);
-}
-
-#endif