Skip to content

Commit 3c95b2c

Browse files
committed
Use own flag for the warning
Previously implementation did not work: ornladios/ADIOS2#4466
1 parent 1794b3a commit 3c95b2c

3 files changed

Lines changed: 26 additions & 24 deletions

File tree

include/openPMD/IO/ADIOS/ADIOS2Auxiliary.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ namespace adios_defaults
9797
constexpr const_str str_usesteps = "usesteps";
9898
constexpr const_str str_flushtarget = "preferred_flush_target";
9999
constexpr const_str str_usesstepsAttribute = "__openPMD_internal/useSteps";
100+
constexpr const_str str_useModifiableAttributes =
101+
"__openPMD_internal/useModifiableAttributes";
100102
constexpr const_str str_adios2Schema =
101103
"__openPMD_internal/openPMD2_adios2_schema";
102104
constexpr const_str str_isBoolean = "__is_boolean__";

src/IO/ADIOS/ADIOS2File.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "openPMD/IO/ADIOS/ADIOS2File.hpp"
2323
#include "openPMD/Error.hpp"
24+
#include "openPMD/IO/ADIOS/ADIOS2Auxiliary.hpp"
2425
#include "openPMD/IO/ADIOS/ADIOS2IOHandler.hpp"
2526
#include "openPMD/IO/AbstractIOHandler.hpp"
2627
#include "openPMD/IterationEncoding.hpp"
@@ -498,6 +499,12 @@ void ADIOS2File::configure_IO()
498499
? ADIOS2IOHandlerImpl::ModifiableAttributes::Yes
499500
: ADIOS2IOHandlerImpl::ModifiableAttributes::No;
500501
}
502+
m_IO.DefineAttribute<bool_representation>(
503+
adios_defaults::str_useModifiableAttributes,
504+
m_impl->m_modifiableAttributes ==
505+
ADIOS2IOHandlerImpl::ModifiableAttributes::No
506+
? 0
507+
: 1);
501508
}
502509

503510
// set engine type

src/IO/ADIOS/ADIOS2IOHandler.cpp

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1509,37 +1509,30 @@ namespace
15091509
}
15101510
static constexpr char const *errorMsg = "DistributeToAllRanks";
15111511
};
1512+
#endif
15121513

1513-
void warn_ignored_modifiable_attributes(
1514-
adios2::IO &IO, std::string const &exempt_this_from_warnings)
1514+
void warn_ignored_modifiable_attributes(adios2::IO &IO)
15151515
{
1516-
auto all_attributes = IO.AvailableAttributes();
1517-
std::deque<std::string> modifiable_attributes;
1518-
for (auto const &[identifier, params] : all_attributes)
1519-
{
1520-
if (params.at("Modifiable") == "1")
1521-
{
1522-
modifiable_attributes.emplace_back(identifier);
1523-
}
1524-
}
1525-
if (modifiable_attributes.size() > 1 ||
1526-
(modifiable_attributes.size() == 1 &&
1527-
*modifiable_attributes.begin() != exempt_this_from_warnings))
1528-
{
1529-
std::cerr << &R"(
1530-
Warning: Random-access for variable-encoding in ADIOS2 is currently
1516+
auto modifiable_flag = IO.InquireAttribute<detail::bool_representation>(
1517+
adios_defaults::str_useModifiableAttributes);
1518+
auto print_warning = [](std::string const &note) {
1519+
std::cerr << "Warning: " << note << R"(
1520+
Random-access for variable-encoding in ADIOS2 is currently
15311521
experimental. Support for modifiable attributes is currently not implemented
15321522
yet, meaning that attributes such as /data/time will show useless values.
15331523
Use Access::READ_LINEAR to retrieve those values if needed.
15341524
The following modifiable attributes have been found:
1535-
)"[1];
1536-
for (auto const &identifier : modifiable_attributes)
1537-
{
1538-
std::cerr << '\t' << identifier << '\n';
1539-
}
1525+
)";
1526+
};
1527+
if (!modifiable_flag)
1528+
{
1529+
print_warning("File might be using modifiable attributes.");
1530+
}
1531+
else if (modifiable_flag.Data().at(0) != 0)
1532+
{
1533+
print_warning("File uses modifiable attributes.");
15401534
}
15411535
}
1542-
#endif
15431536
} // namespace
15441537

15451538
void ADIOS2IOHandlerImpl::readAttributeAllsteps(
@@ -1557,7 +1550,7 @@ void ADIOS2IOHandlerImpl::readAttributeAllsteps(
15571550
IO.SetParameter("StreamReader", "ON"); // this be for BP4
15581551
auto engine = IO.Open(fullPath(*file), adios2::Mode::Read);
15591552
auto status = engine.BeginStep();
1560-
warn_ignored_modifiable_attributes(IO, name);
1553+
warn_ignored_modifiable_attributes(IO);
15611554
auto type = detail::attributeInfo(IO, name, /* verbose = */ true);
15621555
switchType<ReadAttributeAllsteps>(
15631556
type, IO, engine, name, status, *param.resource);

0 commit comments

Comments
 (0)