@@ -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