Skip to content

Commit

Permalink
Add dn based output trigger
Browse files Browse the repository at this point in the history
  • Loading branch information
pgrete committed Nov 16, 2024
1 parent cad5ccd commit 8a7b215
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 271 deletions.
1 change: 0 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,6 @@ add_library(parthenon
outputs/restart.hpp
outputs/restart_hdf5.cpp
outputs/restart_hdf5.hpp
outputs/vtk.cpp

parthenon/driver.hpp
parthenon/package.hpp
Expand Down
10 changes: 8 additions & 2 deletions src/outputs/ascent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,9 +210,15 @@ void AscentOutput::WriteOutputFile(Mesh *pm, ParameterInput *pin, SimTime *tm,

// advance output parameters
output_params.file_number++;
output_params.next_time += output_params.dt;
pin->SetInteger(output_params.block_name, "file_number", output_params.file_number);
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
if (output_params.dt > 0.0) {
output_params.next_time += output_params.dt;
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
}
if (output_params.dn > 0) {
output_params.next_n += output_params.dn;
pin->SetInteger(output_params.block_name, "next_n", output_params.next_n);
}
}

} // namespace parthenon
10 changes: 8 additions & 2 deletions src/outputs/histogram.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -559,9 +559,15 @@ void HistogramOutput::WriteOutputFile(Mesh *pm, ParameterInput *pin, SimTime *tm
// Only applies to default time-based data dumps, so that writing "now" and "final"
// outputs does not change the desired output numbering.
output_params.file_number++;
output_params.next_time += output_params.dt;
pin->SetInteger(output_params.block_name, "file_number", output_params.file_number);
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
if (output_params.dt > 0.0) {
output_params.next_time += output_params.dt;
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
}
if (output_params.dn > 0) {
output_params.next_n += output_params.dn;
pin->SetInteger(output_params.block_name, "next_n", output_params.next_n);
}
}
}

Expand Down
10 changes: 8 additions & 2 deletions src/outputs/history.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,15 @@ void HistoryOutput::WriteOutputFile(Mesh *pm, ParameterInput *pin, SimTime *tm,

// advance output parameters
output_params.file_number++;
output_params.next_time += output_params.dt;
pin->SetInteger(output_params.block_name, "file_number", output_params.file_number);
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
if (output_params.dt > 0.0) {
output_params.next_time += output_params.dt;
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
}
if (output_params.dn > 0) {
output_params.next_n += output_params.dn;
pin->SetInteger(output_params.block_name, "next_n", output_params.next_n);
}
}

} // namespace parthenon
3 changes: 2 additions & 1 deletion src/outputs/output_parameters.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ struct OutputParameters {
std::string data_format;
std::vector<std::string> packages;
Real next_time, dt;
int next_n, dn;
int file_number;
bool include_ghost_zones, cartesian_vector;
bool single_precision_output;
Expand All @@ -53,7 +54,7 @@ struct OutputParameters {
bool write_swarm_xdmf;
// TODO(felker): some of the parameters in this class are not initialized in constructor
OutputParameters()
: block_number(0), next_time(0.0), dt(-1.0), file_number(0),
: block_number(0), next_time(0.0), dt(-1.0), next_n(0), dn(-1), file_number(0),
include_ghost_zones(false), cartesian_vector(false),
single_precision_output(false), sparse_seed_nans(false),
hdf5_compression_level(5), write_xdmf(false), write_swarm_xdmf(false) {}
Expand Down
33 changes: 24 additions & 9 deletions src/outputs/outputs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,20 +116,27 @@ Outputs::Outputs(Mesh *pm, ParameterInput *pin, SimTime *tm) {
op.block_number = atoi(outn.c_str());
op.block_name.assign(pib->block_name);

Real dt = 0.0; // default value == 0 means that initial data is written by default
// for temporal drivers, setting dt to tlim ensures a final output is also written
Real dt = -1.0;
int dn = -1;
if (tm != nullptr) {
dt = pin->GetOrAddReal(op.block_name, "dt", tm->tlim);
dt = pin->GetOrAddReal(op.block_name, "dt", -1.0);
dn = pin->GetOrAddInteger(op.block_name, "dn", -1.0);
}
// if this output is "soft-disabled" (negative value) skip processing
if (dt < 0.0) {
if (dt < 0.0 && dn < 0) {
pib = pib->pnext; // move to next input block name
continue;
}

PARTHENON_REQUIRE_THROWS(!(dt >= 0.0 && dn >= 0),
"dt and dn are enabled for the same output block, which "
"is not supported. Please set at most one value >= 0.");
// set time of last output, time between outputs
if (tm != nullptr) {
op.next_time = pin->GetOrAddReal(op.block_name, "next_time", tm->time);
op.dt = dt;
op.next_n = pin->GetOrAddInteger(op.block_name, "next_n", tm->ncycle);
op.dn = dn;
}

// set file number, basename, id, and format
Expand Down Expand Up @@ -259,8 +266,6 @@ Outputs::Outputs(Mesh *pm, ParameterInput *pin, SimTime *tm) {
if (op.file_type == "hst") {
pnew_type = new HistoryOutput(op);
num_hst_outputs++;
} else if (op.file_type == "vtk") {
pnew_type = new VTKOutput(op);
} else if (op.file_type == "ascent") {
pnew_type = new AscentOutput(op);
} else if (op.file_type == "histogram") {
Expand Down Expand Up @@ -438,9 +443,19 @@ void Outputs::MakeOutputs(Mesh *pm, ParameterInput *pin, SimTime *tm,
OutputType *ptype = pfirst_type_;
while (ptype != nullptr) {
if ((tm == nullptr) ||
((ptype->output_params.dt >= 0.0) &&
((tm->ncycle == 0) || (tm->time >= ptype->output_params.next_time) ||
(tm->time >= tm->tlim) || (signal == SignalHandler::OutputSignal::now) ||
// output is not soft disabled and
(((ptype->output_params.dt >= 0.0) || (ptype->output_params.dn >= 0)) &&
// either dump initial data
((tm->ncycle == 0) ||
// or by triggering time or cycle based conditions
((ptype->output_params.dt >= 0.0) &&
((tm->time >= ptype->output_params.next_time) ||
(tm->tlim > 0.0 && tm->time >= tm->tlim))) ||
((ptype->output_params.dn >= 0) &&
((tm->ncycle >= ptype->output_params.next_n) ||
(tm->nlim > 0 && tm->ncycle >= tm->nlim))) ||
// or by manual triggers
(signal == SignalHandler::OutputSignal::now) ||
(signal == SignalHandler::OutputSignal::final) ||
(signal == SignalHandler::OutputSignal::analysis &&
ptype->output_params.analysis_flag)))) {
Expand Down
12 changes: 0 additions & 12 deletions src/outputs/outputs.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,18 +143,6 @@ class HistoryOutput : public OutputType {
const SignalHandler::OutputSignal signal) override;
};

//----------------------------------------------------------------------------------------
//! \class VTKOutput
// \brief derived OutputType class for vtk dumps

class VTKOutput : public OutputType {
public:
explicit VTKOutput(const OutputParameters &oparams) : OutputType(oparams) {}
void WriteContainer(SimTime &tm, Mesh *pm, ParameterInput *pin, bool flag) override;
void WriteOutputFile(Mesh *pm, ParameterInput *pin, SimTime *tm,
const SignalHandler::OutputSignal signal) override;
};

//----------------------------------------------------------------------------------------
//! \class AscentOutput
// \brief derived OutputType class for Ascent in situ situ visualization and analysis
Expand Down
10 changes: 8 additions & 2 deletions src/outputs/parthenon_hdf5.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -597,9 +597,15 @@ std::string PHDF5Output::GenerateFilename_(ParameterInput *pin, SimTime *tm,
// Only applies to default time-based data dumps, so that writing "now" and "final"
// outputs does not change the desired output numbering.
output_params.file_number++;
output_params.next_time += output_params.dt;
pin->SetInteger(output_params.block_name, "file_number", output_params.file_number);
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
if (output_params.dt > 0.0) {
output_params.next_time += output_params.dt;
pin->SetReal(output_params.block_name, "next_time", output_params.next_time);
}
if (output_params.dn > 0) {
output_params.next_n += output_params.dn;
pin->SetInteger(output_params.block_name, "next_n", output_params.next_n);
}
}
return filename;
}
Expand Down
Loading

0 comments on commit 8a7b215

Please sign in to comment.