Skip to content
Snippets Groups Projects
Unverified Commit 5fc667ab authored by Dmitri Naumov's avatar Dmitri Naumov Committed by GitHub
Browse files

Merge pull request #2429 from endJunction/ResolveCircularDependencyBheBC

[PL] Resolve circular dep. HTBHE<->BC.
parents b8976eea ee761141
No related branches found
No related tags found
No related merge requests found
/** /**
* \file
* \copyright * \copyright
* Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org) * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License. * Distributed under a Modified BSD License.
...@@ -10,7 +11,7 @@ ...@@ -10,7 +11,7 @@
#include "BHEBottomDirichletBoundaryCondition.h" #include "BHEBottomDirichletBoundaryCondition.h"
#include "BaseLib/Error.h" #include "BaseLib/Error.h"
namespace ProcessLib namespace ProcessLib::HeatTransportBHE
{ {
void BHEBottomDirichletBoundaryCondition::getEssentialBCValues( void BHEBottomDirichletBoundaryCondition::getEssentialBCValues(
const double /*t*/, GlobalVector const& x, const double /*t*/, GlobalVector const& x,
...@@ -54,4 +55,4 @@ createBHEBottomDirichletBoundaryCondition( ...@@ -54,4 +55,4 @@ createBHEBottomDirichletBoundaryCondition(
return std::make_unique<BHEBottomDirichletBoundaryCondition>( return std::make_unique<BHEBottomDirichletBoundaryCondition>(
std::move(in_out_global_indices)); std::move(in_out_global_indices));
} }
} // namespace ProcessLib } // namespace ProcessLib::HeatTransportBHE
/** /**
* \file
* \copyright * \copyright
* Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org) * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License. * Distributed under a Modified BSD License.
...@@ -9,10 +10,10 @@ ...@@ -9,10 +10,10 @@
#pragma once #pragma once
#include "BoundaryCondition.h"
#include "NumLib/IndexValueVector.h" #include "NumLib/IndexValueVector.h"
#include "ProcessLib/BoundaryCondition/BoundaryCondition.h"
namespace ProcessLib namespace ProcessLib::HeatTransportBHE
{ {
class BHEBottomDirichletBoundaryCondition final : public BoundaryCondition class BHEBottomDirichletBoundaryCondition final : public BoundaryCondition
{ {
...@@ -34,4 +35,4 @@ private: ...@@ -34,4 +35,4 @@ private:
std::unique_ptr<BHEBottomDirichletBoundaryCondition> std::unique_ptr<BHEBottomDirichletBoundaryCondition>
createBHEBottomDirichletBoundaryCondition( createBHEBottomDirichletBoundaryCondition(
std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices); std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices);
} // namespace ProcessLib } // namespace ProcessLib::HeatTransportBHE
/** /**
* \file
* \copyright * \copyright
* Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org) * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License. * Distributed under a Modified BSD License.
...@@ -9,20 +10,20 @@ ...@@ -9,20 +10,20 @@
#pragma once #pragma once
#include "BoundaryCondition.h"
#include "NumLib/IndexValueVector.h" #include "NumLib/IndexValueVector.h"
#include "ProcessLib/HeatTransportBHE/BHE/BHETypes.h" #include "ProcessLib/BoundaryCondition/BoundaryCondition.h"
namespace ProcessLib namespace ProcessLib::HeatTransportBHE
{ {
template <typename BHEType> template <typename BHEUpdateCallback>
class BHEInflowDirichletBoundaryCondition final : public BoundaryCondition class BHEInflowDirichletBoundaryCondition final : public BoundaryCondition
{ {
public: public:
BHEInflowDirichletBoundaryCondition( BHEInflowDirichletBoundaryCondition(
std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices, std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices,
BHEType& bhe) BHEUpdateCallback bhe_update_callback)
: _in_out_global_indices(std::move(in_out_global_indices)), _bhe(bhe) : _in_out_global_indices(std::move(in_out_global_indices)),
_bhe_update_callback(bhe_update_callback)
{ {
} }
...@@ -36,19 +37,19 @@ public: ...@@ -36,19 +37,19 @@ public:
bc_values.ids[0] = _in_out_global_indices.first; bc_values.ids[0] = _in_out_global_indices.first;
// here call the corresponding BHE functions // here call the corresponding BHE functions
auto const T_out = x[_in_out_global_indices.second]; auto const T_out = x[_in_out_global_indices.second];
bc_values.values[0] = _bhe.updateFlowRateAndTemperature(T_out, t); bc_values.values[0] = _bhe_update_callback(T_out, t);
} }
private: private:
std::pair<GlobalIndexType, GlobalIndexType> const _in_out_global_indices; std::pair<GlobalIndexType, GlobalIndexType> const _in_out_global_indices;
BHEType& _bhe; BHEUpdateCallback _bhe_update_callback;
}; };
template <typename BHEType> template <typename BHEUpdateCallback>
std::unique_ptr<BHEInflowDirichletBoundaryCondition<BHEType>> std::unique_ptr<BHEInflowDirichletBoundaryCondition<BHEUpdateCallback>>
createBHEInflowDirichletBoundaryCondition( createBHEInflowDirichletBoundaryCondition(
std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices, std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices,
BHEType& bhe) BHEUpdateCallback bhe_update_callback)
{ {
DBUG("Constructing BHEInflowDirichletBoundaryCondition."); DBUG("Constructing BHEInflowDirichletBoundaryCondition.");
...@@ -71,7 +72,8 @@ createBHEInflowDirichletBoundaryCondition( ...@@ -71,7 +72,8 @@ createBHEInflowDirichletBoundaryCondition(
} }
#endif // USE_PETSC #endif // USE_PETSC
return std::make_unique<BHEInflowDirichletBoundaryCondition<BHEType>>( return std::make_unique<
std::move(in_out_global_indices), bhe); BHEInflowDirichletBoundaryCondition<BHEUpdateCallback>>(
std::move(in_out_global_indices), bhe_update_callback);
} }
} // namespace ProcessLib } // namespace ProcessLib::HeatTransportBHE
APPEND_SOURCE_FILES(SOURCES) APPEND_SOURCE_FILES(SOURCES)
APPEND_SOURCE_FILES(SOURCES BHE) APPEND_SOURCE_FILES(SOURCES BHE)
APPEND_SOURCE_FILES(SOURCES BoundaryConditions)
APPEND_SOURCE_FILES(SOURCES LocalAssemblers) APPEND_SOURCE_FILES(SOURCES LocalAssemblers)
add_library(HeatTransportBHE ${SOURCES}) add_library(HeatTransportBHE ${SOURCES})
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
#include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerBHE.h" #include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerBHE.h"
#include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil.h" #include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil.h"
#include "ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.h" #include "BoundaryConditions/BHEBottomDirichletBoundaryCondition.h"
#include "ProcessLib/BoundaryCondition/BHEInflowDirichletBoundaryCondition.h" #include "BoundaryConditions/BHEInflowDirichletBoundaryCondition.h"
namespace ProcessLib namespace ProcessLib
{ {
...@@ -241,14 +241,16 @@ void HeatTransportBHEProcess::createBHEBoundaryConditionTopBottom( ...@@ -241,14 +241,16 @@ void HeatTransportBHEProcess::createBHEBoundaryConditionTopBottom(
{ {
// Top, inflow. // Top, inflow.
bcs.addBoundaryCondition( bcs.addBoundaryCondition(
ProcessLib::createBHEInflowDirichletBoundaryCondition( createBHEInflowDirichletBoundaryCondition(
get_global_bhe_bc_indices(bc_top_node_id, get_global_bhe_bc_indices(bc_top_node_id,
in_out_component_id), in_out_component_id),
bhe)); [&bhe](double const T, double const t) {
return bhe.updateFlowRateAndTemperature(T, t);
}));
// Bottom, outflow. // Bottom, outflow.
bcs.addBoundaryCondition( bcs.addBoundaryCondition(
ProcessLib::createBHEBottomDirichletBoundaryCondition( createBHEBottomDirichletBoundaryCondition(
get_global_bhe_bc_indices(bc_bottom_node_id, get_global_bhe_bc_indices(bc_bottom_node_id,
in_out_component_id))); in_out_component_id)));
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment