opm-simulators icon indicating copy to clipboard operation
opm-simulators copied to clipboard

Include rejection of time step if tolerance test fails

Open erikhide opened this issue 1 year ago • 7 comments

Most of the work published on adaptive time stepping includes a test for deciding whether or not to reject the most recent time step. This is usually done by taking the relative change or some error estimate and comparing this to one or more threshold value(s). If the change/error is too large, the time step is rejected, and we try again with a shorter time step. In other words, we discard the computations and move back to the previous point in time. Currently, however, this is not done in OPM, and my belief (still only a hypothesis) is that this has contributed to the lack of robustness in the "pure" PID controller implementation.

Note that the OPM Flow Reference Manual includes a footnote reference to "Algebraic Flux Correction III. Incompressible Flow Problems. Uni Dortmund, Turek and Kuzmin, January, 2006 (DOI: 10.1007/3-540-27206-2_8)" in which the method clearly states that a failure to satisfy the tolerance test should result in a rejection of the time step.

I have implemented such a rejection of time steps now. It seems to be working as it should, but please let me know if I should change something.

erikhide avatar Apr 26 '24 11:04 erikhide

Much appreciated! Just for clarity: Is this work intended as a replacement for, or perhaps a continuation of, #4855 and/or #4856? Or maybe it's entirely independent of those two existing PRs?

bska avatar Apr 26 '24 11:04 bska

This is meant to solve an independent problem in the adaptive time stepping.

The pull request does in fact include the changes done in #4855, but the new changes related to rejection of time steps are independent of that. They are also completely independent of #4856.

erikhide avatar Apr 26 '24 11:04 erikhide

This is meant to solve an independent problem in the adaptive time stepping.

Okay, understood.

The pull request does in fact include the changes done in #4855, but the new changes related to rejection of time steps are independent of that.

Very good. Then I think we should maybe change the state of this PR to draft/work-in-progress pending #4855 so we don't inadvertently merge this in conflict with that work. Would that be okay with you?

bska avatar Apr 26 '24 11:04 bska

Very good. Then I think we should maybe change the state of this PR to draft/work-in-progress pending #4855 so we don't inadvertently merge this in conflict with that work. Would that be okay with you?

Sure! That's probably a good solution.

erikhide avatar Apr 26 '24 11:04 erikhide

Very good. Then I think we should maybe change the state of this PR to draft/work-in-progress pending #4855 so we don't inadvertently merge this in conflict with that work. Would that be okay with you?

Sure! That's probably a good solution.

Cool–I've marked it as such now.

bska avatar Apr 26 '24 11:04 bska

benchmark please

alfbr avatar Jun 04 '24 13:06 alfbr

Benchmark result overview:

Test Configuration Relative
opm-git OPM Benchmark: drogon - Threads: 1 1.015
opm-git OPM Benchmark: drogon - Threads: 8 0.991
opm-git OPM Benchmark: punqs3 - Threads: 1 0.981
opm-git OPM Benchmark: punqs3 - Threads: 8 1.003
opm-git OPM Benchmark: smeaheia - Threads: 1 0.975
opm-git OPM Benchmark: smeaheia - Threads: 8 1.003
opm-git OPM Benchmark: spe10_model_1 - Threads: 1 0.996
opm-git OPM Benchmark: spe10_model_1 - Threads: 8 1.004
opm-git OPM Benchmark: flow_mpi_extra - Threads: 1 0.997
opm-git OPM Benchmark: flow_mpi_extra - Threads: 8 1.006
opm-git OPM Benchmark: flow_mpi_norne - Threads: 1 1.013
opm-git OPM Benchmark: flow_mpi_norne - Threads: 8 0.99
opm-git OPM Benchmark: flow_mpi_norne_4c_msw - Threads: 1 0.808
opm-git OPM Benchmark: flow_mpi_norne_4c_msw - Threads: 8 0.893
  • Speed-up = Total time master / Total time pull request. Above 1.0 is an improvement. *

View result details @ https://www.ytelses.com/opm/?page=result&id=2497

ytelses avatar Jun 04 '24 20:06 ytelses