libMesh
Public Member Functions | Private Attributes | List of all members
libMesh::ExodusII_IO_Helper::MappedOutputVector Struct Reference

This class facilitates inline conversion of an input data vector to a different precision level, depending on the underlying type of Real and whether or not the single_precision flag is set. More...

#include <exodusII_io_helper.h>

Public Member Functions

 MappedOutputVector (const std::vector< Real > &vec_in, bool single_precision_in)
 
 ~MappedOutputVector ()=default
 
void * data ()
 

Private Attributes

const std::vector< Real > & our_data
 
bool single_precision
 
std::vector< double > double_vec
 
std::vector< float > float_vec
 

Detailed Description

This class facilitates inline conversion of an input data vector to a different precision level, depending on the underlying type of Real and whether or not the single_precision flag is set.

This should be used whenever floating point data is being written to the Exodus file. Note that if no precision conversion has to take place, there should be very little overhead involved in using this object.

Definition at line 1052 of file exodusII_io_helper.h.

Constructor & Destructor Documentation

◆ MappedOutputVector()

libMesh::ExodusII_IO_Helper::MappedOutputVector::MappedOutputVector ( const std::vector< Real > &  vec_in,
bool  single_precision_in 
)

Definition at line 584 of file exodusII_io_helper.C.

References double_vec, float_vec, libMesh::index_range(), our_data, libMesh::Real, and single_precision.

586  : our_data(our_data_in),
587  single_precision(single_precision_in)
588 {
589  if (single_precision)
590  {
591  if (sizeof(Real) != sizeof(float))
592  {
593  float_vec.resize(our_data.size());
594  // boost float128 demands explicit downconversions
595  for (std::size_t i : index_range(our_data))
596  float_vec[i] = float(our_data[i]);
597  }
598  }
599 
600  else if (sizeof(Real) != sizeof(double))
601  {
602  double_vec.resize(our_data.size());
603  // boost float128 demands explicit downconversions
604  for (std::size_t i : index_range(our_data))
605  double_vec[i] = double(our_data[i]);
606  }
607 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition: int_range.h:153

◆ ~MappedOutputVector()

libMesh::ExodusII_IO_Helper::MappedOutputVector::~MappedOutputVector ( )
default

Member Function Documentation

◆ data()

void * libMesh::ExodusII_IO_Helper::MappedOutputVector::data ( )

Definition at line 610 of file exodusII_io_helper.C.

References libMesh::Real.

Referenced by libMesh::Nemesis_IO_Helper::write_element_values(), libMesh::ExodusII_IO_Helper::write_element_values_element_major(), libMesh::Nemesis_IO_Helper::write_nodal_coordinates(), and libMesh::ExodusII_IO_Helper::write_nodal_coordinates().

611 {
612  if (single_precision)
613  {
614  if (sizeof(Real) != sizeof(float))
615  return static_cast<void*>(float_vec.data());
616  }
617 
618  else if (sizeof(Real) != sizeof(double))
619  return static_cast<void*>(double_vec.data());
620 
621  // Otherwise return a (suitably casted) pointer to the original underlying data.
622  return const_cast<void *>(static_cast<const void *>(our_data.data()));
623 }
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Member Data Documentation

◆ double_vec

std::vector<double> libMesh::ExodusII_IO_Helper::MappedOutputVector::double_vec
private

Definition at line 1068 of file exodusII_io_helper.h.

Referenced by MappedOutputVector().

◆ float_vec

std::vector<float> libMesh::ExodusII_IO_Helper::MappedOutputVector::float_vec
private

Definition at line 1069 of file exodusII_io_helper.h.

Referenced by MappedOutputVector().

◆ our_data

const std::vector<Real>& libMesh::ExodusII_IO_Helper::MappedOutputVector::our_data
private

Definition at line 1066 of file exodusII_io_helper.h.

Referenced by MappedOutputVector().

◆ single_precision

bool libMesh::ExodusII_IO_Helper::MappedOutputVector::single_precision
private

Definition at line 1067 of file exodusII_io_helper.h.

Referenced by MappedOutputVector().


The documentation for this struct was generated from the following files: