diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index 925e484edc101bf294db63ce01d69773e8f633b2..73011a72e12b1bbda025caff409cdd0a5dcb6c05 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -492,11 +492,17 @@ void GetOptions(int argc, char *argv[]) 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++){ @@ -506,10 +512,10 @@ void GetOptions(int argc, char *argv[]) file >> properties[4*j+3]; } voroMetal3D vm1; - vm1.execute(properties,radical,0.1); + vm1.execute(properties,radical,0.1,xMax,yMax,zMax); GModel::current()->load("MicrostructurePolycrystal3D.geo"); voroMetal3D vm2; - vm2.correspondance(0.00001); + vm2.correspondance(0.00001,xMax,yMax,zMax); } } #endif diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp index 91ee53ec0be22cfb6e9849176ccd8d9c57bd9fbd..1590d0d43de714a4077612fcdec4130fec021159 100644 --- a/Mesh/meshGFace.cpp +++ b/Mesh/meshGFace.cpp @@ -175,7 +175,7 @@ static void copyMesh(GFace *source, GFace *target) else { SVector3 DX2 = DX - SVector3 (vt->x() - vs->x(), vt->y() - vs->y(), vt->z() - vs->z()); - if (DX2.norm() > DX.norm() * 1.e-8) translation = false; + if (DX2.norm() > DX.norm() * 1.e-5) translation = false; } count ++; } diff --git a/Mesh/periodical.cpp b/Mesh/periodical.cpp index 2c4f943b4173497e3b43d48617481cccae76f15d..de07870ce1470c637749b302dc9a6826ee1036dd 100644 --- a/Mesh/periodical.cpp +++ b/Mesh/periodical.cpp @@ -105,10 +105,13 @@ void voroMetal3D::execute(GRegion* gr,double h){ radii.push_back(1.0); } - execute(vertices2,radii,0,h); + double xMax = 1.0; + double yMax = 1.0; + double zMax = 1.0; + execute(vertices2,radii,0,h,xMax,yMax,zMax); } -void voroMetal3D::execute(std::vector<double>& properties,int radical,double h){ +void voroMetal3D::execute(std::vector<double>& properties,int radical,double h, double xMax, double yMax, double zMax){ unsigned int i; std::vector<SPoint3> vertices; std::vector<double> radii; @@ -121,10 +124,10 @@ void voroMetal3D::execute(std::vector<double>& properties,int radical,double h){ radii.push_back(properties[4*i+3]); } - execute(vertices,radii,radical,h); + execute(vertices,radii,radical,h,xMax,yMax,zMax); } -void voroMetal3D::execute(std::vector<SPoint3>& vertices,std::vector<double>& radii,int radical,double h){ +void voroMetal3D::execute(std::vector<SPoint3>& vertices,std::vector<double>& radii,int radical,double h, double xMax, double yMax, double zMax){ #if defined(HAVE_VORO3D) unsigned int i; unsigned int j; @@ -173,7 +176,10 @@ void voroMetal3D::execute(std::vector<SPoint3>& vertices,std::vector<double>& ra delta = 0.2*(max_x - min_x); min_x=min_y=min_z = 0; - max_x=max_y=max_z = 1; +// max_x=max_y=max_z = 1; + max_x = xMax; + max_y = yMax; + max_z = zMax; delta = 0; container contA(min_x-delta,max_x+delta,min_y-delta,max_y+delta,min_z-delta,max_z+delta,6,6,6,true,true,true,vertices.size()); @@ -444,7 +450,7 @@ void voroMetal3D::print_geo_face_loop(int index,std::vector<int>& indices,std::o file << "};\n"; } -void voroMetal3D::correspondance(double e){ +void voroMetal3D::correspondance(double e, double xMax, double yMax, double zMax){ unsigned int i; unsigned int j; int count; @@ -555,7 +561,7 @@ void voroMetal3D::correspondance(double e){ delta_y = fabs(p2.y()-p1.y()); delta_z = fabs(p2.z()-p1.z()); - flag = correspondance(delta_x,delta_y,delta_z,e,val); + flag = correspondance(delta_x,delta_y,delta_z,e,val,xMax,yMax,zMax); if(flag){ it5 = markings.find(faces[i]); @@ -748,11 +754,11 @@ void voroMetal3D::correspondance(double e){ v3 = (*it8)->getBeginVertex(); v4 = (*it8)->getEndVertex(); - correspondance(fabs(v3->x()-v1->x()),fabs(v3->y()-v1->y()),fabs(v3->z()-v1->z()),e,categories[i],flag1); - correspondance(fabs(v4->x()-v2->x()),fabs(v4->y()-v2->y()),fabs(v4->z()-v2->z()),e,categories[i],flag2); + correspondance(fabs(v3->x()-v1->x()),fabs(v3->y()-v1->y()),fabs(v3->z()-v1->z()),e,categories[i],flag1,xMax,yMax,zMax); + correspondance(fabs(v4->x()-v2->x()),fabs(v4->y()-v2->y()),fabs(v4->z()-v2->z()),e,categories[i],flag2,xMax,yMax,zMax); - correspondance(fabs(v4->x()-v1->x()),fabs(v4->y()-v1->y()),fabs(v4->z()-v1->z()),e,categories[i],flag3); - correspondance(fabs(v3->x()-v2->x()),fabs(v3->y()-v2->y()),fabs(v3->z()-v2->z()),e,categories[i],flag4); + correspondance(fabs(v4->x()-v1->x()),fabs(v4->y()-v1->y()),fabs(v4->z()-v1->z()),e,categories[i],flag3,xMax,yMax,zMax); + correspondance(fabs(v3->x()-v2->x()),fabs(v3->y()-v2->y()),fabs(v3->z()-v2->z()),e,categories[i],flag4,xMax,yMax,zMax); if(flag1 && flag2){ if(phase==1){ @@ -832,39 +838,39 @@ void voroMetal3D::correspondance(double e){ file4 << "};\n"; } -bool voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int& val){ +bool voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int& val,double xMax,double yMax,double zMax){ bool flag; flag = 0; val = 1000; - if(equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){ + if(equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){ flag = 1; val = 1; } - if(equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){ + if(equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){ flag = 1; val = 2; } - if(equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){ + if(equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){ flag = 1; val = 3; } - if(equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){ + if(equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){ flag = 1; val = 4; } - if(equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){ + if(equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){ flag = 1; val = 5; } - if(equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){ + if(equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){ flag = 1; val = 6; } - if(equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){ + if(equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){ flag = 1; val = 7; } @@ -872,30 +878,30 @@ bool voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,do return flag; } -void voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int val,bool& flag){ +void voroMetal3D::correspondance(double delta_x,double delta_y,double delta_z,double e,int val,bool& flag,double xMax,double yMax,double zMax){ flag = 0; - if(val==1 && equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){ + if(val==1 && equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,0.0,e)){ flag = 1; } - if(val==2 && equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){ + if(val==2 && equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){ flag = 1; } - if(val==3 && equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){ + if(val==3 && equal(delta_x,0.0,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){ flag = 1; } - if(val==4 && equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,0.0,e)){ + if(val==4 && equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,0.0,e)){ flag = 1; } - if(val==5 && equal(delta_x,0.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){ + if(val==5 && equal(delta_x,0.0,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){ flag = 1; } - if(val==6 && equal(delta_x,1.0,e) && equal(delta_y,0.0,e) && equal(delta_z,1.0,e)){ + if(val==6 && equal(delta_x,xMax,e) && equal(delta_y,0.0,e) && equal(delta_z,zMax,e)){ flag = 1; } - if(val==7 && equal(delta_x,1.0,e) && equal(delta_y,1.0,e) && equal(delta_z,1.0,e)){ + if(val==7 && equal(delta_x,xMax,e) && equal(delta_y,yMax,e) && equal(delta_z,zMax,e)){ flag = 1; } } diff --git a/Mesh/periodical.h b/Mesh/periodical.h index 8bb96d2df5f80b1007d737a364d50be242d1357f..dae1b49ec08dbbe1b3ab9e0f0ee1a649f644f68b 100644 --- a/Mesh/periodical.h +++ b/Mesh/periodical.h @@ -16,8 +16,8 @@ class voroMetal3D{ ~voroMetal3D(); void execute(double); void execute(GRegion*,double); - void execute(std::vector<SPoint3>&,std::vector<double>&,int,double); - void execute(std::vector<double>&,int,double); + void execute(std::vector<SPoint3>&,std::vector<double>&,int,double,double,double,double); + void execute(std::vector<double>&,int,double,double,double,double); void print_segment(SPoint3,SPoint3,std::ofstream&); void initialize_counter(); void increase_counter(); @@ -30,8 +30,8 @@ class voroMetal3D{ void print_geo_physical_volume(int,int,std::ofstream&); void print_geo_line_loop(int,std::vector<int>&,std::vector<int>&,std::ofstream&); void print_geo_face_loop(int,std::vector<int>&,std::ofstream&); - void correspondance(double); - bool correspondance(double,double,double,double,int&); - void correspondance(double,double,double,double,int,bool&); + void correspondance(double,double,double,double); + bool correspondance(double,double,double,double,int&,double,double,double); + void correspondance(double,double,double,double,int,bool&,double,double,double); bool equal(double,double,double); };