From d68db85fa6549bed12cf5ccb3cabf1b9d28be856 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Mon, 6 Jan 2020 15:03:51 +0100 Subject: [PATCH] [PL/LF] Create surface flux data in LiquidFlow. - Forward the output folder and mesh vector from ProjectData to CreateLiquidFlow. - Create an optional SurfaceFluxData object. --- Applications/ApplicationsLib/ProjectData.cpp | 2 +- .../LiquidFlow/CreateLiquidFlowProcess.cpp | 16 ++++++++++++++-- ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h | 4 +++- ProcessLib/LiquidFlow/LiquidFlowProcess.cpp | 8 ++++++-- ProcessLib/LiquidFlow/LiquidFlowProcess.h | 6 +++++- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp index 054015bfee0..e9d3bc5bc60 100644 --- a/Applications/ApplicationsLib/ProjectData.cpp +++ b/Applications/ApplicationsLib/ProjectData.cpp @@ -519,7 +519,7 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config, process = ProcessLib::LiquidFlow::createLiquidFlowProcess( name, *_mesh_vec[0], std::move(jacobian_assembler), _process_variables, _parameters, integration_order, - process_config); + process_config, _mesh_vec, output_directory); } else #endif diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp index e35096b9164..4ae75493d11 100644 --- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp +++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp @@ -31,7 +31,9 @@ std::unique_ptr<Process> createLiquidFlowProcess( std::vector<ProcessVariable> const& variables, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, unsigned const integration_order, - BaseLib::ConfigTree const& config) + BaseLib::ConfigTree const& config, + std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes, + std::string const& output_directory) { //! \ogs_file_param{prj__processes__process__type} config.checkConfigParameter("type", "LIQUID_FLOW"); @@ -99,11 +101,21 @@ std::unique_ptr<Process> createLiquidFlowProcess( INFO("The liquid flow is in homogeneous porous media."); } + std::unique_ptr<ProcessLib::SurfaceFluxData> surfaceflux; + auto calculatesurfaceflux_config = + //! \ogs_file_param{prj__processes__process__calculatesurfaceflux} + config.getConfigSubtreeOptional("calculatesurfaceflux"); + if (calculatesurfaceflux_config) + { + surfaceflux = ProcessLib::SurfaceFluxData::createSurfaceFluxData( + *calculatesurfaceflux_config, meshes, output_directory); + } + return std::make_unique<LiquidFlowProcess>( std::move(name), mesh, std::move(jacobian_assembler), parameters, integration_order, std::move(process_variables), std::move(secondary_variables), material_ids, gravity_axis_id, g, - reference_temperature, mat_config); + reference_temperature, mat_config, std::move(surfaceflux)); } } // namespace LiquidFlow diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h index 18adc164b64..db1ff098a5d 100644 --- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h +++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h @@ -26,6 +26,8 @@ std::unique_ptr<Process> createLiquidFlowProcess( std::vector<ProcessVariable> const& variables, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, unsigned const integration_order, - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes, + std::string const& output_directory); } // namespace LiquidFlow } // namespace ProcessLib diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp index bc76bfd561e..2f83c129e76 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp @@ -18,6 +18,8 @@ #include "LiquidFlowLocalAssembler.h" #include "LiquidFlowMaterialProperties.h" #include "MeshLib/PropertyVector.h" +// TODO(TF) used for output of flux, if output classes are ready this has to be changed +#include "MeshLib/IO/writeMeshToFile.h" #include "ProcessLib/Utils/CreateLocalAssemblers.h" namespace ProcessLib @@ -37,7 +39,8 @@ LiquidFlowProcess::LiquidFlowProcess( int const gravitational_axis_id, double const gravitational_acceleration, double const reference_temperature, - BaseLib::ConfigTree const& config) + BaseLib::ConfigTree const& config, + std::unique_ptr<ProcessLib::SurfaceFluxData>&& surfaceflux) : Process(std::move(name), mesh, std::move(jacobian_assembler), parameters, integration_order, std::move(process_variables), std::move(secondary_variables)), @@ -45,7 +48,8 @@ LiquidFlowProcess::LiquidFlowProcess( _gravitational_acceleration(gravitational_acceleration), _reference_temperature(reference_temperature), _material_properties( - createLiquidFlowMaterialProperties(config, parameters, material_ids)) + createLiquidFlowMaterialProperties(config, parameters, material_ids)), + _surfaceflux(std::move(surfaceflux)) { DBUG("Create Liquid flow process."); } diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.h b/ProcessLib/LiquidFlow/LiquidFlowProcess.h index 719791cc43c..5501699f56c 100644 --- a/ProcessLib/LiquidFlow/LiquidFlowProcess.h +++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.h @@ -19,6 +19,7 @@ #include "MaterialLib/Fluid/FluidProperties/FluidProperties.h" #include "NumLib/DOF/LocalToGlobalIndexMap.h" #include "ProcessLib/Process.h" +#include "ProcessLib/SurfaceFlux/SurfaceFluxData.h" namespace MeshLib { @@ -69,7 +70,8 @@ public: int const gravitational_axis_id, double const gravitational_acceleration, double const reference_temperature, - BaseLib::ConfigTree const& config); + BaseLib::ConfigTree const& config, + std::unique_ptr<ProcessLib::SurfaceFluxData>&& surfaceflux); void computeSecondaryVariableConcrete(double const t, GlobalVector const& x, @@ -105,6 +107,8 @@ private: std::vector<std::unique_ptr<LiquidFlowLocalAssemblerInterface>> _local_assemblers; + + std::unique_ptr<ProcessLib::SurfaceFluxData> _surfaceflux; }; } // namespace LiquidFlow -- GitLab