diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index a20cec15494731f9ebd7d28777b60e4fdd4bf860..e72ae9981a8a15596e6214b61e68701871a389e9 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -499,336 +499,12 @@ void GetOptions(int argc, char *argv[]) #if defined(HAVE_MESH) else if(!strcmp(argv[i] + 1, "microstructure")) { i++; - int j; - int radical; - double max; - double xMax; - double yMax; - double zMax; - std::vector<double> properties; - if(argv[i]){ - std::ifstream file(argv[i++]); - file >> max; - file >> radical; - file >> xMax; - file >> yMax; - file >> zMax; - properties.clear(); - properties.resize(4*max); - for(j=0;j<max;j++){ - file >> properties[4*j]; - file >> properties[4*j+1]; - file >> properties[4*j+2]; - file >> properties[4*j+3]; - } - voroMetal3D vm1; - vm1.execute(properties,radical,0.1,xMax,yMax,zMax); - GModel::current()->load("MicrostructurePolycrystal3D.geo"); - voroMetal3D vm2; - vm2.correspondance(0.00001,xMax,yMax,zMax); - } + if(argv[i]) microstructure(argv[i++]); } else if(!strcmp(argv[i] + 1, "computeBestSeeds")) { - i++; - int j; - int radical; - double max; - double xMax; - double yMax; - double zMax; - std::vector<double> properties; - std::cout<<"entree dans computeBestSeeds"<<std::endl; - if(argv[i]){ - std::ifstream file(argv[i++]); - file >> max; - file >> radical; - file >> xMax; - file >> yMax; - file >> zMax; - properties.clear(); - properties.resize(4*max); - for(j=0;j<max;j++){ - file >> properties[4*j]; - file >> properties[4*j+1]; - file >> properties[4*j+2]; - file >> properties[4*j+3]; - } - std::cout<<"Before count"<<std::endl; - std::vector<double> listDistances; - listDistances.clear(); - int nbOfCount = 17; - listDistances.resize(nbOfCount); - for (int Count = 0; Count < nbOfCount; Count++){ - std::cout<<"Count"<<Count<<std::endl; - double distMinGlobal = 0.0; - int jMinGlobal = 0; - int xORyORz = 0; - int posORneg = 0; - for(j=0;j<max;j++){ - std::cout<<"j "<<j<<std::endl; - std::vector<double> propertiesModified; - propertiesModified.clear(); - propertiesModified.resize(4*max); - std::cout<<"before assign propModif"<<std::endl; - for(unsigned int k=0;k < properties.size();k++){ - propertiesModified[k] = properties[k]; - } - std::cout<<"after assign propModif"<<std::endl; - propertiesModified[4*j] += 0.01; - voroMetal3D vm1; - std::cout<<"before execute"<<std::endl; - //std::remove("MicrostructurePolycrystal3D.geo"); - vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); - //GModel::current()->destroy(); - GModel *m = new GModel(); - //GModel::current()->load("MicrostructurePolycrystal3D.geo"); - m->load("MicrostructurePolycrystal3D.geo"); - double distMinTmp = 1000.0; - //GModel *m = GModel::current(); - for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ - GEdge* eTmp = (*ite); - GVertex* vTmp1 = eTmp->getBeginVertex(); - GVertex* vTmp2 = eTmp->getEndVertex(); - double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); - if (distTmp < distMinTmp){ - distMinTmp = distTmp; - } - } - if (distMinTmp > distMinGlobal){ - distMinGlobal = distMinTmp; - jMinGlobal = j; - xORyORz = 1; - posORneg = 1; - } - delete m; - } - for(j=0;j<max;j++){ - std::cout<<"j "<<j<<std::endl; - std::vector<double> propertiesModified; - propertiesModified.clear(); - propertiesModified.resize(4*max); - std::cout<<"before assign propModif"<<std::endl; - for(unsigned int k=0;k < properties.size();k++){ - propertiesModified[k] = properties[k]; - } - std::cout<<"after assign propModif"<<std::endl; - propertiesModified[4*j + 1] += 0.01; - voroMetal3D vm1; - std::cout<<"before execute"<<std::endl; - //std::remove("MicrostructurePolycrystal3D.geo"); - vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); - //GModel::current()->destroy(); - GModel *m = new GModel(); - //GModel::current()->load("MicrostructurePolycrystal3D.geo"); - m->load("MicrostructurePolycrystal3D.geo"); - double distMinTmp = 1000.0; - //GModel *m = GModel::current(); - for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ - GEdge* eTmp = (*ite); - GVertex* vTmp1 = eTmp->getBeginVertex(); - GVertex* vTmp2 = eTmp->getEndVertex(); - double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); - if (distTmp < distMinTmp){ - distMinTmp = distTmp; - } - } - if (distMinTmp > distMinGlobal){ - distMinGlobal = distMinTmp; - jMinGlobal = j; - xORyORz = 2; - posORneg = 1; - } - delete m; - } - for(j=0;j<max;j++){ - std::cout<<"j "<<j<<std::endl; - std::vector<double> propertiesModified; - propertiesModified.clear(); - propertiesModified.resize(4*max); - std::cout<<"before assign propModif"<<std::endl; - for(unsigned int k=0;k < properties.size();k++){ - propertiesModified[k] = properties[k]; - } - std::cout<<"after assign propModif"<<std::endl; - propertiesModified[4*j + 2] += 0.01; - voroMetal3D vm1; - std::cout<<"before execute"<<std::endl; - //std::remove("MicrostructurePolycrystal3D.geo"); - vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); - //GModel::current()->destroy(); - GModel *m = new GModel(); - //GModel::current()->load("MicrostructurePolycrystal3D.geo"); - m->load("MicrostructurePolycrystal3D.geo"); - double distMinTmp = 1000.0; - //GModel *m = GModel::current(); - for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ - GEdge* eTmp = (*ite); - GVertex* vTmp1 = eTmp->getBeginVertex(); - GVertex* vTmp2 = eTmp->getEndVertex(); - double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); - if (distTmp < distMinTmp){ - distMinTmp = distTmp; - } - } - if (distMinTmp > distMinGlobal){ - distMinGlobal = distMinTmp; - jMinGlobal = j; - xORyORz = 3; - posORneg = 1; - } - delete m; - } - for(j=0;j<max;j++){ - std::cout<<"j "<<j<<std::endl; - std::vector<double> propertiesModified; - propertiesModified.clear(); - propertiesModified.resize(4*max); - std::cout<<"before assign propModif"<<std::endl; - for(unsigned int k=0;k < properties.size();k++){ - propertiesModified[k] = properties[k]; - } - std::cout<<"after assign propModif"<<std::endl; - propertiesModified[4*j] -= 0.01; - voroMetal3D vm1; - std::cout<<"before execute"<<std::endl; - //std::remove("MicrostructurePolycrystal3D.geo"); - vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); - //GModel::current()->destroy(); - GModel *m = new GModel(); - //GModel::current()->load("MicrostructurePolycrystal3D.geo"); - m->load("MicrostructurePolycrystal3D.geo"); - double distMinTmp = 1000.0; - //GModel *m = GModel::current(); - for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ - GEdge* eTmp = (*ite); - GVertex* vTmp1 = eTmp->getBeginVertex(); - GVertex* vTmp2 = eTmp->getEndVertex(); - double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); - if (distTmp < distMinTmp){ - distMinTmp = distTmp; - } - } - if (distMinTmp > distMinGlobal){ - distMinGlobal = distMinTmp; - jMinGlobal = j; - xORyORz = 1; - posORneg = 2; - } - delete m; - } - for(j=0;j<max;j++){ - std::cout<<"j "<<j<<std::endl; - std::vector<double> propertiesModified; - propertiesModified.clear(); - propertiesModified.resize(4*max); - std::cout<<"before assign propModif"<<std::endl; - for(unsigned int k=0;k < properties.size();k++){ - propertiesModified[k] = properties[k]; - } - std::cout<<"after assign propModif"<<std::endl; - propertiesModified[4*j + 1] -= 0.01; - voroMetal3D vm1; - std::cout<<"before execute"<<std::endl; - //std::remove("MicrostructurePolycrystal3D.geo"); - vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); - //GModel::current()->destroy(); - GModel *m = new GModel(); - //GModel::current()->load("MicrostructurePolycrystal3D.geo"); - m->load("MicrostructurePolycrystal3D.geo"); - double distMinTmp = 1000.0; - //GModel *m = GModel::current(); - for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ - GEdge* eTmp = (*ite); - GVertex* vTmp1 = eTmp->getBeginVertex(); - GVertex* vTmp2 = eTmp->getEndVertex(); - double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); - if (distTmp < distMinTmp){ - distMinTmp = distTmp; - } - } - if (distMinTmp > distMinGlobal){ - distMinGlobal = distMinTmp; - jMinGlobal = j; - xORyORz = 2; - posORneg = 2; - } - delete m; - } - for(j=0;j<max;j++){ - std::cout<<"j "<<j<<std::endl; - std::vector<double> propertiesModified; - propertiesModified.clear(); - propertiesModified.resize(4*max); - std::cout<<"before assign propModif"<<std::endl; - for(unsigned int k=0;k < properties.size();k++){ - propertiesModified[k] = properties[k]; - } - std::cout<<"after assign propModif"<<std::endl; - propertiesModified[4*j + 2] -= 0.01; - voroMetal3D vm1; - std::cout<<"before execute"<<std::endl; - //std::remove("MicrostructurePolycrystal3D.geo"); - vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); - //GModel::current()->destroy(); - GModel *m = new GModel(); - //GModel::current()->load("MicrostructurePolycrystal3D.geo"); - m->load("MicrostructurePolycrystal3D.geo"); - double distMinTmp = 1000.0; - //GModel *m = GModel::current(); - for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ - GEdge* eTmp = (*ite); - GVertex* vTmp1 = eTmp->getBeginVertex(); - GVertex* vTmp2 = eTmp->getEndVertex(); - double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); - if (distTmp < distMinTmp){ - distMinTmp = distTmp; - } - } - if (distMinTmp > distMinGlobal){ - distMinGlobal = distMinTmp; - jMinGlobal = j; - xORyORz = 3; - posORneg = 2; - } - delete m; - } - std::cout<<"distance minimale de "<<distMinGlobal<<std::endl; - listDistances[Count] = distMinGlobal; - if (xORyORz == 1){ - if (posORneg == 1){ - properties[4*jMinGlobal] += 0.01; - } else if (posORneg == 2){ - properties[4*jMinGlobal] -= 0.01; - } - } else if (xORyORz == 2){ - if (posORneg == 1){ - properties[4*jMinGlobal + 1] += 0.01; - } else if (posORneg == 2){ - properties[4*jMinGlobal + 1] -= 0.01; - } - } else if (xORyORz == 3){ - if (posORneg == 1){ - properties[4*jMinGlobal + 2] += 0.01; - } else if (posORneg == 2){ - properties[4*jMinGlobal + 2] -= 0.01; - } - } - } - voroMetal3D vm1; - vm1.execute(properties,radical,0.1,xMax,yMax,zMax); - GModel::current()->load("MicrostructurePolycrystal3D.geo"); - voroMetal3D vm2; - vm2.correspondance(0.00001,xMax,yMax,zMax); - for (unsigned int iTmp = 0; iTmp < listDistances.size();iTmp++){ - std::cout<<"distMinGlobal "<<iTmp<<" egale a "<<listDistances[iTmp]<<std::endl; - } - std::cout<<"liste des nouveaux seeds :"<<std::endl; - for(unsigned int iTmp = 0; iTmp < max;iTmp++){ - std::cout<<properties[4*iTmp]<<" "<<properties[4*iTmp + 1]<<" "<<properties[4*iTmp + 2]<<" "<<properties[4*iTmp + 3]<<std::endl; - - } - } - } + i++; + if(argv[i]) computeBestSeeds(argv[i++]); + } #endif else if(!strcmp(argv[i] + 1, "nopopup")) { CTX::instance()->noPopup = 1; diff --git a/Mesh/periodical.cpp b/Mesh/periodical.cpp index b2b3d6b63bab95f84b4ddb2e2660d1d1fd5c2c11..4b13aec65219277c5dbc8c47a65acca12270d837 100644 --- a/Mesh/periodical.cpp +++ b/Mesh/periodical.cpp @@ -937,3 +937,339 @@ bool voroMetal3D::equal(double x,double y,double e){ return flag; } + + +void microstructure(const char *filename) +{ + int j; + int radical; + double max; + double xMax; + double yMax; + double zMax; + std::vector<double> properties; + if(filename){ + std::ifstream file(filename); + file >> max; + file >> radical; + file >> xMax; + file >> yMax; + file >> zMax; + properties.clear(); + properties.resize(4*max); + for(j=0;j<max;j++){ + file >> properties[4*j]; + file >> properties[4*j+1]; + file >> properties[4*j+2]; + file >> properties[4*j+3]; + } + voroMetal3D vm1; + vm1.execute(properties,radical,0.1,xMax,yMax,zMax); + GModel::current()->load("MicrostructurePolycrystal3D.geo"); + voroMetal3D vm2; + vm2.correspondance(0.00001,xMax,yMax,zMax); + } +} + +void computeBestSeeds(const char *filename) +{ + int j; + int radical; + double max; + double xMax; + double yMax; + double zMax; + std::vector<double> properties; + std::cout<<"entree dans computeBestSeeds"<<std::endl; + if(filename){ + std::ifstream file(filename); + file >> max; + file >> radical; + file >> xMax; + file >> yMax; + file >> zMax; + properties.clear(); + properties.resize(4*max); + for(j=0;j<max;j++){ + file >> properties[4*j]; + file >> properties[4*j+1]; + file >> properties[4*j+2]; + file >> properties[4*j+3]; + } + std::cout<<"Before count"<<std::endl; + std::vector<double> listDistances; + listDistances.clear(); + int nbOfCount = 17; + listDistances.resize(nbOfCount); + for (int Count = 0; Count < nbOfCount; Count++){ + std::cout<<"Count"<<Count<<std::endl; + double distMinGlobal = 0.0; + int jMinGlobal = 0; + int xORyORz = 0; + int posORneg = 0; + for(j=0;j<max;j++){ + std::cout<<"j "<<j<<std::endl; + std::vector<double> propertiesModified; + propertiesModified.clear(); + propertiesModified.resize(4*max); + std::cout<<"before assign propModif"<<std::endl; + for(unsigned int k=0;k < properties.size();k++){ + propertiesModified[k] = properties[k]; + } + std::cout<<"after assign propModif"<<std::endl; + propertiesModified[4*j] += 0.01; + voroMetal3D vm1; + std::cout<<"before execute"<<std::endl; + //std::remove("MicrostructurePolycrystal3D.geo"); + vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); + //GModel::current()->destroy(); + GModel *m = new GModel(); + //GModel::current()->load("MicrostructurePolycrystal3D.geo"); + m->load("MicrostructurePolycrystal3D.geo"); + double distMinTmp = 1000.0; + //GModel *m = GModel::current(); + for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ + GEdge* eTmp = (*ite); + GVertex* vTmp1 = eTmp->getBeginVertex(); + GVertex* vTmp2 = eTmp->getEndVertex(); + double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); + if (distTmp < distMinTmp){ + distMinTmp = distTmp; + } + } + if (distMinTmp > distMinGlobal){ + distMinGlobal = distMinTmp; + jMinGlobal = j; + xORyORz = 1; + posORneg = 1; + } + delete m; + } + for(j=0;j<max;j++){ + std::cout<<"j "<<j<<std::endl; + std::vector<double> propertiesModified; + propertiesModified.clear(); + propertiesModified.resize(4*max); + std::cout<<"before assign propModif"<<std::endl; + for(unsigned int k=0;k < properties.size();k++){ + propertiesModified[k] = properties[k]; + } + std::cout<<"after assign propModif"<<std::endl; + propertiesModified[4*j + 1] += 0.01; + voroMetal3D vm1; + std::cout<<"before execute"<<std::endl; + //std::remove("MicrostructurePolycrystal3D.geo"); + vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); + //GModel::current()->destroy(); + GModel *m = new GModel(); + //GModel::current()->load("MicrostructurePolycrystal3D.geo"); + m->load("MicrostructurePolycrystal3D.geo"); + double distMinTmp = 1000.0; + //GModel *m = GModel::current(); + for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ + GEdge* eTmp = (*ite); + GVertex* vTmp1 = eTmp->getBeginVertex(); + GVertex* vTmp2 = eTmp->getEndVertex(); + double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); + if (distTmp < distMinTmp){ + distMinTmp = distTmp; + } + } + if (distMinTmp > distMinGlobal){ + distMinGlobal = distMinTmp; + jMinGlobal = j; + xORyORz = 2; + posORneg = 1; + } + delete m; + } + for(j=0;j<max;j++){ + std::cout<<"j "<<j<<std::endl; + std::vector<double> propertiesModified; + propertiesModified.clear(); + propertiesModified.resize(4*max); + std::cout<<"before assign propModif"<<std::endl; + for(unsigned int k=0;k < properties.size();k++){ + propertiesModified[k] = properties[k]; + } + std::cout<<"after assign propModif"<<std::endl; + propertiesModified[4*j + 2] += 0.01; + voroMetal3D vm1; + std::cout<<"before execute"<<std::endl; + //std::remove("MicrostructurePolycrystal3D.geo"); + vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); + //GModel::current()->destroy(); + GModel *m = new GModel(); + //GModel::current()->load("MicrostructurePolycrystal3D.geo"); + m->load("MicrostructurePolycrystal3D.geo"); + double distMinTmp = 1000.0; + //GModel *m = GModel::current(); + for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ + GEdge* eTmp = (*ite); + GVertex* vTmp1 = eTmp->getBeginVertex(); + GVertex* vTmp2 = eTmp->getEndVertex(); + double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); + if (distTmp < distMinTmp){ + distMinTmp = distTmp; + } + } + if (distMinTmp > distMinGlobal){ + distMinGlobal = distMinTmp; + jMinGlobal = j; + xORyORz = 3; + posORneg = 1; + } + delete m; + } + for(j=0;j<max;j++){ + std::cout<<"j "<<j<<std::endl; + std::vector<double> propertiesModified; + propertiesModified.clear(); + propertiesModified.resize(4*max); + std::cout<<"before assign propModif"<<std::endl; + for(unsigned int k=0;k < properties.size();k++){ + propertiesModified[k] = properties[k]; + } + std::cout<<"after assign propModif"<<std::endl; + propertiesModified[4*j] -= 0.01; + voroMetal3D vm1; + std::cout<<"before execute"<<std::endl; + //std::remove("MicrostructurePolycrystal3D.geo"); + vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); + //GModel::current()->destroy(); + GModel *m = new GModel(); + //GModel::current()->load("MicrostructurePolycrystal3D.geo"); + m->load("MicrostructurePolycrystal3D.geo"); + double distMinTmp = 1000.0; + //GModel *m = GModel::current(); + for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ + GEdge* eTmp = (*ite); + GVertex* vTmp1 = eTmp->getBeginVertex(); + GVertex* vTmp2 = eTmp->getEndVertex(); + double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); + if (distTmp < distMinTmp){ + distMinTmp = distTmp; + } + } + if (distMinTmp > distMinGlobal){ + distMinGlobal = distMinTmp; + jMinGlobal = j; + xORyORz = 1; + posORneg = 2; + } + delete m; + } + for(j=0;j<max;j++){ + std::cout<<"j "<<j<<std::endl; + std::vector<double> propertiesModified; + propertiesModified.clear(); + propertiesModified.resize(4*max); + std::cout<<"before assign propModif"<<std::endl; + for(unsigned int k=0;k < properties.size();k++){ + propertiesModified[k] = properties[k]; + } + std::cout<<"after assign propModif"<<std::endl; + propertiesModified[4*j + 1] -= 0.01; + voroMetal3D vm1; + std::cout<<"before execute"<<std::endl; + //std::remove("MicrostructurePolycrystal3D.geo"); + vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); + //GModel::current()->destroy(); + GModel *m = new GModel(); + //GModel::current()->load("MicrostructurePolycrystal3D.geo"); + m->load("MicrostructurePolycrystal3D.geo"); + double distMinTmp = 1000.0; + //GModel *m = GModel::current(); + for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ + GEdge* eTmp = (*ite); + GVertex* vTmp1 = eTmp->getBeginVertex(); + GVertex* vTmp2 = eTmp->getEndVertex(); + double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); + if (distTmp < distMinTmp){ + distMinTmp = distTmp; + } + } + if (distMinTmp > distMinGlobal){ + distMinGlobal = distMinTmp; + jMinGlobal = j; + xORyORz = 2; + posORneg = 2; + } + delete m; + } + for(j=0;j<max;j++){ + std::cout<<"j "<<j<<std::endl; + std::vector<double> propertiesModified; + propertiesModified.clear(); + propertiesModified.resize(4*max); + std::cout<<"before assign propModif"<<std::endl; + for(unsigned int k=0;k < properties.size();k++){ + propertiesModified[k] = properties[k]; + } + std::cout<<"after assign propModif"<<std::endl; + propertiesModified[4*j + 2] -= 0.01; + voroMetal3D vm1; + std::cout<<"before execute"<<std::endl; + //std::remove("MicrostructurePolycrystal3D.geo"); + vm1.execute(propertiesModified,radical,0.1,xMax,yMax,zMax); + //GModel::current()->destroy(); + GModel *m = new GModel(); + //GModel::current()->load("MicrostructurePolycrystal3D.geo"); + m->load("MicrostructurePolycrystal3D.geo"); + double distMinTmp = 1000.0; + //GModel *m = GModel::current(); + for (GModel::eiter ite= m->firstEdge();ite != m->lastEdge();ite++){ + GEdge* eTmp = (*ite); + GVertex* vTmp1 = eTmp->getBeginVertex(); + GVertex* vTmp2 = eTmp->getEndVertex(); + double distTmp = sqrt((vTmp1->x() - vTmp2->x()) * (vTmp1->x() - vTmp2->x()) + (vTmp1->y() - vTmp2->y()) * (vTmp1->y() - vTmp2->y()) + (vTmp1->z() - vTmp2->z()) * (vTmp1->z() - vTmp2->z())); + if (distTmp < distMinTmp){ + distMinTmp = distTmp; + } + } + if (distMinTmp > distMinGlobal){ + distMinGlobal = distMinTmp; + jMinGlobal = j; + xORyORz = 3; + posORneg = 2; + } + delete m; + } + std::cout<<"distance minimale de "<<distMinGlobal<<std::endl; + listDistances[Count] = distMinGlobal; + if (xORyORz == 1){ + if (posORneg == 1){ + properties[4*jMinGlobal] += 0.01; + } else if (posORneg == 2){ + properties[4*jMinGlobal] -= 0.01; + } + } else if (xORyORz == 2){ + if (posORneg == 1){ + properties[4*jMinGlobal + 1] += 0.01; + } else if (posORneg == 2){ + properties[4*jMinGlobal + 1] -= 0.01; + } + } else if (xORyORz == 3){ + if (posORneg == 1){ + properties[4*jMinGlobal + 2] += 0.01; + } else if (posORneg == 2){ + properties[4*jMinGlobal + 2] -= 0.01; + } + } + } + voroMetal3D vm1; + vm1.execute(properties,radical,0.1,xMax,yMax,zMax); + GModel::current()->load("MicrostructurePolycrystal3D.geo"); + voroMetal3D vm2; + vm2.correspondance(0.00001,xMax,yMax,zMax); + for (unsigned int iTmp = 0; iTmp < listDistances.size();iTmp++){ + std::cout<<"distMinGlobal "<<iTmp<<" egale a "<<listDistances[iTmp]<<std::endl; + } + std::cout<<"liste des nouveaux seeds :"<<std::endl; + for(unsigned int iTmp = 0; iTmp < max;iTmp++){ + std::cout<<properties[4*iTmp]<<" "<<properties[4*iTmp + 1]<<" "<<properties[4*iTmp + 2]<<" "<<properties[4*iTmp + 3]<<std::endl; + + } + } +} + diff --git a/Mesh/periodical.h b/Mesh/periodical.h index a794d65aff1983f05897fe82c9b428cac33f5158..a0dff0718b164d7b5c2216a95e39b309eaa04a23 100644 --- a/Mesh/periodical.h +++ b/Mesh/periodical.h @@ -35,3 +35,9 @@ class voroMetal3D{ void correspondance(double,double,double,double,int,bool&,double,double,double); bool equal(double,double,double); }; + + +void microstructure(const char *filename); +void computeBestSeeds(const char *filename); + +