Skip to content
Snippets Groups Projects
Commit 7172ad28 authored by Elias Pipping's avatar Elias Pipping
Browse files

[Cleanup] Make time refinement controllable

parent fec038ae
No related branches found
No related tags found
No related merge requests found
...@@ -370,6 +370,16 @@ int main(int argc, char *argv[]) { ...@@ -370,6 +370,16 @@ int main(int argc, char *argv[]) {
auto const refinementTolerance = auto const refinementTolerance =
parset.get<double>("timeSteps.refinementTolerance"); parset.get<double>("timeSteps.refinementTolerance");
auto const mustRefine = [&](UpdaterPair coarseUpdater,
UpdaterPair fineUpdater) {
ScalarVector coarseAlpha;
coarseUpdater.first->extractAlpha(coarseAlpha);
ScalarVector fineAlpha;
fineUpdater.first->extractAlpha(fineAlpha);
return stateEnergyNorm.diff(fineAlpha, coarseAlpha) > refinementTolerance;
};
size_t timeStep = 1; size_t timeStep = 1;
...@@ -394,7 +404,6 @@ int main(int argc, char *argv[]) { ...@@ -394,7 +404,6 @@ int main(int argc, char *argv[]) {
while (true) { while (true) {
R2 = clonePair(R1); R2 = clonePair(R1);
ScalarVector alphaR2;
{ {
CoupledTimeStepper<NonlinearFactory, MyStateUpdater, MyTimeStepper> CoupledTimeStepper<NonlinearFactory, MyStateUpdater, MyTimeStepper>
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
...@@ -404,11 +413,9 @@ int main(int argc, char *argv[]) { ...@@ -404,11 +413,9 @@ int main(int argc, char *argv[]) {
coupledTimeStepper.step(relativeTime + relativeTau, relativeTau); coupledTimeStepper.step(relativeTime + relativeTau, relativeTau);
iterationWriter << iterations << " " << std::flush; iterationWriter << iterations << " " << std::flush;
} }
R2.first->extractAlpha(alphaR2);
UpdaterPair C = clonePair(current); UpdaterPair C = clonePair(current);
ScalarVector alphaC;
{ {
CoupledTimeStepper<NonlinearFactory, MyStateUpdater, MyTimeStepper> CoupledTimeStepper<NonlinearFactory, MyStateUpdater, MyTimeStepper>
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
...@@ -418,11 +425,8 @@ int main(int argc, char *argv[]) { ...@@ -418,11 +425,8 @@ int main(int argc, char *argv[]) {
coupledTimeStepper.step(relativeTime, 2.0 * relativeTau); coupledTimeStepper.step(relativeTime, 2.0 * relativeTau);
iterationWriter << iterations << " " << std::flush; iterationWriter << iterations << " " << std::flush;
} }
C.first->extractAlpha(alphaC);
auto const coarseningError = stateEnergyNorm.diff(alphaC, alphaR2);
if (coarseningError < refinementTolerance) { if (!mustRefine(C, R2)) {
R2 = { nullptr, nullptr }; R2 = { nullptr, nullptr };
R1 = C; R1 = C;
relativeTau *= 2.0; relativeTau *= 2.0;
...@@ -433,12 +437,10 @@ int main(int argc, char *argv[]) { ...@@ -433,12 +437,10 @@ int main(int argc, char *argv[]) {
} }
if (!didCoarsen) { if (!didCoarsen) {
ScalarVector alphaR1;
while (true) { while (true) {
UpdaterPair F2 = clonePair(current); UpdaterPair F2 = clonePair(current);
UpdaterPair F1; UpdaterPair F1;
ScalarVector alphaF2;
{ {
CoupledTimeStepper<NonlinearFactory, MyStateUpdater, MyTimeStepper> CoupledTimeStepper<NonlinearFactory, MyStateUpdater, MyTimeStepper>
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
...@@ -455,11 +457,8 @@ int main(int argc, char *argv[]) { ...@@ -455,11 +457,8 @@ int main(int argc, char *argv[]) {
relativeTime + relativeTau / 2.0, relativeTau / 2.0); relativeTime + relativeTau / 2.0, relativeTau / 2.0);
iterationWriter << iterationsF2 << " " << std::flush; iterationWriter << iterationsF2 << " " << std::flush;
} }
F2.first->extractAlpha(alphaF2);
R1.first->extractAlpha(alphaR1);
auto const refinementError = stateEnergyNorm.diff(alphaR1, alphaF2);
if (refinementError < refinementTolerance) { if (!mustRefine(R1, F2)) {
break; break;
} else { } else {
R1 = F1; R1 = F1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment