From 06bc12c918237da06d496642107517a3dfaf3609 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Wed, 24 Jan 2018 15:04:37 +0100 Subject: [PATCH] [PL] Init. impl. of class SourceTermCollection. --- .../SourceTerms/SourceTermCollection.cpp | 39 +++++++++++++++++++ ProcessLib/SourceTerms/SourceTermCollection.h | 39 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 ProcessLib/SourceTerms/SourceTermCollection.cpp create mode 100644 ProcessLib/SourceTerms/SourceTermCollection.h diff --git a/ProcessLib/SourceTerms/SourceTermCollection.cpp b/ProcessLib/SourceTerms/SourceTermCollection.cpp new file mode 100644 index 00000000000..f0dc7ba5f97 --- /dev/null +++ b/ProcessLib/SourceTerms/SourceTermCollection.cpp @@ -0,0 +1,39 @@ +/** + * \copyright + * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#include "SourceTermCollection.h" + +namespace ProcessLib +{ +void SourceTermCollection::addSourceTermsForProcessVariables( + std::vector<std::reference_wrapper<ProcessVariable>> const& + process_variables, + NumLib::LocalToGlobalIndexMap const& dof_table, + unsigned const integration_order) +{ + for (int variable_id = 0; + variable_id < static_cast<int>(process_variables.size()); + ++variable_id) + { + ProcessVariable& pv = process_variables[variable_id]; + auto sts = pv.createSourceTerms(dof_table, variable_id, + integration_order, _parameters); + + std::move(sts.begin(), sts.end(), std::back_inserter(_source_terms)); + } +} + +void SourceTermCollection::integrateNodalSourceTerms(const double t, + GlobalVector& b) const +{ + for (auto const& st : _source_terms) + st->integrateNodalSourceTerm(t, b); +} + +} diff --git a/ProcessLib/SourceTerms/SourceTermCollection.h b/ProcessLib/SourceTerms/SourceTermCollection.h new file mode 100644 index 00000000000..bfa7f5a3478 --- /dev/null +++ b/ProcessLib/SourceTerms/SourceTermCollection.h @@ -0,0 +1,39 @@ +/** + * \copyright + * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#pragma once + +#include "ProcessLib/ProcessVariable.h" +#include "ProcessLib/SourceTerms/NodalSourceTerm.h" + +namespace ProcessLib +{ +class SourceTermCollection final +{ +public: + SourceTermCollection( + std::vector<std::unique_ptr<ParameterBase>> const& parameters) + : _parameters(parameters) + { + } + + void integrateNodalSourceTerms(const double t, GlobalVector& b) const; + + void addSourceTermsForProcessVariables( + std::vector<std::reference_wrapper<ProcessVariable>> const& + process_variables, + NumLib::LocalToGlobalIndexMap const& dof_table, + unsigned const integration_order); + +private: + std::vector<std::unique_ptr<NodalSourceTerm>> _source_terms; + std::vector<std::unique_ptr<ParameterBase>> const& _parameters; +}; + +} // ProcessLib -- GitLab