From adcc26587a5de45727071aae3362b257e6848a51 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Thu, 30 Aug 2018 14:35:28 +0200 Subject: [PATCH] [PL] Move balance calculation to class Balance. --- ProcessLib/CalculateSurfaceFlux/Balance.h | 22 ++++++++++++++++++++++ ProcessLib/HT/HTProcess.cpp | 19 +------------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/ProcessLib/CalculateSurfaceFlux/Balance.h b/ProcessLib/CalculateSurfaceFlux/Balance.h index 5d2af71b77f..a91a88cb8c0 100644 --- a/ProcessLib/CalculateSurfaceFlux/Balance.h +++ b/ProcessLib/CalculateSurfaceFlux/Balance.h @@ -18,6 +18,8 @@ // TODO used for output, if output classes are ready this has to be changed #include "MeshLib/IO/writeMeshToFile.h" +#include "ProcessLib/CalculateSurfaceFlux/CalculateSurfaceFlux.h" + namespace ProcessLib { struct Balance @@ -44,6 +46,26 @@ struct Balance output_mesh_file_name.c_str()); } + void integrate(GlobalVector const& x, double const t, Process const& p, + int const process_id, int const integration_order, + MeshLib::Mesh const& bulk_mesh) + { + auto* const balance_pv = MeshLib::getOrCreateMeshProperty<double>( + surface_mesh, property_vector_name, MeshLib::MeshItemType::Cell, 1); + // initialise the PropertyVector pv with zero values + std::fill(balance_pv->begin(), balance_pv->end(), 0.0); + auto balance = ProcessLib::CalculateSurfaceFlux( + surface_mesh, + p.getProcessVariables(process_id)[0].get().getNumberOfComponents(), + integration_order); + + balance.integrate( + x, *balance_pv, t, bulk_mesh, + [&p](std::size_t const element_id, MathLib::Point3d const& pnt, + double const t, GlobalVector const& x) { + return p.getFlux(element_id, pnt, t, x); + }); + } void save(double const t) const { // TODO (TomFischer) output, if output classes are ready this has to be diff --git a/ProcessLib/HT/HTProcess.cpp b/ProcessLib/HT/HTProcess.cpp index 56139edd81f..81356042ca3 100644 --- a/ProcessLib/HT/HTProcess.cpp +++ b/ProcessLib/HT/HTProcess.cpp @@ -14,7 +14,6 @@ #include "NumLib/DOF/DOFTableUtil.h" #include "NumLib/DOF/LocalToGlobalIndexMap.h" -#include "ProcessLib/CalculateSurfaceFlux/CalculateSurfaceFlux.h" #include "ProcessLib/Utils/CreateLocalAssemblers.h" #include "HTMaterialProperties.h" @@ -272,23 +271,7 @@ void HTProcess::postTimestepConcreteProcess(GlobalVector const& x, { return; } - auto* const balance_pv = MeshLib::getOrCreateMeshProperty<double>( - _balance->surface_mesh, _balance->property_vector_name, - MeshLib::MeshItemType::Cell, 1); - // initialise the PropertyVector pv with zero values - std::fill(balance_pv->begin(), balance_pv->end(), 0.0); - auto balance = ProcessLib::CalculateSurfaceFlux( - _balance->surface_mesh, - getProcessVariables(process_id)[0].get().getNumberOfComponents(), - _integration_order); - - balance.integrate( - x, *balance_pv, t, _mesh, - [this](std::size_t const element_id, MathLib::Point3d const& pnt, - double const t, GlobalVector const& x) { - return getFlux(element_id, pnt, t, x); - }); - // post: surface_mesh has scalar element property + _balance->integrate(x, t, *this, process_id, _integration_order, _mesh); _balance->save(t); } -- GitLab