From 4638e9a343514257aa41b9d7c2394456843be1cf Mon Sep 17 00:00:00 2001 From: Sebastian Schunert Date: Fri, 3 Jan 2020 14:00:25 -0700 Subject: [PATCH] Allow ConstantVectorPostprocessor to manage more than one vector (#14569) --- .../ConstantVectorPostprocessor.h | 3 +- .../ConstantVectorPostprocessor.C | 37 ++++++++++++++++--- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/framework/include/vectorpostprocessors/ConstantVectorPostprocessor.h b/framework/include/vectorpostprocessors/ConstantVectorPostprocessor.h index 925b116592fe..77f319554cdb 100644 --- a/framework/include/vectorpostprocessors/ConstantVectorPostprocessor.h +++ b/framework/include/vectorpostprocessors/ConstantVectorPostprocessor.h @@ -28,6 +28,5 @@ class ConstantVectorPostprocessor : public GeneralVectorPostprocessor virtual void execute() override; protected: - VectorPostprocessorValue & _value; + std::vector _value; }; - diff --git a/framework/src/vectorpostprocessors/ConstantVectorPostprocessor.C b/framework/src/vectorpostprocessors/ConstantVectorPostprocessor.C index a7769772f62e..4573b9d04f6e 100644 --- a/framework/src/vectorpostprocessors/ConstantVectorPostprocessor.C +++ b/framework/src/vectorpostprocessors/ConstantVectorPostprocessor.C @@ -17,18 +17,45 @@ InputParameters ConstantVectorPostprocessor::validParams() { InputParameters params = GeneralVectorPostprocessor::validParams(); - - params.addRequiredParam("value", - "The vector value this object will have."); + params.addParam>("vector_names", + "Names of the column vectors in this object"); + params.addRequiredParam>>( + "value", + "Vector values this object will have. Leading dimension must be equal to leading dimension " + "of vector_names parameter."); return params; } ConstantVectorPostprocessor::ConstantVectorPostprocessor(const InputParameters & parameters) - : GeneralVectorPostprocessor(parameters), _value(declareVector("value")) + : GeneralVectorPostprocessor(parameters) { + std::vector names; + if (isParamValid("vector_names")) + names = getParam>("vector_names"); + else + names = {"value"}; + unsigned int nvec = names.size(); + + _value.resize(nvec); + for (unsigned int j = 0; j < nvec; ++j) + _value[j] = &declareVector(names[j]); + + std::vector> v = getParam>>("value"); + if (v.size() != nvec) + paramError("value", + "Leading dimension must be equal to leading dimension of vector_names parameter."); + if (processor_id() == 0) - _value = getParam("value"); + { + for (unsigned int j = 0; j < nvec; ++j) + { + unsigned int ne = v[j].size(); + _value[j]->resize(ne); + for (unsigned int l = 0; l < ne; ++l) + (*_value[j])[l] = v[j][l]; + } + } } void