Sierra Toolkit  Version of the Day
IossBridge.hpp
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2010 Sandia Corporation. */
3 /* Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive */
4 /* license for use of this work by or on behalf of the U.S. Government. */
5 /* Export of this program may require a license from the */
6 /* United States Government. */
7 /*------------------------------------------------------------------------*/
8 
9 #ifndef stk_io_IossBridge_hpp
10 #define stk_io_IossBridge_hpp
11 
12 #include <string>
13 #include <stk_util/parallel/Parallel.hpp>
14 #include <stk_mesh/base/Types.hpp>
15 #include <stk_mesh/fem/CoordinateSystems.hpp>
16 #include <stk_mesh/fem/FEMMetaData.hpp>
17 
18 // TODO: remove this and uses of USE_FEMMETADATA once the migration is done (srkenno@sandia.gov)
19 
20 #define USE_FEMMETADATA
21 #ifdef USE_FEMMETADATA
22 #include <stk_mesh/fem/FEMHelpers.hpp>
23 #endif
24 
25 #include <stk_mesh/fem/TopologyDimensions.hpp>
26 #include <Ioss_DBUsage.h>
27 #include <Ioss_Field.h>
28 #include <Ioss_SideBlock.h>
29 #include <Ioss_ElementTopology.h>
30 
31 namespace Ioss {
32 class Region;
33 class GroupingEntity;
34 class EntityBlock;
35 class SideSet;
36 class Field;
37 class ElementTopology;
38 }
39 
40 struct CellTopologyData;
41 
42 namespace stk_classic {
43 
57 namespace io {
58 
70 bool include_entity(const Ioss::GroupingEntity *entity);
71 
72 void internal_part_processing(Ioss::GroupingEntity *entity, stk_classic::mesh::fem::FEMMetaData &meta);
73 
74 void internal_part_processing(Ioss::EntityBlock *entity, stk_classic::mesh::fem::FEMMetaData &meta);
75 
77 void internal_part_processing(Ioss::GroupingEntity *entity, stk_classic::mesh::MetaData &meta);
78 
80 void internal_part_processing(Ioss::EntityBlock *entity, stk_classic::mesh::MetaData &meta);
81 
92 template <typename T>
93 void default_part_processing(const std::vector<T*> &entities,
95 {
96  for(size_t i=0; i < entities.size(); i++) {
97  T* entity = entities[i];
98  internal_part_processing(entity, fem_meta);
99  }
100 }
101 
103 template <typename T>
104 void default_part_processing(const std::vector<T*> &entities, stk_classic::mesh::MetaData &meta,
105  const stk_classic::mesh::EntityRank)
106 {
108  default_part_processing (entities, fem_meta);
109 }
110 
131 void define_output_db( Ioss::Region & io_region,
132  const mesh::BulkData& bulk_data,
133  const Ioss::Region *input_region = NULL,
134  const stk_classic::mesh::Selector *anded_selector = NULL,
135  const bool sort_stk_parts = false);
136 
137 
145 void write_output_db( Ioss::Region & io_region ,
146  const mesh::BulkData& bulk,
147  const stk_classic::mesh::Selector *anded_selector = NULL);
148 
149 
150 //----------------------------------------------------------------------
151 
173  const stk_classic::mesh::EntityRank part_type,
174  const stk_classic::mesh::Part &part,
175  const stk_classic::mesh::Part &universal,
176  const Ioss::Field::RoleType filter_role,
177  const bool add_all = false);
178 
185  const stk_classic::mesh::EntityRank part_type,
186  Ioss::GroupingEntity *entity,
187  const Ioss::Field::RoleType filter_role,
188  const bool add_all = false);
189 
202 void define_io_fields(Ioss::GroupingEntity *entity,
203  Ioss::Field::RoleType role,
205  stk_classic::mesh::EntityRank part_type);
206 
211 const CellTopologyData *map_topology_ioss_to_cell(const Ioss::ElementTopology *topology);
212 
218 std::string map_topology_cell_to_ioss( const CellTopologyData *cell_top,
219  int spatial_dimension);
220 
232 void get_entity_list(Ioss::GroupingEntity *io_entity,
233  stk_classic::mesh::EntityRank part_type,
234  const stk_classic::mesh::BulkData &bulk,
235  std::vector<stk_classic::mesh::Entity*> &entities);
236 
244  std::vector<stk_classic::mesh::Entity*> &entities,
245  Ioss::GroupingEntity *io_entity,
246  const std::string &io_fld_name);
247 
255  std::vector<stk_classic::mesh::Entity*> &entities,
256  Ioss::GroupingEntity *io_entity,
257  const std::string &io_fld_name,
258  Ioss::Field::RoleType filter_role);
259 
260 
266 
272 
278 const Ioss::Field::RoleType* get_field_role(const mesh::FieldBase &f);
279 
283 void set_field_role(mesh::FieldBase &f, const Ioss::Field::RoleType &role);
284 
293 bool is_part_io_part(mesh::Part &part);
294 
298 void put_io_part_attribute( mesh::Part &part, Ioss::GroupingEntity *entity = NULL);
299 
304 
305 const Ioss::GroupingEntity *get_associated_ioss_entity(const mesh::Part &part);
306 
307 size_t db_api_int_size(const Ioss::GroupingEntity *entity);
308 
309 // To minimize ifdefs for the deprecated code:
310 bool invalid_rank(mesh::EntityRank rank);
311 mesh::EntityRank part_primary_entity_rank(const mesh::Part &part);
312 mesh::EntityRank element_rank(const mesh::MetaData &meta);
313 mesh::EntityRank side_rank(const mesh::MetaData &meta);
314 mesh::EntityRank face_rank(const mesh::MetaData &meta);
315 mesh::EntityRank edge_rank(const mesh::MetaData &meta);
316 mesh::EntityRank node_rank(const mesh::MetaData &meta);
317 void set_cell_topology(mesh::Part &part, const CellTopologyData * const cell_topology);
318 const CellTopologyData *get_cell_topology(const mesh::Part &part);
319 
320 void initialize_spatial_dimension(mesh::fem::FEMMetaData &fem_meta, size_t spatial_dimension, const std::vector<std::string> &entity_rank_names);
321 
323 void initialize_spatial_dimension(mesh::MetaData &meta, size_t spatial_dimension, const std::vector<std::string> &entity_rank_names);
324 
325 void get_io_field_type(const stk_classic::mesh::FieldBase *field,
327  std::pair<std::string, Ioss::Field::BasicType> *result);
332 }//namespace io
333 }//namespace stk_classic
334 #endif
335 
void write_output_db(Ioss::Region &io_region, const stk_classic::mesh::BulkData &bulk, const stk_classic::mesh::Selector *anded_selector)
FEMMetaData is a class that implements a Finite Element Method skin on top of the Sierra Tool Kit Met...
Definition: FEMMetaData.hpp:54
Field base class with an anonymous data type and anonymous multi-dimension.
Definition: FieldBase.hpp:53
The manager of an integrated collection of parts and fields.
Definition: MetaData.hpp:56
void field_data_from_ioss(const stk_classic::mesh::FieldBase *field, std::vector< stk_classic::mesh::Entity *> &entities, Ioss::GroupingEntity *io_entity, const std::string &io_fld_name)
Definition: IossBridge.cpp:964
void define_output_db(Ioss::Region &io_region, const mesh::BulkData &bulk_data, const Ioss::Region *input_region, const stk_classic::mesh::Selector *anded_selector, const bool sort_stk_parts)
const Ioss::Field::RoleType * get_field_role(const stk_classic::mesh::FieldBase &f)
void put_io_part_attribute(mesh::Part &part, Ioss::GroupingEntity *entity)
Definition: IossBridge.cpp:570
This is a class for selecting buckets based on a set of meshparts and set logic.
Definition: Selector.hpp:112
bool include_entity(const Ioss::GroupingEntity *entity)
std::string map_topology_cell_to_ioss(const CellTopologyData *cell_top, int spatial_dimension)
Definition: IossBridge.cpp:687
Field with defined data type and multi-dimensions (if any)
Definition: Field.hpp:118
An application-defined subset of a problem domain.
Definition: Part.hpp:49
void default_part_processing(const std::vector< T *> &entities, stk_classic::mesh::fem::FEMMetaData &fem_meta)
Definition: IossBridge.hpp:93
bool is_part_io_part(stk_classic::mesh::Part &part)
const stk_classic::mesh::Field< double, stk_classic::mesh::ElementNode > * get_distribution_factor_field(const stk_classic::mesh::Part &p)
Manager for an integrated collection of entities, entity relations, and buckets of field data...
Definition: BulkData.hpp:49
const CellTopologyData * map_topology_ioss_to_cell(const Ioss::ElementTopology *topology)
Definition: IossBridge.cpp:670
Sierra Toolkit.
bool is_valid_part_field(const stk_classic::mesh::FieldBase *field, const stk_classic::mesh::EntityRank part_type, const stk_classic::mesh::Part &part, const stk_classic::mesh::Part &universal, const Ioss::Field::RoleType filter_role, bool add_all)
Definition: IossBridge.cpp:620
void field_data_to_ioss(const stk_classic::mesh::FieldBase *field, std::vector< stk_classic::mesh::Entity *> &entities, Ioss::GroupingEntity *io_entity, const std::string &io_fld_name, Ioss::Field::RoleType filter_role)
Definition: IossBridge.cpp:999
void set_field_role(stk_classic::mesh::FieldBase &f, const Ioss::Field::RoleType &role)
void ioss_add_fields(const stk_classic::mesh::Part &part, const stk_classic::mesh::EntityRank part_type, Ioss::GroupingEntity *entity, const Ioss::Field::RoleType filter_role, const bool add_all)
Definition: IossBridge.cpp:868
static FEMMetaData & get(const MetaData &meta)
Getter for FEMMetaData off of a MetaData object.
void define_io_fields(Ioss::GroupingEntity *entity, Ioss::Field::RoleType role, stk_classic::mesh::Part &part, stk_classic::mesh::EntityRank part_type)
Definition: IossBridge.cpp:905
void remove_io_part_attribute(mesh::Part &part)
Definition: IossBridge.cpp:589
void set_distribution_factor_field(stk_classic::mesh::Part &p, const stk_classic::mesh::Field< double, stk_classic::mesh::ElementNode > &df_field)