Skip to content

Commit 1ee313a

Browse files
committed
initial (bad) PEC BC for magnetic fields, this will be improved later once it is more apparent when more boundary conditions are added and visualization is implemented
1 parent 071228c commit 1ee313a

File tree

1 file changed

+63
-17
lines changed

1 file changed

+63
-17
lines changed

src/core/fdtd_engine.cpp

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,27 @@ template <std::floating_point T>
250250
void FDTDEngine<T>::update_hx(const T hya, const T hza) {
251251
SPDLOG_TRACE("enter FDTDEngine<T>::update_hx");
252252

253-
// todo correctly implement for PEC boundary
254-
for (size_t i = 1; i < h.x.extent(0) - 1; ++i) {
255-
for (size_t j = 1; j < h.x.extent(1) - 1; ++j) {
256-
for (size_t k = 1; k < h.x.extent(2) - 1; ++k) {
257-
h.x[i, j, k] += -hya * (e.z[i, j + 1, k] - e.z[i, j, k]) +
258-
hza * (e.y[i, j, k + 1] - e.y[i, j, k]);
253+
// todo remove branches
254+
for (size_t i = 0; i < h.x.extent(0); ++i) {
255+
for (size_t j = 0; j < h.x.extent(1); ++j) {
256+
for (size_t k = 0; k < h.x.extent(2); ++k) {
257+
[[likely]] if (j != h.x.extent(1) - 1 && k != h.x.extent(2) - 1) {
258+
// j- k-low volume
259+
h.x[i, j, k] += -hya * (e.z[i, j + 1, k] - e.z[i, j, k]) +
260+
hza * (e.y[i, j, k + 1] - e.y[i, j, k]);
261+
} else if (j != h.x.extent(1) - 1 && k == h.x.extent(2) - 1) {
262+
// k-high plane
263+
h.x[i, j, k] += -hya * (e.z[i, j + 1, k] - e.z[i, j, k]) +
264+
hza * (0.0 - e.y[i, j, k]);
265+
} else if (j == h.x.extent(1) - 1 && k != h.x.extent(2) - 1) {
266+
// j-high plane
267+
h.x[i, j, k] += -hya * (0.0 - e.z[i, j, k]) +
268+
hza * (e.y[i, j, k + 1] - e.y[i, j, k]);
269+
} else {
270+
// j- k-high line
271+
h.x[i, j, k] +=
272+
-hya * (0.0 - e.z[i, j, k]) + hza * (0.0 - e.y[i, j, k]);
273+
}
259274
}
260275
}
261276
}
@@ -267,12 +282,27 @@ template <std::floating_point T>
267282
void FDTDEngine<T>::update_hy(const T hxa, const T hza) {
268283
SPDLOG_TRACE("enter FDTDEngine<T>::update_hy");
269284

270-
// todo correctly implement for PEC boundary
271-
for (size_t i = 1; i < h.y.extent(0) - 1; ++i) {
272-
for (size_t j = 1; j < h.y.extent(1) - 1; ++j) {
273-
for (size_t k = 1; k < h.y.extent(2) - 1; ++k) {
274-
h.y[i, j, k] += -hza * (e.x[i, j, k + 1] - e.x[i, j, k]) +
275-
hxa * (e.z[i + 1, j, k] - e.z[i, j, k]);
285+
// todo remove branches
286+
for (size_t i = 0; i < h.y.extent(0); ++i) {
287+
for (size_t j = 0; j < h.y.extent(1); ++j) {
288+
for (size_t k = 0; k < h.y.extent(2); ++k) {
289+
[[likely]] if (i != h.y.extent(0) - 1 && k != h.y.extent(2) - 1) {
290+
// i- k-low volume
291+
h.y[i, j, k] += -hza * (e.x[i, j, k + 1] - e.x[i, j, k]) +
292+
hxa * (e.z[i + 1, j, k] - e.z[i, j, k]);
293+
} else if (i != h.y.extent(0) - 1 && k == h.y.extent(2) - 1) {
294+
// k-high plane
295+
h.y[i, j, k] += -hza * (0.0 - e.x[i, j, k]) +
296+
hxa * (e.z[i + 1, j, k] - e.z[i, j, k]);
297+
} else if (i == h.y.extent(0) - 1 && k != h.y.extent(2) - 1) {
298+
// i-high plane
299+
h.y[i, j, k] += -hza * (e.x[i, j, k + 1] - e.x[i, j, k]) +
300+
hxa * (0.0 - e.z[i, j, k]);
301+
} else {
302+
// i- k-high line
303+
h.y[i, j, k] +=
304+
-hza * (0.0 - e.x[i, j, k]) + hxa * (0.0 - e.z[i, j, k]);
305+
}
276306
}
277307
}
278308
}
@@ -285,11 +315,27 @@ void FDTDEngine<T>::update_hz(const T hxa, const T hya) {
285315
SPDLOG_TRACE("enter FDTDEngine<T>::update_hz");
286316

287317
// todo correctly implement for PEC boundary
288-
for (size_t i = 1; i < h.z.extent(0) - 1; ++i) {
289-
for (size_t j = 1; j < h.z.extent(1) - 1; ++j) {
290-
for (size_t k = 1; k < h.z.extent(2) - 1; ++k) {
291-
h.z[i, j, k] += -hxa * (e.y[i + 1, j, k] - e.y[i, j, k]) +
292-
hya * (e.x[i, j + 1, k] - e.x[i, j, k]);
318+
// todo remove branches
319+
for (size_t i = 0; i < h.z.extent(0); ++i) {
320+
for (size_t j = 0; j < h.z.extent(1); ++j) {
321+
for (size_t k = 0; k < h.z.extent(2); ++k) {
322+
[[likely]] if (i != h.y.extent(0) - 1 && j != h.y.extent(1) - 1) {
323+
// i- j-low volume
324+
h.z[i, j, k] += -hxa * (e.y[i + 1, j, k] - e.y[i, j, k]) +
325+
hya * (e.x[i, j + 1, k] - e.x[i, j, k]);
326+
} else if (i != h.y.extent(0) - 1 && j == h.y.extent(1) - 1) {
327+
// j-high plane
328+
h.z[i, j, k] += -hxa * (e.y[i + 1, j, k] - e.y[i, j, k]) +
329+
hya * (0.0 - e.x[i, j, k]);
330+
} else if (i == h.y.extent(0) - 1 && j != h.y.extent(1) - 1) {
331+
// i-high plane
332+
h.z[i, j, k] += -hxa * (0.0 - e.y[i, j, k]) +
333+
hya * (e.x[i, j + 1, k] - e.x[i, j, k]);
334+
} else {
335+
// i- j-high line
336+
h.z[i, j, k] +=
337+
-hxa * (0.0 - e.y[i, j, k]) + hya * (0.0 - e.x[i, j, k]);
338+
}
293339
}
294340
}
295341
}

0 commit comments

Comments
 (0)