Skip to content

Commit f7d2a1f

Browse files
committed
Z4cow: remove function pointer in Z4cow_RHS
1 parent f149063 commit f7d2a1f

File tree

1 file changed

+52
-35
lines changed

1 file changed

+52
-35
lines changed

Z4cow/src/rhs.cxx

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -190,43 +190,60 @@ extern "C" void Z4cow_RHS(CCTK_ARGUMENTS) {
190190

191191
// Upwind and dissipation terms
192192

193-
// vreal (*calc_deriv_upwind)(
194-
// const GF3D2<const CCTK_REAL> &, const vbool &, const vect<int, dim> &,
195-
// const vect<CCTK_REAL, dim> &, const vec<vreal, dim> &);
196-
vreal (*calc_diss)(const GF3D2<const CCTK_REAL> &, const vbool &,
197-
const vect<int, dim> &, const vect<CCTK_REAL, dim> &);
198-
switch (diss_order) {
199-
case 3: {
200-
calc_diss = &Derivs::calc_diss<2>;
201-
break;
202-
}
203-
case 5: {
204-
calc_diss = &Derivs::calc_diss<4>;
205-
break;
206-
}
207-
case 7: {
208-
calc_diss = &Derivs::calc_diss<6>;
209-
break;
210-
}
211-
case 9: {
212-
calc_diss = &Derivs::calc_diss<8>;
213-
break;
214-
}
215-
default:
216-
assert(0);
217-
}
218-
219193
const auto apply_diss = [&](const GF3D2<const CCTK_REAL> &gf_,
220194
const GF3D2<CCTK_REAL> &gf_rhs_) {
221-
grid.loop_int_device<0, 0, 0, vsize>(
222-
grid.nghostzones,
223-
[=] CCTK_DEVICE(const PointDesc &p) CCTK_ATTRIBUTE_ALWAYS_INLINE {
224-
const vbool mask = mask_for_loop_tail<vbool>(p.i, p.imax);
225-
const vreal rhs_old = gf_rhs_(mask, p.I);
226-
const vreal rhs_new =
227-
rhs_old + epsdiss * calc_diss(gf_, mask, p.I, dx);
228-
gf_rhs_.store(mask, p.I, rhs_new);
229-
});
195+
switch (diss_order) {
196+
case 3: {
197+
grid.loop_int_device<0, 0, 0, vsize>(
198+
grid.nghostzones,
199+
[=] CCTK_DEVICE(const PointDesc &p) CCTK_ATTRIBUTE_ALWAYS_INLINE {
200+
const vbool mask = mask_for_loop_tail<vbool>(p.i, p.imax);
201+
const vreal rhs_old = gf_rhs_(mask, p.I);
202+
const vreal rhs_new =
203+
rhs_old + epsdiss * Derivs::calc_diss<2>(gf_, mask, p.I, dx);
204+
gf_rhs_.store(mask, p.I, rhs_new);
205+
});
206+
break;
207+
}
208+
case 5: {
209+
grid.loop_int_device<0, 0, 0, vsize>(
210+
grid.nghostzones,
211+
[=] CCTK_DEVICE(const PointDesc &p) CCTK_ATTRIBUTE_ALWAYS_INLINE {
212+
const vbool mask = mask_for_loop_tail<vbool>(p.i, p.imax);
213+
const vreal rhs_old = gf_rhs_(mask, p.I);
214+
const vreal rhs_new =
215+
rhs_old + epsdiss * Derivs::calc_diss<4>(gf_, mask, p.I, dx);
216+
gf_rhs_.store(mask, p.I, rhs_new);
217+
});
218+
break;
219+
}
220+
case 7: {
221+
grid.loop_int_device<0, 0, 0, vsize>(
222+
grid.nghostzones,
223+
[=] CCTK_DEVICE(const PointDesc &p) CCTK_ATTRIBUTE_ALWAYS_INLINE {
224+
const vbool mask = mask_for_loop_tail<vbool>(p.i, p.imax);
225+
const vreal rhs_old = gf_rhs_(mask, p.I);
226+
const vreal rhs_new =
227+
rhs_old + epsdiss * Derivs::calc_diss<6>(gf_, mask, p.I, dx);
228+
gf_rhs_.store(mask, p.I, rhs_new);
229+
});
230+
break;
231+
}
232+
case 9: {
233+
grid.loop_int_device<0, 0, 0, vsize>(
234+
grid.nghostzones,
235+
[=] CCTK_DEVICE(const PointDesc &p) CCTK_ATTRIBUTE_ALWAYS_INLINE {
236+
const vbool mask = mask_for_loop_tail<vbool>(p.i, p.imax);
237+
const vreal rhs_old = gf_rhs_(mask, p.I);
238+
const vreal rhs_new =
239+
rhs_old + epsdiss * Derivs::calc_diss<8>(gf_, mask, p.I, dx);
240+
gf_rhs_.store(mask, p.I, rhs_new);
241+
});
242+
break;
243+
}
244+
default:
245+
assert(0);
246+
}
230247
};
231248

232249
apply_diss(gf_W, gf_dtW);

0 commit comments

Comments
 (0)