diff --git a/Geo/Curvature.cpp b/Geo/Curvature.cpp index f77eeb18a37fa925e27d7b28ea047a7b54a00ae2..beaf1615064deb7b9fd6bf1cd3d080326393a16c 100644 --- a/Geo/Curvature.cpp +++ b/Geo/Curvature.cpp @@ -884,9 +884,9 @@ void Curvature::computeCurvature(GModel* model, typeOfCurvature typ) double t1 = Cpu(); Msg::StatusBar(2, true, "(C) Done Computing Curvature (%g s)", t1-t0); - writeToMshFile("curvature.msh"); + //writeToMshFile("curvature.msh"); writeToPosFile("curvature.pos"); - writeToVtkFile("curvature.vtk"); + //writeToVtkFile("curvature.vtk"); } diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp index 1e2680c76f23f65925c9729b3938696ba4614698..59d308f5b1e350615c1c9f83963596fd4c81b501 100644 --- a/Geo/GFaceCompound.cpp +++ b/Geo/GFaceCompound.cpp @@ -804,21 +804,21 @@ void GFaceCompound::convexBoundary(double nTot) const } - // char name[256]; - // sprintf(name, "myBC-%d.pos", kk); - // FILE * f2 = fopen(name,"w"); - // fprintf(f2, "View \"\"{\n"); - // for (int i = 0; i< oVert.size()-1; i++){ - // SPoint3 uv0 = coordinates[oVert[i]]; - // SPoint3 uv1 = coordinates[oVert[i+1]]; - // fprintf(f2, "SL(%g,%g,%g,%g,%g,%g){%g,%g};\n", - // uv0.x(),uv0.y(), uv0.z(), - // uv1.x(),uv1.y(), uv1.z(), - // (double)i, (double)i+1); - // } - // fprintf(f2,"};\n"); - // fclose(f2); - // kk++; + char name[256]; + sprintf(name, "myBC-%d.pos", kk); + FILE * f2 = fopen(name,"w"); + fprintf(f2, "View \"\"{\n"); + for (int i = 0; i< oVert.size()-1; i++){ + SPoint3 uv0 = coordinates[oVert[i]]; + SPoint3 uv1 = coordinates[oVert[i+1]]; + fprintf(f2, "SL(%g,%g,%g,%g,%g,%g){%g,%g};\n", + uv0.x(),uv0.y(), uv0.z(), + uv1.x(),uv1.y(), uv1.z(), + (double)i, (double)i+1); + } + fprintf(f2,"};\n"); + fclose(f2); + kk++; } @@ -889,16 +889,17 @@ bool GFaceCompound::parametrize() const if(allNodes.empty()) buildAllNodes(); - bool success = orderVertices(_U0, _ordered, _coords); - if(!success) {Msg::Error("Could not order vertices on boundary");exit(1);} - + if (_type != SQUARE){ + bool success = orderVertices(_U0, _ordered, _coords); + if(!success) {Msg::Error("Could not order vertices on boundary");exit(1);} + } + // Convex parametrization if (_mapping == CONVEX){ Msg::Info("Parametrizing surface %d with 'convex map'", tag()); fillNeumannBCS(); parametrize(ITERU,CONVEX); parametrize(ITERV,CONVEX); - printStuff(11); if (_type==MEANPLANE){ checkOrientation(0, true); // printStuff(22); @@ -906,45 +907,45 @@ bool GFaceCompound::parametrize() const // parametrize(ITERU,CONVEX); // parametrize(ITERV,CONVEX); // checkOrientation(0, true); - // printStuff(33); } - printStuff(44); } // Laplace parametrization else if (_mapping == HARMONIC){ Msg::Info("Parametrizing surface %d with 'harmonic map'", tag()); fillNeumannBCS(); parametrize(ITERU,HARMONIC); - parametrize(ITERV,HARMONIC); - printStuff(111); + parametrize(ITERV,HARMONIC); if (_type == MEANPLANE) checkOrientation(0, true); - printStuff(222); } // Conformal map parametrization else if (_mapping == CONFORMAL){ - + fillNeumannBCS(); std::vector<MVertex *> vert; bool oriented, hasOverlap; if (_type == SPECTRAL){ Msg::Info("Parametrizing surface %d with 'spectral conformal map'", tag()); - hasOverlap = parametrize_conformal_spectral(); + parametrize_conformal_spectral(); } else if (_type == FE){ Msg::Info("Parametrizing surface %d with 'FE conformal map'", tag()); parametrize_conformal(0, NULL, NULL); } + printStuff(55); oriented = checkOrientation(0); + printStuff(66); if (!oriented) oriented = checkOrientation(0, true); + printStuff(77); if (_type==SPECTRAL && (!oriented || checkOverlap(vert)) ){ Msg::Warning("!!! parametrization switched to 'FE conformal' map"); parametrize_conformal(0, NULL, NULL); oriented = checkOrientation(0, true); } if (!oriented || checkOverlap(vert)){ - Msg::Warning("$$$ parametrization switched to 'harmonic' map"); - parametrize(ITERU,HARMONIC); - parametrize(ITERV,HARMONIC); + Msg::Warning("$$$ parametrization switched to 'convex' map"); + _type = UNITCIRCLE; + parametrize(ITERU,CONVEX); + parametrize(ITERV,CONVEX); } } // Radial-Basis Function parametrization @@ -953,15 +954,9 @@ bool GFaceCompound::parametrize() const int variableEps = 0; int radFunInd = 1; // 1 MQ RBF , 0 GA double sizeBox = getSizeH(); - fullMatrix<double> Oper(3*allNodes.size(),3*allNodes.size()); _rbf = new GRbf(sizeBox, variableEps, radFunInd, _normals, allNodes, _ordered); - - //_rbf->RbfLapSurface_global_CPM_low(_rbf->getXYZ(), _rbf->getN(), Oper); - //_rbf->RbfLapSurface_local_CPM(true, _rbf->getXYZ(), _rbf->getN(), Oper); _rbf->RbfLapSurface_global_CPM_high_2(_rbf->getXYZ(), _rbf->getN(), Oper); - //_rbf->RbfLapSurface_local_CPM(false, _rbf->getXYZ(), _rbf->getN(), Oper); - _rbf->solveHarmonicMap(Oper, _ordered, _coords, coordinates); } @@ -1725,15 +1720,15 @@ bool GFaceCompound::parametrize_conformal(int iter, MVertex *v1, MVertex *v2) co // vertices std::vector<MVertex *> vert; bool hasOverlap = checkOverlap(vert); - if ( hasOverlap && iter < 3){ - Msg::Info("Loop FE conformal iter (%d) v1=%d v2=%d", iter, - vert[0]->getNum(), vert[1]->getNum()); - printStuff(100+iter); - return hasOverlap = parametrize_conformal(iter+1, vert[0],vert[1]); - } - else{ - return hasOverlap; - } + // if ( hasOverlap && iter < 3){ + // Msg::Info("Loop FE conformal iter (%d) v1=%d v2=%d", iter, + // vert[0]->getNum(), vert[1]->getNum()); + // printStuff(100+iter); + // return hasOverlap = parametrize_conformal(iter+1, vert[0],vert[1]); + // } + // else{ + // return hasOverlap; + // } } void GFaceCompound::computeNormals(std::map<MVertex*,SVector3> &normals) const diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index bd87dc2215800f91cbfa8f3ed1d81ce3b0378bc4..29f4a8b202f000b538db2957b0325f5f17c6654b 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -553,9 +553,6 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou metric->addMetric(technique[imetric], f[imetric], parameters[imetric]); } fields->setBackgroundField(metric); - // int id = fields->newId(); - // (*fields)[id] = new meshMetric(this, technique, f, parameters); - // fields->background_field = id; opt_mesh_lc_integration_precision(0, GMSH_SET, 1.e-4); opt_mesh_algo2d(0, GMSH_SET, 7.0); //bamg @@ -572,7 +569,7 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou char name[256]; sprintf(name, "meshAdapt-%d.msh", ITER); writeMSH(name); - //metric->exportInfo(name); + metric->exportInfo(name); if (ITER++ >= niter) break; if (ITER > 3 && fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break; diff --git a/Mesh/CenterlineField.cpp b/Mesh/CenterlineField.cpp index ab3b5ebf246294d4c4953a80d9b1913ccdf5b6fa..040bafa1b3b0ac91c79d35c1ff50181e4c922746 100644 --- a/Mesh/CenterlineField.cpp +++ b/Mesh/CenterlineField.cpp @@ -634,7 +634,8 @@ void Centerline::createSplitCompounds(){ int num_gfc = NF+i+1; Msg::Info("Parametrize Compound Surface (%d) = %d discrete face", num_gfc, pf->tag()); - GFaceCompound::typeOfCompound typ = GFaceCompound::HARMONIC_PLANE; + GFaceCompound::typeOfCompound typ = GFaceCompound::CONVEX_CIRCLE; + //GFaceCompound::typeOfCompound typ = GFaceCompound::HARMONIC_PLANE; //GFaceCompound::typeOfMapping typ = GFaceCompound::CONFORMAL_SPECTRAL; GFaceCompound *gfc = new GFaceCompound(current, num_gfc, f_compound, U0, typ, 0); diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp index 913d36d4567364614c917fd129a58b38a1e22a85..f02382dc20f17839d65e27601f5a6fb62f197fe1 100644 --- a/Mesh/meshGFaceDelaunayInsertion.cpp +++ b/Mesh/meshGFaceDelaunayInsertion.cpp @@ -1181,6 +1181,7 @@ void bowyerWatsonFrontal(GFace *gf) Msg::Debug("%7d points created -- Worst tri radius is %8.3f", vSizes.size(), worst->getRadius()); double newPoint[2], metric[3]; + //optimalPointFrontal (gf,worst,active_edge,Us,Vs,vSizes,vSizesBGM,newPoint,metric); optimalPointFrontalB (gf,worst,active_edge,Us,Vs,vSizes,vSizesBGM,newPoint,metric); insertAPoint(gf, AllTris.end(), newPoint, metric, Us, Vs, vSizes, vSizesBGM, vMetricsBGM, AllTris, &ActiveTris, worst); diff --git a/Mesh/meshMetric.cpp b/Mesh/meshMetric.cpp index b1fa1ad386627ca461a7afa62f260f8a617bf682..dc3d537c460e00f0eaa82610b6c9baf0f1752407 100644 --- a/Mesh/meshMetric.cpp +++ b/Mesh/meshMetric.cpp @@ -109,17 +109,26 @@ void meshMetric::intersectMetrics(){ } void meshMetric::exportInfo(const char * fileendname){ + + printf("printing metric \n"); + if (_technique == meshMetric::HESSIAN) printf("HESSIANS \n"); + else if (_technique == meshMetric::LEVELSET) printf("LEVELSETS \n"); + else if (_technique == meshMetric::EIGENDIRECTIONS) printf("EIGEN \n"); + if (needMetricUpdate) intersectMetrics(); - std::stringstream sg,sm,sl; - sg << "meshmetric_gradients" << fileendname; - sm << "meshmetric_metric" << fileendname; - sl << "meshmetric_levelset" << fileendname; + std::stringstream sg,sm,sl,sh; + sg << "meshmetric_gradients_" << fileendname; + sm << "meshmetric_metric_" << fileendname; + sl << "meshmetric_levelset_" << fileendname; + sh << "meshmetric_hessian_" << fileendname; std::ofstream out_grad(sg.str().c_str()); std::ofstream out_metric(sm.str().c_str()); std::ofstream out_ls(sl.str().c_str()); + std::ofstream out_hess(sh.str().c_str()); out_grad << "View \"ls_gradient\"{" << std::endl; out_metric << "View \"metric\"{" << std::endl; out_ls << "View \"ls\"{" << std::endl; + out_hess << "View \"hessian\"{" << std::endl; std::vector<MElement*>::iterator itelem = _elements.begin(); std::vector<MElement*>::iterator itelemen = _elements.end(); for (;itelem!=itelemen;itelem++){ @@ -127,27 +136,41 @@ void meshMetric::exportInfo(const char * fileendname){ out_metric << "TT("; out_grad << "VT("; out_ls << "ST("; + out_hess << "ST("; for ( int i = 0; i < e->getNumVertices(); i++) { MVertex *ver = e->getVertex(i); out_metric << ver->x() << "," << ver->y() << "," << ver->z(); out_grad << ver->x() << "," << ver->y() << "," << ver->z(); out_ls << ver->x() << "," << ver->y() << "," << ver->z(); + out_hess << ver->x() << "," << ver->y() << "," << ver->z(); if (i!=e->getNumVertices()-1){ out_metric << ","; out_grad << ","; out_ls << ","; + out_hess << ","; } else{ out_metric << "){"; out_grad << "){"; out_ls << "){"; + out_hess << "){"; } } for ( int i = 0; i < e->getNumVertices(); i++) { MVertex *ver = e->getVertex(i); out_ls << vals[ver]; - if ((i==(e->getNumVertices()-1))) out_ls << "};" << std::endl; - else out_ls << ","; + SVector3 gradudx = dgrads[0][ver]; + SVector3 gradudy = dgrads[1][ver]; + SVector3 gradudz = dgrads[2][ver]; + out_hess << (gradudx(0)+gradudy(1)+gradudz(2)); + if ((i==(e->getNumVertices()-1))){ + out_ls << "};" << std::endl; + out_hess << "};" << std::endl; + } + else { + out_ls << ","; + out_hess << ","; + } for (int k=0;k<3;k++){ out_grad << grads[ver](k); if ((k==2)&&(i==(e->getNumVertices()-1))) out_grad << "};" << std::endl; @@ -163,9 +186,13 @@ void meshMetric::exportInfo(const char * fileendname){ out_grad << "};" << std::endl; out_metric << "};" << std::endl; out_ls << "};" << std::endl; + out_hess << "};" << std::endl; out_grad.close(); out_metric.close(); out_ls.close(); + out_hess.close(); + + //exit(1); } @@ -329,21 +356,7 @@ void meshMetric::computeMetric(){ hfrey(1,0) = hfrey(0,1) = C*gr(1)*gr(0)/(norm) + hessian(1,0)/epsGeom; hfrey(2,0) = hfrey(0,2) = C*gr(2)*gr(0)/(norm) + hessian(2,0)/epsGeom; hfrey(2,1) = hfrey(1,2) = C*gr(2)*gr(1)/(norm) + hessian(2,1)/epsGeom; - // hfrey(0,0) += C*gr(0)*gr(0)/norm; - // hfrey(1,1) += C*gr(1)*gr(1)/norm; - // hfrey(2,2) += C*gr(2)*gr(2)/norm; - // hfrey(1,0) = hfrey(0,1) = gr(1)*gr(0)/(norm) ; - // hfrey(2,0) = hfrey(0,2) = gr(2)*gr(0)/(norm) ; - // hfrey(2,1) = hfrey(1,2) = gr(2)*gr(1)/(norm) ; } - // SMetric3 sss=hessian; - // sss *= divEps; - // sss(0,0) += 1/(hmax*hmax); - // sss(1,1) += 1/(hmax*hmax); - // sss(2,2) += 1/(hmax*hmax); - // H = intersection(sss,hfrey); - // if (dist < _E) H = intersection(sss,hfrey); - // else H = hfrey; H = hfrey; } else if ((_technique == meshMetric::EIGENDIRECTIONS )||(_technique == meshMetric::EIGENDIRECTIONS_LINEARINTERP_H )){ @@ -396,16 +409,11 @@ void meshMetric::computeMetric(){ std::vector<int> ti_index; for (int i=0;i<3;i++) if (i!=grad_index) ti_index.push_back(i); -// std::cout << "gr tgr t1 t2 dots_tgr_gr_t1_t2 (" << gr(0) << "," << gr(1) << "," << gr(2) << ") (" << ti[grad_index](0) << "," << ti[grad_index](1) << "," << ti[grad_index](2) << ") (" << ti[ti_index[0]](0) << "," << ti[ti_index[0]](1) << "," << ti[ti_index[0]](2) << ") (" << ti[ti_index[1]](0) << "," << ti[ti_index[1]](1) << "," << ti[ti_index[1]](2) << ") " << fabs(dot(ti[grad_index],gr)) << " " << (dot(ti[grad_index],ti[ti_index[0]])) << " " << (dot(ti[grad_index],ti[ti_index[1]])) << std::endl; - // finally, creating the metric std::vector<double> eigenvals; eigenvals.push_back(std::min(std::max(eigenval_direction,metric_value_hmax),metric_value_hmin));// in gradient direction eigenvals.push_back(std::min(std::max(eigenvals_curvature[ti_index[0]],metric_value_hmax),metric_value_hmin)); eigenvals.push_back(std::min(std::max(eigenvals_curvature[ti_index[1]],metric_value_hmax),metric_value_hmin)); -// eigenvals.push_back(std::min(std::max(metric_value_hmax,metric_value_hmax),metric_value_hmin)); -// eigenvals.push_back(std::min(std::max(metric_value_hmax,metric_value_hmax),metric_value_hmin)); - metric = SMetric3(eigenvals[0],eigenvals[1],eigenvals[2],gr,ti[ti_index[0]],ti[ti_index[1]]); setOfSizes[metricNumber].insert(std::make_pair(ver, std::min(std::min(1/sqrt(eigenvals[0]),1/sqrt(eigenvals[1])),1/sqrt(eigenvals[2])))); } @@ -432,23 +440,9 @@ void meshMetric::computeMetric(){ H.eig(V,S); double lambda1, lambda2, lambda3; - // if (dist < _E && _technique == meshMetric::FREY){ - // fullMatrix<double> Vhess(3,3); - // fullVector<double> Shess(3); - // hessian.eig(Vhess,Shess); - // double h = hmin*(hmax/hmin-1)*dist/_E + hmin; - // double lam1 = Shess(0); - // double lam2 = Shess(1); - // double lam3 = (_dim == 3)? Shess(2) : 1.; - // lambda1 = lam1; - // lambda2 = lam2/lambda1; - // lambda3 = (_dim == 3)? lam3/lambda1: 1.0; - // } - // else{ lambda1 = S(0); lambda2 = S(1); lambda3 = (_dim == 3)? S(2) : 1.; - //} if (_technique == meshMetric::HESSIAN || (dist < _E && _technique == meshMetric::FREY)){ lambda1 = std::min(std::max(fabs(S(0))/_epsilon,1./(hmax*hmax)),1./(hmin*hmin)); @@ -471,6 +465,8 @@ void meshMetric::computeMetric(){ } } + //exportInfo("EMI"); + //Adapt epsilon //----------------- @@ -553,36 +549,6 @@ void meshMetric::operator() (double x, double y, double z, SMetric3 &metr, GEnti } } -void meshMetric::printMetric(const char* n){ - if (needMetricUpdate) intersectMetrics(); - if (!setOfMetrics.size()){ - std::cout << "meshMetric::printMetric : No metric defined ! " << std::endl; - throw; - } - - FILE *f = fopen (n,"w"); - fprintf(f,"View \"\"{\n"); - - //std::map<MVertex*,SMetric3 >::const_iterator it = _hessian.begin(); - std::map<MVertex*,SMetric3>::const_iterator it= _nodalMetrics.begin(); - //for (; it != _nodalMetrics.end(); ++it){ - for (; it != _hessian.end(); ++it){ - MVertex *v = it->first; - SMetric3 h = it->second; - double lapl = h(0,0)+h(1,1)+h(2,2); - //fprintf(f, "SP(%g,%g,%g){%g};\n", it->first->x(),it->first->y(),it->first->z(),lapl); - fprintf(f,"TP(%g,%g,%g){%g,%g,%g,%g,%g,%g,%g,%g,%g};\n", - it->first->x(),it->first->y(),it->first->z(), - h(0,0),h(0,1),h(0,2), - h(1,0),h(1,1),h(1,2), - h(2,0),h(2,1),h(2,2) - ); - - } - fprintf(f,"};\n"); - fclose (f); -} - double meshMetric::getLaplacian (MVertex *v) { MVertex *vNew = _vertexMap[v->getNum()]; std::map<MVertex*, SMetric3 >::const_iterator it = _hessian.find(vNew); diff --git a/Mesh/meshMetric.h b/Mesh/meshMetric.h index 262f418716edb9cab590b98dc575a30fee414c81..bd166dcabd0149d6ca256b7fc97240bb6cd406b7 100644 --- a/Mesh/meshMetric.h +++ b/Mesh/meshMetric.h @@ -96,7 +96,6 @@ class meshMetric: public Field { virtual double operator() (double x, double y, double z, GEntity *ge=0) ; virtual void operator() (double x, double y, double z, SMetric3 &metr, GEntity *ge=0); - void printMetric(const char* n); // export pos files of fct, fct gradients (fct is the lattest fct passed to meshMetric !!) and resulting metric (intersection of all computed metrics) void exportInfo(const char *fileendname); }; diff --git a/Solver/multiscaleLaplace.cpp b/Solver/multiscaleLaplace.cpp index aaaf4ec24ee406f73d5a85ac82acd6a6519f54b1..a0a5c9b2a6d9cb62850009416f79a8e3c3f981ab 100644 --- a/Solver/multiscaleLaplace.cpp +++ b/Solver/multiscaleLaplace.cpp @@ -876,8 +876,8 @@ multiscaleLaplace::multiscaleLaplace (std::vector<MElement *> &elements, //Split the mesh in left and right //or Cut the mesh in left and right - splitElems(elements); - //cutElems(elements); + //splitElems(elements); + cutElems(elements); } diff --git a/benchmarks/3d/CubeAniso.geo b/benchmarks/3d/CubeAniso.geo index 03ca0392a9425701c119d1b492bc456d9ed01690..ea3963d7f85ea3fd47a49fa34e19b171d6249c16 100644 --- a/benchmarks/3d/CubeAniso.geo +++ b/benchmarks/3d/CubeAniso.geo @@ -50,7 +50,7 @@ Field[2] = MathEvalAniso; Field[2].m11 = "1./(0.1)^2"; Field[2].m12 = "0"; Field[2].m13 = "0"; -Field[2].m22 = "y+1/(0.001)^2"; +Field[2].m22 = "y+1/(0.005)^2"; Field[2].m23 = "0"; Field[2].m33 = "1/(0.1)^2"; Background Field = 2; diff --git a/benchmarks/curvature/test.geo b/benchmarks/curvature/test.geo index 6135e8eab3b729c79af89d64857bf962c9fc423a..2e8167cd6dda0f70669c9b4770dd9c825dbb2cc2 100644 --- a/benchmarks/curvature/test.geo +++ b/benchmarks/curvature/test.geo @@ -4,25 +4,39 @@ Mesh.Algorithm=1; //(1=MeshAdapt, 2=Automatic, 5=Delaunay, 6=Frontal, 7=bamg, 8=delquad) //Mesh.CharacteristicLengthFactor= 0.1; + + Mesh.CharacteristicLengthFromCurvature=1; //-clcurv Mesh.CharacteristicLengthFromPoints = 0; Mesh.CharacteristicLengthMin = 0.001; - Mesh.CharacteristicLengthMax = 10.00; + Mesh.CharacteristicLengthMax = 3.00; Mesh.LcIntegrationPrecision=1.e-5; Mesh.MinimumCirclePoints=20; Mesh.CharacteristicLengthExtendFromBoundary=0; Merge "Sphere.stl"; //Merge "TorusInput.stl"; + + //Merge "DistanceFromOrigin.bgm"; //Merge "hop.bgm"; //Background Mesh View[0]; - //Field[1] = MathEval; //Field[1].F = "0.1*sqrt(x^2 + y^2 + z^2)"; //Background Field = 1; CreateTopology; - Compound Surface(20) = {1}; - Physical Surface("Wall") = {20}; +ll[] = Line "*"; +For j In {0 : #ll[]-1} + Compound Line(newl) = ll[j]; +EndFor + +ss[] = Surface "*"; +s = news; +For i In {0 : #ss[]-1} + Compound Surface(s+i) = ss[i]; +EndFor + + +Physical Surface(1) = {s : s + #ss[]-1}; diff --git a/benchmarks/stl/BifurcationRemeshCurvature.geo b/benchmarks/stl/BifurcationRemeshCurvature.geo index 02515267cdbbe4f0ac4c8a4e9ae47ce360af8eb7..fb8dc04fe359e5ceb1fd28ad857bced8e6a4f433 100644 --- a/benchmarks/stl/BifurcationRemeshCurvature.geo +++ b/benchmarks/stl/BifurcationRemeshCurvature.geo @@ -1,23 +1,22 @@ -//Mesh.Algorithm=7; //1=MeshAdapt, 5=Delaunay, 6=Frontal, 7=BAMG -Mesh.RemeshParametrization=0; //0) harmonic (1) conformal -Mesh.RemeshAlgorithm=0; //(0) nosplit (1) automatic +Mesh.Algorithm=7; //1=MeshAdapt, 5=Delaunay, 6=Frontal, 7=BAMG -//Mesh.CharacteristicLengthFactor=0.35; -//Mesh.CharacteristicLengthFromCurvature=1; //-clcurv -//Mesh.CharacteristicLengthMin = 0.02; //-clmin 0.05 -//Mesh.CharacteristicLengthMax = 4.00; //-clmax 4.0 -//Mesh.LcIntegrationPrecision=1.e-5; //-epslc1d -//Mesh.MinimumCirclePoints=30; //default=7 -//Mesh.CharacteristicLengthFromPoints = 0; -//Mesh.CharacteristicLengthExtendFromBoundary=0; +Mesh.RemeshParametrization=1; //(0=harmonic_circle, 1=conformal_spectral, 2=rbf, 3=harmonic_plane, 4=convex_circle, 5=convex_plane, 6=harmonic square, 7=spectral_fe +Mesh.RemeshAlgorithm=1; //(0) nosplit (1) automatic + +Mesh.CharacteristicLengthFactor=0.35; +Mesh.CharacteristicLengthFromCurvature=1; //-clcurv +Mesh.CharacteristicLengthMin = 0.02; //-clmin 0.05 +Mesh.CharacteristicLengthMax = 4.00; //-clmax 4.0 +Mesh.LcIntegrationPrecision=1.e-5; //-epslc1d +Mesh.MinimumCirclePoints=30; //default=7 +Mesh.CharacteristicLengthFromPoints = 0; +Mesh.CharacteristicLengthExtendFromBoundary=0; Merge "bifurcation.stl"; CreateTopology; - Compound Surface(20) = {1}; - Physical Surface("Wall") = {20};