1 #include <stk_io/util/IO_Fixture.hpp> 2 #include <stk_io/MeshReadWriteUtils.hpp> 4 #include <init/Ionit_Initializer.h> 5 #include <Ioss_SubSystem.h> 13 , m_fem_meta_data(NULL)
15 , m_ioss_input_region(NULL)
16 , m_ioss_output_region(NULL)
21 IO_Fixture::~IO_Fixture()
25 m_mesh_data.m_input_region = NULL;
26 m_mesh_data.m_output_region = NULL;
29 void IO_Fixture::output_ioss_region(Teuchos::RCP<Ioss::Region> ioss_output_region) {
30 m_ioss_output_region = ioss_output_region;
31 m_mesh_data.m_output_region = m_ioss_output_region.get();
34 void IO_Fixture::create_output_mesh(
35 const std::string & base_exodus_filename,
42 Ioss::DatabaseIO *dbo = Ioss::IOFactory::create(
46 bulk_data().parallel()
49 ThrowErrorMsgIf(dbo == NULL || !dbo->ok(),
50 "ERROR: Could not open results database '" << base_exodus_filename <<
51 "' of type 'exodusII'");
56 if (!Teuchos::is_null(m_ioss_input_region)) {
57 if (m_ioss_input_region->get_database()->int_byte_size_api() == 8)
58 dbo->set_int_byte_size_api(Ioss::USE_INT64_API);
62 const std::string name = std::string(
"results_output_")+base_exodus_filename;
63 m_ioss_output_region = Teuchos::rcp(
new Ioss::Region(dbo, name));
64 m_mesh_data.m_output_region = m_ioss_output_region.get();
78 m_mesh_data.m_anded_selector);
88 m_mesh_data.m_anded_selector);
91 m_ioss_output_region->begin_mode(Ioss::STATE_DEFINE_TRANSIENT);
95 meta_data().universal_part(),
96 meta_data().node_rank(),
97 m_ioss_output_region->get_node_blocks()[0],
98 Ioss::Field::TRANSIENT,
103 for ( stk_classic::mesh::PartVector::const_iterator ip = all_parts.begin();
104 ip != all_parts.end();
113 Ioss::GroupingEntity *entity = m_ioss_output_region->get_entity(part.
name());
114 if (entity != NULL && entity->type() == Ioss::ELEMENTBLOCK) {
119 Ioss::Field::TRANSIENT,
125 m_ioss_output_region->end_mode(Ioss::STATE_DEFINE_TRANSIENT);
129 void IO_Fixture::add_timestep_to_output_mesh(
double time )
131 ThrowErrorMsgIf( Teuchos::is_null(m_ioss_output_region),
132 "Please call create_output_mesh before add_timestep_to_output_mesh" );
136 void IO_Fixture::set_meta_data( Teuchos::RCP<stk_classic::mesh::fem::FEMMetaData> arg_meta_data )
138 ThrowErrorMsgIf( !Teuchos::is_null(m_fem_meta_data),
139 "Meta data already initialized" );
140 m_fem_meta_data = arg_meta_data;
143 void IO_Fixture::set_bulk_data( Teuchos::RCP<stk_classic::mesh::BulkData> arg_bulk_data )
145 ThrowErrorMsgIf( !Teuchos::is_null(m_bulk_data),
146 "Bulk data already initialized" );
147 m_bulk_data = arg_bulk_data;
150 void IO_Fixture::initialize_meta_data(
const std::string & base_filename,
const std::string & mesh_type)
152 ThrowErrorMsgIf( !Teuchos::is_null(m_fem_meta_data),
153 "Meta data already initialized" );
154 ThrowErrorMsgIf( !Teuchos::is_null(m_ioss_input_region),
155 "Input region was already initialized");
158 m_mesh_type = mesh_type;
160 Ioss::Init::Initializer init_db;
171 m_ioss_input_region = Teuchos::rcp( m_mesh_data.m_input_region );
174 void IO_Fixture::initialize_bulk_data()
176 ThrowErrorMsgIf( !Teuchos::is_null(m_bulk_data),
177 "Bulk data already initialized" );
180 ThrowErrorMsgIf( m_mesh_type ==
"",
181 "Can only use this method if meta-data was initialized with initialize_meta_data");
191 void IO_Fixture::set_input_ioss_region( Teuchos::RCP<Ioss::Region> input_region )
193 ThrowErrorMsgIf( !Teuchos::is_null(m_ioss_input_region),
194 "Input region was already initialized");
196 m_ioss_input_region = input_region;
void write_output_db(Ioss::Region &io_region, const stk_classic::mesh::BulkData &bulk, const stk_classic::mesh::Selector *anded_selector)
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)
void populate_bulk_data(stk_classic::mesh::BulkData &bulk_data, MeshData &mesh_data)
unsigned primary_entity_rank() const
The primary entity type for this part.
An application-defined subset of a problem domain.
bool is_part_io_part(stk_classic::mesh::Part &part)
const std::string & name() const
Application-defined text name of this part.
Manager for an integrated collection of entities, entity relations, and buckets of field data...
void create_input_mesh(const std::string &mesh_type, const std::string &mesh_filename, stk_classic::ParallelMachine comm, stk_classic::mesh::fem::FEMMetaData &fem_meta, stk_classic::io::MeshData &mesh_data, bool lower_case_variable_names)
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)
std::vector< Part *> PartVector
Collections of parts are frequently maintained as a vector of Part pointers.
int process_output_request(MeshData &mesh_data, stk_classic::mesh::BulkData &bulk, double time, const std::set< const stk_classic::mesh::Part *> &exclude)