fdderivs_c: 全量清零改为只清零边界面,减少无效内存写入

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-02-28 13:20:06 +08:00
parent 8010ad27ed
commit 34d6922a66

View File

@@ -71,11 +71,30 @@ void fdderivs(const int ex[3],
const double Fdxdz = F1o144 / (dX * dZ);
const double Fdydz = F1o144 / (dY * dZ);
/* 输出清零fxx,fyy,fzz,fxy,fxz,fyz = 0 */
/* 只清零主循环不覆盖的最外层边界面 */
const size_t all = (size_t)ex1 * (size_t)ex2 * (size_t)ex3;
for (size_t p = 0; p < all; ++p) {
fxx[p] = ZEO; fyy[p] = ZEO; fzz[p] = ZEO;
fxy[p] = ZEO; fxz[p] = ZEO; fyz[p] = ZEO;
{
/* k0=ex3-1 面 */
for (int j0 = 0; j0 < ex2; ++j0)
for (int i0 = 0; i0 < ex1; ++i0) {
const size_t p = idx_ex(i0, j0, ex3-1, ex);
fxx[p]=ZEO; fyy[p]=ZEO; fzz[p]=ZEO;
fxy[p]=ZEO; fxz[p]=ZEO; fyz[p]=ZEO;
}
/* j0=ex2-1 面 */
for (int k0 = 0; k0 < ex3-1; ++k0)
for (int i0 = 0; i0 < ex1; ++i0) {
const size_t p = idx_ex(i0, ex2-1, k0, ex);
fxx[p]=ZEO; fyy[p]=ZEO; fzz[p]=ZEO;
fxy[p]=ZEO; fxz[p]=ZEO; fyz[p]=ZEO;
}
/* i0=ex1-1 面 */
for (int k0 = 0; k0 < ex3-1; ++k0)
for (int j0 = 0; j0 < ex2-1; ++j0) {
const size_t p = idx_ex(ex1-1, j0, k0, ex);
fxx[p]=ZEO; fyy[p]=ZEO; fzz[p]=ZEO;
fxy[p]=ZEO; fxz[p]=ZEO; fyz[p]=ZEO;
}
}
/*