From 00c790fab14e2d791e07e8b99082b90dda514a6e Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Thu, 27 Oct 2016 10:05:30 +0200 Subject: [PATCH] [PL] parameter name is const now --- ProcessLib/Parameter/ConstantParameter.cpp | 6 +++--- ProcessLib/Parameter/ConstantParameter.h | 11 ++++++++--- ProcessLib/Parameter/CurveScaledParameter.cpp | 10 ++++++---- ProcessLib/Parameter/CurveScaledParameter.h | 7 ++++--- ProcessLib/Parameter/GroupBasedParameter.cpp | 15 ++++++++++----- ProcessLib/Parameter/GroupBasedParameter.h | 15 +++++++++------ ProcessLib/Parameter/MeshElementParameter.cpp | 5 +++-- ProcessLib/Parameter/MeshElementParameter.h | 11 +++++++---- ProcessLib/Parameter/MeshNodeParameter.cpp | 5 +++-- ProcessLib/Parameter/MeshNodeParameter.h | 11 +++++++---- ProcessLib/Parameter/Parameter.cpp | 15 +++++---------- ProcessLib/Parameter/Parameter.h | 6 +++++- 12 files changed, 70 insertions(+), 47 deletions(-) diff --git a/ProcessLib/Parameter/ConstantParameter.cpp b/ProcessLib/Parameter/ConstantParameter.cpp index 0988a98690d..6c54129088f 100644 --- a/ProcessLib/Parameter/ConstantParameter.cpp +++ b/ProcessLib/Parameter/ConstantParameter.cpp @@ -15,7 +15,7 @@ namespace ProcessLib { std::unique_ptr<ParameterBase> createConstantParameter( - BaseLib::ConfigTree const& config) + std::string const& name, BaseLib::ConfigTree const& config) { //! \ogs_file_param{parameter__type} config.checkConfigParameter("type", "Constant"); @@ -31,7 +31,7 @@ std::unique_ptr<ParameterBase> createConstantParameter( { DBUG("Using value %g for constant parameter.", *value); return std::unique_ptr<ParameterBase>( - new ConstantParameter<double>(*value)); + new ConstantParameter<double>(name, *value)); } } @@ -51,7 +51,7 @@ std::unique_ptr<ParameterBase> createConstantParameter( } return std::unique_ptr<ParameterBase>( - new ConstantParameter<double>(values)); + new ConstantParameter<double>(name, values)); } } // ProcessLib diff --git a/ProcessLib/Parameter/ConstantParameter.h b/ProcessLib/Parameter/ConstantParameter.h index 2c48d5c88a0..4de95d2ed67 100644 --- a/ProcessLib/Parameter/ConstantParameter.h +++ b/ProcessLib/Parameter/ConstantParameter.h @@ -19,11 +19,16 @@ template <typename T> struct ConstantParameter final : public Parameter<T> { /// Construction with single value. - explicit ConstantParameter(T const& value) : _values({value}) {} + explicit ConstantParameter(std::string const& name_, T const& value) + : Parameter<T>(name_), _values({value}) + { + } /// Construction with a tuple. /// The given tuple must be non-empty. - explicit ConstantParameter(std::vector<T> const& values) : _values(values) + explicit ConstantParameter(std::string const& name_, + std::vector<T> const& values) + : Parameter<T>(name_), _values(values) { assert(!values.empty()); } @@ -46,7 +51,7 @@ private: }; std::unique_ptr<ParameterBase> createConstantParameter( - BaseLib::ConfigTree const& config); + std::string const& name, BaseLib::ConfigTree const& config); } // ProcessLib diff --git a/ProcessLib/Parameter/CurveScaledParameter.cpp b/ProcessLib/Parameter/CurveScaledParameter.cpp index e0c3e414cdd..e90d3e9f116 100644 --- a/ProcessLib/Parameter/CurveScaledParameter.cpp +++ b/ProcessLib/Parameter/CurveScaledParameter.cpp @@ -13,6 +13,7 @@ namespace ProcessLib { std::unique_ptr<ParameterBase> createCurveScaledParameter( + std::string const& name, BaseLib::ConfigTree const& config, std::map<std::string, std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const& @@ -30,12 +31,13 @@ std::unique_ptr<ParameterBase> createCurveScaledParameter( OGS_FATAL("Curve `%s' does not exists.", curve_name.c_str()); //! \ogs_file_param{parameter__CurveScaled__parameter} - auto parameter_name = config.getConfigParameter<std::string>("parameter"); - DBUG("Using parameter %s", parameter_name.c_str()); + auto referenced_parameter_name = + config.getConfigParameter<std::string>("parameter"); + DBUG("Using parameter %s", referenced_parameter_name.c_str()); // TODO other data types than only double - return std::unique_ptr<ParameterBase>( - new CurveScaledParameter<double>(*curve_it->second, parameter_name)); + return std::unique_ptr<ParameterBase>(new CurveScaledParameter<double>( + name, *curve_it->second, referenced_parameter_name)); } } // ProcessLib diff --git a/ProcessLib/Parameter/CurveScaledParameter.h b/ProcessLib/Parameter/CurveScaledParameter.h index 5ff5b640d00..1f5ce15f79a 100644 --- a/ProcessLib/Parameter/CurveScaledParameter.h +++ b/ProcessLib/Parameter/CurveScaledParameter.h @@ -19,10 +19,10 @@ namespace ProcessLib { template <typename T> struct CurveScaledParameter final : public Parameter<T> { - CurveScaledParameter(MathLib::PiecewiseLinearInterpolation const& curve, + CurveScaledParameter(std::string const& name_, + MathLib::PiecewiseLinearInterpolation const& curve, std::string const& parameter_name) - : _curve(curve), - _parameter_name(parameter_name) + : Parameter<T>(name_), _curve(curve), _parameter_name(parameter_name) { } @@ -63,6 +63,7 @@ private: }; std::unique_ptr<ParameterBase> createCurveScaledParameter( + std::string const& name, BaseLib::ConfigTree const& config, std::map<std::string, std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const& diff --git a/ProcessLib/Parameter/GroupBasedParameter.cpp b/ProcessLib/Parameter/GroupBasedParameter.cpp index 5be4cb0da5f..93ecc84c73f 100644 --- a/ProcessLib/Parameter/GroupBasedParameter.cpp +++ b/ProcessLib/Parameter/GroupBasedParameter.cpp @@ -16,7 +16,8 @@ namespace ProcessLib { std::unique_ptr<ParameterBase> createGroupBasedParameter( - BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh) + std::string const& name, BaseLib::ConfigTree const& config, + MeshLib::Mesh const& mesh) { //! \ogs_file_param{parameter__type} config.checkConfigParameter("type", "Group"); @@ -79,17 +80,21 @@ std::unique_ptr<ParameterBase> createGroupBasedParameter( } // create a mapping table - const int max_index = *std::max_element(group_id_property->begin(), group_id_property->end()); + const int max_index = + *std::max_element(group_id_property->begin(), group_id_property->end()); std::vector<Values> vec_values(max_index + 1); for (auto p : vec_index_values) vec_values[p.first] = p.second; if (group_id_property->getMeshItemType() == MeshLib::MeshItemType::Node) return std::unique_ptr<ParameterBase>( - new GroupBasedParameter<double, MeshLib::MeshItemType::Node>(*group_id_property, vec_values)); - else if (group_id_property->getMeshItemType() == MeshLib::MeshItemType::Cell) + new GroupBasedParameter<double, MeshLib::MeshItemType::Node>( + name, *group_id_property, vec_values)); + else if (group_id_property->getMeshItemType() == + MeshLib::MeshItemType::Cell) return std::unique_ptr<ParameterBase>( - new GroupBasedParameter<double, MeshLib::MeshItemType::Cell>(*group_id_property, vec_values)); + new GroupBasedParameter<double, MeshLib::MeshItemType::Cell>( + name, *group_id_property, vec_values)); OGS_FATAL("Mesh item type of the specified property is not supported."); } diff --git a/ProcessLib/Parameter/GroupBasedParameter.h b/ProcessLib/Parameter/GroupBasedParameter.h index 70e0ae65a31..310e79df7d4 100644 --- a/ProcessLib/Parameter/GroupBasedParameter.h +++ b/ProcessLib/Parameter/GroupBasedParameter.h @@ -37,10 +37,12 @@ struct GroupBasedParameter final * @param property a property vector of index for mesh items * @param vec_values a vector of values for each index */ - GroupBasedParameter( - MeshLib::PropertyVector<int> const& property, - std::vector<std::vector<double>> const& vec_values) - : _property_index(property), _vec_values(vec_values) + GroupBasedParameter(std::string const& name_, + MeshLib::PropertyVector<int> const& property, + std::vector<std::vector<double>> const& vec_values) + : Parameter<T>(name_), + _property_index(property), + _vec_values(vec_values) { } @@ -82,9 +84,10 @@ private: std::vector<std::vector<T>> const _vec_values; }; - std::unique_ptr<ParameterBase> createGroupBasedParameter( - BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh); + std::string const& name, + BaseLib::ConfigTree const& config, + MeshLib::Mesh const& mesh); } // ProcessLib diff --git a/ProcessLib/Parameter/MeshElementParameter.cpp b/ProcessLib/Parameter/MeshElementParameter.cpp index d21ffdeb9df..3bf3a494eee 100644 --- a/ProcessLib/Parameter/MeshElementParameter.cpp +++ b/ProcessLib/Parameter/MeshElementParameter.cpp @@ -15,7 +15,8 @@ namespace ProcessLib { std::unique_ptr<ParameterBase> createMeshElementParameter( - BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh) + std::string const& name, BaseLib::ConfigTree const& config, + MeshLib::Mesh const& mesh) { //! \ogs_file_param{parameter__type} config.checkConfigParameter("type", "MeshElement"); @@ -42,7 +43,7 @@ std::unique_ptr<ParameterBase> createMeshElementParameter( } return std::unique_ptr<ParameterBase>( - new MeshElementParameter<double>(*property)); + new MeshElementParameter<double>(name, *property)); } } // ProcessLib diff --git a/ProcessLib/Parameter/MeshElementParameter.h b/ProcessLib/Parameter/MeshElementParameter.h index 9058ca0c3f3..3d73cfd0818 100644 --- a/ProcessLib/Parameter/MeshElementParameter.h +++ b/ProcessLib/Parameter/MeshElementParameter.h @@ -23,9 +23,11 @@ namespace ProcessLib /// A parameter represented by a mesh property vector. template <typename T> struct MeshElementParameter final : public Parameter<T> { - MeshElementParameter(MeshLib::PropertyVector<T> const& property) - : _property(property) - , _cache(_property.getNumberOfComponents()) + MeshElementParameter(std::string const& name_, + MeshLib::PropertyVector<T> const& property) + : Parameter<T>(name_), + _property(property), + _cache(_property.getNumberOfComponents()) { } @@ -54,7 +56,8 @@ private: }; std::unique_ptr<ParameterBase> createMeshElementParameter( - BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh); + std::string const& name, BaseLib::ConfigTree const& config, + MeshLib::Mesh const& mesh); } // ProcessLib diff --git a/ProcessLib/Parameter/MeshNodeParameter.cpp b/ProcessLib/Parameter/MeshNodeParameter.cpp index af986ad603c..3470d40cb1b 100644 --- a/ProcessLib/Parameter/MeshNodeParameter.cpp +++ b/ProcessLib/Parameter/MeshNodeParameter.cpp @@ -15,7 +15,8 @@ namespace ProcessLib { std::unique_ptr<ParameterBase> createMeshNodeParameter( - BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh) + std::string const& name, BaseLib::ConfigTree const& config, + MeshLib::Mesh const& mesh) { //! \ogs_file_param{parameter__type} config.checkConfigParameter("type", "MeshNode"); @@ -42,7 +43,7 @@ std::unique_ptr<ParameterBase> createMeshNodeParameter( } return std::unique_ptr<ParameterBase>( - new MeshNodeParameter<double>(*property)); + new MeshNodeParameter<double>(name, *property)); } } // ProcessLib diff --git a/ProcessLib/Parameter/MeshNodeParameter.h b/ProcessLib/Parameter/MeshNodeParameter.h index dd39a0ff7ff..587bfd462c0 100644 --- a/ProcessLib/Parameter/MeshNodeParameter.h +++ b/ProcessLib/Parameter/MeshNodeParameter.h @@ -23,9 +23,11 @@ namespace ProcessLib /// A parameter represented by a mesh property vector. template <typename T> struct MeshNodeParameter final : public Parameter<T> { - MeshNodeParameter(MeshLib::PropertyVector<T> const& property) - : _property(property) - , _cache(_property.getNumberOfComponents()) + MeshNodeParameter(std::string const& name_, + MeshLib::PropertyVector<T> const& property) + : Parameter<T>(name_), + _property(property), + _cache(_property.getNumberOfComponents()) { } @@ -54,7 +56,8 @@ private: }; std::unique_ptr<ParameterBase> createMeshNodeParameter( - BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh); + std::string const& name, BaseLib::ConfigTree const& config, + MeshLib::Mesh const& mesh); } // ProcessLib diff --git a/ProcessLib/Parameter/Parameter.cpp b/ProcessLib/Parameter/Parameter.cpp index 4a6f226a2e1..5078403cfd4 100644 --- a/ProcessLib/Parameter/Parameter.cpp +++ b/ProcessLib/Parameter/Parameter.cpp @@ -36,36 +36,31 @@ std::unique_ptr<ParameterBase> createParameter( if (type == "Constant") { INFO("ConstantParameter: %s", name.c_str()); - auto param = createConstantParameter(config); - param->name = name; + auto param = createConstantParameter(name, config); return param; } else if (type == "CurveScaled") { INFO("CurveScaledParameter: %s", name.c_str()); - auto param = createCurveScaledParameter(config, curves); - param->name = name; + auto param = createCurveScaledParameter(name, config, curves); return param; } else if (type == "Group") { INFO("GroupBasedParameter: %s", name.c_str()); - auto param = createGroupBasedParameter(config, *meshes.front()); - param->name = name; + auto param = createGroupBasedParameter(name, config, *meshes.front()); return param; } else if (type == "MeshElement") { INFO("MeshElementParameter: %s", name.c_str()); - auto param = createMeshElementParameter(config, *meshes.front()); - param->name = name; + auto param = createMeshElementParameter(name, config, *meshes.front()); return param; } else if (type == "MeshNode") { INFO("MeshElementParameter: %s", name.c_str()); - auto param = createMeshNodeParameter(config, *meshes.front()); - param->name = name; + auto param = createMeshNodeParameter(name, config, *meshes.front()); return param; } else diff --git a/ProcessLib/Parameter/Parameter.h b/ProcessLib/Parameter/Parameter.h index ac4208ff81a..53c3ac7289d 100644 --- a/ProcessLib/Parameter/Parameter.h +++ b/ProcessLib/Parameter/Parameter.h @@ -37,6 +37,8 @@ namespace ProcessLib /// Its property name helps addressing the right parameter. struct ParameterBase { + ParameterBase(std::string const& name_) : name(name_) {} + virtual ~ParameterBase() = default; virtual bool isTimeDependent() const = 0; @@ -49,7 +51,7 @@ struct ParameterBase { } - std::string name; + std::string const name; }; /*! A Parameter is a function \f$ (t, x) \mapsto f(t, x) \in T^n \f$. @@ -61,6 +63,8 @@ struct ParameterBase template <typename T> struct Parameter : public ParameterBase { + Parameter(std::string const& name_) : ParameterBase(name_) {} + virtual ~Parameter() = default; //! Returns the number of components this Parameter has at every position and -- GitLab