Add configurable analysis MAP cadence

This commit is contained in:
2026-04-30 19:10:12 +08:00
parent e0d0673c8e
commit 6835608f92

View File

@@ -8,6 +8,7 @@
#include <string>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
#else
#include <stdio.h>
@@ -57,6 +58,18 @@ bool amss_analysis_timing_enabled()
}
return enabled != 0;
}
int amss_analysis_map_every()
{
static int every = -1;
if (every < 0)
{
const char *env = getenv("AMSS_ANALYSIS_MAP_EVERY");
every = (env && atoi(env) > 0) ? atoi(env) : 1;
}
return every;
}
}
// Compile-time switch for per-timestep memory usage collection/printing.
@@ -8172,6 +8185,16 @@ void bssn_class::AnalysisStuff(int lev, double dT_lev)
#ifdef WithShell
bool shell_mass_prepared = false;
#endif
const int analysis_map_every = amss_analysis_map_every();
static long long analysis_map_counter = 0;
static vector<double> cached_RoutMAP;
const bool map_cache_valid = int(cached_RoutMAP.size()) == decn * 7;
const bool refresh_map_this_analysis =
analysis_map_every <= 1 || !map_cache_valid ||
(analysis_map_counter % analysis_map_every) == 0;
if (!map_cache_valid)
cached_RoutMAP.assign(decn * 7, 0.0);
for (int i = 0; i < decn; i++)
{
const double t_surface0 = analysis_timing ? MPI_Wtime() : 0.0;
@@ -8247,14 +8270,37 @@ void bssn_class::AnalysisStuff(int lev, double dT_lev)
}
#else
#if (PSTR == 0)
Waveshell->surf_WaveMassPAng(Rex, lev, GH,
Rpsi4, Ipsi4, 2, maxl, NN, RP, IP,
phi0, trK0,
if (analysis_map_every <= 1)
{
Waveshell->surf_WaveMassPAng(Rex, lev, GH,
Rpsi4, Ipsi4, 2, maxl, NN, RP, IP,
phi0, trK0,
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1,
RoutMAP, ErrorMonitor, !patch_mass_prepared);
patch_mass_prepared = true;
}
else
{
Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor);
if (refresh_map_this_analysis)
{
Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0,
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1,
RoutMAP, ErrorMonitor, !patch_mass_prepared);
patch_mass_prepared = true;
patch_mass_prepared = true;
for (int q = 0; q < 7; q++)
cached_RoutMAP[i * 7 + q] = RoutMAP[q];
}
else
{
for (int q = 0; q < 7; q++)
RoutMAP[q] = cached_RoutMAP[i * 7 + q];
}
}
#elif (PSTR == 1 || PSTR == 2)
Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor, GH->Commlev[lev]);
// misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"after surf_Wave");
@@ -8298,6 +8344,8 @@ void bssn_class::AnalysisStuff(int lev, double dT_lev)
MAPMonitor->writefile(PhysTime, 7, RoutMAP);
Rex = Rex - drex;
}
if (analysis_map_every > 1)
analysis_map_counter++;
delete[] RP;
delete[] IP;
delete[] RoutMAP;