56 const label nCPsU = basisU_.nCPs();
57 const label nCPsV = basisV_.nCPs();
59 return k*nCPsU*nCPsV + j*nCPsU + i;
69 <<
"Attempting to recompute points residing within control boxes"
86 Info<<
"Control Points bounds \n"
87 <<
"\tX1 : (" << lowerX <<
" " << upperX <<
")\n"
88 <<
"\tX2 : (" << lowerY <<
" " << upperY <<
")\n"
89 <<
"\tX3 : (" << lowerZ <<
" " << upperZ <<
")\n" <<
endl;
94 const vector& pointI = meshPoints[pI];
97 pointI.
x() >= lowerX && pointI.
x() <= upperX
98 && pointI.
y() >= lowerY && pointI.
y() <= upperY
99 && pointI.
z() >= lowerZ && pointI.
z() <= upperZ
103 reverseMap[pI] =
count;
112 Info<<
"Initially found " <<
count <<
" points inside control boxes"
122 scalar timeBef = mesh_.time().elapsedCpuTime();
124 if (parametricCoordinatesPtr_.valid())
127 <<
"Attempting to recompute parametric coordinates"
132 labelList& reverseMap = reverseMapPtr_();
134 parametricCoordinatesPtr_.reset
140 "parametricCoordinates" + name_,
141 mesh_.time().timeName(),
150 vectorField& paramCoors = parametricCoordinatesPtr_().primitiveFieldRef();
155 parametricCoordinatesPtr_().typeHeaderOk<pointVectorField>(
true)
163 Info<<
"Reading parametric coordinates from file" <<
endl;
164 IOobject& header = parametricCoordinatesPtr_().ref();
165 parametricCoordinatesPtr_() =
179 const label globalPointIndex = map[pI];
182 actualMap[curIndex] = map[pI];
183 reverseMap[globalPointIndex] = curIndex;
188 reverseMap[globalPointIndex] = -1;
196 Info<<
"Read non-zero parametric coordinates for " << curIndex
197 <<
" points" <<
endl;
206 scalar minX1 =
min(cps_.component(0));
207 scalar maxX1 =
max(cps_.component(0));
208 scalar minX2 =
min(cps_.component(1));
209 scalar maxX2 =
max(cps_.component(1));
210 scalar minX3 =
min(cps_.component(2));
211 scalar maxX3 =
max(cps_.component(2));
213 scalar oneOverDenomX(1./(maxX1 - minX1));
214 scalar oneOverDenomY(1./(maxX2 - minX2));
215 scalar oneOverDenomZ(1./(maxX3 - minX3));
219 const label globalPI = map[pI];
220 paramCoors[globalPI].x() = (
points[pI].x() - minX1)*oneOverDenomX;
221 paramCoors[globalPI].y() = (
points[pI].y() - minX2)*oneOverDenomY;
222 paramCoors[globalPI].z() = (
points[pI].z() - minX3)*oneOverDenomZ;
227 boolList dropOffPoints(map.size(),
false);
228 label nDropedPoints(0);
236 Info<<
"Mapping of mesh points to parametric space for box " << name_
239 label maxIterNeeded(0);
243 label nBoundIters(0);
244 vector res(GREAT, GREAT, GREAT);
247 const label globalPI = map[pI];
248 vector& uVec = paramCoors[globalPI];
249 vector& coorPointI = splinesBasedCoors[pI];
250 uVec += ((
inv(JacobianUVW(uVec))) & (
points[pI] - coorPointI));
258 if (nBoundIters > nMaxBound_)
260 dropOffPoints[pI] =
true;
281 <<
"Mapping to parametric space for point " << pI
282 <<
" failed." <<
endl
283 <<
"Residual after " << maxIter_ + 1 <<
" iterations : "
285 <<
"parametric coordinates " << paramCoors[map[pI]]
287 <<
"Local system coordinates " <<
points[pI] <<
endl
288 <<
"Threshold residual per direction : " << tolerance_
291 maxIterNeeded =
max(maxIterNeeded, iter);
295 label nParameterizedPoints = map.size() - nDropedPoints;
301 map.
setSize(nParameterizedPoints);
306 if (!dropOffPoints[pI])
308 map[curIndex] = mapOld[pI];
309 reverseMap[mapOld[pI]] = curIndex;
315 reverseMap[mapOld[pI]] = -1;
321 Info<<
"Found " << nDropedPoints
322 <<
" to discard from morphing boxes" <<
endl;
323 Info<<
"Keeping " << nParameterizedPoints
324 <<
" parameterized points in boxes" <<
endl;
327 scalar maxDiff(-GREAT);
328 forAll(splinesBasedCoors, pI)
331 mag(splinesBasedCoors[pI] - localSystemCoordinates_[map[pI]]);
338 scalar timeAft = mesh_.time().elapsedCpuTime();
339 Info<<
"\tMapping completed in " << timeAft - timeBef <<
" seconds"
341 Info<<
"\tMax iterations per point needed to compute parametric "
343 << maxIterNeeded <<
endl;
344 Info<<
"\tMax difference between original mesh points and "
345 <<
"parameterized ones "
357 computeParametricCoordinates(
points);
368 bool boundPoint(
false);
370 if (vec.
x() < scalar(0))
375 if (vec.
y() < scalar(0))
380 if (vec.
z() < scalar(0))
409 mkDir(mesh_.time().globalPath()/
"optimisation"/cpsFolder_);
416 label nCPs = cps_.size();
417 activeControlPoints_ =
boolList(nCPs,
true);
418 activeDesignVariables_ =
boolList(3*nCPs,
true);
421 confineBoundaryControlPoints();
424 continuityRealatedConfinement();
427 confineControlPointsDirections();
431 forAll(activeControlPoints_, cpI)
435 !activeDesignVariables_[3*cpI]
436 && !activeDesignVariables_[3*cpI + 1]
437 && !activeDesignVariables_[3*cpI + 2]
440 activeControlPoints_[cpI] =
false;
448 const label nCPsU = basisU_.nCPs();
449 const label nCPsV = basisV_.nCPs();
450 const label nCPsW = basisW_.nCPs();
453 if (confineBoundaryControlPoints_)
456 for (
label iCPw = 0; iCPw < nCPsW; iCPw += nCPsW - 1)
458 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
460 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
462 confineControlPoint(getCPID(iCPu, iCPv, iCPw));
467 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
469 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
471 for (
label iCPu = 0; iCPu < nCPsU; iCPu += nCPsU - 1)
473 confineControlPoint(getCPID(iCPu, iCPv, iCPw));
478 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
480 for (
label iCPv = 0; iCPv < nCPsV; iCPv += nCPsV - 1)
482 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
484 confineControlPoint(getCPID(iCPu, iCPv, iCPw));
494 const label nCPsU = basisU_.nCPs();
495 const label nCPsV = basisV_.nCPs();
496 const label nCPsW = basisW_.nCPs();
500 forAll(boundUMinCPs_, iCPu)
504 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
506 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
508 confineControlPoint(getCPID(iCPu, iCPv, iCPw), confineSlice);
513 forAll(boundUMaxCPs_, sliceI)
516 label iCPu = nCPsU - 1 - sliceI;
518 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
520 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
522 confineControlPoint(getCPID(iCPu, iCPv, iCPw), confineSlice);
529 forAll(boundVMinCPs_, iCPv)
533 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
535 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
537 confineControlPoint(getCPID(iCPu, iCPv, iCPw), confineSlice);
542 forAll(boundVMaxCPs_, sliceI)
545 label iCPv = nCPsV - 1 - sliceI;
547 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
549 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
551 confineControlPoint(getCPID(iCPu, iCPv, iCPw), confineSlice);
558 forAll(boundWMinCPs_, iCPw)
562 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
564 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
566 confineControlPoint(getCPID(iCPu, iCPv, iCPw), confineSlice);
571 forAll(boundWMaxCPs_, sliceI)
574 label iCPw = nCPsW - 1 - sliceI;
576 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
578 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
580 confineControlPoint(getCPID(iCPu, iCPv, iCPw), confineSlice);
589 for (
label cpI = 0; cpI < cps_.size(); ++cpI)
591 if (confineX1movement_) activeDesignVariables_[3*cpI] =
false;
592 if (confineX2movement_) activeDesignVariables_[3*cpI + 1] =
false;
593 if (confineX3movement_) activeDesignVariables_[3*cpI + 2] =
false;
600 if (cpI < 0 || cpI > cps_.size() -1)
603 <<
"Attempted to confine contol point movement for a control point "
604 <<
" ID which is out of bounds"
609 activeDesignVariables_[3*cpI] =
false;
610 activeDesignVariables_[3*cpI + 1] =
false;
611 activeDesignVariables_[3*cpI + 2] =
false;
622 if (cpI < 0 || cpI > cps_.size() -1)
625 <<
"Attempted to confine contol point movement for a control point "
626 <<
" ID which is out of bounds"
631 if (confineDirections[0]) activeDesignVariables_[3*cpI] =
false;
632 if (confineDirections[1]) activeDesignVariables_[3*cpI + 1] =
false;
633 if (confineDirections[2]) activeDesignVariables_[3*cpI + 2] =
false;
644 bool computeParamCoors
657 reverseMapPtr_(
nullptr),
658 parametricCoordinatesPtr_(
nullptr),
659 localSystemCoordinates_(mesh_.nPoints(),
Zero),
663 confineBoundaryControlPoints_
691 activeControlPoints_(0),
692 activeDesignVariables_(0),
693 cpsFolder_(
"controlPoints"),
702 (boundUMinCPs_.size() + boundUMaxCPs_.size() >= basisU_.nCPs())
703 || (boundVMinCPs_.size() + boundVMaxCPs_.size() >= basisV_.nCPs())
704 || (boundWMinCPs_.size() + boundWMaxCPs_.size() >= basisW_.nCPs())
708 <<
"Number of control point slices to be kept frozen at "
709 <<
"the boundaries is invalid \n"
710 <<
"Number of control points in u " << basisU_.nCPs() <<
"\n"
711 <<
"Number of control points in v " << basisV_.nCPs() <<
"\n"
712 <<
"Number of control points in w " << basisW_.nCPs() <<
"\n"
716 word controlPointsDefinition(
dict.
get<
word>(
"controlPointsDefinition"));
719 if (controlPointsDefinition ==
"fromFile")
721 Info<<
"Reading control points from file " <<
endl;
726 name_ +
"cpsBsplines" + mesh_.time().timeName(),
727 mesh_.time().caseConstant(),
736 cpsDict.
readEntry(
"controlPoints", cps_);
737 if (cps_.size() != (basisU_.nCPs()*basisV_.nCPs()*basisW_.nCPs()))
740 <<
"Number of control points does not agree with "
741 <<
"nCPsU*nCPv*nCPsW"
747 else if (controlPointsDefinition ==
"axisAligned")
749 const label nCPsU = basisU_.nCPs();
750 const label nCPsV = basisV_.nCPs();
751 const label nCPsW = basisW_.nCPs();
753 cps_.setSize(nCPsU * nCPsV * nCPsW);
759 for (
label iCPw = 0; iCPw < nCPsW; ++iCPw)
761 for (
label iCPv = 0; iCPv < nCPsV; ++iCPv)
763 for (
label iCPu = 0; iCPu < nCPsU; ++iCPu)
765 cps_[getCPID(iCPu, iCPv, iCPw)] =
768 +scalar(iCPu)/scalar(nCPsU - 1)
769 *(upperBounds.
x()-lowerBounds.
x())
773 +scalar(iCPv)/scalar(nCPsV - 1)
774 *(upperBounds.
y()-lowerBounds.
y())
778 +scalar(iCPw)/scalar(nCPsW - 1)
779 *(upperBounds.
z()-lowerBounds.
z())
788 <<
"Unknown controlPointsDefinition type "
789 << controlPointsDefinition
791 <<
"Valid types are : axisAligned, fromFile" <<
endl
794 determineActiveDesignVariablesAndPoints();
805 bool computeParamCoors
810 Info<<
"NURBS3DVolume type : " << modelType <<
endl;
812 auto cstrIter = dictionaryConstructorTablePtr_->cfind(modelType);
814 if (!cstrIter.found())
821 *dictionaryConstructorTablePtr_
838 const label degreeU = basisU_.degree();
839 const label degreeV = basisV_.degree();
840 const label degreeW = basisW_.degree();
842 const label nCPsU = basisU_.nCPs();
843 const label nCPsV = basisV_.nCPs();
844 const label nCPsW = basisW_.nCPs();
848 for (
label iCPw = 0; iCPw < nCPsW; ++iCPw)
850 for (
label iCPv = 0; iCPv < nCPsV; ++iCPv)
852 for (
label iCPu = 0; iCPu < nCPsU; ++iCPu)
855 cps_[getCPID(iCPu, iCPv, iCPw)]
856 *basisU_.basisDerivativeU(iCPu, degreeU, u)
857 *basisV_.basisValue(iCPv, degreeV, v)
858 *basisW_.basisValue(iCPw, degreeW, w);
874 const label degreeU = basisU_.degree();
875 const label degreeV = basisV_.degree();
876 const label degreeW = basisW_.degree();
878 const label nCPsU = basisU_.nCPs();
879 const label nCPsV = basisV_.nCPs();
880 const label nCPsW = basisW_.nCPs();
884 for (
label iCPw = 0; iCPw < nCPsW; ++iCPw)
886 for (
label iCPv = 0; iCPv < nCPsV; ++iCPv)
888 for (
label iCPu = 0; iCPu < nCPsU; ++iCPu)
891 cps_[getCPID(iCPu, iCPv, iCPw)]
892 *basisU_.basisValue(iCPu, degreeU, u)
893 *basisV_.basisDerivativeU(iCPv, degreeV, v)
894 *basisW_.basisValue(iCPw, degreeW, w);
910 const label degreeU = basisU_.degree();
911 const label degreeV = basisV_.degree();
912 const label degreeW = basisW_.degree();
914 const label nCPsU = basisU_.nCPs();
915 const label nCPsV = basisV_.nCPs();
916 const label nCPsW = basisW_.nCPs();
920 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
922 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
924 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
927 cps_[getCPID(iCPu, iCPv, iCPw)]
928 *basisU_.basisValue(iCPu, degreeU, u)
929 *basisV_.basisValue(iCPv, degreeV, v)
930 *basisW_.basisDerivativeU(iCPw, degreeW, w);
944 const scalar u = uVector.
x();
945 const scalar v = uVector.
y();
946 const scalar w = uVector.
z();
948 vector uDeriv = volumeDerivativeU(u, v, w);
949 vector vDeriv = volumeDerivativeV(u, v, w);
950 vector wDeriv = volumeDerivativeW(u, v, w);
974 const scalar u = uVector.
x();
975 const scalar v = uVector.
y();
976 const scalar w = uVector.
z();
978 const label nCPsU = basisU_.nCPs();
979 const label nCPsV = basisV_.nCPs();
981 const label degreeU = basisU_.degree();
982 const label degreeV = basisV_.degree();
983 const label degreeW = basisW_.degree();
986 label iCPv = (cpI - iCPw*nCPsU*nCPsV)/nCPsU;
987 label iCPu = (cpI - iCPw*nCPsU*nCPsV - iCPv*nCPsU);
993 basisU_.basisValue(iCPu, degreeU, u)
994 *basisV_.basisValue(iCPv, degreeV, v)
995 *basisW_.basisValue(iCPw, degreeW, w);
1010 const vectorField& parametricCoordinates = getParametricCoordinates();
1012 forAll(controlPointDerivs, cpI)
1014 forAll(sensitivityPatchIDs, pI)
1016 const label patchI = sensitivityPatchIDs[pI];
1027 if (whichPointInBox != -1)
1029 controlPointDerivs[cpI] +=
1048 return controlPointDerivs;
1059 computeControlPointSensitivities
1077 const vectorField& parametricCoordinates = getParametricCoordinates();
1081 const labelList& reverseMap = reverseMapPtr_();
1083 forAll(controlPointDerivs, cpI)
1085 forAll(sensitivityPatchIDs, pI)
1087 const label patchI = sensitivityPatchIDs[pI];
1095 const face& fGlobal = mesh_.faces()[fI + patchStart];
1105 if (whichPointInBox != -1)
1109 facePointDerivs[pI] =
1111 * volumeDerivativeCP
1126 controlPointDerivs[cpI] += patchSens[fI] & fCtrs_d;
1134 return controlPointDerivs;
1148 const vectorField& parametricCoordinates = getParametricCoordinates();
1152 const labelList& reverseMap = reverseMapPtr_();
1159 const face& fGlobal = mesh_.faces()[fI + patchStart];
1169 if (whichPointInBox != -1)
1173 facePointDerivs[pI] =
1189 cpSens += faceSens[fI] & fCtrs_d;
1202 bool DimensionedNormalSens
1213 const labelList& reverseMap = reverseMapPtr_();
1216 const vectorField& parametricCoordinates = getParametricCoordinates();
1221 const face& fGlobal = mesh_.faces()[fI + patchStart];
1231 if (whichPointInBox != -1)
1235 facePointDerivs[pI] =
1253 if (DimensionedNormalSens)
1255 dndbSens[fI] = dNdbSens[1];
1259 dndbSens[fI] = dNdbSens[2];
1274 const vectorField& parametricCoordinates = getParametricCoordinates();
1282 auto& dxdb = tdxdb.ref();
1290 if (whichPointInBox != -1)
1313 const vectorField& parametricCoordinates = getParametricCoordinates();
1321 auto& dxdb = tdxdb.ref();
1328 const face& fGlobal = mesh_.faces()[fI + patchStart];
1338 if (whichPointInBox != -1)
1342 facePointDerivs[pI] =
1369 const label degreeU = basisU_.degree();
1370 const label degreeV = basisV_.degree();
1371 const label degreeW = basisW_.degree();
1373 const label nCPsU = basisU_.nCPs();
1374 const label nCPsV = basisV_.nCPs();
1375 const label nCPsW = basisW_.nCPs();
1379 auto&
points = tpoints.ref();
1383 const label globalPI = mapPtr_()[pI];
1384 const scalar u = uVector[globalPI].x();
1385 const scalar v = uVector[globalPI].y();
1386 const scalar w = uVector[globalPI].z();
1387 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
1389 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
1391 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
1394 cps_[getCPID(iCPu, iCPv, iCPw)]
1395 *basisU_.basisValue(iCPu, degreeU, u)
1396 *basisV_.basisValue(iCPv, degreeV, v)
1397 *basisW_.basisValue(iCPw, degreeW, w);
1412 const label degreeU = basisU_.degree();
1413 const label degreeV = basisV_.degree();
1414 const label degreeW = basisW_.degree();
1416 const label nCPsU = basisU_.nCPs();
1417 const label nCPsV = basisV_.nCPs();
1418 const label nCPsW = basisW_.nCPs();
1420 const scalar u = uVector.
x();
1421 const scalar v = uVector.
y();
1422 const scalar w = uVector.
z();
1425 for (
label iCPw = 0; iCPw < nCPsW; iCPw++)
1427 for (
label iCPv = 0; iCPv < nCPsV; iCPv++)
1429 for (
label iCPu = 0; iCPu < nCPsU; iCPu++)
1432 cps_[getCPID(iCPu, iCPv, iCPw)]
1433 *basisU_.basisValue(iCPu, degreeU, u)
1434 *basisV_.basisValue(iCPv, degreeV, v)
1435 *basisW_.basisValue(iCPw, degreeW, w);
1450 const vectorField& paramCoors = getParametricCoordinates();
1454 cps_ += controlPointsMovement;
1455 writeCps(
"cpsBsplines"+mesh_.time().timeName());
1460 const vectorField& parameterizedPoints = tparameterizedPoints();
1467 forAll(parameterizedPoints, pI)
1469 newPoints[map[pI]] = transformPointToCartesian(parameterizedPoints[pI]);
1473 updateLocalCoordinateSystem(newPoints);
1475 <<
"Max mesh movement equal to "
1489 const vectorField& paramCoors = getParametricCoordinates();
1492 cps_ += controlPointsMovement;
1494 writeCps(
"cpsBsplines"+mesh_.time().timeName());
1502 for (
const label patchI : patchesToBeMoved)
1512 if (whichPointInBox != -1)
1515 transformPointToCartesian
1527 updateLocalCoordinateSystem(newPoints);
1529 <<
"Max mesh movement equal to "
1538 if (cps_.size() != newCps.size())
1541 <<
"Attempting to replace control points with a set of "
1554 forAll(controlPointsMovement, cpI)
1556 if (!activeDesignVariables_[3*cpI])
1558 controlPointsMovement[cpI].x() =
Zero;
1560 if (!activeDesignVariables_[3*cpI + 1])
1562 controlPointsMovement[cpI].y() =
Zero;
1564 if (!activeDesignVariables_[3*cpI + 2])
1566 controlPointsMovement[cpI].z() =
Zero;
1581 const vectorField& paramCoors = getParametricCoordinates();
1583 cps_ += controlPointsMovement;
1585 scalar maxDisplacement(
Zero);
1586 for (
const label patchI : patchesToBeMoved)
1596 if (whichPointInBox != -1)
1599 transformPointToCartesian
1618 return maxDisplacement;
1624 if (mapPtr_.empty())
1626 findPointsInBox(localSystemCoordinates_);
1630 new vectorField(localSystemCoordinates_, mapPtr_())
1639 if (mapPtr_.empty())
1641 findPointsInBox(localSystemCoordinates_);
1650 if (reverseMapPtr_.empty())
1652 findPointsInBox(localSystemCoordinates_);
1655 return reverseMapPtr_();
1662 if (parametricCoordinatesPtr_.empty())
1666 if (mapPtr_.empty())
1668 findPointsInBox(localSystemCoordinates_);
1670 computeParametricCoordinates(getPointsInBox()());
1673 return parametricCoordinatesPtr_();
1680 const vectorField& parametricCoordinates = getParametricCoordinates();
1690 mesh_.time().timeName(),
1726 const vectorField& parametricCoordinates = getParametricCoordinates();
1736 mesh_.time().timeName(),
1767 const label cellI = pointCellsI[cI];
1768 DxDb[cellI] += C_d[cI] & pointDxDb;
1773 forAll(mesh_.boundary(), pI)
1776 if (!isA<coupledFvPatch>(
patch))
1791 label nU(basisU_.nCPs());
1798 nU = (nU - 1)/2 + 1;
1806 label nV(basisV_.nCPs());
1813 nV = (nV - 1)/2 + 1;
1821 label nW(basisW_.nCPs());
1828 nW = (nW - 1)/2 + 1;
1836 const label nCPsU = basisU_.nCPs();
1837 const label nCPsV = basisV_.nCPs();
1840 forAll(cpsInCartesian, cpI)
1842 cpsInCartesian[cpI] = transformPointToCartesian(cps_[cpI]);
1845 Info<<
"Writing control point positions to file" <<
endl;
1849 OFstream cpsFile((
"optimisation"/cpsFolder_/name_ +
fileName +
".csv").c_str());
1852 <<
"\"Points : 0\", \"Points : 1\", \"Points : 2\","
1853 <<
"\"u\", \"v\", \"w\","
1854 <<
"\"active : 0\", \"active : 1\", \"active : 2\"" <<
endl;
1855 forAll(cpsInCartesian, cpI)
1858 const label iCPv = (cpI - iCPw*nCPsU*nCPsV)/nCPsU;
1859 const label iCPu = (cpI - iCPw*nCPsU*nCPsV - iCPv*nCPsU);
1862 << cpsInCartesian[cpI].x() <<
", "
1863 << cpsInCartesian[cpI].y() <<
", "
1864 << cpsInCartesian[cpI].z() <<
", "
1868 << activeDesignVariables_[3*cpI] <<
", "
1869 << activeDesignVariables_[3*cpI + 1] <<
", "
1870 << activeDesignVariables_[3*cpI + 2] <<
endl;
1884 name_ +
"cpsBsplines" + mesh_.time().timeName(),
1885 mesh_.time().caseConstant(),
1894 cpsDict.
add(
"controlPoints", cps_);
1900 cpsDict.regIOobject::writeObject
1904 mesh_.time().writeCompression(),
1913 parametricCoordinatesPtr_().write();