]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Use stricter timestep limits in an ARKODE test. 13934/head
authorDavid Wells <drwells@email.unc.edu>
Wed, 8 Jun 2022 18:00:06 +0000 (14:00 -0400)
committerDavid Wells <drwells@email.unc.edu>
Wed, 8 Jun 2022 18:00:06 +0000 (14:00 -0400)
For whatever reason this test is less stable than the others. Setting bounds on
the timesteps makes this pass on more configurations with the same output.

tests/sundials/arkode_03.cc
tests/sundials/arkode_03.output
tests/sundials/arkode_03_in.prm

index b6a54046b0e579b3376dad931ccaf4e18c9ba949..ba63b093b02c34dd18ee915b08af4b053f27f8b7 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <deal.II/sundials/arkode.h>
 
+#include <arkode/arkode_arkstep.h>
+
 #include "../tests.h"
 
 
@@ -100,6 +102,19 @@ main()
     return 0;
   };
 
+  // This test, for reasons I don't fully understand, generates some output
+  // which varies between environments much more than the other ARKODE
+  // tests. Work around it by setting a fairly stringent maximum time step.
+  ode.custom_setup = [&](void *arkode_mem) -> int {
+    int ierr = ARKStepSetMinStep(arkode_mem, 1e-8);
+    AssertThrow(ierr == 0, ExcInternalError());
+    ierr = ARKStepSetMaxStep(arkode_mem, 1e-4);
+    AssertThrow(ierr == 0, ExcInternalError());
+    ierr = ARKStepSetMaxNumSteps(arkode_mem, 5000);
+    AssertThrow(ierr == 0, ExcInternalError());
+    return 0;
+  };
+
   VectorType y(3);
   y[0] = u0;
   y[1] = v0;
index 4d8a78f72d49593f250ce560de717642e22f6711..3a7fb961fa6fa829eee2f2cb6469ae47ff8169e5 100644 (file)
@@ -1,12 +1,12 @@
 
 DEAL::0.00000 3.900000000 1.100000000 2.800000000
-DEAL::1.000000000 2.075274578 1.059601971 2.499947382
-DEAL::2.000000000 1.100460018 1.723610111 2.499972220
-DEAL::3.000000000 0.7896202372 2.326668043 2.499980117
-DEAL::4.000000000 0.8117726433 2.725583965 2.499984008
-DEAL::5.000000000 1.187002916 2.595541878 2.499971084
-DEAL::6.000000000 1.887311324 1.494098057 2.499930049
-DEAL::7.000000000 1.323271341 1.619016372 2.499966501
-DEAL::8.000000000 0.9217874641 2.130219386 2.499975040
-DEAL::9.000000000 0.8495425770 2.539475069 2.499979558
-DEAL::10.00000000 1.064969831 2.595955794 2.499973382
+DEAL::1.000000000 2.075274578 1.059601971 2.499948104
+DEAL::2.000000000 1.100460018 1.723610111 2.499972489
+DEAL::3.000000000 0.7896202372 2.326668043 2.499980186
+DEAL::4.000000000 0.8117726432 2.725583965 2.499979565
+DEAL::5.000000000 1.187002916 2.595541878 2.499970331
+DEAL::6.000000000 1.887311324 1.494098057 2.499952819
+DEAL::7.000000000 1.323271341 1.619016372 2.499966920
+DEAL::8.000000000 0.9217874641 2.130219386 2.499976990
+DEAL::9.000000000 0.8495425770 2.539475069 2.499978832
+DEAL::10.00000000 1.064969831 2.595955794 2.499973393
index f035bb516486a054aee12c12e88809e97da4dfca..a412b2b72f7fb90c23960140a31bef149b711663 100644 (file)
@@ -4,16 +4,16 @@ set Time interval between each output = 0.1
 subsection Error control
   # making this tolerance any lower prevents convergence in 5.4:
   # this is fixed in 6.2
-  set Absolute error tolerance = 1e-8
-  set Relative error tolerance = 1e-8
+  set Absolute error tolerance = 5e-9
+  set Relative error tolerance = 5e-9
 end
 subsection Running parameters
   set Implicit function is linear            = true
   set Implicit function is time independent  = true
   set Initial step size                      = 1e-6
-  set Maximum number of nonlinear iterations = 30
+  set Maximum number of nonlinear iterations = 50
   set Maximum order of ARK                   = 5
   set Minimum step size                      = 1e-7
   # A larger subspace, combined with looser tolerances, are required by 5.4
-  set Anderson-acceleration subspace         = 5
+  set Anderson-acceleration subspace         = 10
 end

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.