43 const scalar totalOverFirst
51 const label maxIters = 20;
52 const scalar tol = 1
e-8;
54 if (
mag(
n-totalOverFirst) < tol)
63 if (totalOverFirst <
n)
66 maxR =
pow(totalOverFirst/
n, 1/(
n-1));
70 minR =
pow(totalOverFirst/
n, 1/(
n-1));
71 maxR = totalOverFirst/(
n - 1);
75 scalar r = 0.5*(minR + maxR);
77 for (
label i = 0; i < maxIters; ++i)
79 const scalar prevr = r;
81 const scalar fx =
pow(r,
n) - totalOverFirst*r - (1 - totalOverFirst);
82 const scalar dfx =
n*
pow(r,
n - 1) - totalOverFirst;
85 if (
mag(r - prevr) < tol)
104 relativeSizes_(
dict.lookup(
"relativeSizes")),
116 mergePatchFacesAngle_
118 dict.lookupOrDefault<scalar>
120 "mergePatchFacesAngle",
126 dict.lookupOrDefault(
"concaveAngle", defaultConcaveAngle)
129 maxFaceThicknessRatio_
133 nBufferCellsNoExtrude_
139 additionalReporting_(
dict.lookupOrDefault(
"additionalReporting",
false)),
145 medialAxisMeshMover::typeName
153 bool haveFirst =
dict.found(
"firstLayerThickness");
163 bool haveFinal =
dict.found(
"finalLayerThickness");
173 bool haveTotal =
dict.found(
"thickness");
183 bool haveExp =
dict.found(
"expansionRatio");
195 if (haveFirst && haveTotal)
197 layerSpec_ = FIRST_AND_TOTAL;
198 Info<<
"Layer thickness specified as first layer and overall thickness."
201 else if (haveFirst && haveExp)
203 layerSpec_ = FIRST_AND_EXPANSION;
204 Info<<
"Layer thickness specified as first layer and expansion ratio."
207 else if (haveFinal && haveTotal)
209 layerSpec_ = FINAL_AND_TOTAL;
210 Info<<
"Layer thickness specified as final layer and overall thickness."
213 else if (haveFinal && haveExp)
215 layerSpec_ = FINAL_AND_EXPANSION;
216 Info<<
"Layer thickness specified as final layer and expansion ratio."
219 else if (haveTotal && haveExp)
221 layerSpec_ = TOTAL_AND_EXPANSION;
222 Info<<
"Layer thickness specified as overall thickness"
223 <<
" and expansion ratio." <<
endl;
227 if (layerSpec_ == ILLEGAL || nSpec != 2)
232 ) <<
"Over- or underspecified layer thickness."
233 <<
" Please specify" <<
nl
234 <<
" first layer thickness ('firstLayerThickness')"
235 <<
" and overall thickness ('thickness') or" <<
nl
236 <<
" first layer thickness ('firstLayerThickness')"
237 <<
" and expansion ratio ('expansionRatio') or" <<
nl
238 <<
" final layer thickness ('finalLayerThickness')"
239 <<
" and expansion ratio ('expansionRatio') or" <<
nl
240 <<
" final layer thickness ('finalLayerThickness')"
241 <<
" and overall thickness ('thickness') or" <<
nl
242 <<
" overall thickness ('thickness')"
243 <<
" and expansion ratio ('expansionRatio'"
248 dict.readIfPresent(
"nRelaxedIter", nRelaxedIter_);
250 if (nLayerIter_ < 0 || nRelaxedIter_ < 0)
253 <<
"Layer iterations should be >= 0." <<
endl
254 <<
"nLayerIter:" << nLayerIter_
255 <<
" nRelaxedIter:" << nRelaxedIter_
266 const keyType& key = iter().keyword();
272 if (patchIDs.
size() == 0)
275 <<
"Layer specification for " << key
276 <<
" does not match any patch." <<
endl
285 label patchI = patchIter.key();
292 case FIRST_AND_TOTAL:
295 "firstLayerThickness",
296 firstLayerThickness_[patchI]
305 case FIRST_AND_EXPANSION:
308 "firstLayerThickness",
309 firstLayerThickness_[patchI]
314 expansionRatio_[patchI]
318 case FINAL_AND_TOTAL:
321 "finalLayerThickness",
322 finalLayerThickness_[patchI]
331 case FINAL_AND_EXPANSION:
334 "finalLayerThickness",
335 finalLayerThickness_[patchI]
340 expansionRatio_[patchI]
344 case TOTAL_AND_EXPANSION:
353 expansionRatio_[patchI]
368 minThickness_[patchI]
382 const scalar firstLayerThickess,
383 const scalar finalLayerThickess,
384 const scalar totalThickness,
385 const scalar expansionRatio
390 case FIRST_AND_TOTAL:
391 case FINAL_AND_TOTAL:
392 case TOTAL_AND_EXPANSION:
394 return totalThickness;
398 case FIRST_AND_EXPANSION:
400 if (
mag(expansionRatio-1) < SMALL)
402 return firstLayerThickess * nLayers;
406 return firstLayerThickess
407 *(1.0 -
pow(expansionRatio, nLayers))
408 /(1.0 - expansionRatio);
413 case FINAL_AND_EXPANSION:
415 if (
mag(expansionRatio-1) < SMALL)
417 return finalLayerThickess * nLayers;
421 scalar invExpansion = 1.0 / expansionRatio;
422 return finalLayerThickess
423 *(1.0 -
pow(invExpansion, nLayers))
424 /(1.0 - invExpansion);
442 const scalar firstLayerThickess,
443 const scalar finalLayerThickess,
444 const scalar totalThickness,
445 const scalar expansionRatio
450 case FIRST_AND_EXPANSION:
451 case FINAL_AND_EXPANSION:
452 case TOTAL_AND_EXPANSION:
454 return expansionRatio;
458 case FIRST_AND_TOTAL:
460 return layerExpansionRatio
463 totalThickness/firstLayerThickess
468 case FINAL_AND_TOTAL:
475 totalThickness/finalLayerThickess
493 const scalar firstLayerThickess,
494 const scalar finalLayerThickess,
495 const scalar totalThickness,
496 const scalar expansionRatio
501 case FIRST_AND_EXPANSION:
502 case FIRST_AND_TOTAL:
504 return firstLayerThickess;
507 case FINAL_AND_EXPANSION:
509 return finalLayerThickess*
pow(1.0/expansionRatio, nLayers-1);
513 case FINAL_AND_TOTAL:
515 scalar r = layerExpansionRatio
523 return finalLayerThickess/
pow(r, nLayers-1);
527 case TOTAL_AND_EXPANSION:
529 scalar r = finalLayerThicknessRatio
534 scalar finalThickness = r*totalThickness;
535 return finalThickness/
pow(expansionRatio, nLayers-1);
552 const scalar expansionRatio
557 if (
mag(expansionRatio-1) < SMALL)
564 pow(expansionRatio, nLayers - 1)
565 *(1.0 - expansionRatio)
566 /(1.0 -
pow(expansionRatio, nLayers));