Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

preliminaries for tiled timestepping #1653

Merged
merged 1 commit into from
Jul 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 17 additions & 15 deletions src/meep_internals.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,37 +95,39 @@ symmetry r_to_minus_r_symmetry(int m);

void step_curl(realnum *f, component c, const realnum *g1, const realnum *g2,
ptrdiff_t s1, ptrdiff_t s2, // strides for g1/g2 shift
const grid_volume &gv, realnum dtdx, direction dsig, const realnum *sig,
const grid_volume &gv, const ivec is, const ivec ie,
realnum dtdx, direction dsig, const realnum *sig,
const realnum *kap, const realnum *siginv, realnum *fu, direction dsigu,
const realnum *sigu, const realnum *kapu, const realnum *siginvu, realnum dt,
const realnum *cnd, const realnum *cndinv, realnum *fcnd);

void step_update_EDHB(realnum *f, component fc, const grid_volume &gv, const realnum *g,
void step_update_EDHB(realnum *f, component fc, const grid_volume &gv, const ivec is, const ivec ie, const realnum *g,
const realnum *g1, const realnum *g2, const realnum *u, const realnum *u1,
const realnum *u2, ptrdiff_t s, ptrdiff_t s1, ptrdiff_t s2,
const realnum *chi2, const realnum *chi3, realnum *fw, direction dsigw,
const realnum *sigw, const realnum *kapw);

void step_beta(realnum *f, component c, const realnum *g, const grid_volume &gv, realnum betadt,
void step_beta(realnum *f, component c, const realnum *g, const grid_volume &gv, const ivec is, const ivec ie, realnum betadt,
direction dsig, const realnum *siginv, realnum *fu, direction dsigu,
const realnum *siginvu, const realnum *cndinv, realnum *fcnd);

// functions in step_generic_stride1.cpp, generated from step_generic.cpp:

void step_curl_stride1(realnum *f, component c, const realnum *g1, const realnum *g2,
ptrdiff_t s1, ptrdiff_t s2, // strides for g1/g2 shift
const grid_volume &gv, realnum dtdx, direction dsig, const realnum *sig,
const grid_volume &gv, const ivec is, const ivec ie,
realnum dtdx, direction dsig, const realnum *sig,
const realnum *kap, const realnum *siginv, realnum *fu, direction dsigu,
const realnum *sigu, const realnum *kapu, const realnum *siginvu, realnum dt,
const realnum *cnd, const realnum *cndinv, realnum *fcnd);

void step_update_EDHB_stride1(realnum *f, component fc, const grid_volume &gv, const realnum *g,
void step_update_EDHB_stride1(realnum *f, component fc, const grid_volume &gv, const ivec is, const ivec ie, const realnum *g,
const realnum *g1, const realnum *g2, const realnum *u,
const realnum *u1, const realnum *u2, ptrdiff_t s, ptrdiff_t s1,
ptrdiff_t s2, const realnum *chi2, const realnum *chi3, realnum *fw,
direction dsigw, const realnum *sigw, const realnum *kapw);

void step_beta_stride1(realnum *f, component c, const realnum *g, const grid_volume &gv,
void step_beta_stride1(realnum *f, component c, const realnum *g, const grid_volume &gv, const ivec is, const ivec ie,
realnum betadt, direction dsig, const realnum *siginv, realnum *fu,
direction dsigu, const realnum *siginvu, const realnum *cndinv,
realnum *fcnd);
Expand All @@ -135,34 +137,34 @@ void step_beta_stride1(realnum *f, component c, const realnum *g, const grid_vol
which allow gcc (and possibly other compilers) to do additional
optimizations, especially loop vectorization */

#define STEP_CURL(f, c, g1, g2, s1, s2, gv, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, kapu, \
#define STEP_CURL(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, kapu, \
siginvu, dt, cnd, cndinv, fcnd) \
do { \
if (LOOPS_ARE_STRIDE1(gv)) \
step_curl_stride1(f, c, g1, g2, s1, s2, gv, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, \
step_curl_stride1(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, \
kapu, siginvu, dt, cnd, cndinv, fcnd); \
else \
step_curl(f, c, g1, g2, s1, s2, gv, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, kapu, \
step_curl(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, kapu, \
siginvu, dt, cnd, cndinv, fcnd); \
} while (0)

#define STEP_UPDATE_EDHB(f, fc, gv, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, sigw, \
#define STEP_UPDATE_EDHB(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, sigw, \
kapw) \
do { \
if (LOOPS_ARE_STRIDE1(gv)) \
step_update_EDHB_stride1(f, fc, gv, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, \
step_update_EDHB_stride1(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, \
sigw, kapw); \
else \
step_update_EDHB(f, fc, gv, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, sigw, \
step_update_EDHB(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, sigw, \
kapw); \
} while (0)

#define STEP_BETA(f, c, g, gv, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd) \
#define STEP_BETA(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd) \
do { \
if (LOOPS_ARE_STRIDE1(gv)) \
step_beta_stride1(f, c, g, gv, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \
step_beta_stride1(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \
else \
step_beta(f, c, g, gv, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \
step_beta(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \
} while (0)

// analytical Green's functions from near2far.cpp, which we might want to expose someday
Expand Down
7 changes: 5 additions & 2 deletions src/step_db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ bool fields_chunk::step_db(field_type ft) {
default: meep::abort("bug - non-cylindrical field component in Dcyl");
}

STEP_CURL(the_f, cc, f_p, f_m, stride_p, stride_m, gv, Courant, dsig, s->sig[dsig],
STEP_CURL(the_f, cc, f_p, f_m, stride_p, stride_m,
gv, gv.little_owned_corner0(cc), gv.big_corner(),
Courant, dsig, s->sig[dsig],
s->kap[dsig], s->siginv[dsig], f_u[cc][cmp], dsigu, s->sig[dsigu], s->kap[dsigu],
s->siginv[dsigu], dt, s->conductivity[cc][d_c], s->condinv[cc][d_c],
f_cond[cc][cmp]);
Expand Down Expand Up @@ -146,7 +148,8 @@ bool fields_chunk::step_db(field_type ft) {
const direction dsigu = s->sigsize[dsigu0] > 1 ? dsigu0 : NO_DIRECTION;
const realnum betadt = 2 * pi * beta * dt * (d_c == X ? +1 : -1) *
(f[c_g][1 - cmp] ? (ft == D_stuff ? -1 : +1) * (2 * cmp - 1) : 1);
STEP_BETA(the_f, cc, g, gv, betadt, dsig, s->siginv[dsig], f_u[cc][cmp], dsigu,
STEP_BETA(the_f, cc, g, gv, gv.little_owned_corner0(cc), gv.big_corner(),
betadt, dsig, s->siginv[dsig], f_u[cc][cmp], dsigu,
s->siginv[dsigu], s->condinv[cc][d_c], f_cond[cc][cmp]);
}

Expand Down
Loading