summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-09-28 11:46:52 +0200
committerAnton Khirnov <anton@khirnov.net>2019-09-28 11:46:52 +0200
commitbd71174fd6dc58c8f22ec3325d95c9057daeaf20 (patch)
tree74dcccd97a71fdfbc8da5bbc29da8799d9a1fcc6
parent3bb94aa06bdaee136fdc3a6a206e5f391a8b5361 (diff)
Extrapolate only from the levels that are synced with a coarser level.
Same as is done for maximal slicing, should be more stable.
-rw-r--r--src/qms.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/qms.c b/src/qms.c
index a1366bd..b5abcd2 100644
--- a/src/qms.c
+++ b/src/qms.c
@@ -1302,6 +1302,7 @@ void qms_mg_solve(CCTK_ARGUMENTS)
ts_tmp /= 2;
reflevel_top--;
}
+ reflevel_top = MAX(reflevel_top, ms->solve_level_max);
if (reflevel < ms->solve_level_max)
goto skip_solve;
@@ -1359,7 +1360,7 @@ void qms_mg_solve(CCTK_ARGUMENTS)
ms->time_bnd += gettime() - start;
ms->count_bnd++;
- fprintf(stderr, "%d qms solve: time %g\n", reflevel, time);
+ fprintf(stderr, "%d qms solve: time %g step %d\n", reflevel, time, timestep);
start = gettime();
ret = mg2d_solve(cp->solver);
ms->time_mg2d += gettime() - start;
@@ -1376,6 +1377,11 @@ skip_solve:
memcpy(W_val_tl1, W_val, grid_size * sizeof(*W_val_tl1));
}
+ if (reflevel > ms->solve_level_max && timestep % 2)
+ goto skip_export;
+
+
+ fprintf(stderr, "%d qms export: time %g step %d\n", reflevel, time, timestep);
/* add the solution to the list of past solutions */
{
#if 0
@@ -1493,6 +1499,8 @@ skip_solve:
ms->time_export += gettime() - start;
ms->count_export++;
+skip_export:
+
ms->time_solve += gettime() - total_start;
ms->count_solve++;
@@ -1650,9 +1658,13 @@ void qms_mg_inithist(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS;
const int reflevel = ctz(cctk_levfac[0]);
- const double dt = cctk_delta_time / (1 << MIN(reflevel, solve_level));
size_t grid_size = cctk_lsh[0] * cctk_lsh[1] * cctk_lsh[2];
+ double dt;
+
+ dt = cctk_delta_time / (1 << MIN(reflevel, solve_level));
+ if (reflevel > solve_level_max)
+ dt *= 2;
fprintf(stderr, "%d inithist\n", reflevel);