From ff9695d8b06eceea7389f31aab5dc2183979ed6f Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 22 May 2012 05:18:20 +0000
Subject: [PATCH] fix compile on win32

---
 contrib/HighOrderMeshOptimizer/OptHomRun.cpp | 109 ++++++++++---------
 1 file changed, 55 insertions(+), 54 deletions(-)

diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
index 38bbc7b922..4151d0c74e 100644
--- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
@@ -14,6 +14,7 @@
 #include "highOrderTools.h"
 #include "OptHomMesh.h"
 #include "OptHOM.h"
+#include "OS.h"
 #include <stack>
 
 #ifdef HAVE_FLTK
@@ -31,13 +32,13 @@ void OptHomMessage (const char *s, ...) {
   if(FlGui::available()){
     FlGui::instance()->check();
     FlGui::instance()->highordertools->messages->add(str, 0);
-    if(FlGui::instance()->highordertools->win->shown() && 
+    if(FlGui::instance()->highordertools->win->shown() &&
        FlGui::instance()->highordertools->messages->h() >= 10){
       FlGui::instance()->highordertools->messages->bottomline(FlGui::instance()->highordertools->messages->size());
       FlGui::instance()->highordertools->messages->show();
     }
   }
-  else 
+  else
     fprintf(stdout,"%s\n",str);
 #else
   fprintf(stdout,"%s\n",str);
@@ -45,7 +46,7 @@ void OptHomMessage (const char *s, ...) {
 }
 
 
-// get all elements that are neighbors 
+// get all elements that are neighbors
 
 double distMaxStraight (MElement *el){
   const polynomialBasis *lagrange = el->getFunctionSpace();
@@ -90,14 +91,14 @@ void exportMeshToDassault (GModel *gm, const std::string &fn, int dim){
     int nt = 0;
     int order  = 0;
     for (GModel::fiter itf = gm->firstFace(); itf != gm->lastFace(); ++itf){
-      std::vector<MTriangle*> &tris = (*itf)->triangles; 
+      std::vector<MTriangle*> &tris = (*itf)->triangles;
       nt += tris.size();
       if (tris.size())order = tris[0]->getPolynomialOrder();
     }
     fprintf(f,"%d %d\n",nt,(order+1)*(order+2)/2);
     int count = 1;
     for (GModel::fiter itf = gm->firstFace(); itf != gm->lastFace(); ++itf){
-      std::vector<MTriangle*> &tris = (*itf)->triangles; 
+      std::vector<MTriangle*> &tris = (*itf)->triangles;
       for (size_t i=0;i<tris.size();i++){
 	MTriangle *t = tris[i];
 	fprintf(f,"%d ",count++);
@@ -106,16 +107,16 @@ void exportMeshToDassault (GModel *gm, const std::string &fn, int dim){
 	}
 	fprintf(f,"\n");
       }
-    }    
+    }
     int ne = 0;
     for (GModel::eiter ite = gm->firstEdge(); ite != gm->lastEdge(); ++ite){
-      std::vector<MLine*> &l = (*ite)->lines; 
-      ne += l.size();      
+      std::vector<MLine*> &l = (*ite)->lines;
+      ne += l.size();
     }
     fprintf(f,"%d %d\n",ne,(order+1));
     count = 1;
     for (GModel::eiter ite = gm->firstEdge(); ite != gm->lastEdge(); ++ite){
-      std::vector<MLine*> &l = (*ite)->lines; 
+      std::vector<MLine*> &l = (*ite)->lines;
       for (size_t i=0;i<l.size();i++){
 	MLine *t = l[i];
 	fprintf(f,"%d ",count++);
@@ -131,18 +132,18 @@ void exportMeshToDassault (GModel *gm, const std::string &fn, int dim){
 
 
 
-static void getTopologicalNeighbors(int nbLayers, 
+static void getTopologicalNeighbors(int nbLayers,
 				    const std::vector<MElement*> &all,
-				    const std::vector<MElement*> &elements,  
+				    const std::vector<MElement*> &elements,
 				    std::set<MElement*> &result){
-  
+
 
   std::set<MVertex*> touched;
-  
+
   for (int i = 0; i < elements.size(); i++)
     for (int j=0;j<elements[i]->getNumVertices();j++)
       touched.insert(elements[i]->getVertex(j));
-  
+
   for (int layer = 0; layer < nbLayers; layer++) {
     for (int i = 0; i < all.size(); i++) {
       MElement *t = all[i];
@@ -199,7 +200,7 @@ static MElement * compare_worst (MElement *a, MElement *b){
   return b;
 }
 
-template <class ITERATOR> 
+template <class ITERATOR>
 MElement* getTheWorstElementDown (const ITERATOR &beg, const ITERATOR &end, double &q) {
   MElement *worst = 0;
   q = 1.e22;
@@ -209,13 +210,13 @@ MElement* getTheWorstElementDown (const ITERATOR &beg, const ITERATOR &end, doub
     double jmin,jmax;
     t->scaledJacRange(jmin,jmax);
     if (jmin < q) {
-      worst = t;q = jmin; 
-    }    
+      worst = t;q = jmin;
+    }
   }
   return worst;
 }
 
-template <class ITERATOR> 
+template <class ITERATOR>
 MElement* getTheWorstElementUp (const ITERATOR &beg, const ITERATOR &end, double &q) {
   MElement *worst = 0;
   q = -1.e22;
@@ -225,16 +226,16 @@ MElement* getTheWorstElementUp (const ITERATOR &beg, const ITERATOR &end, double
     double jmin,jmax;
     t->scaledJacRange(jmin,jmax);
     if (jmax > q) {
-      worst = t;q = jmax; 
-    }    
+      worst = t;q = jmax;
+    }
   }
   return worst;
 }
 
-static std::set<MVertex*> filterSimple(GEntity *ge, 
-					  int nbLayers, 
-					  double _qual_min, 
-					  double _qual_max, 
+static std::set<MVertex*> filterSimple(GEntity *ge,
+					  int nbLayers,
+					  double _qual_min,
+					  double _qual_max,
             std::set<MElement*> &result) {
   std::vector<MElement*> badElements, allElements;
   for (int i = 0; i < ge->getNumMeshElements(); ++i) {
@@ -245,7 +246,7 @@ static std::set<MVertex*> filterSimple(GEntity *ge,
       badElements.push_back(e);
     }
   }
-  getTopologicalNeighbors(nbLayers, allElements, badElements,result);  
+  getTopologicalNeighbors(nbLayers, allElements, badElements,result);
   std::set<MVertex*> vs;
   for (int i = 0; i < allElements.size(); i++) {
     if (result.find(allElements[i]) == result.end()) {
@@ -257,11 +258,11 @@ static std::set<MVertex*> filterSimple(GEntity *ge,
   return vs;
 }
 
-std::set<MVertex*> filter2D_boundaryLayer(GFace *gf, 
-					  int nbLayers, 
-					  double _qual_min, 
-					  double _qual_max, 
-					  double F , 
+std::set<MVertex*> filter2D_boundaryLayer(GFace *gf,
+					  int nbLayers,
+					  double _qual_min,
+					  double _qual_max,
+					  double F ,
 					  std::set<MElement*> & badasses,
             std::set<MElement*> & result
             ) {
@@ -273,19 +274,19 @@ std::set<MVertex*> filter2D_boundaryLayer(GFace *gf,
   else worst = worstUp;
 
   //  MElement *worst = compare_worst (getTheWorstElement(gf->triangles),
-  //				   getTheWorstElement(gf->quadrangles)); 
-  
+  //				   getTheWorstElement(gf->quadrangles));
+
   std::vector<MElement*> vworst; vworst.push_back(worst);
-  std::vector<MElement*> all; 
+  std::vector<MElement*> all;
   all.insert(all.begin(),gf->triangles.begin(),gf->triangles.end());
   all.insert(all.begin(),gf->quadrangles.begin(),gf->quadrangles.end());
   std::set<MElement*> result1;
-  getTopologicalNeighbors(nbLayers, all, vworst,result1);  
+  getTopologicalNeighbors(nbLayers, all, vworst,result1);
   std::set<MElement*> result2;
   getGeometricalNeighbors (worst, all, F, result2);
   intersection (result1,result2,result);
-  //  printf("intsersection(%d,%d) = %d\n",result1.size(),result2.size(),result.size()); 
-  
+  //  printf("intsersection(%d,%d) = %d\n",result1.size(),result2.size(),result.size());
+
   std::set<MVertex*> vs;
   for (int i = 0; i < all.size(); i++) {
     if (result.find(all[i]) == result.end()) {
@@ -298,29 +299,29 @@ std::set<MVertex*> filter2D_boundaryLayer(GFace *gf,
 }
 
 
-std::set<MVertex*> filter3D_boundaryLayer(GRegion *gr, 
-					  int nbLayers, 
-					  double _qual_min, 
-					  double _qual_max, 
+std::set<MVertex*> filter3D_boundaryLayer(GRegion *gr,
+					  int nbLayers,
+					  double _qual_min,
+					  double _qual_max,
 					  double F,
             std::set<MElement *> &result) {
   double jmin,jmax;
   MElement *worst = compare_worst (getTheWorstElementDown(gr->tetrahedra.begin(),gr->tetrahedra.end(),jmin),
-				   getTheWorstElementDown(gr->prisms.begin(),gr->prisms.end(),jmin)); 
-  worst = compare_worst (worst,getTheWorstElementDown(gr->hexahedra.begin(),gr->hexahedra.end(),jmin)); 
-  
+				   getTheWorstElementDown(gr->prisms.begin(),gr->prisms.end(),jmin));
+  worst = compare_worst (worst,getTheWorstElementDown(gr->hexahedra.begin(),gr->hexahedra.end(),jmin));
+
   std::vector<MElement*> vworst; vworst.push_back(worst);
-  std::vector<MElement*> all; 
+  std::vector<MElement*> all;
   all.insert(all.begin(),gr->tetrahedra.begin(),gr->tetrahedra.end());
   all.insert(all.begin(),gr->prisms.begin(),gr->prisms.end());
   all.insert(all.begin(),gr->hexahedra.begin(),gr->hexahedra.end());
   std::set<MElement*> result1;
-  getTopologicalNeighbors(nbLayers, all, vworst,result1);  
+  getTopologicalNeighbors(nbLayers, all, vworst,result1);
   std::set<MElement*> result2;
   getGeometricalNeighbors (worst, all, F, result2);
   intersection (result1,result2,result);
-  //  printf("intsersection(%d,%d) = %d\n",result1.size(),result2.size(),result.size()); 
-  
+  //  printf("intsersection(%d,%d) = %d\n",result1.size(),result2.size(),result.size());
+
   std::set<MVertex*> vs;
   for (int i = 0; i < all.size(); i++) {
     if (result.find(all[i]) == result.end()) {
@@ -374,7 +375,7 @@ static std::vector<std::set<MElement*> > splitConnex(const std::set<MElement*> &
 void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p)
 {
 
-  clock_t t1 = clock();
+  double t1 = Cpu();
 
   int samples = 30;
 
@@ -404,7 +405,7 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p)
 
   double distMaxBND, distAvgBND, minJac, maxJac;
   if (p.dim == 2) {
-    clock_t tf1 = clock();;
+    double tf1 = Cpu();;
     for (GModel::fiter itf = gm->firstFace(); itf != gm->lastFace(); ++itf) {
       if (p.onlyVisible && !(*itf)->getVisibility())continue;
       int ITER = 0;
@@ -448,7 +449,7 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p)
 	ossI << "initial_" << (*itf)->tag() << "ITER_" << ITER << ".msh";
 	temp.mesh.writeMSH(ossI.str().c_str());
 	if (minJac > p.BARRIER_MIN && maxJac < p.BARRIER_MAX) break;
-	
+
 	p.SUCCESS = std::min(p.SUCCESS,temp.optimize(p.weightFixed, p.weightFree, p.BARRIER_MIN, p.BARRIER_MAX, samples, p.itMax));
 
 //  temp.recalcJacDist();
@@ -462,7 +463,7 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p)
 	//      ossF << "final_" << (*itf)->tag() << ".msh";
 	//      temp.mesh.writeMSH(ossF.str().c_str());
       }
-      double DTF = (double)(clock()-tf1) / CLOCKS_PER_SEC;
+      double DTF = Cpu()-tf1;
       if (p.SUCCESS == 1){
 	OptHomMessage("Optimization succeeded (CPU %g sec)",DTF);
       }
@@ -527,7 +528,7 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p)
       Msg::Info("----------------------------------------------------------------");
       //      temp.mesh.writeMSH("final.msh");
     }
-  }  
-  clock_t t2 = clock();
-  p.CPU = (double)(t2-t1)/CLOCKS_PER_SEC;
+  }
+  double t2 = Cpu();
+  p.CPU = t2-t1;
 }
-- 
GitLab