175int main(
int argc,
char *argv[])
181 if (argc > 6 || argc < 5)
183 fprintf(stderr,
"Usage: ./MoveMesh meshfile fieldfile changefile "
184 "alpha cr(optional)\n");
196 if (argc == 6 && vSession->DefinesSolverInfo(
"INTERFACE") &&
197 vSession->GetSolverInfo(
"INTERFACE") ==
"phase")
199 cr = std::stod(argv[argc - 1]);
207 vSession, graphShPt);
217 string changefile(argv[argc - 2]);
221 string charalp(argv[argc - 1]);
223 cout <<
"read alpha=" << charalp << endl;
227 string fieldfile(argv[argc - 3]);
228 vector<LibUtilities::FieldDefinitionsSharedPtr> fielddef;
229 vector<vector<NekDouble>> fielddata;
234 vSession, graphShPt,
"w",
true);
238 for (
int i = 0; i < fielddata.size(); i++)
240 streak->ExtractDataToCoeffs(fielddef[i], fielddata[i],
241 fielddef[i]->m_fields[0],
242 streak->UpdateCoeffs());
244 streak->BwdTrans(streak->GetCoeffs(), streak->UpdatePhys());
250 int nIregions, lastIregion = 0;
252 streak->GetBndConditions();
256 int nbnd = bndConditions.size();
257 for (
int r = 0; r < nbnd; r++)
259 if (bndConditions[r]->GetUserDefined() ==
"CalcBC")
268 "there is any boundary region with the tag USERDEFINEDTYPE="
271 cout <<
"nIregions=" << nIregions << endl;
274 streak->GetBndCondExpansions();
277 int nedges = bndfieldx[lastIregion]->GetExpSize();
278 int nvertl = nedges + 1;
292 ((bndfieldx[lastIregion]->GetExp(0)->as<LocalRegions::SegExp>())
298 cout <<
"WARNING x0=" << x0 << endl;
303 OrderVertices(nedges, graphShPt, bndfieldx[lastIregion - 1], Vids_low, v1,
304 v2, x_connect, lastedge, xold_low, yold_low);
305 ASSERTL0(Vids_low[v2] != -10,
"Vids_low[v2] is wrong");
309 cout <<
"x_conn=" << x_connect <<
" yt=" << yt <<
" zt=" << zt
310 <<
" vid=" << Vids_low[v2] << endl;
317 OrderVertices(nedges, graphShPt, bndfieldx[lastIregion - 1], Vids_low,
318 v1, v2, x_connect, lastedge, xold_low, yold_low);
320 graphShPt->GetPointGeom(Vids_low[v1]);
334 vertex0 = graphShPt->GetPointGeom(
335 ((bndfieldx[lastIregion]->GetExp(0)->as<LocalRegions::SegExp>())
341 cout <<
"WARNING x0=" << x0 << endl;
348 OrderVertices(nedges, graphShPt, bndfieldx[lastIregion - 2], Vids_up, v1,
349 v2, x_connect, lastedge, xold_up, yold_up);
357 OrderVertices(nedges, graphShPt, bndfieldx[lastIregion - 2], Vids_up,
358 v1, v2, x_connect, lastedge, xold_up, yold_up);
360 graphShPt->GetPointGeom(Vids_up[v1]);
375 vertex0 = graphShPt->GetPointGeom(
376 ((bndfieldx[lastIregion]->GetExp(0)->as<LocalRegions::SegExp>())
382 cout <<
"WARNING x0=" << x0 << endl;
390 OrderVertices(nedges, graphShPt, bndfieldx[lastIregion], Vids_c, v1, v2,
391 x_connect, lastedge, xold_c, yold_c);
401 OrderVertices(nedges, graphShPt, bndfieldx[lastIregion], Vids_c, v1, v2,
402 x_connect, lastedge, xold_c, yold_c);
415 for (
int r = 0; r < nvertl; r++)
420 Deltaup[r] = yold_up[r] - yold_c[r];
421 Deltalow[r] = yold_c[r] - yold_low[r];
423 "distance between upper and layer curve is not positive");
425 "distance between lower and layer curve is not positive");
436 vSession, *(bregions.find(lastIregion)->second), graphShPt,
true);
447 if (vSession->DefinesParameter(
"npedge"))
449 npedge = (int)vSession->GetParameter(
"npedge");
458 int nq = streak->GetTotPoints();
461 streak->GetCoords(x, y);
469 xold_c, yold_c, x_c, y_c, cr,
true);
472 for (
int q = 0; q < nvertl; q++)
474 if (y_c[q] < yold_c[q])
479 Delta_c[q] =
abs(yold_c[q] - y_c[q]);
482 cout << x_c[q] <<
" " << y_c[q] << endl;
487 cout <<
"Warning: the critical layer is stationary" << endl;
508 for (
int r = 0; r < nedges; r++)
513 Eid = (bndSegExp->GetGeom1D())->GetGlobalID();
514 id1 = (bndSegExp->GetGeom1D())->GetVid(0);
515 id2 = (bndSegExp->GetGeom1D())->GetVid(1);
516 vertex1 = graphShPt->GetPointGeom(id1);
517 vertex2 = graphShPt->GetPointGeom(id2);
522 cout <<
"edge=" << r <<
" x1=" << x1 <<
" y1=" << y1 <<
" x2=" << x2
523 <<
" y2=" << y2 << endl;
526 Cpointsx[r] = x1 + (x2 - x1) / 2;
530 if (Cpointsx[r] > x2 || Cpointsx[r] < x1)
532 Cpointsx[r] = -Cpointsx[r];
534 for (
int w = 0; w < npedge - 2; w++)
537 Addpointsx[r * (npedge - 2) + w] =
538 x1 + ((x2 - x1) / (npedge - 1)) * (w + 1);
539 if (Addpointsx[r * (npedge - 2) + w] > x2 ||
540 Addpointsx[r * (npedge - 2) + w] < x1)
542 Addpointsx[r * (npedge - 2) + w] =
543 -Addpointsx[r * (npedge - 2) + w];
546 Addpointsy[r * (npedge - 2) + w] =
547 y_c[r] + ((y_c[r + 1] - y_c[r]) / (x_c[r + 1] - x_c[r])) *
548 (Addpointsx[r * (npedge - 2) + w] - x1);
552 Addpointsy[r * (npedge - 2) + w],
553 Addpointsx[r * (npedge - 2) + w],
554 Addpointsy[r * (npedge - 2) + w],
568 Cpointsx[r] = x2 + (x1 - x2) / 2;
570 if (Cpointsx[r] > x1 || Cpointsx[r] < x2)
572 Cpointsx[r] = -Cpointsx[r];
574 for (
int w = 0; w < npedge - 2; w++)
576 Addpointsx[r * (npedge - 2) + w] =
577 x2 + ((x1 - x2) / (npedge - 1)) * (w + 1);
578 if (Addpointsx[r * (npedge - 2) + w] > x1 ||
579 Addpointsx[r * (npedge - 2) + w] < x2)
581 Addpointsx[r * (npedge - 2) + w] =
582 -Addpointsx[r * (npedge - 2) + w];
586 Addpointsy[r * (npedge - 2) + w] =
588 ((y_c[r] - y_c[r + 1]) / (x_c[r] - x_c[r + 1])) *
589 (Addpointsx[r * (npedge - 2) + w] - x2);
594 Addpointsy[r * (npedge - 2) + w],
595 Addpointsx[r * (npedge - 2) + w],
596 Addpointsy[r * (npedge - 2) + w],
609 ASSERTL0(
false,
"point not generated");
627 for (
int a = 0; a < nedges; a++)
630 xcPhys[a * npedge + 0] = x_c[a];
631 ycPhys[a * npedge + 0] = y_c[a];
633 xcPhys[a * npedge + npedge - 1] = x_c[a + 1];
634 ycPhys[a * npedge + npedge - 1] = y_c[a + 1];
636 for (
int b = 0; b < npedge - 2; b++)
638 xcPhys[a * npedge + b + 1] = Addpointsx[a * (npedge - 2) + b];
639 ycPhys[a * npedge + b + 1] = Addpointsy[a * (npedge - 2) + b];
643 cout <<
"xc,yc before tanevaluate" << endl;
644 for (
int v = 0; v < xcPhys.size(); v++)
646 cout << xcPhys[v] <<
" " << ycPhys[v] << endl;
659 MappingEVids(xold_up, yold_up, xold_low, yold_low, xold_c, yold_c, Vids_c,
660 graphShPt, streak, V1, V2, nlays, lay_Eids, lay_Vids);
662 cout <<
"nlays=" << nlays << endl;
666 for (
int g = 0; g < nlays; g++)
677 if (vSession->DefinesParameter(
"Delta"))
679 Delta0 = vSession->GetParameter(
"Delta");
691 int nVertTot = graphShPt->GetNvertices();
707 for (
int i = 0; i < nVertTot; i++)
709 bool mvpoint =
false;
721 if (x == 0 && y < yold_low[0] && y > bleft)
726 if (x == xold_c[nvertl - 1] && y > yold_up[nvertl - 1] && y < tright)
731 if (x == xold_c[nvertl - 1] && y < yold_low[nvertl - 1] && y > bright)
736 if (x == 0 && y > yold_up[0] && y < tleft)
741 for (
int j = 0; j < nvertl; j++)
743 if ((xold_up[j] == x) && (yold_up[j] == y))
747 ynew[i] = y_c[j] + Delta0;
751 if ((xold_low[j] == x) && (yold_low[j] == y))
755 ynew[i] = y_c[j] - Delta0;
759 if ((xold_c[j] == x) && (yold_c[j] == y))
765 if (mvpoint ==
false)
770 for (
int k = 0; k < nvertl; k++)
772 if (
abs(x - xold_up[k]) < diff)
774 diff =
abs(x - xold_up[k]);
778 if (y > yold_up[qp_closer] && y < 1)
788 ynew[i] = y_c[qp_closer] + (y - yold_c[qp_closer]) *
789 (1 - y_c[qp_closer]) /
790 (1 - yold_c[qp_closer]);
793 else if (y < yold_low[qp_closer] && y > -1)
803 ynew[i] = y_c[qp_closer] + (y - yold_c[qp_closer]) *
804 (-1 - y_c[qp_closer]) /
805 (-1 - yold_c[qp_closer]);
808 else if (y > yold_c[qp_closer] && y < yold_up[qp_closer])
818 else if (y < yold_c[qp_closer] && y > yold_low[qp_closer])
828 else if (y == 1 || y == -1)
836 if ((ynew[i] > 1 || ynew[i] < -1) &&
837 (y > yold_up[qp_closer] || y < yold_low[qp_closer]))
839 cout <<
"point x=" << xnew[i] <<
" y=" << y
840 <<
" closer x=" << xold_up[qp_closer]
841 <<
" ynew=" << ynew[i] << endl;
842 ASSERTL0(
false,
"shifting out of range");
847 int nqedge = streak->GetExp(0)->GetNumPoints(0);
848 int nquad_lay = (nvertl - 1) * nqedge;
851 bool curv_lay =
true;
852 bool move_norm =
true;
853 int np_lay = (nvertl - 1) * npedge;
863 if (move_norm ==
true)
875 cout <<
"nquad per edge=" << nqedge << endl;
876 for (
int l = 0; l < 2; l++)
878 Edge_newcoords[l] = bndfieldx[lastIregion]
902 bndfieldx[lastIregion]->GetCoords(xcQ, ycQ, zcQ);
911 for (
int l = 0; l < xcQ.size(); l++)
925 Vmath::Vcopy(nquad_lay, ycQ, 1, Cont_y->UpdatePhys(), 1);
928 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffsy);
929 Cont_y->BwdTrans(coeffsy, Cont_y->UpdatePhys());
932 cout <<
"xcQ, ycQ" << endl;
933 for (
int s = 0; s < xcQ.size(); s++)
935 cout << xcQ[s] <<
" " << ycQ[s] << endl;
938 bool evaluatetan =
false;
942 for (
int k = 0; k < nedges; k++)
944 Vmath::Vcopy(nqedge, &xcQ[k * nqedge], 1, &xcedgeQ[0], 1);
945 Vmath::Vcopy(nqedge, &ycQ[k * nqedge], 1, &ycedgeQ[0], 1);
947 Edge_newcoords[0]->StdPhysDeriv(xcedgeQ, txedgeQ);
948 Edge_newcoords[1]->StdPhysDeriv(ycedgeQ, tyedgeQ);
950 Vmath::Vmul(nqedge, txedgeQ, 1, txedgeQ, 1, normsQ, 1);
952 Vmath::Vvtvp(nqedge, tyedgeQ, 1, tyedgeQ, 1, normsQ, 1, normsQ, 1);
957 Vmath::Vmul(nqedge, txedgeQ, 1, normsQ, 1, txedgeQ, 1);
958 Vmath::Vmul(nqedge, tyedgeQ, 1, normsQ, 1, tyedgeQ, 1);
963 for (
int u = 0; u < nqedge - 1; u++)
965 incratio = (ycedgeQ[u + 1] - ycedgeQ[u]) /
966 (xcedgeQ[u + 1] - xcedgeQ[u]);
967 cout <<
"incratio=" << incratio << endl;
968 if (
abs(incratio) > 4.0 && evaluatetan ==
false)
970 cout <<
"wrong=" << wrong << endl;
972 ASSERTL0(wrong < 2,
"number edges to change is too high!!");
973 edgeinterp[wrong] = k;
980 cout <<
"tan bef" << endl;
981 for (
int e = 0; e < nqedge; e++)
983 cout << xcedgeQ[e] <<
" " << ycedgeQ[e] <<
" "
984 << txedgeQ[e] << endl;
992 Vmath::Vcopy(npedge, &xcPhysMOD[k * npedge + 0], 1, &xPedges[0],
994 Vmath::Vcopy(npedge, &ycPhysMOD[k * npedge + 0], 1, &yPedges[0],
997 PolyFit(polyorder, nqedge, xcedgeQ, ycedgeQ, coeffsinterp,
998 xPedges, yPedges, npedge);
1000 Vmath::Vcopy(npedge, &xPedges[0], 1, &xcPhysMOD[k * npedge + 0],
1002 Vmath::Vcopy(npedge, &yPedges[0], 1, &ycPhysMOD[k * npedge + 0],
1009 Vmath::Vcopy(nqedge, &(txedgeQ[0]), 1, &(txQ[nqedge * k]), 1);
1010 Vmath::Vcopy(nqedge, &(tyedgeQ[0]), 1, &(tyQ[nqedge * k]), 1);
1015 for (
int w = 0; w < fz.size(); w++)
1017 txQ[w] = cos(atan(fz[w]));
1018 tyQ[w] = sin(atan(fz[w]));
1019 cout << xcQ[w] <<
" " << ycQ[w] <<
" " << fz[w] << endl;
1024 Vmath::Vcopy(nquad_lay, txQ, 1, Cont_y->UpdatePhys(), 1);
1025 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffsy);
1026 Cont_y->BwdTrans(coeffsy, Cont_y->UpdatePhys());
1029 Vmath::Vcopy(nquad_lay, tyQ, 1, Cont_y->UpdatePhys(), 1);
1030 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffsy);
1031 Cont_y->BwdTrans(coeffsy, Cont_y->UpdatePhys());
1042 for (
int q = 0; q < 2; q++)
1044 edgebef = edgeinterp[q] - 1;
1046 (txQ[edgebef * nqedge + nqedge - 1] - txQ[edgebef * nqedge]) /
1047 (xcQ[edgebef * nqedge + nqedge - 1] - xcQ[edgebef * nqedge]);
1048 inc = (txQ[edgeinterp[q] * nqedge + nqedge - 1] -
1049 txQ[edgeinterp[q] * nqedge]) /
1050 (xcQ[edgeinterp[q] * nqedge + nqedge - 1] -
1051 xcQ[edgeinterp[q] * nqedge]);
1052 int npoints = 2 * nqedge;
1058 cout <<
"inc=" << inc <<
" incbef=" << incbefore << endl;
1059 if ((inc / incbefore) > 0.)
1061 cout <<
"before!!" << edgebef << endl;
1073 PolyFit(polyorder, npoints, xQedges, txQedges, coeffsinterp,
1074 xQedges, txQedges, npoints);
1078 &txQ[edgebef * nqedge + 0], 1);
1080 PolyFit(polyorder, npoints, xQedges, tyQedges, coeffsinterp,
1081 xQedges, tyQedges, npoints);
1085 &tyQ[edgebef * nqedge + 0], 1);
1089 cout <<
"after!!" << endl;
1092 Vmath::Vcopy(npoints, &xcQ[edgeinterp[q] * nqedge + 0], 1,
1094 Vmath::Vcopy(npoints, &ycQ[edgeinterp[q] * nqedge + 0], 1,
1096 Vmath::Vcopy(npoints, &txQ[edgeinterp[q] * nqedge + 0], 1,
1098 Vmath::Vcopy(npoints, &tyQ[edgeinterp[q] * nqedge + 0], 1,
1101 PolyFit(polyorder, npoints, xQedges, txQedges, coeffsinterp,
1102 xQedges, txQedges, npoints);
1106 &txQ[edgeinterp[q] * nqedge + 0], 1);
1108 PolyFit(polyorder, npoints, xQedges, tyQedges, coeffsinterp,
1109 xQedges, tyQedges, npoints);
1113 &tyQ[edgeinterp[q] * nqedge + 0], 1);
1118 Vmath::Vcopy(nquad_lay, tyQ, 1, Cont_y->UpdatePhys(), 1);
1119 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffstmp);
1120 Cont_y->BwdTrans(coeffstmp, Cont_y->UpdatePhys());
1123 Vmath::Vcopy(nquad_lay, txQ, 1, Cont_y->UpdatePhys(), 1);
1124 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffstmp);
1125 Cont_y->BwdTrans(coeffstmp, Cont_y->UpdatePhys());
1128 for (
int k = 0; k < nedges; k++)
1135 Vmath::Vcopy(nqedge, &(txQ[nqedge * k]), 1, &(txedgeQ[0]), 1);
1136 Vmath::Vcopy(nqedge, &(tyQ[nqedge * k]), 1, &(tyedgeQ[0]), 1);
1138 Vmath::Vdiv(nqedge, txedgeQ, 1, tyedgeQ, 1, tx_tyedgeQ, 1);
1139 Vmath::Vmul(nqedge, tx_tyedgeQ, 1, tx_tyedgeQ, 1, tx_tyedgeQ, 1);
1140 Vmath::Sadd(nqedge, 1.0, tx_tyedgeQ, 1, nxedgeQ, 1);
1144 Vmath::Smul(nqedge, -1.0, nxedgeQ, 1, nxedgeQ, 1);
1145 Vmath::Vcopy(nqedge, &(nxedgeQ[0]), 1, &(nxQ[nqedge * k]), 1);
1147 Vmath::Vmul(nqedge, nxedgeQ, 1, nxedgeQ, 1, nyedgeQ, 1);
1148 Vmath::Smul(nqedge, -1.0, nyedgeQ, 1, nyedgeQ, 1);
1152 Vmath::Smul(nqedge, -1.0, nyedgeQ, 1, nyedgeQ, 1);
1153 Vmath::Vcopy(nqedge, &(nyedgeQ[0]), 1, &(nyQ[nqedge * k]), 1);
1155 cout <<
"edge:" << k << endl;
1156 cout <<
"tan/normal" << endl;
1157 for (
int r = 0; r < nqedge; r++)
1159 cout << xcQ[k * nqedge + r] <<
" " << txedgeQ[r] <<
" "
1160 << tyedgeQ[r] <<
" " << nxedgeQ[r] <<
" "
1161 << nyedgeQ[r] << endl;
1167 Vmath::Vcopy(nquad_lay, nyQ, 1, Cont_y->UpdatePhys(), 1);
1169 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffstmp);
1170 Cont_y->BwdTrans(coeffstmp, Cont_y->UpdatePhys());
1174 Vmath::Zero(Cont_y->GetNcoeffs(), Cont_y->UpdateCoeffs(), 1);
1175 Vmath::Vcopy(nquad_lay, nxQ, 1, Cont_y->UpdatePhys(), 1);
1176 Cont_y->FwdTransLocalElmt(Cont_y->GetPhys(), coeffstmp);
1177 Cont_y->BwdTrans(coeffstmp, Cont_y->UpdatePhys());
1181 for (
int k = 0; k < nedges; k++)
1187 nyQ[(k - 1) * nqedge + nqedge - 1] = nyQ[k * nqedge + 0];
1191 nxQ[(k - 1) * nqedge + nqedge - 1] = nxQ[k * nqedge + 0];
1199 cout <<
"nx,yQbefore" << endl;
1200 for (
int u = 0; u < xcQ.size(); u++)
1202 cout << xcQ[u] <<
" " << nyQ[u] <<
" " << txQ[u] << endl;
1208 cout <<
"nx,yQ" << endl;
1209 for (
int u = 0; u < x_tmpQ.size(); u++)
1211 cout << x_tmpQ[u] <<
" " << tmpnyQ[u] << endl;
1215 for (
int k = 0; k < nedges; k++)
1218 for (
int a = 0; a < npedge; a++)
1222 nxPhys[k * npedge + a] = nxQ[k * nqedge + 0];
1223 nyPhys[k * npedge + a] = nyQ[k * nqedge + 0];
1225 else if (a == npedge - 1)
1227 nxPhys[k * npedge + a] = nxQ[k * nqedge + nqedge - 1];
1228 nyPhys[k * npedge + a] = nyQ[k * nqedge + nqedge - 1];
1243 Addpointsx[k * (npedge - 2) + a - 1], x_tmpQ);
1253 Addpointsx[k * (npedge - 2) + a - 1], 4, Pxinterp,
1264 nxPhys[k * npedge + a] = -
sqrt(
abs(
1265 1 - nyPhys[k * npedge + a] * nyPhys[k * npedge + a]));
1280 nyPhys[(k - 1) * npedge + npedge - 1] =
1281 nyPhys[k * npedge + 0];
1285 nxPhys[(k - 1) * npedge + npedge - 1] =
1286 nxPhys[k * npedge + 0];
1290 cout <<
"xcPhys,," << endl;
1291 for (
int s = 0; s < np_lay; s++)
1294 cout << xcPhysMOD[s] <<
" " << ycPhysMOD[s] <<
" "
1295 << nxPhys[s] <<
" " << nyPhys[s] << endl;
1307 for (
int m = 0; m < nlays; m++)
1314 delta[m] = -(cntlow + 1 - m) * Delta0 / (cntlow + 1);
1318 delta[m] = (m - (cntlow)) * Delta0 / (cntlow + 1);
1324 for (
int h = 0; h < nvertl; h++)
1332 if (move_norm ==
false)
1334 ynew[lay_Vids[m][h]] = y_c[h] + delta[m];
1335 xnew[lay_Vids[m][h]] = x_c[h];
1339 if (h == 0 || h == nvertl - 1)
1341 ynew[lay_Vids[m][h]] = y_c[h] + delta[m];
1342 xnew[lay_Vids[m][h]] = x_c[h];
1346 ynew[lay_Vids[m][h]] =
1347 y_c[h] + delta[m] *
abs(nyPhys[h * npedge + 0]);
1348 xnew[lay_Vids[m][h]] =
1349 x_c[h] + delta[m] *
abs(nxPhys[h * npedge + 0]);
1352 cout <<
"Vid x=" << xnew[lay_Vids[m][h]]
1353 <<
" y=" << ynew[lay_Vids[m][h]] << endl;
1358 cout <<
"edge==" << h << endl;
1362 nyPhys[(h - 1) * npedge + npedge - 1],
1365 nxPhys[(h - 1) * npedge + npedge - 1],
1368 if (move_norm ==
false)
1371 layers_y[m][h * npedge + 0] = y_c[h] + delta[m];
1372 layers_x[m][h * npedge + 0] = xnew[lay_Vids[m][h]];
1374 layers_y[m][h * npedge + npedge - 1] =
1375 y_c[h + 1] + delta[m];
1376 layers_x[m][h * npedge + npedge - 1] =
1377 xnew[lay_Vids[m][h + 1]];
1379 for (
int d = 0; d < npedge - 2; d++)
1381 layers_y[m][h * npedge + d + 1] =
1382 ycPhysMOD[h * npedge + d + 1] + delta[m];
1384 layers_x[m][h * npedge + d + 1] =
1385 xcPhysMOD[h * npedge + d + 1];
1394 tmpy_lay[h * npedge + 0] = y_c[h] + delta[m];
1395 tmpx_lay[h * npedge + 0] = xnew[lay_Vids[m][h]];
1397 tmpy_lay[h * npedge + npedge - 1] =
1399 delta[m] *
abs(nyPhys[h * npedge + npedge - 1]);
1400 tmpx_lay[h * npedge + npedge - 1] =
1402 delta[m] *
abs(nxPhys[h * npedge + npedge - 1]);
1404 else if (h == nedges - 1)
1407 tmpy_lay[h * npedge + 0] =
1408 y_c[h] + delta[m] *
abs(nyPhys[h * npedge + 0]);
1409 tmpx_lay[h * npedge + 0] =
1410 x_c[h] + delta[m] *
abs(nxPhys[h * npedge + 0]);
1412 tmpy_lay[h * npedge + npedge - 1] =
1413 y_c[h + 1] + delta[m];
1414 tmpx_lay[h * npedge + npedge - 1] =
1415 xnew[lay_Vids[m][h + 1]];
1420 tmpy_lay[h * npedge + 0] =
1421 y_c[h] + delta[m] *
abs(nyPhys[h * npedge + 0]);
1422 tmpx_lay[h * npedge + 0] =
1423 x_c[h] + delta[m] *
abs(nxPhys[h * npedge + 0]);
1425 tmpy_lay[h * npedge + npedge - 1] =
1427 delta[m] *
abs(nyPhys[h * npedge + npedge - 1]);
1428 tmpx_lay[h * npedge + npedge - 1] =
1430 delta[m] *
abs(nxPhys[h * npedge + npedge - 1]);
1434 for (
int d = 0; d < npedge - 2; d++)
1437 tmpy_lay[h * npedge + d + 1] =
1438 ycPhysMOD[h * npedge + d + 1] +
1439 delta[m] *
abs(nyPhys[h * npedge + d + 1]);
1442 tmpx_lay[h * npedge + d + 1] =
1443 xcPhysMOD[h * npedge + d + 1] +
1444 delta[m] *
abs(nxPhys[h * npedge + d + 1]);
1462 for (
int s = 0; s < np_lay; s++)
1464 cout << tmpx_lay[s] <<
" " << tmpy_lay[s] << endl;
1467 cout <<
"fisrt interp" << endl;
1468 for (
int s = 0; s < np_lay; s++)
1470 cout << tmpx_lay[s] <<
" " << tmpy_lay[s] << endl;
1482 NekDouble boundright = xcPhysMOD[np_lay - 1];
1483 bool outboundleft =
false;
1484 bool outboundright =
false;
1485 if (tmpx_lay[1] < boundleft)
1487 outboundleft =
true;
1489 if (tmpx_lay[np_lay - 2] > boundright)
1491 outboundright =
true;
1499 for (
int r = 0; r < nedges; r++)
1502 if (tmpx_lay[r * npedge + npedge - 1] < boundleft &&
1503 outboundleft ==
true)
1505 vertout[outvert] = r;
1511 if (tmpx_lay[(r + 1) * npedge + npedge - 1] > boundleft)
1513 for (
int s = 0; s < npedge - 2; s++)
1515 if (tmpx_lay[(r + 1) * npedge + s + 1] <
1525 if (tmpx_lay[r * npedge + 0] > boundright &&
1526 outboundright ==
true)
1528 vertout[outvert] = r;
1534 if (tmpx_lay[(r - 1) * npedge + 0] < boundright)
1536 for (
int s = 0; s < npedge - 2; s++)
1538 if (tmpx_lay[(r - 1) * npedge + s + 1] >
1550 outcount = outvert * npedge + 1 + outmiddle;
1552 int replacepointsfromindex = 0;
1553 for (
int c = 0; c < nedges; c++)
1556 if (xcPhysMOD[c * npedge + npedge - 1] <=
1557 tmpx_lay[c * (npedge - (npedge - 2)) + 2] &&
1558 outboundright ==
true)
1560 replacepointsfromindex = c * (npedge - (npedge - 2)) + 2;
1565 if (xcPhysMOD[(nedges - 1 - c) * npedge + 0] >=
1566 tmpx_lay[np_lay - 1 -
1567 (c * (npedge - (npedge - 2)) + 2)] &&
1568 outboundleft ==
true)
1570 replacepointsfromindex =
1571 np_lay - 1 - (c * (npedge - (npedge - 2)) + 2);
1587 if (outboundright ==
true)
1589 pstart = replacepointsfromindex;
1590 shift = np_lay - outcount;
1592 (xcPhysMOD[np_lay - outcount] - xcPhysMOD[pstart]) /
1594 outcount = outcount - 1;
1595 ASSERTL0(tmpx_lay[np_lay - outcount] >
1596 xcPhysMOD[(nedges - 1) * npedge + 0],
1597 "no middle points in the last edge");
1602 pstart = outcount - 1;
1603 increment = (xcPhysMOD[replacepointsfromindex] -
1604 xcPhysMOD[pstart]) /
1607 xcPhysMOD[0 * npedge + npedge - 1],
1608 "no middle points in the first edge");
1625 NekDouble xctmp, ycinterp, nxinterp, nyinterp;
1627 for (
int v = 0; v < outcount; v++)
1629 xctmp = xcPhysMOD[pstart] + (v + 1) * increment;
1643 nxinterp =
sqrt(
abs(1 - nyinterp * nyinterp));
1651 replace_x[v] = xctmp + delta[m] *
abs(nxinterp);
1652 replace_y[v] = ycinterp + delta[m] *
abs(nyinterp);
1653 tmpx_lay[v + shift] = replace_x[v];
1654 tmpy_lay[v + shift] = replace_y[v];
1674 int closepoints = 4;
1680 int pointscount = 0;
1681 for (
int q = 0; q < np_lay; q++)
1683 for (
int e = 0; e < nedges; e++)
1685 if (tmpx_lay[q] <= x_c[e + 1] && tmpx_lay[q] >= x_c[e])
1689 if (q == e * npedge + npedge - 1 && pointscount != npedge)
1694 else if (q == e * npedge + npedge - 1)
1715 lay_Vids[m], layers_x[m], layers_y[m], xnew,
1795 if (curv_lay ==
true)
1804 int npoints = npedge;
1807 for (
int f = 0; f < nedges; f++)
1818 PolyFit(polyorder, npoints, xPedges, yPedges, coeffsinterp,
1819 xPedges, yPedges, npoints);
1823 &layers_y[m][(f)*npedge + 0], 1);
1826 layers_y[m][f * npedge + 0] = ynew[lay_Vids[m][f]];
1827 layers_y[m][f * npedge + npedge - 1] = ynew[lay_Vids[m][f + 1]];
1830 cout <<
" xlay ylay lay:" << m << endl;
1831 for (
int l = 0; l < np_lay; l++)
1834 cout << std::setprecision(8) << layers_x[m][l] <<
" "
1835 << layers_y[m][l] << endl;
1871 cout <<
"lay=" << m << endl;
1874 " different layer ymin val");
1877 " different layer ymax val");
1880 " different layer xmin val");
1883 " different layer xmax val");
1893 npedge, graphShPt, xold_c, yold_c, xold_low, yold_low, xold_up,
1894 yold_up, layers_x[0], layers_y[0], layers_x[nlays - 1],
1895 layers_y[nlays - 1], nxPhys, nyPhys, xnew, ynew);
1976 Down, Up, xnew, ynew, layers_x, layers_y);
1986 cout << std::setprecision(8) <<
"xmin=" <<
Vmath::Vmin(nVertTot, xnew, 1)
1989 " different xmin val");
1991 " different ymin val");
1993 " different xmax val");
1995 " different ymax val");
2000 charalp, layers_x, layers_y, lay_Eids, curv_lay);