diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index 7c1f73298..4f39d3a59 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -623,6 +623,7 @@ if (Damaris_FOUND AND MPI_FOUND) list (APPEND PUBLIC_HEADER_FILES ebos/damariswriter.hh) list (APPEND PUBLIC_HEADER_FILES opm/simulators/utils/DamarisVar.hpp) list (APPEND PUBLIC_HEADER_FILES opm/simulators/utils/GridDataOutput.hpp) + list(APPEND MAIN_SOURCE_FILES opm/simulators/utils/DamarisVar.cpp) endif() if(HDF5_FOUND) diff --git a/opm/simulators/utils/DamarisVar.cpp b/opm/simulators/utils/DamarisVar.cpp new file mode 100644 index 000000000..b74fac117 --- /dev/null +++ b/opm/simulators/utils/DamarisVar.cpp @@ -0,0 +1,381 @@ +/* + Copyright 2023 Inria, Bretagne–Atlantique Research Center + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ +#include +#include + +#include + +#include + +#include +#include +#include + +namespace Opm::DamarisOutput { + +DamarisVarXMLAttributes::DamarisVarXMLAttributes() +{ + // Additional data needed to complete an XML element + type_ = "scalar"; // This is probably not needed as vector data is defined using + // the Layout paramter. Could be useful for cross checking + visualizable_ = "false"; + time_varying_ = "true"; + centering_ = "zonal"; +} + +std::string DamarisVarXMLAttributes::ReturnXMLForVariable() +{ + std::ostringstream var_sstr; + + var_sstr << " layout=\"" << this->layout_ << "\""; + if (this->mesh_ != "") + var_sstr << " mesh=\"" << this->mesh_ << "\""; + if (this->type_ != "") + var_sstr << " type=\"" << this->type_ << "\""; + if (this->visualizable_ != "") + var_sstr << " visualizable=\"" << this->visualizable_ << "\""; + if (this->unit_ != "") + var_sstr << " unit=\"" << this->unit_ << "\""; + if (this->time_varying_ != "") + var_sstr << " time_varying=\"" << this->time_varying_ << "\""; + if (this->centering_ != "") + var_sstr << " centering=\"" << this->centering_ << "\""; + if (this->store_ != "") + var_sstr << " store=\"" << this->store_ << "\""; + if (this->script_ != "") + var_sstr << " script=\"" << this->script_ << "\""; + if (this->select_mem_ != "") + var_sstr << " select-mem=\"" << this->select_mem_ << "\""; + if (this->select_file_ != "") + var_sstr << " select-file=\"" << this->select_file_ << "\""; + if (this->select_subset_ != "") + var_sstr << " select-subset=\"" << this->select_subset_ << "\""; + + return var_sstr.str(); +} + +template +DamarisVar::DamarisVar(int dims, + const std::vector& param_names, + const std::string& variable_name, int rank) + : param_names_(param_names) + , variable_name_(variable_name) + , rank_(rank) +{ + dam_err_ = DAMARIS_OK; + + assert(param_names_.size() == static_cast(dims)); + assert(dims > 0); + + has_error_ = false; + + // Check that our template type T matches out Damaris XML type + TestType(variable_name); + if (hasError()) { + printError(); // throws a runtime error, with error message from + // dam_err_sstr_ + } + + current_size_ = 0; + num_params_ = param_names_.size(); + param_sizes_.resize(num_params_); + positions_.resize(dims); + + data_ptr_ = nullptr; + parameters_set_ = false; + has_error_ = false; +} + +template +DamarisVar::DamarisVar(int dims, + const std::vector& param_names, + const std::vector& param_values, + const std::string& variable_name, + int rank) + : param_names_(param_names) + , variable_name_(variable_name) + , rank_(rank) +{ + DamarisVar(dims, param_names, variable_name, rank); + setDamarisParameterAndShmem(param_values); // Initialise the memory size in the constructor. +} + +template +DamarisVar::~DamarisVar() +{ + if (data_ptr_ != nullptr) { + commitVariableDamarisShmem(); + clearVariableDamarisShmem(); + } + if (this->hasError()) + printError(); // flush out any error messages +} + +template +void DamarisVar::printError() const +{ + OPM_THROW(std::runtime_error, dam_err_sstr_.str()); +} + +template +std::string DamarisVar::returnXMLForVariable() +{ + std::ostringstream var_sstr; + + var_sstr << " "; + + return var_sstr.str(); +} + +template +void DamarisVar::setDamarisParameter(const std::vector& paramSizeVal) +{ + assert(paramSizeVal.size() == static_cast(num_params_)); + + bool resbool = true; + std::size_t total_size = 1; + for (int varnum = 0; varnum < num_params_; varnum++) { + param_sizes_[varnum] = paramSizeVal[varnum]; + total_size *= param_sizes_[varnum]; + + dam_err_ = damaris_parameter_set(param_names_[varnum].c_str(), ¶mSizeVal[varnum], sizeof(int)); + if (dam_err_ != DAMARIS_OK) { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_parameter_set(\"" + << param_names_[varnum] << "\", paramSizeVal, sizeof(int)); Damaris error = " + << damaris_error_string(dam_err_) << std::endl; + resbool = false; + has_error_ = true; + } + } + + if (resbool == true) { + parameterIsSet(); // sets parameters_set_ and gets the size of the + // variables block storage (as number of elemnts) + } + + if (total_size > 0) { + current_size_ = total_size; + } else { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar::getDataStoreBlockSize() " + << "The total size of the variable is 0 - please check " + "input paramSizeVal array." + << std::endl; + has_error_ = true; + } + + if (hasError()) { + printError(); + } +} + +template +void DamarisVar::setDamarisPosition(const std::vector& positionsVals) +{ + assert(positionsVals.size() == static_cast(num_params_)); + + for (int pos_dim = 0; pos_dim < num_params_; pos_dim++) { + positions_[pos_dim] = positionsVals[pos_dim]; + } + dam_err_ = damaris_set_position(variable_name_.c_str(), positionsVals.data()); + if (dam_err_ != DAMARIS_OK) { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_set_position(\"" + << variable_name_ + << "\", positionsVals); Damaris error = " << damaris_error_string(dam_err_) << std::endl; + has_error_ = true; + } + + if (hasError()) { + printError(); + } +} + +template +void DamarisVar::setPointersToDamarisShmem() +{ + if (parameters_set_ == true) { + // Allocate memory in the shared memory section... + dam_err_ = damaris_alloc(variable_name_.c_str(), (void**)&data_ptr_); + if (dam_err_ != DAMARIS_OK) { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_alloc(\"" + << variable_name_ << "\", (void **) &ret_ptr)" + << ", Damaris error = " << damaris_error_string(dam_err_) << std::endl; + has_error_ = true; + } + } else { + dam_err_ = -1; + dam_err_sstr_ << " ERROR rank =" << rank_ + << " : class DamarisVar : setDamarisParameter() should be " + "called first so as to define the size of the memory " + "block required for variable : " + << variable_name_ << std::endl; + has_error_ = true; + } + + if (hasError()) { + printError(); + } +} + +template +void DamarisVar::commitVariableDamarisShmem() +{ + // Signal to Damaris we are done writing data for this iteration + dam_err_ = damaris_commit(variable_name_.c_str()); + if (dam_err_ != DAMARIS_OK) { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_commit(\"" + << variable_name_ << "\")" + << ", Damaris error = " << damaris_error_string(dam_err_) << std::endl; + has_error_ = true; + } +} + +template +void DamarisVar::clearVariableDamarisShmem() +{ + // Signal to Damaris it has complete charge of the memory area + dam_err_ = damaris_clear(variable_name_.c_str()); + if (dam_err_ != DAMARIS_OK) { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_clear(\"" << variable_name_ + << "\")" + << ", Damaris error = " << damaris_error_string(dam_err_) << std::endl; + has_error_ = true; + } + data_ptr_ = nullptr; +} + +template +bool DamarisVar::TestType(const std::string& variable_name) +{ + bool resbool = true; + // This gets the type of the Damaris XML 's + DAMARIS_TYPE_STR vartype; + dam_err_ = damaris_get_type(variable_name.c_str(), &vartype); + if (dam_err_ != DAMARIS_OK) { + dam_err_sstr_ << " ERROR rankDamarisVar::DamarisVar () damaris_get_type(\"" << variable_name_ + << "\", vartype); Damaris error = " << damaris_error_string(dam_err_) << std::endl; + has_error_ = true; + return false; + } + T test_id; + const std::type_info& t1 = typeid(test_id); + + if (vartype == DAMARIS_TYPE_DOUBLE) { + double td = 0.0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_FLOAT) { + float td = 0.0f; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_CHAR) { + char td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_UCHAR) { + unsigned char td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_SHORT) { + short td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_USHORT) { + unsigned short td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_INT) { + int td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_UINT) { + unsigned int td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_LONG) { + long td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_ULONG) { + unsigned long td = 0; + const std::type_info& t2 = typeid(td); + if (t1 != t2) { + formatTypeError(variable_name, t1.name(), t2.name()); + resbool = false; + } + } else if (vartype == DAMARIS_TYPE_UNDEFINED) { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : DamarisVar::DamarisVar():: \"" << variable_name + << "\" has type DAMARIS_TYPE_UNDEFINED" << std::endl; + has_error_ = true; + resbool = false; + } else { + dam_err_sstr_ << " ERROR rank =" << rank_ << " : DamarisVar::DamarisVar():: \"" << variable_name + << "\" is not of available type " << std::endl; + has_error_ = true; + resbool = false; + } + + return resbool; +} + +template +void DamarisVar::formatTypeError(const std::string& var_name, + const std::string& type_name1, + const std::string& type_name2) +{ + dam_err_sstr_ << " ERROR rank =" << rank_ << " : DamarisVar::DamarisVar () variable_name_: \"" << var_name + << "\" The template type of Type of DamarisVar in the code: " << type_name1 + << " does not match type in XML:" << type_name2 << std::endl; + has_error_ = true; +} + +template class DamarisVar; +template class DamarisVar; +template class DamarisVar; + +} // namespace Opm::DamarisOutput diff --git a/opm/simulators/utils/DamarisVar.hpp b/opm/simulators/utils/DamarisVar.hpp index d6c493bd2..0c26d0a1e 100644 --- a/opm/simulators/utils/DamarisVar.hpp +++ b/opm/simulators/utils/DamarisVar.hpp @@ -20,20 +20,11 @@ #ifndef DAMARISVAR_HPP #define DAMARISVAR_HPP -#include - -#include #include -#include #include #include -#include #include -#define BOOST_BIND_GLOBAL_PLACEHOLDERS 1 - -#include - /* File: DamarisVar.hpp Author: Joshua Bowden, Inria @@ -91,49 +82,11 @@ namespace DamarisOutput //!< the ranks data (Damaris version 1.8+) public: - DamarisVarXMLAttributes() - { - // Additional data needed to complete an XML element - type_ = "scalar"; // This is probably not needed as vector data is defined using - // the Layout paramter. Could be useful for cross checking - visualizable_ = "false"; - time_varying_ = "true"; - centering_ = "zonal"; - } - + DamarisVarXMLAttributes(); /** * Creates the XML representation of the variable from the available strings */ - std::string ReturnXMLForVariable() - { - std::ostringstream var_sstr; - - var_sstr << " layout=\"" << this->layout_ << "\""; - if (this->mesh_ != "") - var_sstr << " mesh=\"" << this->mesh_ << "\""; - if (this->type_ != "") - var_sstr << " type=\"" << this->type_ << "\""; - if (this->visualizable_ != "") - var_sstr << " visualizable=\"" << this->visualizable_ << "\""; - if (this->unit_ != "") - var_sstr << " unit=\"" << this->unit_ << "\""; - if (this->time_varying_ != "") - var_sstr << " time_varying=\"" << this->time_varying_ << "\""; - if (this->centering_ != "") - var_sstr << " centering=\"" << this->centering_ << "\""; - if (this->store_ != "") - var_sstr << " store=\"" << this->store_ << "\""; - if (this->script_ != "") - var_sstr << " script=\"" << this->script_ << "\""; - if (this->select_mem_ != "") - var_sstr << " select-mem=\"" << this->select_mem_ << "\""; - if (this->select_file_ != "") - var_sstr << " select-file=\"" << this->select_file_ << "\""; - if (this->select_subset_ != "") - var_sstr << " select-subset=\"" << this->select_subset_ << "\""; - - return var_sstr.str(); - } + std::string ReturnXMLForVariable(); }; class DamarisVarBase @@ -251,34 +204,7 @@ namespace DamarisOutput DamarisVar(int dims, const std::vector& param_names, const std::string& variable_name, - int rank) - : param_names_(param_names) - , variable_name_(variable_name) - , rank_(rank) - { - dam_err_ = DAMARIS_OK; - - assert(param_names_.size() == static_cast(dims)); - assert(dims > 0); - - has_error_ = false; - - // Check that our template type T matches out Damaris XML type - TestType(variable_name); - if (hasError()) { - printError(); // throws a runtime error, with error message from - // dam_err_sstr_ - } - - current_size_ = 0; - num_params_ = param_names_.size(); - param_sizes_.resize(num_params_); - positions_.resize(dims); - - data_ptr_ = nullptr; - parameters_set_ = false; - has_error_ = false; - } + int rank); /** * Constructor - Sets private data values and also initialises the Damaris shared memory area for writing (and @@ -314,24 +240,9 @@ namespace DamarisOutput const std::vector& param_names, const std::vector& param_values, const std::string& variable_name, - int rank) - : param_names_(param_names) - , variable_name_(variable_name) - , rank_(rank) - { - DamarisVar(dims, param_names, variable_name, rank); - setDamarisParameterAndShmem(param_values); // Initialise the memory size in the constructor. - } + int rank); - ~DamarisVar() - { - if (data_ptr_ != nullptr) { - commitVariableDamarisShmem(); - clearVariableDamarisShmem(); - } - if (this->hasError()) - printError(); // flush out any error messages - } + ~DamarisVar(); /** * Allow a user to indicate that the Damaris variable has allocated a size - @@ -345,10 +256,7 @@ namespace DamarisOutput parameters_set_ = true; } - void printError() const override - { - OPM_THROW(std::runtime_error, dam_err_sstr_.str()); - } + void printError() const override; bool hasError() const override { @@ -376,17 +284,7 @@ namespace DamarisOutput /** * Creates the XML representation of the variable from the available strings */ - std::string returnXMLForVariable() - { - std::ostringstream var_sstr; - - var_sstr << " "; - - return var_sstr.str(); - } + std::string returnXMLForVariable(); /** * Method to set the Damaris paramater values and set the shmem region \ref @@ -427,45 +325,7 @@ namespace DamarisOutput * /implicit : Implicitly uses the array of paramater names: * \ref param_names_ */ - void setDamarisParameter(const std::vector& paramSizeVal) override - { - assert(paramSizeVal.size() == static_cast(num_params_)); - - bool resbool = true; - std::size_t total_size = 1; - for (int varnum = 0; varnum < num_params_; varnum++) { - param_sizes_[varnum] = paramSizeVal[varnum]; - total_size *= param_sizes_[varnum]; - - dam_err_ = damaris_parameter_set(param_names_[varnum].c_str(), ¶mSizeVal[varnum], sizeof(int)); - if (dam_err_ != DAMARIS_OK) { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_parameter_set(\"" - << param_names_[varnum] << "\", paramSizeVal, sizeof(int)); Damaris error = " - << damaris_error_string(dam_err_) << std::endl; - resbool = false; - has_error_ = true; - } - } - - if (resbool == true) { - parameterIsSet(); // sets parameters_set_ and gets the size of the - // variables block storage (as number of elemnts) - } - - if (total_size > 0) { - current_size_ = total_size; - } else { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar::getDataStoreBlockSize() " - << "The total size of the variable is 0 - please check " - "input paramSizeVal array." - << std::endl; - has_error_ = true; - } - - if (hasError()) { - printError(); - } - } + void setDamarisParameter(const std::vector& paramSizeVal) override; /** * Method to set the Damaris position values. @@ -477,25 +337,7 @@ namespace DamarisOutput * /implicit : Implicitly uses the variable name: \ref * variable_name_ */ - void setDamarisPosition(const std::vector& positionsVals) override - { - assert(positionsVals.size() == static_cast(num_params_)); - - for (int pos_dim = 0; pos_dim < num_params_; pos_dim++) { - positions_[pos_dim] = positionsVals[pos_dim]; - } - dam_err_ = damaris_set_position(variable_name_.c_str(), positionsVals.data()); - if (dam_err_ != DAMARIS_OK) { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_set_position(\"" - << variable_name_ - << "\", positionsVals); Damaris error = " << damaris_error_string(dam_err_) << std::endl; - has_error_ = true; - } - - if (hasError()) { - printError(); - } - } + void setDamarisPosition(const std::vector& positionsVals) override; /** * Method to set the internal pointer (data_ptr_) to the Damaris shared @@ -505,31 +347,7 @@ namespace DamarisOutput * string \ref variable_name_ /implicit : Implicitly uses the * class data element : \ref data_ptr_ */ - void setPointersToDamarisShmem() override - { - if (parameters_set_ == true) { - // Allocate memory in the shared memory section... - dam_err_ = damaris_alloc(variable_name_.c_str(), (void**)&data_ptr_); - if (dam_err_ != DAMARIS_OK) { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_alloc(\"" - << variable_name_ << "\", (void **) &ret_ptr)" - << ", Damaris error = " << damaris_error_string(dam_err_) << std::endl; - has_error_ = true; - } - } else { - dam_err_ = -1; - dam_err_sstr_ << " ERROR rank =" << rank_ - << " : class DamarisVar : setDamarisParameter() should be " - "called first so as to define the size of the memory " - "block required for variable : " - << variable_name_ << std::endl; - has_error_ = true; - } - - if (hasError()) { - printError(); - } - } + void setPointersToDamarisShmem() override; /** * Method to commit the memory of the data written to the Damaris variable - @@ -538,17 +356,7 @@ namespace DamarisOutput * /implicit : Implicitly uses the variable name string \ref * variable_name_ */ - void commitVariableDamarisShmem() override - { - // Signal to Damaris we are done writing data for this iteration - dam_err_ = damaris_commit(variable_name_.c_str()); - if (dam_err_ != DAMARIS_OK) { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_commit(\"" - << variable_name_ << "\")" - << ", Damaris error = " << damaris_error_string(dam_err_) << std::endl; - has_error_ = true; - } - } + void commitVariableDamarisShmem() override; /** * Method to release the memory of the data written to the Damaris variable - @@ -558,133 +366,18 @@ namespace DamarisOutput * /implicit : Implicitly uses the variable name string \ref * variable_name_ */ - void clearVariableDamarisShmem() override - { - // Signal to Damaris it has complete charge of the memory area - dam_err_ = damaris_clear(variable_name_.c_str()); - if (dam_err_ != DAMARIS_OK) { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : class DamarisVar : damaris_clear(\"" << variable_name_ - << "\")" - << ", Damaris error = " << damaris_error_string(dam_err_) << std::endl; - has_error_ = true; - } - data_ptr_ = nullptr; - } + void clearVariableDamarisShmem() override; private: /** * Method to check that the template parameter T is the same as the requested * type for the variable in the XML file */ - bool TestType(const std::string& variable_name) - { - bool resbool = true; - // This gets the type of the Damaris XML 's - DAMARIS_TYPE_STR vartype; - dam_err_ = damaris_get_type(variable_name.c_str(), &vartype); - if (dam_err_ != DAMARIS_OK) { - dam_err_sstr_ << " ERROR rankDamarisVar::DamarisVar () damaris_get_type(\"" << variable_name_ - << "\", vartype); Damaris error = " << damaris_error_string(dam_err_) << std::endl; - has_error_ = true; - return false; - } - T test_id; - const std::type_info& t1 = typeid(test_id); - - if (vartype == DAMARIS_TYPE_DOUBLE) { - double td = 0.0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_FLOAT) { - float td = 0.0f; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_CHAR) { - char td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_UCHAR) { - unsigned char td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_SHORT) { - short td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_USHORT) { - unsigned short td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_INT) { - int td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_UINT) { - unsigned int td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_LONG) { - long td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_ULONG) { - unsigned long td = 0; - const std::type_info& t2 = typeid(td); - if (t1 != t2) { - formatTypeError(variable_name, t1.name(), t2.name()); - resbool = false; - } - } else if (vartype == DAMARIS_TYPE_UNDEFINED) { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : DamarisVar::DamarisVar():: \"" << variable_name - << "\" has type DAMARIS_TYPE_UNDEFINED" << std::endl; - has_error_ = true; - resbool = false; - } else { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : DamarisVar::DamarisVar():: \"" << variable_name - << "\" is not of available type " << std::endl; - has_error_ = true; - resbool = false; - } - - return resbool; - } + bool TestType(const std::string& variable_name); void formatTypeError(const std::string& var_name, const std::string& type_name1, - const std::string& type_name2) - { - dam_err_sstr_ << " ERROR rank =" << rank_ << " : DamarisVar::DamarisVar () variable_name_: \"" << var_name - << "\" The template type of Type of DamarisVar in the code: " << type_name1 - << " does not match type in XML:" << type_name2 << std::endl; - has_error_ = true; - } + const std::string& type_name2); }; // class DamarisVar } // namespace DamarisOutput