diff --git a/src/interface/metadata.cpp b/src/interface/metadata.cpp index fce88334c652..e5bac4f9365a 100644 --- a/src/interface/metadata.cpp +++ b/src/interface/metadata.cpp @@ -263,6 +263,13 @@ bool Metadata::IsValid(bool throw_on_fail) const { } } + // Associated fluxes + if (IsSet(FluxNotOneCopy)) { + PARTHENON_REQUIRE( + IsSet(WithFluxes), + "Asking for non-OneCopy associated fluxes without asking for associated fluxes."); + } + return valid; } diff --git a/src/interface/metadata.hpp b/src/interface/metadata.hpp index 5770323c21ba..f64901c71b63 100644 --- a/src/interface/metadata.hpp +++ b/src/interface/metadata.hpp @@ -120,6 +120,8 @@ PARTHENON_INTERNAL_FOR_FLAG(Fine) \ /** this variable is the flux for another variable **/ \ PARTHENON_INTERNAL_FOR_FLAG(Flux) \ + /** allocate a separate flux array for each stage if WithFluxes is specified**/ \ + PARTHENON_INTERNAL_FOR_FLAG(FluxNotOneCopy) \ /************************************************/ \ /** Vars specifying coordinates for visualization purposes **/ \ /** You can specify a single 3D var **/ \ diff --git a/src/interface/state_descriptor.cpp b/src/interface/state_descriptor.cpp index aa3fa5e6af27..84619d78d28d 100644 --- a/src/interface/state_descriptor.cpp +++ b/src/interface/state_descriptor.cpp @@ -274,7 +274,8 @@ bool StateDescriptor::AddFieldImpl(const VarID &vid, const Metadata &m_in, return false; // this field has already been added } else { if (m.IsSet(Metadata::WithFluxes) && m.GetFluxName() == "") { - std::vector mFlags = {Metadata::OneCopy, Metadata::Flux}; + std::vector mFlags = {Metadata::Flux}; + if (!m.IsSet(Metadata::FluxNotOneCopy)) mFlags.push_back(Metadata::OneCopy); if (m.IsSet(Metadata::Sparse)) mFlags.push_back(Metadata::Sparse); if (m.IsSet(Metadata::Fine)) mFlags.push_back(Metadata::Fine); if (m.IsSet(Metadata::Cell))