summaryrefslogtreecommitdiff
path: root/src/qms.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/qms.c')
-rw-r--r--src/qms.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/qms.c b/src/qms.c
index 6faa62e..3d3fb64 100644
--- a/src/qms.c
+++ b/src/qms.c
@@ -51,7 +51,6 @@ struct QMSContext {
double *coeffs_eval;
double max_radius;
- int solve_level;
uint64_t grid_expand_count;
uint64_t grid_expand_time;
@@ -62,6 +61,21 @@ struct QMSContext {
double scale_factor;
+static int ctz(int a)
+{
+ int ret = 0;
+
+ if (!a)
+ return INT_MAX;
+
+ while (!(a & 1)) {
+ a >>= 1;
+ ret++;
+ }
+
+ return ret;
+}
+
/* get an approximate "main" frequency component in a basis function */
static double calc_basis_freq(const BasisSet *b, int order)
{
@@ -282,12 +296,15 @@ void quasimaximal_slicing_axi_solve(CCTK_ARGUMENTS)
ms = qms_context;
- time = cctkGH->cctk_time / ms->gh->cctk_delta_time;
-
if (cctkGH->cctk_time >= switchoff_time + 1.0)
return;
- if (ms->gh->cctk_levfac[0] != 1 || fabs(time - ceilf(time)) > 1e-8 ||
+ if (ctz(ms->gh->cctk_levfac[0]) != solve_level)
+ return;
+
+ time = cctkGH->cctk_time * ms->gh->cctk_levfac[0] / ms->gh->cctk_delta_time;
+
+ if (fabs(time - ceilf(time)) > 1e-8 ||
(ms->solutions[ARRAY_ELEMS(ms->solutions) - 1].time >= cctkGH->cctk_time))
return;