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

fix

parent 5db6fd19
No related branches found
No related tags found
No related merge requests found
#include <stack> #include <stack>
#include <set> #include <set>
#include <map> #include <map>
#include "GModelCreateTopologyFromMesh.h" #include "GModelCreateTopologyFromMesh.h"
#include "GModel.h" #include "GModel.h"
#include "Geo.h" #include "Geo.h"
...@@ -13,16 +13,17 @@ ...@@ -13,16 +13,17 @@
#include "MFace.h" #include "MFace.h"
#include "MTriangle.h" #include "MTriangle.h"
#include "MQuadrangle.h" #include "MQuadrangle.h"
#include "OS.h"
/* /*
Assumptions : Assumptions :
--> The input mesh is potentially (partially) coloured --> The input mesh is potentially (partially) coloured
--> -->
*/ */
template <class T> template <class T>
class myBundle { class myBundle {
public : public :
std::set<T> stuff; std::set<T> stuff;
void insert (T t) {stuff.insert(t);} void insert (T t) {stuff.insert(t);}
void print() const { void print() const {
...@@ -42,7 +43,7 @@ public : ...@@ -42,7 +43,7 @@ public :
if (*it > *it2) return false; if (*it > *it2) return false;
} }
return false; return false;
} }
}; };
...@@ -53,7 +54,7 @@ bool topoExists (GModel *gm) { ...@@ -53,7 +54,7 @@ bool topoExists (GModel *gm) {
for(unsigned int i = 0; i < entities.size(); i++){ for(unsigned int i = 0; i < entities.size(); i++){
if (entities[i]->vertices().empty()) return false; if (entities[i]->vertices().empty()) return false;
} }
return true; return true;
} }
...@@ -63,18 +64,18 @@ void createTopologyFromMesh1D ( GModel *gm , int &num) { ...@@ -63,18 +64,18 @@ void createTopologyFromMesh1D ( GModel *gm , int &num) {
std::set<myBundle<GEdge*> > _bundles; std::set<myBundle<GEdge*> > _bundles;
std::map<MVertex*, GVertex*> _existingVertices; std::map<MVertex*, GVertex*> _existingVertices;
std::map<GEdge*, std::set<GVertex*> > _topology; std::map<GEdge*, std::set<GVertex*> > _topology;
// create an inverse dictionnary for existing edges // create an inverse dictionnary for existing edges
// printf("zakkkk\n"); // printf("zakkkk\n");
for(GModel::viter it = gm->firstVertex(); it != gm->lastVertex(); it++) { for(GModel::viter it = gm->firstVertex(); it != gm->lastVertex(); it++) {
if ((*it)->mesh_vertices.size()) if ((*it)->mesh_vertices.size())
_existingVertices[(*it)->mesh_vertices[0]] = *it; _existingVertices[(*it)->mesh_vertices[0]] = *it;
} }
// printf("%d mesh vertices are already classified\n",_existingVertices.size()); // printf("%d mesh vertices are already classified\n",_existingVertices.size());
for(GModel::eiter it = gm->firstEdge(); it != gm->lastEdge(); it++) { for(GModel::eiter it = gm->firstEdge(); it != gm->lastEdge(); it++) {
for (int i=0;i<(*it)->lines.size();i++){ for (int i=0;i<(*it)->lines.size();i++){
MLine *e = (*it)->lines[i]; MLine *e = (*it)->lines[i];
...@@ -85,18 +86,18 @@ void createTopologyFromMesh1D ( GModel *gm , int &num) { ...@@ -85,18 +86,18 @@ void createTopologyFromMesh1D ( GModel *gm , int &num) {
_topology[*it].insert(gv); _topology[*it].insert(gv);
else else
_temp[v].insert(*it); _temp[v].insert(*it);
} }
} }
} }
// printf("%d new mesh vertices \n",_temp.size()); // printf("%d new mesh vertices \n",_temp.size());
// create unique instances // create unique instances
for (std::map<MVertex*, myBundle<GEdge*> >::iterator it = _temp.begin(); it != _temp.end() ; it++){ for (std::map<MVertex*, myBundle<GEdge*> >::iterator it = _temp.begin(); it != _temp.end() ; it++){
if (it->second.stuff.size() > 1) { if (it->second.stuff.size() > 1) {
// it->second.print(); // it->second.print();
num++; num++;
discreteVertex *dv = new discreteVertex ( gm , GModel::current()->getGEOInternals()->MaxPointNum++); discreteVertex *dv = new discreteVertex ( gm , GModel::current()->getGEOInternals()->MaxPointNum++);
gm->add(dv); gm->add(dv);
MVertex *v = it->first; MVertex *v = it->first;
MPoint *mp = new MPoint(v); MPoint *mp = new MPoint(v);
...@@ -118,13 +119,13 @@ void createTopologyFromMesh1D ( GModel *gm , int &num) { ...@@ -118,13 +119,13 @@ void createTopologyFromMesh1D ( GModel *gm , int &num) {
std::list<GVertex*>::iterator it2 = l.begin(); std::list<GVertex*>::iterator it2 = l.begin();
it->first->setBeginVertex(*it2); it->first->setBeginVertex(*it2);
if (l.size() == 2)++it2; if (l.size() == 2)++it2;
it->first->setEndVertex(*it2); it->first->setEndVertex(*it2);
} }
else { else {
Msg::Error ("FIXME : create simply connected edges in CreateTopology"); Msg::Error ("FIXME : create simply connected edges in CreateTopology");
} }
for (std::list<GVertex*>::iterator it2 = l.begin() ; it2 != l.end() ; ++it2)(*it2)->addEdge(it->first); for (std::list<GVertex*>::iterator it2 = l.begin() ; it2 != l.end() ; ++it2)(*it2)->addEdge(it->first);
} }
} }
...@@ -140,17 +141,17 @@ void assignFace (GFace *gf, std::set<MElement*> &_f) { ...@@ -140,17 +141,17 @@ void assignFace (GFace *gf, std::set<MElement*> &_f) {
if ((*it)->getNumVertices () == 3) gf->triangles.push_back ((MTriangle*) *it); if ((*it)->getNumVertices () == 3) gf->triangles.push_back ((MTriangle*) *it);
else if ((*it)->getNumVertices () == 4) gf->quadrangles.push_back ((MQuadrangle*) *it); else if ((*it)->getNumVertices () == 4) gf->quadrangles.push_back ((MQuadrangle*) *it);
} }
} }
void ensureManifoldFace ( GFace *gf) { void ensureManifoldFace ( GFace *gf) {
std::map<MEdge, std::pair<MElement*,MElement*>, Less_Edge > _pairs; std::map<MEdge, std::pair<MElement*,MElement*>, Less_Edge > _pairs;
std::set<MEdge,Less_Edge> _nonManifold; std::set<MEdge,Less_Edge> _nonManifold;
std::set<MElement*> _allFaces; std::set<MElement*> _allFaces;
for (int i=0;i<gf->getNumMeshElements();i++){ for (int i=0;i<gf->getNumMeshElements();i++){
MElement *e = gf->getMeshElement(i); MElement *e = gf->getMeshElement(i);
_allFaces.insert(e); _allFaces.insert(e);
...@@ -177,9 +178,9 @@ void ensureManifoldFace ( GFace *gf) { ...@@ -177,9 +178,9 @@ void ensureManifoldFace ( GFace *gf) {
if (_nonManifold.empty())return; if (_nonManifold.empty())return;
Msg::Info ("Face %d is not manifold : splitting it",gf->tag()); Msg::Info ("Face %d is not manifold : splitting it",gf->tag());
// printf("%d non man %d internal\n",_nonManifold.size(), _pairs.size()); // printf("%d non man %d internal\n",_nonManifold.size(), _pairs.size());
std::vector<std::set<MElement *> > _sub; std::vector<std::set<MElement *> > _sub;
while (!_allFaces.empty()) { while (!_allFaces.empty()) {
std::stack <MElement*> _stack; std::stack <MElement*> _stack;
...@@ -196,18 +197,18 @@ void ensureManifoldFace ( GFace *gf) { ...@@ -196,18 +197,18 @@ void ensureManifoldFace ( GFace *gf) {
std::map<MEdge, std::pair<MElement*,MElement*>, Less_Edge >::iterator it = std::map<MEdge, std::pair<MElement*,MElement*>, Less_Edge >::iterator it =
_pairs.find (ed); _pairs.find (ed);
if (it->second.second != NULL){ if (it->second.second != NULL){
MElement *other = it->second.second == e ? it->second.first : it->second.second; MElement *other = it->second.second == e ? it->second.first : it->second.second;
if (_f.find (other) == _f.end())_stack.push(other); if (_f.find (other) == _f.end())_stack.push(other);
} }
} }
} }
} }
_sub.push_back (_f); _sub.push_back (_f);
} }
Msg::Info ("Face %d has now %d parts",gf->tag(),_sub.size() ); Msg::Info ("Face %d has now %d parts",gf->tag(),_sub.size() );
// printf("%d sub parts\n", _sub.size()); // printf("%d sub parts\n", _sub.size());
for (unsigned int i=0 ; i<_sub.size() ; i++){ for (unsigned int i=0 ; i<_sub.size() ; i++){
if (i == 0) assignFace (gf, _sub[i]); if (i == 0) assignFace (gf, _sub[i]);
else { else {
...@@ -215,7 +216,7 @@ void ensureManifoldFace ( GFace *gf) { ...@@ -215,7 +216,7 @@ void ensureManifoldFace ( GFace *gf) {
gf->model()->add (newF); gf->model()->add (newF);
assignFace (newF, _sub[i]); assignFace (newF, _sub[i]);
} }
} }
} }
void ensureManifoldFaces ( GModel *gm ) { void ensureManifoldFaces ( GModel *gm ) {
...@@ -232,11 +233,11 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -232,11 +233,11 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
std::set<myBundle<GFace*> > _bundles; std::set<myBundle<GFace*> > _bundles;
std::map<MEdge, GEdge*, Less_Edge> _existingEdges; std::map<MEdge, GEdge*, Less_Edge> _existingEdges;
std::map<GFace*, std::set<GEdge*> > _topology; std::map<GFace*, std::set<GEdge*> > _topology;
// create an inverse dictionnary for existing edges // create an inverse dictionnary for existing edges
for(GModel::eiter it = gm->firstEdge(); it != gm->lastEdge(); it++) { for(GModel::eiter it = gm->firstEdge(); it != gm->lastEdge(); it++) {
for (int i = 0; i < (*it)->lines.size(); i++)_existingEdges[(*it)->lines[i]->getEdge(0)] = *it; for (int i = 0; i < (*it)->lines.size(); i++)_existingEdges[(*it)->lines[i]->getEdge(0)] = *it;
} }
// printf("%d mesh edges are already classified\n",_existingEdges.size()); // printf("%d mesh edges are already classified\n",_existingEdges.size());
...@@ -246,7 +247,7 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -246,7 +247,7 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
MElement *e = (*it)->getMeshElement(i); MElement *e = (*it)->getMeshElement(i);
for (int j=0;j<e->getNumEdges();j++){ for (int j=0;j<e->getNumEdges();j++){
MEdge ed = e->getEdge(j); MEdge ed = e->getEdge(j);
std::map<MEdge,int,Less_Edge>::iterator it2 = _bnd.find(ed); std::map<MEdge,int,Less_Edge>::iterator it2 = _bnd.find(ed);
if (it2 == _bnd.end())_bnd[ed] = 1; if (it2 == _bnd.end())_bnd[ed] = 1;
else it2->second++; else it2->second++;
} }
...@@ -254,7 +255,7 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -254,7 +255,7 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
} }
discreteFace OUT (gm, -1000010200); discreteFace OUT (gm, -1000010200);
// create inverse dictionary for all other edges // create inverse dictionary for all other edges
for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); it++) { for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); it++) {
for (int i=0;i<(*it)->getNumMeshElements();i++){ for (int i=0;i<(*it)->getNumMeshElements();i++){
...@@ -268,18 +269,18 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -268,18 +269,18 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
_temp[ed].insert(*it); _temp[ed].insert(*it);
if (_bnd[ed] == 1)_temp[ed].insert(&OUT); if (_bnd[ed] == 1)_temp[ed].insert(&OUT);
} }
} }
} }
} }
// printf("%d internal edges\n",_temp.size()); // printf("%d internal edges\n",_temp.size());
// create unique instances // create unique instances
for (std::map<MEdge, myBundle<GFace*>, Less_Edge >::iterator it = _temp.begin(); it != _temp.end() ; it++){ for (std::map<MEdge, myBundle<GFace*>, Less_Edge >::iterator it = _temp.begin(); it != _temp.end() ; it++){
_bundles.insert (it->second); _bundles.insert (it->second);
} }
// create discrete edges // create discrete edges
std::map <myBundle<GFace*> , GEdge *> _f2e; std::map <myBundle<GFace*> , GEdge *> _f2e;
{ {
std::set<myBundle<GFace*> >::iterator it = _bundles.begin(); std::set<myBundle<GFace*> >::iterator it = _bundles.begin();
...@@ -287,7 +288,7 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -287,7 +288,7 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
/// it->print(); /// it->print();
if (it->stuff.size() > 1){ if (it->stuff.size() > 1){
// printf("creation of a new discrete edge (%d neighbors)!\n",it->stuff.size()); // printf("creation of a new discrete edge (%d neighbors)!\n",it->stuff.size());
discreteEdge *de = new discreteEdge ( gm , NEWREG(), NULL, NULL); discreteEdge *de = new discreteEdge ( gm , NEWREG(), NULL, NULL);
num++; num++;
_f2e [*it] = de; _f2e [*it] = de;
gm->add (de); gm->add (de);
...@@ -324,8 +325,8 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -324,8 +325,8 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
for (std::list<GEdge*>::iterator it2 = l.begin() ; it2 != l.end() ; ++it2)(*it2)->addFace(it->first); for (std::list<GEdge*>::iterator it2 = l.begin() ; it2 != l.end() ; ++it2)(*it2)->addFace(it->first);
} }
} }
} }
// NICE :-) // NICE :-)
} }
...@@ -336,22 +337,22 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) { ...@@ -336,22 +337,22 @@ void createTopologyFromMesh2D ( GModel *gm , int & num) {
/// ---------------------------------------------------------------- /// ----------------------------------------------------------------
void createTopologyFromMesh3D ( GModel *gm , int &num ) { void createTopologyFromMesh3D ( GModel *gm , int &num ) {
std::map<MFace, std::pair<GRegion*,GRegion*>, Less_Face > _temp; std::map<MFace, std::pair<GRegion*,GRegion*>, Less_Face > _temp;
std::set<std::pair<GRegion*,GRegion*> > _pairs; std::set<std::pair<GRegion*,GRegion*> > _pairs;
std::map<MFace, GFace*, Less_Face> _existingFaces; std::map<MFace, GFace*, Less_Face> _existingFaces;
std::map<GRegion*, std::set<GFace*> > _topology; std::map<GRegion*, std::set<GFace*> > _topology;
clock_t t0 = clock(); double t0 = Cpu();
// create an inverse dictionnary for existing faces // create an inverse dictionnary for existing faces
for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); it++) { for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); it++) {
for (unsigned int i = 0; i < (*it)->triangles.size(); i++)_existingFaces[(*it)->triangles[i]->getFace(0)] = *it; for (unsigned int i = 0; i < (*it)->triangles.size(); i++)_existingFaces[(*it)->triangles[i]->getFace(0)] = *it;
for (unsigned int i = 0; i < (*it)->quadrangles.size(); i++)_existingFaces[(*it)->quadrangles[i]->getFace(0)] = *it; for (unsigned int i = 0; i < (*it)->quadrangles.size(); i++)_existingFaces[(*it)->quadrangles[i]->getFace(0)] = *it;
} }
// printf("%d mesh faces aere already classified\n",_existingFaces.size()); // printf("%d mesh faces aere already classified\n",_existingFaces.size());
clock_t t1 = clock(); double t1 = Cpu();
// -------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
// create inverse dictionary for all other faces // create inverse dictionary for all other faces
// This is the most time consuming part ! // This is the most time consuming part !
...@@ -364,7 +365,7 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) { ...@@ -364,7 +365,7 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) {
} }
} }
} }
for(GModel::riter it = gm->firstRegion(); it != gm->lastRegion(); it++) { for(GModel::riter it = gm->firstRegion(); it != gm->lastRegion(); it++) {
for (int i=0;i<(*it)->getNumMeshElements();i++){ for (int i=0;i<(*it)->getNumMeshElements();i++){
...@@ -385,23 +386,23 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) { ...@@ -385,23 +386,23 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) {
else itf->second.first = *it ; else itf->second.first = *it ;
} }
} }
} }
} }
} }
// -------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------
clock_t t2 = clock(); double t2 = Cpu();
// create unique instances // create unique instances
for (std::map<MFace, std::pair<GRegion*,GRegion*>, Less_Face >::iterator it = _temp.begin(); it != _temp.end() ; it++){ for (std::map<MFace, std::pair<GRegion*,GRegion*>, Less_Face >::iterator it = _temp.begin(); it != _temp.end() ; it++){
_pairs.insert (std::make_pair (std::min (it->second.first, it->second.second), _pairs.insert (std::make_pair (std::min (it->second.first, it->second.second),
std::max (it->second.first, it->second.second))); std::max (it->second.first, it->second.second)));
} }
// create discrete faces // create discrete faces
// printf("%d pairs of regions exist to create new GFaces \n",_pairs.size()); // printf("%d pairs of regions exist to create new GFaces \n",_pairs.size());
clock_t t3 = clock(); double t3 = Cpu();
std::map <std::pair<GRegion*,GRegion*> , GFace *> _r2f; std::map <std::pair<GRegion*,GRegion*> , GFace *> _r2f;
{ {
...@@ -409,7 +410,7 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) { ...@@ -409,7 +410,7 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) {
for (; it != _pairs.end(); ++it) { for (; it != _pairs.end(); ++it) {
if (it->first != it->second) { if (it->first != it->second) {
printf("creating a new discrete face between %p and %p\n",it->first, it->second); printf("creating a new discrete face between %p and %p\n",it->first, it->second);
discreteFace *df = new discreteFace ( gm , NEWREG()); discreteFace *df = new discreteFace ( gm , NEWREG());
num++; num++;
gm->add (df); gm->add (df);
_r2f [*it] = df; _r2f [*it] = df;
...@@ -418,14 +419,14 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) { ...@@ -418,14 +419,14 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) {
} }
} }
} }
clock_t t4 = clock(); double t4 = Cpu();
// add mesh faces in newly created GFaces // add mesh faces in newly created GFaces
{ {
std::map<MFace, std::pair<GRegion*,GRegion*>, Less_Face > :: iterator it = _temp.begin(); std::map<MFace, std::pair<GRegion*,GRegion*>, Less_Face > :: iterator it = _temp.begin();
for (; it != _temp.end(); ++it) { for (; it != _temp.end(); ++it) {
if (it->second.first != it->second.second){ if (it->second.first != it->second.second){
MFace f = it->first; MFace f = it->first;
GFace *gf = _r2f [it->second]; GFace *gf = _r2f [it->second];
if (f.getNumVertices () == 3){ if (f.getNumVertices () == 3){
MTriangle *t = new MTriangle (f.getVertex(0),f.getVertex(1),f.getVertex(2)); MTriangle *t = new MTriangle (f.getVertex(0),f.getVertex(1),f.getVertex(2));
...@@ -434,13 +435,13 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) { ...@@ -434,13 +435,13 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) {
} }
else if (f.getNumVertices () == 4){ else if (f.getNumVertices () == 4){
MQuadrangle *q = new MQuadrangle (f.getVertex(0),f.getVertex(1),f.getVertex(2),f.getVertex(3)); MQuadrangle *q = new MQuadrangle (f.getVertex(0),f.getVertex(1),f.getVertex(2),f.getVertex(3));
gf->quadrangles.push_back(q); gf->quadrangles.push_back(q);
_existingFaces [q->getFace(0)] = gf; _existingFaces [q->getFace(0)] = gf;
} }
} }
} }
} }
clock_t t5 = clock(); double t5 = Cpu();
// create Regions 2 Faces topology // create Regions 2 Faces topology
{ {
...@@ -449,23 +450,23 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) { ...@@ -449,23 +450,23 @@ void createTopologyFromMesh3D ( GModel *gm , int &num ) {
std::list<GFace*> l ; l.insert (l.begin(), it->second.begin(), it->second.end()); std::list<GFace*> l ; l.insert (l.begin(), it->second.begin(), it->second.end());
it->first->set(l); it->first->set(l);
// printf("Region %d has %d adjacent faces\n",it->first->tag(), l.size()); // printf("Region %d has %d adjacent faces\n",it->first->tag(), l.size());
for (std::list<GFace*>::iterator it2 = l.begin() ; it2 != l.end() ; ++it2)(*it2)->addRegion(it->first); for (std::list<GFace*>::iterator it2 = l.begin() ; it2 != l.end() ; ++it2)(*it2)->addRegion(it->first);
} }
} }
clock_t t6 = clock(); double t6 = Cpu();
// NICE :-) // NICE :-)
printf("%g %g %g %g %g %g\n",(double)(t1-t0)/CLOCKS_PER_SEC,(double)(t2-t1)/CLOCKS_PER_SEC,(double)(t3-t2)/CLOCKS_PER_SEC printf("%g %g %g %g %g %g\n",(t1-t0),(t2-t1),(t3-t2)
,(double)(t4-t3)/CLOCKS_PER_SEC,(double)(t5-t4)/CLOCKS_PER_SEC,(double)(t6-t5)/CLOCKS_PER_SEC); ,(t4-t3),(t5-t4),(t6-t5));
} }
void GModel::createTopologyFromMeshNew ( ) { void GModel::createTopologyFromMeshNew ( ) {
const int dim = getDim (); const int dim = getDim ();
if (topoExists (this)) { if (topoExists (this)) {
return; return;
} }
...@@ -473,21 +474,21 @@ void GModel::createTopologyFromMeshNew ( ) { ...@@ -473,21 +474,21 @@ void GModel::createTopologyFromMeshNew ( ) {
// printf("%d vertices\n", getNumVertices()); // printf("%d vertices\n", getNumVertices());
Msg::Info("createTopologyFromMeshNew --> creating a topology from the mesh"); Msg::Info("createTopologyFromMeshNew --> creating a topology from the mesh");
int numF=0,numE=0,numV=0; int numF=0,numE=0,numV=0;
clock_t t0 = clock(); double t0 = Cpu();
if (dim >= 3) createTopologyFromMesh3D (this, numF); if (dim >= 3) createTopologyFromMesh3D (this, numF);
else ensureManifoldFaces ( this ); else ensureManifoldFaces ( this );
clock_t t1 = clock(); double t1 = Cpu();
if (dim >= 2) createTopologyFromMesh2D ( this , numE); if (dim >= 2) createTopologyFromMesh2D ( this , numE);
clock_t t2 = clock(); double t2 = Cpu();
if (dim >= 1) createTopologyFromMesh1D ( this, numV); if (dim >= 1) createTopologyFromMesh1D ( this, numV);
clock_t t3 = clock(); double t3 = Cpu();
// printf("%d vertices\n", getNumVertices()); // printf("%d vertices\n", getNumVertices());
// printf("coucou\n"); // printf("coucou\n");
_associateEntityWithMeshVertices(); _associateEntityWithMeshVertices();
std::vector<GEntity*> entities; std::vector<GEntity*> entities;
getEntities(entities); getEntities(entities);
std::set<MVertex*> vs; std::set<MVertex*> vs;
...@@ -497,13 +498,13 @@ void GModel::createTopologyFromMeshNew ( ) { ...@@ -497,13 +498,13 @@ void GModel::createTopologyFromMeshNew ( ) {
} }
std::vector<MVertex*> cc; std::vector<MVertex*> cc;
cc.insert(cc.begin(), vs.begin(), vs.end()); cc.insert(cc.begin(), vs.begin(), vs.end());
_storeVerticesInEntities(cc); _storeVerticesInEntities(cc);
// printf("%d vertices\n", getNumVertices()); // printf("%d vertices\n", getNumVertices());
Msg::Info("createTopologyFromMeshNew (%d regions, %d faces (%d new) , %d edges (%d new) and %d vertices (%d new))", Msg::Info("createTopologyFromMeshNew (%d regions, %d faces (%d new) , %d edges (%d new) and %d vertices (%d new))",
getNumRegions(), getNumFaces(), numF, getNumEdges(), numE, getNumVertices(), numV); getNumRegions(), getNumFaces(), numF, getNumEdges(), numE, getNumVertices(), numV);
printf("%g %g %g\n",(double)(t1-t0)/CLOCKS_PER_SEC,(double)(t2-t1)/CLOCKS_PER_SEC,(double)(t3-t2)/CLOCKS_PER_SEC); printf("%g %g %g\n",(t1-t0),(t2-t1),(t3-t2));
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment