aboutsummaryrefslogtreecommitdiff
path: root/schedule.ccl
diff options
context:
space:
mode:
authorhawke <hawke@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b>2005-01-27 15:10:17 +0000
committerhawke <hawke@578cdeb0-5ea1-4b81-8215-5a3b8777ee0b>2005-01-27 15:10:17 +0000
commit495a7da9357fa3a487d626de33ec75dccb843100 (patch)
treedf3499e0f57dc60d5ad4fcd9f816ba69ff04bc43 /schedule.ccl
parentc1088f5c4132c6a713f694a6640f1d2736794f71 (diff)
Adaptive step size control using RK45. Due to Erik Schnetter.
Note that if you want to use this with Carpet you currently have to use the development (darcs) version of Carpet together with the parameter carpet::adaptive_stepsize = "yes". git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/MoL/trunk@82 578cdeb0-5ea1-4b81-8215-5a3b8777ee0b
Diffstat (limited to 'schedule.ccl')
-rw-r--r--schedule.ccl89
1 files changed, 72 insertions, 17 deletions
diff --git a/schedule.ccl b/schedule.ccl
index 43dc1f9..4e0ae19 100644
--- a/schedule.ccl
+++ b/schedule.ccl
@@ -130,6 +130,22 @@ if (initial_data_is_crap)
} "A bad routine. Fills all previous timelevels with data copied from the current."
}
+##########################################
+### Initialise the step size control ###
+##########################################
+
+schedule MoL_StartLoop AT Evol BEFORE MoL_Evolution
+{
+ LANG: C
+ OPTIONS: LEVEL
+} "Initialise the step size control"
+
+schedule MoL_StartLoop AT Initial
+{
+ LANG: C
+ OPTIONS: LEVEL
+} "Initialise the step size control"
+
######################################################
### The evolution step. This is almost a self ###
### contained EVOL step with PRE and POST steps ###
@@ -149,7 +165,7 @@ if (MoL_Num_Scratch_Levels)
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ScratchSpace
STORAGE: SandRScratchSpace
@@ -163,7 +179,7 @@ if (MoL_Num_Scratch_Levels)
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ScratchSpace
STORAGE: SandRScratchSpace
@@ -178,7 +194,7 @@ if (MoL_Num_Scratch_Levels)
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ScratchSpace
STORAGE: ArrayScratchSpace
@@ -191,7 +207,7 @@ if (MoL_Num_Scratch_Levels)
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ScratchSpace
# STORAGE: ComplexScratchSpace
@@ -208,7 +224,7 @@ if (MoL_Num_Scratch_Levels)
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: SandRScratchSpace
STORAGE: ArrayScratchSpace
@@ -221,7 +237,7 @@ if (MoL_Num_Scratch_Levels)
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: SandRScratchSpace
# STORAGE: ComplexScratchSpace
@@ -235,7 +251,7 @@ if (MoL_Num_Scratch_Levels)
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ArrayScratchSpace
STORAGE: ArraySandRScratchSpace
@@ -247,7 +263,7 @@ if (MoL_Num_Scratch_Levels)
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
# STORAGE: ComplexScratchSpace
# STORAGE: ComplexSandRScratchSpace
@@ -266,7 +282,7 @@ else
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: SandRScratchSpace
STORAGE: ArraySandRScratchSpace
@@ -278,7 +294,7 @@ else
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: SandRScratchSpace
# STORAGE: ComplexScratchSpace
@@ -292,7 +308,7 @@ else
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ArraySandRScratchSpace
# STORAGE: ComplexScratchSpace
@@ -303,7 +319,7 @@ else
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
# STORAGE: ComplexScratchSpace
# STORAGE: ComplexSandRScratchSpace
@@ -319,7 +335,7 @@ else
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: SandRScratchSpace
STORAGE: ArraySandRScratchSpace
@@ -331,7 +347,7 @@ else
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: SandRScratchSpace
# STORAGE: ComplexScratchSpace
@@ -345,7 +361,7 @@ else
{
if (MoL_Max_Evolved_Array_Size)
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
STORAGE: ArraySandRScratchSpace
# STORAGE: ComplexScratchSpace
@@ -356,7 +372,7 @@ else
}
else
{
- schedule GROUP MoL_Evolution AT Evol
+ schedule GROUP MoL_Evolution AT Evol WHILE MoL::MoL_Stepsize_Bad
{
# STORAGE: ComplexScratchSpace
# STORAGE: ComplexSandRScratchSpace
@@ -515,7 +531,7 @@ else if (CCTK_Equals(ODE_Method,"RK3"))
}
else if (CCTK_Equals(ODE_Method,"RK45"))
{
- STORAGE: ErrorEstimate
+ STORAGE: ErrorEstimate ErrorScalars
schedule MoL_RK45Add AS MoL_Add IN MoL_Step AFTER MoL_CalcRHS BEFORE MoL_PostStep
{
@@ -595,6 +611,45 @@ schedule MoL_RestoreSandR IN MoL_Evolution AFTER MoL_PostStep
LANG: C
} "Restoring the Save and Restore variables to the original state"
+###################################################
+### Loop until the step size was small enough ###
+###################################################
+
+if (adaptive_stepsize)
+{
+ # Adaptive step size control
+ schedule MoL_InitAdaptiveError IN MoL_Evolution AFTER MoL_PostStep
+ {
+ LANG: C
+ OPTIONS: LEVEL
+ } "Control the step size: initialize error check variables"
+
+ schedule MoL_FindAdaptiveError IN MoL_Evolution AFTER MoL_InitAdaptiveError
+ {
+ LANG: C
+ } "Control the step size: compute error check variables"
+
+ schedule MoL_ReduceAdaptiveError IN MoL_Evolution AFTER MoL_FindAdaptiveError
+ {
+ LANG: C
+ OPTIONS: LEVEL
+ } "Control the step size: reduce error check variables"
+
+ schedule MoL_SetEstimatedDt AT POSTSTEP
+ {
+ LANG: C
+ OPTIONS: LEVEL
+ } "Control the step size: set the new timestep"
+}
+else
+{
+ schedule MoL_FinishLoop IN MoL_Evolution AFTER MoL_PostStep
+ {
+ LANG: C
+ OPTIONS: LEVEL
+ } "Control the step size"
+}
+
################################################################
### At the end (but before driver terminate to avoid those ###
### irritating segfaults) free the index arrays. ###