Skip to content
Snippets Groups Projects
Commit ff9695d8 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

fix compile on win32

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