WASO7G5FJXRXWNH2U2FLUNEKU6VE63OI3HUYP64BVD4LMD6KE7OQC
RCLGQ2LZMFVPBPTU2G55DJ6HZPOGGTPZRZCY54VGP6YLHANJ2LAQC
IVHURSHY4636OGIF3PNDO5CWOVRLJ75M4LP65J6I2E6KAM4QKF4AC
722HZ7UFINNE3YKSYKP2NHZ5XEG5QQLQHSKC7PREJZR3EX6RDYUAC
ORAAQXS3UNKXYDJBCTHNEIDJIZDHWMM5EVCZKVMFRKQK2NIQNJGAC
AEVGZIZEUIC52MCK3J4V547YEV2R4YQL3JUJW7FSP4R34PSZ43DAC
UUGQGVC4WEKN64WAP7F5QPS2UHGQB5ZLMFRIYNWKMIEBDO3QRX4AC
U77PE56ICORZNQW33NXGSEMW7GDHCSSZ4EXB6OHBJSHEG6WHYSSQC
RTNZAS3UPI6GG3KY4Z5WVXJ4R2YF5427BB6WAV3GHRS5W7XPOSUQC
BVR7DVINVPQG7PA6Z7QYVYNQ43YZL7XCC6AOMSMWMGAAB2Q43STAC
PQB3EKQ6MBCXPTW4HB7SGMSTOTYMB3EFZX2573OFCQI6PSOEKCSQC
WE6MDRN5SPK3THM4COLQFE3IUWBCQ5ZYUIAUCBJAZVEMMOVTNBOAC
string groupname = unique_ptr<char>(CCTK_GroupName(gi)).get();
groupname = regex_replace(groupname, regex("::"), "-");
for (auto &c : groupname)
c = tolower(c);
ostringstream buf;
buf << "wavetoy/" << groupname << "." << setw(6) << setfill('0')
<< cctk_iteration;
string filename = buf.str();
string groupname = unique_ptr<char>(CCTK_GroupName(gi)).get();
groupname = regex_replace(groupname, regex("::"), "-");
for (auto &c : groupname)
c = tolower(c);
ostringstream buf;
buf << "wavetoy/" << groupname;
buf << ".rl" << setw(2) << setfill('0') << level.level;
buf << ".it" << setw(6) << setfill('0') << cctk_iteration;
string filename = buf.str();
Vector<string> varnames(groupdata.numvars * groupdata.numtimelevels);
for (int tl = 0; tl < groupdata.numtimelevels; ++tl) {
for (int n = 0; n < groupdata.numvars; ++n) {
ostringstream buf;
buf << CCTK_VarName(groupdata.firstvarindex + n);
for (int i = 0; i < tl; ++i)
buf << "_p";
varnames.at(tl * groupdata.numvars + n) = buf.str();
Vector<string> varnames(groupdata.numvars * groupdata.numtimelevels);
for (int tl = 0; tl < groupdata.numtimelevels; ++tl) {
for (int n = 0; n < groupdata.numvars; ++n) {
ostringstream buf;
buf << CCTK_VarName(groupdata.firstvarindex + n);
for (int i = 0; i < tl; ++i)
buf << "_p";
varnames.at(tl * groupdata.numvars + n) = buf.str();
}
// TODO: Output only current time level. This might require having one
// mfab per time level
// TODO: Output everything into a single file
WriteSingleLevelPlotfile(filename, groupdata.mfab, varnames, ghext->geom,
cctk_time, cctk_iteration);
// TODO: Output only current time level. This might require having one
// mfab per time level
// TODO: Output all levels into a single file
// TODO: Output everything into a single file
WriteSingleLevelPlotfile(filename, groupdata.mfab, varnames, level.geom,
cctk_time, cctk_iteration);
for (auto &restrict groupdata : ghext->groupdata) {
for (int tl = groupdata.numtimelevels - 1; tl > 0; --tl)
MultiFab::Copy(groupdata.mfab, groupdata.mfab,
(tl - 1) * groupdata.numvars, tl * groupdata.numvars,
groupdata.numvars, ghost_size);
}
for (auto &restrict level : ghext->levels)
for (auto &restrict groupdata : level.groupdata) {
for (int tl = groupdata.numtimelevels - 1; tl > 0; --tl)
MultiFab::Copy(groupdata.mfab, groupdata.mfab,
(tl - 1) * groupdata.numvars, tl * groupdata.numvars,
groupdata.numvars, ghost_size);
}
for (MFIter mfi(mfab, mfitinfo); mfi.isValid(); ++mfi) {
enter_local_mode(threadGH, mfi);
CCTK_CallFunction(function, attribute, threadGH);
for (auto &restrict level : ghext->levels) {
MultiFab &mfab = level.groupdata.at(0).mfab;
enter_level_mode(threadGH, level);
auto mfitinfo =
MFItInfo().SetDynamic(true).EnableTiling({1024000, 16, 32});
for (MFIter mfi(mfab, mfitinfo); mfi.isValid(); ++mfi) {
enter_local_mode(threadGH, level, mfi);
CCTK_CallFunction(function, attribute, threadGH);
leave_local_mode(threadGH, level, mfi);
}
leave_level_mode(threadGH, level);
for (int n = 0; n < numgroups; ++n) {
int gi = groups[n];
auto &restrict groupdata = ghext->groupdata.at(gi);
// we always sync all directions
groupdata.mfab.FillBoundary(ghext->geom.periodicity());
}
for (auto &restrict level : ghext->levels)
for (int n = 0; n < numgroups; ++n) {
int gi = groups[n];
auto &restrict groupdata = level.groupdata.at(gi);
// we always sync all directions
groupdata.mfab.FillBoundary(level.geom.periodicity());
}