// Copyright(C) 1999-2022 National Technology & Engineering Solutions // of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with // NTESS, the U.S. Government retains certain rights in this software. // // See packages/seacas/LICENSE for details #pragma once #include "vtk_ioss_mangle.h" #include "Iohb_Layout.h" #include "Ioss_State.h" // for State #include #include // for DatabaseUsage #include // for DatabaseIO #include // for IOFactory #include // for size_t #include // for int64_t #include // for ostream #include // for string namespace Iohb { class CommSet; class EdgeBlock; class EdgeSet; class ElementBlock; class ElementSet; class FaceBlock; class FaceSet; class Field; class NodeBlock; class NodeSet; class PropertyManager; class Region; class SideBlock; class SideSet; class StructuredBlock; } // namespace Iohb namespace Ioss { class GroupingEntity; class EntityBlock; } // namespace Ioss /** \brief A namespace for the heartbeat database format. */ namespace Iohb { class Layout; enum class Format { DEFAULT = 0, SPYHIS = 1, TEXT, TS_TEXT, CSV, TS_CSV }; class IOFactory : public Ioss::IOFactory { public: static const IOFactory *factory(); private: IOFactory(); Ioss::DatabaseIO *make_IO(const std::string &filename, Ioss::DatabaseUsage db_usage, Ioss_MPI_Comm communicator, const Ioss::PropertyManager &props) const override; }; class DatabaseIO : public Ioss::DatabaseIO { public: DatabaseIO(Ioss::Region *region, const std::string &filename, Ioss::DatabaseUsage db_usage, Ioss_MPI_Comm communicator, const Ioss::PropertyManager &props); DatabaseIO(const DatabaseIO &from) = delete; DatabaseIO &operator=(const DatabaseIO &from) = delete; ~DatabaseIO() override; const std::string get_format() const override { return "HeartBeat"; } // Check capabilities of input/output database... Returns an // unsigned int with the supported Ioss::EntityTypes or'ed // together. If "return_value & Ioss::EntityType" is set, then the // database supports that type (e.g. return_value & Ioss::FACESET) unsigned entity_field_support() const override; int int_byte_size_db() const override { return int_byte_size_api(); } private: int64_t node_global_to_local__(int64_t /* global */, bool /* must_exist */) const override { return 0; } int64_t element_global_to_local__(int64_t /* global */) const override { return 0; } void read_meta_data__() override {} void flush_database__() const override; bool begin__(Ioss::State state) override; bool end__(Ioss::State state) override; bool begin_state__(int state, double time) override; bool end_state__(int state, double time) override; void initialize() const; int64_t get_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t get_field_internal(const Ioss::Assembly * /*sb*/, const Ioss::Field & /*field*/, void * /*data*/, size_t /*data_size*/) const override { return 0; } int64_t get_field_internal(const Ioss::Blob * /*sb*/, const Ioss::Field & /*field*/, void * /*data*/, size_t /*data_size*/) const override { return 0; } int64_t put_field_internal(const Ioss::Region *region, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field, void *data, size_t data_size) const override; int64_t put_field_internal(const Ioss::Assembly * /*sb*/, const Ioss::Field & /*field*/, void * /*data*/, size_t /*data_size*/) const override { return 0; } int64_t put_field_internal(const Ioss::Blob * /*sb*/, const Ioss::Field & /*field*/, void * /*data*/, size_t /*data_size*/) const override { return 0; } time_t timeLastFlush_{0}; time_t flushInterval_{10}; std::ostream *logStream{nullptr}; std::unique_ptr layout_{}; std::unique_ptr legend_{}; std::string defaultTsFormat{"[%H:%M:%S]"}; std::string tsFormat{}; std::string separator_{", "}; int precision_{5}; int fieldWidth_{0}; bool showLabels{true}; bool showLegend{false}; bool appendOutput{false}; bool addTimeField{false}; bool initialized_{false}; bool streamNeedsDelete{false}; Format fileFormat{Format::DEFAULT}; }; } // namespace Iohb