Salome HOME
Now filling param _hypParameters and _stdMaxvolume
authorYoann Audouin <yoann.audouin@edf.fr>
Mon, 19 Sep 2022 09:12:06 +0000 (11:12 +0200)
committerYoann Audouin <yoann.audouin@edf.fr>
Wed, 28 Sep 2022 06:17:53 +0000 (08:17 +0200)
src/NETGENPlugin/NETGENPlugin_DriverParam.cxx
src/NETGENPlugin/NETGENPlugin_DriverParam.hxx
src/NETGENPlugin/NETGENPlugin_Runner.cxx

index 2ddf398a43e627c0e38b0a29db13c35a90b49f77..dffeca891fa5ba0794c9421b624b02a971bcb7d4 100644 (file)
 //
 #include "NETGENPlugin_DriverParam.hxx"
 
+#include "NETGENPlugin_Hypothesis.hxx"
+
+#include <SMESH_Gen.hxx>
+#include <StdMeshers_MaxElementVolume.hxx>
+
 #include <iostream>
 #include <fstream>
 #include <string>
 #include <cassert>
 
-
-// TODO: Error handling of read/write
-
 /**
  * @brief Print content of a netgen_params
  *
  * @param aParams The object to display
  */
 void printNetgenParams(netgen_params& aParams){
-  // TODO: prettier print
-  // TODO: Add call to print in log
   std::cout << "has_netgen_param: " << aParams.has_netgen_param << std::endl;
   std::cout << "maxh: " << aParams.maxh << std::endl;
   std::cout << "minh: " << aParams.minh << std::endl;
@@ -76,7 +76,7 @@ void printNetgenParams(netgen_params& aParams){
  * @param param_file Name of the file
  * @param aParams Structure to fill
  */
-void importNetgenParams(const std::string param_file, netgen_params& aParams){
+void importNetgenParams(const std::string param_file, netgen_params& aParams, SMESH_Gen *gen){
   std::ifstream myfile(param_file);
   std::string line;
 
@@ -133,7 +133,36 @@ void importNetgenParams(const std::string param_file, netgen_params& aParams){
   std::getline(myfile, line);
   aParams.maxElementVolume = std::stoi(line);
 
-  myfile.close();
+  if(aParams.has_netgen_param){
+    aParams._hypParameters = new NETGENPlugin_Hypothesis(0, gen);
+
+    aParams._hypParameters->SetMaxSize(aParams.maxh);
+    aParams._hypParameters->SetMinSize(aParams.minh);
+    aParams._hypParameters->SetNbSegPerEdge(aParams.segmentsperedge);
+    aParams._hypParameters->SetGrowthRate(aParams.grading);
+    aParams._hypParameters->SetNbSegPerRadius(aParams.curvaturesafety);
+    aParams._hypParameters->SetSecondOrder(aParams.secondorder);
+    aParams._hypParameters->SetQuadAllowed(aParams.quad);
+    aParams._hypParameters->SetOptimize(aParams.optimize);
+    aParams._hypParameters->SetFineness((NETGENPlugin_Hypothesis::Fineness)aParams.fineness);
+    aParams._hypParameters->SetSurfaceCurvature(aParams.uselocalh);
+    aParams._hypParameters->SetFuseEdges(aParams.merge_solids);
+    aParams._hypParameters->SetChordalErrorEnabled(aParams.chordalError);
+    if(aParams.optimize){
+      aParams._hypParameters->SetNbSurfOptSteps(aParams.optsteps2d);
+      aParams._hypParameters->SetNbVolOptSteps(aParams.optsteps3d);
+    }
+    aParams._hypParameters->SetElemSizeWeight(aParams.elsizeweight);
+    aParams._hypParameters->SetWorstElemMeasure(aParams.opterrpow);
+    aParams._hypParameters->SetUseDelauney(aParams.delaunay);
+    aParams._hypParameters->SetCheckOverlapping(aParams.checkoverlap);
+    aParams._hypParameters->SetCheckChartBoundary(aParams.checkchartboundary);
+    aParams._hypParameters->SetMeshSizeFile(aParams.meshsizefilename);
+  }
+  if(aParams.has_maxelementvolume_hyp){
+    aParams._hypMaxElementVolume = new StdMeshers_MaxElementVolume(1, gen);
+  }
+  // TODO: Handle viscous layer
 };
 
 /**
@@ -170,45 +199,4 @@ void exportNetgenParams(const std::string param_file, netgen_params& aParams){
   myfile << aParams.has_maxelementvolume_hyp << std::endl;
   myfile << aParams.maxElementVolume << std::endl;
   myfile << aParams.has_LengthFromEdges_hyp << std::endl;
-
-  myfile.close();
 };
-
-/**
- * @brief Compares two netgen_parms object
- *
- * @param params1 Object 1
- * @param params2 Object 2
-
- * @return true if the two object are identical
- */
-bool diffNetgenParams(netgen_params params1, netgen_params params2){
-  bool ret = true;
-  ret &= params1.maxh == params2.maxh;
-  ret &= params1.minh == params2.minh;
-  ret &= params1.segmentsperedge == params2.segmentsperedge;
-  ret &= params1.grading == params2.grading;
-  ret &= params1.curvaturesafety == params2.curvaturesafety;
-  ret &= params1.secondorder == params2.secondorder;
-  ret &= params1.quad == params2.quad;
-  ret &= params1.optimize == params2.optimize;
-  ret &= params1.fineness == params2.fineness;
-  ret &= params1.uselocalh == params2.uselocalh;
-  ret &= params1.merge_solids == params2.merge_solids;
-  ret &= params1.chordalError == params2.chordalError;
-  ret &= params1.optsteps2d == params2.optsteps2d;
-  ret &= params1.optsteps3d == params2.optsteps3d;
-  ret &= params1.elsizeweight == params2.elsizeweight;
-  ret &= params1.opterrpow == params2.opterrpow;
-  ret &= params1.delaunay == params2.delaunay;
-  ret &= params1.checkoverlap == params2.checkoverlap;
-  ret &= params1.checkchartboundary == params2.checkchartboundary;
-  ret &= params1.closeedgefac == params2.closeedgefac;
-  ret &= params1.has_local_size == params2.has_local_size;
-  ret &= params1.meshsizefilename == params2.meshsizefilename;
-  ret &= params1.has_maxelementvolume_hyp == params2.has_maxelementvolume_hyp;
-  ret &= params1.maxElementVolume == params2.maxElementVolume;
-  ret &= params1.has_LengthFromEdges_hyp == params2.has_LengthFromEdges_hyp;
-
-  return ret;
-}
index 0f53512ee903e6fa89d543c48438cf459f615985..bc05229783a6a9fd8fc178f77bb70fc7e586bc0a 100644 (file)
@@ -33,6 +33,7 @@
 class NETGENPlugin_Hypothesis;
 class StdMeshers_MaxElementVolume;
 class StdMeshers_ViscousLayers;
+class SMESH_Gen;
 
 struct netgen_params{
   // Params from NETGENPlugin_Mesher
@@ -60,7 +61,6 @@ struct netgen_params{
   int closeedgefac;
 
 
-  // TODO: add localsize (pass through local size file ?)
   // True if we have a mesh size file or local size info
   bool has_local_size = false;
   std::string meshsizefilename;
@@ -70,14 +70,13 @@ struct netgen_params{
   bool has_maxelementvolume_hyp=false;
   double maxElementVolume=0.0;
 
-  // to replace
-  //NETGENPlugin_Hypothesis *    _hypParameters=nullptr;
-  // to remove ?
+  NETGENPlugin_Hypothesis *    _hypParameters=nullptr;
   StdMeshers_MaxElementVolume* _hypMaxElementVolume=nullptr;
-  // to remove ?
   StdMeshers_ViscousLayers*    _viscousLayersHyp=nullptr;
-  //double                       _progressByTic;
+  double                       _progressByTic;
   bool _quadraticMesh=false;
+  int _error=0;
+  std::string _comment;
 
   // Params from NETGEN2D
   bool has_LengthFromEdges_hyp=false;
@@ -88,9 +87,7 @@ struct netgen_params{
 
 void printNetgenParams(netgen_params& aParams);
 
-void importNetgenParams(const std::string param_file, netgen_params& aParams);
+void importNetgenParams(const std::string param_file, netgen_params& aParams, SMESH_Gen * gen);
 void exportNetgenParams(const std::string param_file, netgen_params& aParams);
 
-bool diffNetgenParams(netgen_params params1, netgen_params params2);
-
-#endif
\ No newline at end of file
+#endif
index 24038dbbaf03822d93eae7bcaef72c97dd390a18..43faa506a5b2d330fdcc570db9cfb6df6f138cc8 100644 (file)
@@ -213,7 +213,7 @@ int netgen3d(const std::string input_mesh_file,
   // Importing hypothesis
   netgen_params myParams;
 
-  importNetgenParams(hypo_file, myParams);
+  importNetgenParams(hypo_file, myParams, &gen);
   auto time3 = std::chrono::high_resolution_clock::now();
   elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(time3-time2);
   std::cout << "Time for import_netgen_param: " << elapsed.count() * 1e-9 << std::endl;
@@ -671,7 +671,7 @@ int netgen2d(const std::string input_mesh_file,
   // Importing hypothesis
   netgen_params myParams;
 
-  importNetgenParams(hypo_file, myParams);
+  importNetgenParams(hypo_file, myParams, &gen);
 
   std::cout << "Meshing with netgen3d" << std::endl;
   int ret = netgen2dInternal(myShape, *myMesh, myParams,