9#include "ioss_export.h"
25#ifdef SEACAS_HAVE_KOKKOS
26#include <Kokkos_Core.hpp>
169 int64_t optional_value)
const;
171 const std::string &optional_value)
const;
179 void property_update(
const std::string &property, int64_t value)
const;
180 void property_update(
const std::string &property,
const std::string &value)
const;
205 int64_t
get_field_data(
const std::string &field_name,
void *data,
size_t data_size)
const;
207 int64_t
put_field_data(
const std::string &field_name,
void *data,
size_t data_size)
const;
213 int64_t
get_field_data(
const std::string &field_name,
void **data,
size_t *data_size)
const;
218 template <
typename T>
219 int64_t
get_field_data(
const std::string &field_name, std::vector<T> &data)
const;
221 template <
typename T>
222 int64_t
put_field_data(
const std::string &field_name,
const std::vector<T> &data)
const;
223 template <
typename T>
224 int64_t
put_field_data(
const std::string &field_name, std::vector<T> &data)
const;
226#ifdef SEACAS_HAVE_KOKKOS
232 template <
typename T,
typename... Args>
233 int64_t
get_field_data(
const std::string &field_name, Kokkos::View<T *, Args...> &data)
const;
235 template <
typename T,
typename... Args>
236 int64_t
get_field_data(
const std::string &field_name, Kokkos::View<T **, Args...> &data)
const;
238 template <
typename T,
typename... Args>
239 int64_t
put_field_data(
const std::string &field_name, Kokkos::View<T *, Args...> &data)
const;
241 template <
typename T,
typename... Args>
242 int64_t
put_field_data(
const std::string &field_name, Kokkos::View<T **, Args...> &data)
const;
261 int64_t reset_entity_count(int64_t new_entity_count)
const;
269 void count_attributes()
const;
280 void really_delete_database();
295 size_t data_size = 0)
const = 0;
297 size_t data_size = 0)
const = 0;
300 size_t *data_size)
const = 0;
302#if defined(IOSS_THREADSAFE)
303 mutable std::mutex m_;
365 int64_t optional_value)
const
367 return properties.get_optional(property_name, optional_value);
372 const std::string &optional_value)
const
374 return properties.get_optional(property_name, optional_value);
383 return save_entity_count;
449 return fields.exists(field_name);
460 return fields.get(field_name);
471 return fields.getref(field_name);
489 return fields.describe(names);
500 return fields.describe(role);
512 return fields.describe(role, names);
530 std::vector<T> &data)
const
538 size_t data_size = data.size() *
sizeof(T);
558 const std::vector<T> &data)
const
564 size_t data_size = data.size() *
sizeof(T);
567 std::vector<T> nc_data(data);
572 T *my_data =
const_cast<T *
>(
Data(data));
578 std::vector<T> &data)
const
584 size_t data_size = data.size() *
sizeof(T);
585 T *my_data =
const_cast<T *
>(
Data(data));
590#ifdef SEACAS_HAVE_KOKKOS
601template <
typename T,
typename... Args>
603 Kokkos::View<T *, Args...> &data)
const
605 typedef Kokkos::View<T *, Args...> ViewType;
607 verify_field_exists(field_name,
"input");
613 Kokkos::resize(data, new_view_size);
614 size_t data_size = new_view_size *
sizeof(T);
617 typename ViewType::HostMirror host_data = Kokkos::create_mirror_view(data);
620 T *host_data_ptr = host_data.data();
623 auto retval = internal_get_field_data(field, host_data_ptr, data_size);
630 Kokkos::deep_copy(data, host_data);
644template <
typename T,
typename... Args>
646 Kokkos::View<T **, Args...> &data)
const
648 typedef Kokkos::View<T **, Args...> ViewType;
650 verify_field_exists(field_name,
"input");
655 int new_view_size_left = field.
raw_count();
657 Kokkos::resize(data, new_view_size_left, new_view_size_right);
658 size_t data_size = new_view_size_left * new_view_size_right *
sizeof(T);
664 T *data_array =
new T[data_size];
667 typename ViewType::HostMirror host_data = Kokkos::create_mirror_view(data);
670 auto retval = internal_get_field_data(field, data_array, data_size);
682 for (
int i = 0; i < new_view_size_left; ++i) {
683 for (
int j = 0; j < new_view_size_right; ++j) {
684 host_data(i, j) = data_array[new_view_size_right * i + j];
692 Kokkos::deep_copy(data, host_data);
706template <
typename T,
typename... Args>
708 Kokkos::View<T *, Args...> &data)
const
710 typedef Kokkos::View<T *, Args...> ViewType;
712 verify_field_exists(field_name,
"output");
714 Ioss::Field field = get_field(field_name);
718 typename ViewType::HostMirror host_data = Kokkos::create_mirror_view(data);
721 Kokkos::deep_copy(host_data, data);
724 T *host_data_ptr = host_data.data();
730 return internal_put_field_data(field, host_data_ptr, data_size);
742template <
typename T,
typename... Args>
744 Kokkos::View<T **, Args...> &data)
const
746 typedef Kokkos::View<T **, Args...> ViewType;
748 verify_field_exists(field_name,
"output");
750 Ioss::Field field = get_field(field_name);
752 int view_size_left =
data.extent(0);
753 int view_size_right =
data.extent(1);
756 if (view_size_left * view_size_right *
sizeof(T) != data_size) {
757 std::ostringstream errmsg;
758 errmsg <<
"\nERROR: View dimensions are inconsistent with field raw count or raw storage "
760 <<
"for field" << field_name <<
"\n\n";
765 typename ViewType::HostMirror host_data = Kokkos::create_mirror_view(data);
768 Kokkos::deep_copy(host_data, data);
782 for (
int i = 0; i < view_size_left; ++i) {
783 for (
int j = 0; j < view_size_right; ++j) {
784 data_array[view_size_right * i + j] = host_data(i, j);
792 auto retval = internal_put_field_data(field, data_array, data_size);
#define IOSS_NODISCARD
Definition Ioss_CodeTypes.h:56
IOSS_NODISCARD constexpr T * Data(std::vector< T > &vec)
Definition Ioss_Utils.h:58
void IOSS_ERROR(const std::ostringstream &errmsg)
Definition Ioss_Utils.h:38
void put_field_data(std::string field_name, int local_size, size_t component_count, Entity *e)
Definition Ut_ioad.C:276
An input or output Database.
Definition Ioss_DatabaseIO.h:63
A collection of Ioss::Field objects.
Definition Ioss_FieldManager.h:35
Holds metadata for bulk data associated with a GroupingEntity.
Definition Ioss_Field.h:28
IOSS_NODISCARD const VariableType * raw_storage() const
Definition Ioss_Field.h:171
IOSS_NODISCARD bool has_transform() const
Definition Ioss_Field.h:223
BasicType
The basic data type held in the field.
Definition Ioss_Field.h:32
@ INT64
Definition Ioss_Field.h:38
@ INT32
Definition Ioss_Field.h:37
IOSS_NODISCARD size_t raw_count() const
Definition Ioss_Field.h:174
RoleType
Definition Ioss_Field.h:72
bool transform(void *data)
Definition Ioss_Field.C:312
void check_type(BasicType the_type) const
Definition Ioss_Field.C:204
static IOSS_NODISCARD Ioss::Field::BasicType get_field_type(char)
Definition Ioss_Field.h:46
Base class for all 'grouping' entities. The following derived classes are typical:
Definition Ioss_GroupingEntity.h:67
virtual IOSS_NODISCARD std::string short_type_string() const =0
Get a short name of the particular type of entity.
IOSS_NODISCARD bool equal_(const GroupingEntity &rhs, bool quiet) const
Definition Ioss_GroupingEntity.C:391
void field_add(Field new_field)
Add a field to the entity's field manager.
Definition Ioss_GroupingEntity.C:216
virtual int64_t internal_get_field_data(const Field &field, void *data, size_t data_size=0) const =0
int64_t attributeCount
Definition Ioss_GroupingEntity.h:316
IOSS_NODISCARD Ioss::Field::BasicType field_int_type() const
Definition Ioss_GroupingEntity.h:249
virtual IOSS_NODISCARD EntityType type() const =0
Get the EntityType, which indicates the particular type of GroupingEntity this is.
FieldManager fields
Definition Ioss_GroupingEntity.h:292
virtual IOSS_NODISCARD std::string type_string() const =0
Get the name of the particular type of entity.
IOSS_NODISCARD int64_t get_optional_property(const std::string &property, int64_t optional_value) const
Definition Ioss_GroupingEntity.h:364
IOSS_NODISCARD DatabaseIO * get_database() const
Definition Ioss_GroupingEntity.C:95
IOSS_NODISCARD NameList property_describe() const
Get the names of all properties in the property manager for this entity.
Definition Ioss_GroupingEntity.h:390
friend class Property
Definition Ioss_GroupingEntity.h:69
IOSS_NODISCARD Property get_property(const std::string &property_name) const
Get the Property from the property manager associated with the entity.
Definition Ioss_GroupingEntity.h:359
IOSS_NODISCARD int64_t entity_count() const
Definition Ioss_GroupingEntity.h:377
GroupingEntity & operator=(const GroupingEntity &rhs)=delete
int64_t get_field_data(const std::string &field_name, void *data, size_t data_size) const
Read field data from the database file into memory using a pointer.
Definition Ioss_GroupingEntity.C:256
IOSS_NODISCARD Field get_field(const std::string &field_name) const
Get a field from the entity's field manager.
Definition Ioss_GroupingEntity.h:458
IOSS_NODISCARD bool field_exists(const std::string &field_name) const
Checks if a field with a given name exists in the entity's field manager.
Definition Ioss_GroupingEntity.h:447
std::string entityName
Definition Ioss_GroupingEntity.h:311
int64_t reset_entity_count(int64_t new_entity_count) const
Definition Ioss_GroupingEntity.h:379
IOSS_NODISCARD unsigned int hash() const
Definition Ioss_GroupingEntity.h:258
void verify_field_exists(const std::string &field_name, const std::string &inout) const
Definition Ioss_GroupingEntity.C:349
void reset_database(DatabaseIO *io_database)
Definition Ioss_GroupingEntity.C:122
virtual void delete_database()
Definition Ioss_GroupingEntity.C:67
IOSS_NODISCARD State get_state() const
Get the current Ioss::State of the entity.
Definition Ioss_GroupingEntity.C:145
virtual int64_t internal_put_field_data(const Field &field, void *data, size_t data_size=0) const =0
void field_erase(const std::string &field_name)
Remove a field from the entity's field manager.
Definition Ioss_GroupingEntity.h:436
int field_describe(NameList *names) const
Get the names of all fields in the entity's field manager.
Definition Ioss_GroupingEntity.h:487
PropertyManager properties
Definition Ioss_GroupingEntity.h:291
int64_t put_field_data(const std::string &field_name, void *data, size_t data_size) const
Write field data from memory into the database file using a pointer.
Definition Ioss_GroupingEntity.C:304
IOSS_NODISCARD const Field & get_fieldref(const std::string &field_name) const
Get a reference to a field from the entity's field manager.
Definition Ioss_GroupingEntity.h:469
IOSS_NODISCARD const std::string & name() const
Get name of entity.
Definition Ioss_GroupingEntity.h:100
bool set_state(State new_state)
Definition Ioss_GroupingEntity.h:271
void property_update(const std::string &property, int64_t value) const
Definition Ioss_GroupingEntity.C:360
void property_add(const Property &new_prop)
Add a property to the entity's property manager.
Definition Ioss_GroupingEntity.h:326
IOSS_NODISCARD bool check_for_duplicate(const Ioss::Field &new_field) const
Definition Ioss_GroupingEntity.C:176
DatabaseIO * database_
Definition Ioss_GroupingEntity.h:313
void property_erase(const std::string &property_name)
Remove a property from the entity's property manager.
Definition Ioss_GroupingEntity.h:338
IOSS_NODISCARD size_t property_count() const
Get the number of properties defined in the property manager for this entity.
Definition Ioss_GroupingEntity.h:420
int64_t entityCount
Definition Ioss_GroupingEntity.h:315
unsigned int hash_
Definition Ioss_GroupingEntity.h:318
virtual void block_membership(Ioss::NameList &)
Get list of blocks that the entities in this GroupingEntity "touch".
Definition Ioss_GroupingEntity.h:131
IOSS_NODISCARD size_t field_count() const
Get the number of fields in the entity's field manager.
Definition Ioss_GroupingEntity.h:519
virtual IOSS_NODISCARD const GroupingEntity * contained_in() const
Definition Ioss_GroupingEntity.C:75
virtual IOSS_NODISCARD std::string contains_string() const =0
What does this entity contain.
void set_database(DatabaseIO *io_database)
Definition Ioss_GroupingEntity.C:115
State entityState
Definition Ioss_GroupingEntity.h:317
void set_name(const std::string &new_name)
Set the name of the entity.
Definition Ioss_GroupingEntity.h:106
IOSS_NODISCARD bool property_exists(const std::string &property_name) const
Checks if a property exists in the entity's property manager.
Definition Ioss_GroupingEntity.h:348
virtual int64_t internal_get_zc_field_data(const Field &field, void **data, size_t *data_size) const =0
IOSS_NODISCARD NameList field_describe() const
Get the names of all fields in the entity's field manager.
Definition Ioss_GroupingEntity.h:479
A collection of Ioss::Property objects.
Definition Ioss_PropertyManager.h:36
A named value that has a known type.
Definition Ioss_Property.h:27
Origin
Definition Ioss_Property.h:30
IOSS_NODISCARD int component_count() const
Definition Ioss_VariableType.h:154
size_t data_size(const Ioss::Field &f)
Definition Iofaodel_FieldSerialization.C:17
The main namespace for the Ioss library.
Definition Ioad_DatabaseIO.C:40
State
Access states for a database.
Definition Ioss_State.h:15
@ STATE_CLOSED
Definition Ioss_State.h:22
Ioss::NameList NameList
Definition Ioss_ChangeSetFactory.h:25
EntityType
The particular type of GroupingEntity.
Definition Ioss_EntityType.h:12
std::vector< char > data
Definition cth_pressure_map.C:46