OGS
ProcessLib::HeatTransportBHE::HeatTransportBHEProcess Class Referencefinal

Detailed Description

Definition at line 25 of file HeatTransportBHEProcess.h.

#include <HeatTransportBHEProcess.h>

Inheritance diagram for ProcessLib::HeatTransportBHE::HeatTransportBHEProcess:
[legend]
Collaboration diagram for ProcessLib::HeatTransportBHE::HeatTransportBHEProcess:
[legend]

Public Member Functions

 HeatTransportBHEProcess (std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, unsigned const integration_order, std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > &&process_variables, HeatTransportBHEProcessData &&process_data, SecondaryVariableCollection &&secondary_variables, BHEMeshData &&bhe_mesh_data)
 
void computeSecondaryVariableConcrete (double const t, double const dt, std::vector< GlobalVector * > const &x, GlobalVector const &x_prev, int const process_id) override
 
ODESystem interface
bool isLinear () const override
 
bool requiresNormalization () const override
 
- Public Member Functions inherited from ProcessLib::Process
 Process (std::string name_, MeshLib::Mesh &mesh, std::unique_ptr< AbstractJacobianAssembler > &&jacobian_assembler, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, unsigned const integration_order, std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > &&process_variables, SecondaryVariableCollection &&secondary_variables, const bool use_monolithic_scheme=true)
 
void preTimestep (std::vector< GlobalVector * > const &x, const double t, const double delta_t, const int process_id)
 Preprocessing before starting assembly for new timestep.
 
void postTimestep (std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, const double t, const double delta_t, int const process_id)
 Postprocessing after a complete timestep.
 
void postNonLinearSolver (std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, const double t, double const dt, int const process_id)
 
void preIteration (const unsigned iter, GlobalVector const &x) final
 
void computeSecondaryVariable (double const t, double const dt, std::vector< GlobalVector * > const &x, GlobalVector const &x_prev, int const process_id)
 compute secondary variables for the coupled equations or for output.
 
NumLib::IterationResult postIteration (GlobalVector const &x) final
 
void initialize (std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 
void setInitialConditions (std::vector< GlobalVector * > &process_solutions, std::vector< GlobalVector * > const &process_solutions_prev, double const t, int const process_id)
 
MathLib::MatrixSpecifications getMatrixSpecifications (const int process_id) const override
 
void updateDeactivatedSubdomains (double const time, const int process_id)
 
virtual bool isMonolithicSchemeUsed () const
 
virtual void extrapolateIntegrationPointValuesToNodes (const double, std::vector< GlobalVector * > const &, std::vector< GlobalVector * > &)
 
void preAssemble (const double t, double const dt, GlobalVector const &x) final
 
void assemble (const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b) final
 
void assembleWithJacobian (const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalVector &b, GlobalMatrix &Jac) final
 
void preOutput (const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id)
 
std::vector< NumLib::IndexValueVector< GlobalIndexType > > const * getKnownSolutions (double const t, GlobalVector const &x, int const process_id) const final
 
virtual NumLib::LocalToGlobalIndexMap const & getDOFTable (const int) const
 
MeshLib::MeshgetMesh () const
 
std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > const & getProcessVariables () const
 
std::vector< std::reference_wrapper< ProcessVariable > > const & getProcessVariables (const int process_id) const
 
std::vector< std::size_t > const & getActiveElementIDs () const
 
SecondaryVariableCollection const & getSecondaryVariables () const
 
std::vector< std::unique_ptr< MeshLib::IntegrationPointWriter > > const & getIntegrationPointWriters () const
 
virtual Eigen::Vector3d getFlux (std::size_t, MathLib::Point3d const &, double const, std::vector< GlobalVector * > const &) const
 
virtual void solveReactionEquation (std::vector< GlobalVector * > &, std::vector< GlobalVector * > const &, double const, double const, NumLib::EquationSystem &, int const)
 
bool requiresNormalization () const override
 
- Public Member Functions inherited from ProcessLib::SubmeshAssemblySupport
virtual std::vector< std::vector< std::string > > initializeAssemblyOnSubmeshes (std::vector< std::reference_wrapper< MeshLib::Mesh > > const &meshes)
 
virtual ~SubmeshAssemblySupport ()=default
 

Private Member Functions

void constructDofTable () override
 
void initializeConcreteProcess (NumLib::LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh, unsigned const integration_order) override
 Process specific initialization called by initialize().
 
void assembleConcreteProcess (const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b) override
 
void assembleWithJacobianConcreteProcess (const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalVector &b, GlobalMatrix &Jac) override
 
void createBHEBoundaryConditionTopBottom (std::vector< std::vector< MeshLib::Node * > > const &all_bhe_nodes)
 
void preTimestepConcreteProcess (std::vector< GlobalVector * > const &x, const double t, const double dt, int const process_id) override
 
void postTimestepConcreteProcess (std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, const double t, const double dt, int const process_id) override
 
void algebraicBcConcreteProcess (const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &xdot, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b)
 
NumLib::IterationResult postIterationConcreteProcess (GlobalVector const &x) override
 

Private Attributes

HeatTransportBHEProcessData _process_data
 
std::vector< std::unique_ptr< HeatTransportBHELocalAssemblerInterface > > _local_assemblers
 
std::vector< std::unique_ptr< MeshLib::MeshSubset const > > _mesh_subset_BHE_nodes
 
std::vector< std::unique_ptr< MeshLib::MeshSubset const > > _mesh_subset_BHE_soil_nodes
 
std::vector< std::tuple< std::size_t, GlobalIndexType, GlobalIndexType > > _vec_top_BHE_node_indices
 
std::vector< std::tuple< std::size_t, GlobalIndexType, GlobalIndexType > > _vec_bottom_BHE_node_indices
 
std::unique_ptr< MeshLib::MeshSubset const > _mesh_subset_soil_nodes
 
const BHEMeshData _bheMeshData
 
AssembledMatrixCache _asm_mat_cache
 
std::vector< std::size_t > _bhes_element_ids
 
std::vector< std::size_t > _soil_element_ids
 

Additional Inherited Members

- Public Attributes inherited from ProcessLib::Process
std::string const name
 
- Static Public Attributes inherited from ProcessLib::Process
static PROCESSLIB_EXPORT const std::string constant_one_parameter_name = "constant_one"
 
- Protected Member Functions inherited from ProcessLib::Process
std::vector< NumLib::LocalToGlobalIndexMap const * > getDOFTables (int const number_of_processes) const
 
NumLib::ExtrapolatorgetExtrapolator () const
 
NumLib::LocalToGlobalIndexMap const & getSingleComponentDOFTable () const
 
void initializeProcessBoundaryConditionsAndSourceTerms (const NumLib::LocalToGlobalIndexMap &dof_table, const int process_id, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 
void constructMonolithicProcessDofTable ()
 
void constructDofTableOfSpecifiedProcessStaggeredScheme (const int specified_process_id)
 
virtual std::tuple< NumLib::LocalToGlobalIndexMap *, bool > getDOFTableForExtrapolatorData () const
 
std::vector< GlobalIndexTypegetIndicesOfResiduumWithoutInitialCompensation () const override
 
- Protected Attributes inherited from ProcessLib::Process
MeshLib::Mesh_mesh
 
std::unique_ptr< MeshLib::MeshSubset const > _mesh_subset_all_nodes
 
std::unique_ptr< NumLib::LocalToGlobalIndexMap_local_to_global_index_map
 
SecondaryVariableCollection _secondary_variables
 
CellAverageData cell_average_data_
 
std::unique_ptr< ProcessLib::AbstractJacobianAssembler_jacobian_assembler
 
VectorMatrixAssembler _global_assembler
 
const bool _use_monolithic_scheme
 
unsigned const _integration_order
 
std::vector< std::unique_ptr< MeshLib::IntegrationPointWriter > > _integration_point_writer
 
GlobalSparsityPattern _sparsity_pattern
 
std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > _process_variables
 
std::vector< BoundaryConditionCollection_boundary_conditions
 

Constructor & Destructor Documentation

◆ HeatTransportBHEProcess()

ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::HeatTransportBHEProcess ( std::string name,
MeshLib::Mesh & mesh,
std::unique_ptr< ProcessLib::AbstractJacobianAssembler > && jacobian_assembler,
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & parameters,
unsigned const integration_order,
std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > && process_variables,
HeatTransportBHEProcessData && process_data,
SecondaryVariableCollection && secondary_variables,
BHEMeshData && bhe_mesh_data )

Definition at line 29 of file HeatTransportBHEProcess.cpp.

40 : Process(std::move(name), mesh, std::move(jacobian_assembler), parameters,
41 integration_order, std::move(process_variables),
42 std::move(secondary_variables)),
43 _process_data(std::move(process_data)),
44 _bheMeshData(std::move(bhe_mesh_data)),
45 _asm_mat_cache{_process_data._is_linear, true /*use_monolithic_scheme*/}
46{
47 if (_bheMeshData.BHE_mat_IDs.size() !=
49 {
51 "The number of the given BHE properties ({:d}) are not consistent "
52 "with the number of BHE groups in the mesh ({:d}).",
55 }
56
57 auto material_ids = MeshLib::materialIDs(mesh);
58 if (material_ids == nullptr)
59 {
60 OGS_FATAL("Not able to get material IDs! ");
61 }
62
64
65 // create a map from a material ID to a BHE ID
66 for (int i = 0; i < static_cast<int>(_bheMeshData.BHE_mat_IDs.size()); i++)
67 {
68 // fill in the map structure
70 i;
71 }
72}
#define OGS_FATAL(...)
Definition Error.h:26
std::string const name
Definition Process.h:362
Process(std::string name_, MeshLib::Mesh &mesh, std::unique_ptr< AbstractJacobianAssembler > &&jacobian_assembler, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, unsigned const integration_order, std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > &&process_variables, SecondaryVariableCollection &&secondary_variables, const bool use_monolithic_scheme=true)
Definition Process.cpp:44
PropertyVector< int > const * materialIDs(Mesh const &mesh)
Definition Mesh.cpp:268

References _bheMeshData, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_map_materialID_to_BHE_ID, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_mesh_prop_materialIDs, _process_data, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_vec_BHE_property, ProcessLib::HeatTransportBHE::BHEMeshData::BHE_mat_IDs, MeshLib::materialIDs(), and OGS_FATAL.

Member Function Documentation

◆ algebraicBcConcreteProcess()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::algebraicBcConcreteProcess ( const double t,
double const dt,
std::vector< GlobalVector * > const & x,
std::vector< GlobalVector * > const & xdot,
int const process_id,
GlobalMatrix & M,
GlobalMatrix & K,
GlobalVector & b )
private

Definition at line 433 of file HeatTransportBHEProcess.cpp.

439{
440#ifndef USE_PETSC
441 auto M_normal = M.getRawMatrix();
442 auto K_normal = K.getRawMatrix();
443 auto n_original_rows = K_normal.rows();
444 auto const n_BHE_bottom_pairs = _vec_bottom_BHE_node_indices.size();
445 auto const n_BHE_top_pairs = _vec_top_BHE_node_indices.size();
446
447 // apply weighting factor based on the max value from column wise inner
448 // product and scale it with user defined value
450
451 M_normal.conservativeResize(
452 M_normal.rows() + n_BHE_bottom_pairs + n_BHE_top_pairs,
453 M_normal.cols());
454 K_normal.conservativeResize(
455 K_normal.rows() + n_BHE_bottom_pairs + n_BHE_top_pairs,
456 K_normal.cols());
457
458 for (std::size_t i = 0; i < n_BHE_bottom_pairs; i++)
459 {
460 Eigen::SparseVector<double> M_Plus(M_normal.cols());
461 M_Plus.setZero();
462 M_normal.row(n_original_rows + i) = M_Plus;
463
464 Eigen::SparseVector<double> K_Plus(K_normal.cols());
465 K_Plus.setZero();
466
467 auto const [bhe_idx, first_BHE_bottom_index, second_BHE_bottom_index] =
469
470 K_Plus.insert(first_BHE_bottom_index) = w_val;
471 K_Plus.insert(second_BHE_bottom_index) = -w_val;
472
473 K_normal.row(n_original_rows + i) = K_Plus;
474 }
475
476 auto b_normal = b.getRawVector();
477 Eigen::SparseVector<double> b_Plus(b_normal.rows() + n_BHE_bottom_pairs +
478 n_BHE_top_pairs);
479 b_Plus.setZero();
480
481 // Copy values from the original column vector to the modified one
482 for (int i = 0; i < b_normal.innerSize(); ++i)
483 {
484 b_Plus.insert(i) = b_normal.coeff(i);
485 }
486
487 for (std::size_t i = 0; i < n_BHE_top_pairs; i++)
488 {
489 Eigen::SparseVector<double> M_Plus(M_normal.cols());
490 M_Plus.setZero();
491 M_normal.row(n_original_rows + n_BHE_bottom_pairs + i) = M_Plus;
492
493 Eigen::SparseVector<double> K_Plus(K_normal.cols());
494 K_Plus.setZero();
495
496 auto const [bhe_idx, first_BHE_top_index, second_BHE_top_index] =
498
499 auto first_BHE_top_index_pair = first_BHE_top_index;
500 auto second_BHE_top_index_pair = second_BHE_top_index;
501
502 K_Plus.insert(first_BHE_top_index_pair) =
503 w_val; // for power BC, the inflow node must be positive
504 K_Plus.insert(second_BHE_top_index_pair) =
505 -w_val; // for power BC, the outflow node must be negative
506
507 K_normal.row(n_original_rows + n_BHE_bottom_pairs + i) = K_Plus;
508
509 // get the delta_T value here
510 double const T_out = (*x[0])[second_BHE_top_index_pair];
511
512 auto calculate_delta_T = [&](auto& bhe)
513 {
514 auto const T_in = bhe.updateFlowRateAndTemperature(T_out, t);
515 return T_in - T_out;
516 };
517 auto delta_T = std::visit(calculate_delta_T,
519
520 b_Plus.insert(n_original_rows + n_BHE_bottom_pairs + i) =
521 delta_T * w_val;
522 }
523
524 M.getRawMatrix() = M_normal;
525 K.getRawMatrix() = K_normal;
526 b.getRawVector() = b_Plus;
527#else
528 OGS_FATAL(
529 "The Algebraic Boundary Condition is not implemented for use with "
530 "PETsc Library! Simulation will be terminated.");
531#endif
532}
RawMatrixType & getRawMatrix()
RawVectorType & getRawVector()
return a raw Eigen vector object
std::vector< std::tuple< std::size_t, GlobalIndexType, GlobalIndexType > > _vec_bottom_BHE_node_indices
std::vector< std::tuple< std::size_t, GlobalIndexType, GlobalIndexType > > _vec_top_BHE_node_indices

References ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_algebraic_BC_Setting, _process_data, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_vec_BHE_property, _vec_bottom_BHE_node_indices, _vec_top_BHE_node_indices, ProcessLib::HeatTransportBHE::AlgebraicBCSetting::_weighting_factor, and OGS_FATAL.

Referenced by assembleConcreteProcess().

◆ assembleConcreteProcess()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::assembleConcreteProcess ( const double t,
double const dt,
std::vector< GlobalVector * > const & x,
std::vector< GlobalVector * > const & x_prev,
int const process_id,
GlobalMatrix & M,
GlobalMatrix & K,
GlobalVector & b )
overrideprivatevirtual

Implements ProcessLib::Process.

Definition at line 213 of file HeatTransportBHEProcess.cpp.

217{
218 DBUG("Assemble HeatTransportBHE process.");
219
220 std::vector<NumLib::LocalToGlobalIndexMap const*> dof_table = {
222
224 {
225 if (!getActiveElementIDs().empty())
226 {
227 OGS_FATAL(
228 "Domain Deactivation is currently not implemnted with "
229 "linear optimization.");
230 }
231
232 auto const& spec = getMatrixSpecifications(process_id);
233
234 // use matrix cache for soil elements
235 _asm_mat_cache.assemble(t, dt, x, x_prev, process_id, &M, &K, &b,
238
239 // reset the sparsity pattern for better performance in the BHE assembly
240 MathLib::setMatrixSparsity(M, *spec.sparsity_pattern);
241 MathLib::setMatrixSparsity(K, *spec.sparsity_pattern);
242
243 // Call global assembler for each local BHE assembly item.
246 _local_assemblers, _bhes_element_ids, dof_table, t, dt, x, x_prev,
247 process_id, &M, &K, &b);
248 }
249 else
250 {
251 // Call global assembler for each local assembly item.
254 _local_assemblers, getActiveElementIDs(), dof_table, t, dt, x,
255 x_prev, process_id, &M, &K, &b);
256 }
257
258 // Algebraic BC procedure.
260 {
261 algebraicBcConcreteProcess(t, dt, x, x_prev, process_id, M, K, b);
262 }
263
264 //_global_output(t, process_id, M, K, b);
265}
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:30
std::vector< std::unique_ptr< HeatTransportBHELocalAssemblerInterface > > _local_assemblers
void algebraicBcConcreteProcess(const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &xdot, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b)
std::vector< std::size_t > const & getActiveElementIDs() const
Definition Process.h:167
VectorMatrixAssembler _global_assembler
Definition Process.h:377
std::unique_ptr< NumLib::LocalToGlobalIndexMap > _local_to_global_index_map
Definition Process.h:368
MathLib::MatrixSpecifications getMatrixSpecifications(const int process_id) const override
Definition Process.cpp:210
void assemble(std::size_t const mesh_item_id, LocalAssemblerInterface &local_assembler, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, double const t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalMatrix *M, GlobalMatrix *K, GlobalVector *b)
void setMatrixSparsity(MATRIX &matrix, SPARSITY_PATTERN const &sparsity_pattern)
static void executeSelectedMemberDereferenced(Object &object, Method method, Container const &container, std::vector< std::size_t > const &active_container_ids, Args &&... args)
void assemble(const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalMatrix *const M, GlobalMatrix *const K, GlobalVector *const b, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, VectorMatrixAssembler &global_assembler, VectorOfLocalAssemblers const &local_assemblers, std::vector< std::size_t > const &active_element_ids)

References ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_algebraic_BC_Setting, _asm_mat_cache, _bhes_element_ids, ProcessLib::Process::_global_assembler, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_is_linear, _local_assemblers, ProcessLib::Process::_local_to_global_index_map, _process_data, _soil_element_ids, ProcessLib::HeatTransportBHE::AlgebraicBCSetting::_use_algebraic_bc, algebraicBcConcreteProcess(), ProcessLib::AssembledMatrixCache::assemble(), ProcessLib::VectorMatrixAssembler::assemble(), DBUG(), NumLib::SerialExecutor::executeSelectedMemberDereferenced(), ProcessLib::Process::getActiveElementIDs(), ProcessLib::Process::getMatrixSpecifications(), OGS_FATAL, and MathLib::setMatrixSparsity().

◆ assembleWithJacobianConcreteProcess()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::assembleWithJacobianConcreteProcess ( const double t,
double const dt,
std::vector< GlobalVector * > const & x,
std::vector< GlobalVector * > const & x_prev,
int const process_id,
GlobalVector & b,
GlobalMatrix & Jac )
overrideprivatevirtual

Implements ProcessLib::Process.

Definition at line 267 of file HeatTransportBHEProcess.cpp.

271{
272 DBUG("AssembleWithJacobian HeatTransportBHE process.");
273
274 std::vector<NumLib::LocalToGlobalIndexMap const*> dof_table = {
276
277 // Call global assembler for each local assembly item.
280 _local_assemblers, getActiveElementIDs(), dof_table, t, dt, x, x_prev,
281 process_id, &b, &Jac);
282}
void assembleWithJacobian(std::size_t const mesh_item_id, LocalAssemblerInterface &local_assembler, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalVector *b, GlobalMatrix *Jac)

References ProcessLib::Process::_global_assembler, _local_assemblers, ProcessLib::Process::_local_to_global_index_map, ProcessLib::VectorMatrixAssembler::assembleWithJacobian(), DBUG(), NumLib::SerialExecutor::executeSelectedMemberDereferenced(), and ProcessLib::Process::getActiveElementIDs().

◆ computeSecondaryVariableConcrete()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::computeSecondaryVariableConcrete ( double const t,
double const dt,
std::vector< GlobalVector * > const & x,
GlobalVector const & x_prev,
int const process_id )
overridevirtual

Reimplemented from ProcessLib::Process.

Definition at line 284 of file HeatTransportBHEProcess.cpp.

287{
288 DBUG("Compute heat flux for HeatTransportBHE process.");
289
290 std::vector<NumLib::LocalToGlobalIndexMap const*> dof_tables;
291 dof_tables.reserve(x.size());
292 std::generate_n(std::back_inserter(dof_tables), x.size(),
293 [&]() { return _local_to_global_index_map.get(); });
294
297 _local_assemblers, getActiveElementIDs(), dof_tables, t, dt, x, x_prev,
298 process_id);
299}
virtual void computeSecondaryVariable(std::size_t const mesh_item_id, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, double const t, double const dt, std::vector< GlobalVector * > const &x, GlobalVector const &x_prev, int const process_id)
static void executeSelectedMemberOnDereferenced(Method method, Container const &container, std::vector< std::size_t > const &active_container_ids, Args &&... args)

References _local_assemblers, ProcessLib::LocalAssemblerInterface::computeSecondaryVariable(), DBUG(), NumLib::SerialExecutor::executeSelectedMemberOnDereferenced(), and ProcessLib::Process::getActiveElementIDs().

◆ constructDofTable()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::constructDofTable ( )
overrideprivatevirtual

This function is for general cases, in which all equations of the coupled processes have the same number of unknowns. For the general cases with the staggered scheme, all equations of the coupled processes share one DOF table hold by _local_to_global_index_map. Other cases can be considered by overloading this member function in the derived class.

Reimplemented from ProcessLib::Process.

Definition at line 74 of file HeatTransportBHEProcess.cpp.

75{
76 // Create single component dof in every of the mesh's nodes.
78 std::make_unique<MeshLib::MeshSubset>(_mesh, _mesh.getNodes());
79
80 //
81 // Soil temperature variable defined on the whole mesh.
82 //
84 std::make_unique<MeshLib::MeshSubset>(_mesh, _mesh.getNodes());
85 std::vector<MeshLib::MeshSubset> all_mesh_subsets{*_mesh_subset_soil_nodes};
86
87 std::vector<std::vector<MeshLib::Element*> const*> vec_var_elements;
88 vec_var_elements.push_back(&(_mesh.getElements()));
89
90 std::vector<int> vec_n_components{
91 1}; // one component for the soil temperature variable.
92
93 //
94 // BHE nodes with BHE type dependent number of variables.
95 //
96 int const n_BHEs = _process_data._vec_BHE_property.size();
97 assert(n_BHEs == static_cast<int>(_bheMeshData.BHE_mat_IDs.size()));
98 assert(n_BHEs == static_cast<int>(_bheMeshData.BHE_nodes.size()));
99 assert(n_BHEs == static_cast<int>(_bheMeshData.BHE_elements.size()));
100
101 // the BHE nodes need to be cherry-picked from the vector
102 for (int i = 0; i < n_BHEs; i++)
103 {
104 auto const number_of_unknowns =
105 visit([](auto const& bhe) { return bhe.number_of_unknowns; },
107 auto const& bhe_nodes = _bheMeshData.BHE_nodes[i];
108 auto const& bhe_elements = _bheMeshData.BHE_elements[i];
109
110 // All the BHE nodes have additional variables.
111 _mesh_subset_BHE_nodes.push_back(
112 std::make_unique<MeshLib::MeshSubset const>(_mesh, bhe_nodes));
113
114 std::generate_n(std::back_inserter(all_mesh_subsets),
115 // Here the number of components equals to the
116 // number of unknowns on the BHE
117 number_of_unknowns,
118 [&ms = _mesh_subset_BHE_nodes.back()]()
119 { return *ms; });
120
121 vec_n_components.push_back(number_of_unknowns);
122 vec_var_elements.push_back(&bhe_elements);
123 }
124
126 std::make_unique<NumLib::LocalToGlobalIndexMap>(
127 std::move(all_mesh_subsets),
128 vec_n_components,
129 vec_var_elements,
131
132 // in case of debugging the dof table, activate the following line
133 // std::cout << *_local_to_global_index_map << "\n";
134}
std::vector< Node * > const & getNodes() const
Get the nodes-vector for the mesh.
Definition Mesh.h:108
std::vector< Element * > const & getElements() const
Get the element-vector for the mesh.
Definition Mesh.h:111
std::unique_ptr< MeshLib::MeshSubset const > _mesh_subset_soil_nodes
std::vector< std::unique_ptr< MeshLib::MeshSubset const > > _mesh_subset_BHE_nodes
std::unique_ptr< MeshLib::MeshSubset const > _mesh_subset_all_nodes
Definition Process.h:366
MeshLib::Mesh & _mesh
Definition Process.h:365
@ BY_COMPONENT
Ordering data by component type.
std::vector< std::vector< MeshLib::Node * > > BHE_nodes
Definition MeshUtils.h:38
std::vector< std::vector< MeshLib::Element * > > BHE_elements
Definition MeshUtils.h:37

References _bheMeshData, ProcessLib::Process::_local_to_global_index_map, ProcessLib::Process::_mesh, ProcessLib::Process::_mesh_subset_all_nodes, _mesh_subset_BHE_nodes, _mesh_subset_soil_nodes, _process_data, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_vec_BHE_property, ProcessLib::HeatTransportBHE::BHEMeshData::BHE_elements, ProcessLib::HeatTransportBHE::BHEMeshData::BHE_mat_IDs, ProcessLib::HeatTransportBHE::BHEMeshData::BHE_nodes, NumLib::BY_COMPONENT, MeshLib::Mesh::getElements(), and MeshLib::Mesh::getNodes().

◆ createBHEBoundaryConditionTopBottom()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::createBHEBoundaryConditionTopBottom ( std::vector< std::vector< MeshLib::Node * > > const & all_bhe_nodes)
private

Definition at line 534 of file HeatTransportBHEProcess.cpp.

536{
537 const int process_id = 0;
538 auto& bcs = _boundary_conditions[process_id];
539
540 std::size_t const n_BHEs = _process_data._vec_BHE_property.size();
541
542 // for each BHE
543 for (std::size_t bhe_i = 0; bhe_i < n_BHEs; bhe_i++)
544 {
545 auto const& bhe_nodes = all_bhe_nodes[bhe_i];
546 // find the variable ID
547 // the soil temperature is 0-th variable
548 // the BHE temperature is therefore bhe_i + 1
549 const int variable_id = bhe_i + 1;
550
551 std::vector<MeshLib::Node*> bhe_boundary_nodes;
552
553 // cherry-pick the boundary nodes according to
554 // the number of connected line elements.
555 for (auto const& bhe_node : bhe_nodes)
556 {
557 // Count number of 1d elements connected with every BHE node.
558 auto const& connected_elements =
560 const std::size_t n_line_elements = std::count_if(
561 connected_elements.begin(), connected_elements.end(),
562 [](MeshLib::Element const* elem)
563 { return (elem->getDimension() == 1); });
564
565 if (n_line_elements == 1)
566 {
567 bhe_boundary_nodes.push_back(bhe_node);
568 }
569 }
570
571 if (bhe_boundary_nodes.size() != 2)
572 {
573 OGS_FATAL(
574 "Error!!! The BHE boundary nodes are not correctly found, "
575 "for every single BHE, there should be 2 boundary nodes.");
576 }
577
578 // For 1U, 2U, CXC, CXA type BHE, the node order in the boundary nodes
579 // vector should be rearranged according to its z coordinate in
580 // descending order. In these BHE types, the z coordinate on the top and
581 // bottom node is different. The BHE top node with a higher z coordinate
582 // should be placed at the first, while the BHE bottom node with a lower
583 // z coordinate should be placed at the second. For other horizontal BHE
584 // types e.g. 1P-type BHE, the z coordinate on the top and bottom node
585 // is identical. Thus the node order in the boundary nodes vector can
586 // not be rearranged according to its z coordinate. For these BHE types,
587 // the boundary node order is according to the default node id order in
588 // the model mesh.
589 // for 1P-type BHE
590 if ((*bhe_boundary_nodes[0])[2] == (*bhe_boundary_nodes[1])[2])
591 {
592 INFO(
593 "For 1P-type BHE, the BHE inflow and outflow "
594 "nodes are identified according to their mesh node id in "
595 "ascending order");
596 }
597 // for 1U, 2U, CXC, CXA type BHE
598 else
599 {
600 // swap the boundary nodes if the z coordinate of the
601 // first node is lower than it on the second node
602 if ((*bhe_boundary_nodes[0])[2] < (*bhe_boundary_nodes[1])[2])
603 {
604 std::swap(bhe_boundary_nodes[0], bhe_boundary_nodes[1]);
605 }
606 }
607
608 auto get_global_index =
609 [&](std::size_t const node_id, int const component)
610 {
611 return _local_to_global_index_map->getGlobalIndex(
613 variable_id, component);
614 };
615
616 auto get_global_bhe_bc_indices =
617 [&](std::array<
618 std::pair<std::size_t /*node_id*/, int /*component*/>, 2>
619 nodes_and_components)
620 {
621 return std::make_pair(
622 get_global_index(nodes_and_components[0].first,
623 nodes_and_components[0].second),
624 get_global_index(nodes_and_components[1].first,
625 nodes_and_components[1].second));
626 };
627
628 auto get_global_bhe_bc_indices_with_bhe_idx =
629 [&](std::size_t bhe_idx,
630 std::array<
631 std::pair<std::size_t /*node_id*/, int /*component*/>, 2>
632 nodes_and_components)
633 {
634 return std::make_tuple(
635 bhe_idx,
636 get_global_index(nodes_and_components[0].first,
637 nodes_and_components[0].second),
638 get_global_index(nodes_and_components[1].first,
639 nodes_and_components[1].second));
640 };
641
642 auto createBCs =
643 [&, bc_top_node_id = bhe_boundary_nodes[0]->getID(),
644 bc_bottom_node_id = bhe_boundary_nodes[1]->getID()](auto& bhe)
645 {
646 for (auto const& in_out_component_id :
647 bhe.inflow_outflow_bc_component_ids)
648 {
649 if (bhe.use_python_bcs ||
650 this->_process_data._use_server_communication)
651 // call BHEPythonBoundarycondition
652 {
653 if (this->_process_data
654 .py_bc_object) // the bc object exist
655 {
656 // apply the customized top, inflow BC.
657 bcs.addBoundaryCondition(
659 get_global_bhe_bc_indices(
660 bhe.getBHEInflowDirichletBCNodesAndComponents(
661 bc_top_node_id, bc_bottom_node_id,
662 in_out_component_id.first)),
663 bhe,
665 }
666 else
667 {
668 OGS_FATAL(
669 "The Python Boundary Condition was switched on, "
670 "but the data object does not exist! ");
671 }
672 }
673 else
674 {
677 bhe.isPowerBC())
678 {
679 // for algebraic_bc method, record the pair of indices
680 // in a separate vector
682 get_global_bhe_bc_indices_with_bhe_idx(
683 bhe_i,
684 {{{bc_top_node_id, in_out_component_id.first},
685 {bc_top_node_id,
686 in_out_component_id.second}}}));
687 }
688 else
689 {
690 // Top, inflow, normal case
691 bcs.addBoundaryCondition(
693 get_global_bhe_bc_indices(
694 bhe.getBHEInflowDirichletBCNodesAndComponents(
695 bc_top_node_id, bc_bottom_node_id,
696 in_out_component_id.first)),
697 [&bhe](double const T, double const t) {
698 return bhe.updateFlowRateAndTemperature(T,
699 t);
700 }));
701 }
702 }
703
704 auto const bottom_nodes_and_components =
705 bhe.getBHEBottomDirichletBCNodesAndComponents(
706 bc_bottom_node_id,
707 in_out_component_id.first,
708 in_out_component_id.second);
709
710 if (bottom_nodes_and_components &&
713 {
714 // Bottom, outflow, all cases | not needed for algebraic_bc
715 // method
716 bcs.addBoundaryCondition(
718 get_global_bhe_bc_indices(
719 {{{bc_bottom_node_id,
720 in_out_component_id.first},
721 {bc_bottom_node_id,
722 in_out_component_id.second}}})));
723 }
724 else if (bottom_nodes_and_components &&
727 {
728 // for algebraic_bc method, record the pair of indices in a
729 // separate vector
731 get_global_bhe_bc_indices_with_bhe_idx(
732 bhe_i,
733 {{{bc_bottom_node_id, in_out_component_id.first},
734 {bc_bottom_node_id,
735 in_out_component_id.second}}}));
736 }
737 }
738 };
739 visit(createBCs, _process_data._vec_BHE_property[bhe_i]);
740 }
741}
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:35
std::size_t getID() const
Get id of the mesh.
Definition Mesh.h:123
std::vector< Element const * > const & getElementsConnectedToNode(std::size_t node_id) const
Definition Mesh.cpp:256
std::vector< BoundaryConditionCollection > _boundary_conditions
Definition Process.h:405
std::unique_ptr< BHEInflowDirichletBoundaryCondition< BHEUpdateCallback > > createBHEInflowDirichletBoundaryCondition(std::pair< GlobalIndexType, GlobalIndexType > &&in_out_global_indices, BHEUpdateCallback bhe_update_callback)
std::unique_ptr< BHEBottomDirichletBoundaryCondition > createBHEBottomDirichletBoundaryCondition(std::pair< GlobalIndexType, GlobalIndexType > &&in_out_global_indices)
std::unique_ptr< BHEInflowPythonBoundaryCondition< BHEType > > createBHEInflowPythonBoundaryCondition(std::pair< GlobalIndexType, GlobalIndexType > &&in_out_global_indices, BHEType &bhe, BHEInflowPythonBoundaryConditionPythonSideInterface &py_bc_object)
BHEInflowPythonBoundaryConditionPythonSideInterface * py_bc_object
Python object computing BC values.

References ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_algebraic_BC_Setting, ProcessLib::Process::_boundary_conditions, ProcessLib::Process::_local_to_global_index_map, ProcessLib::Process::_mesh, _process_data, ProcessLib::HeatTransportBHE::AlgebraicBCSetting::_use_algebraic_bc, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_vec_BHE_property, _vec_bottom_BHE_node_indices, _vec_top_BHE_node_indices, ProcessLib::HeatTransportBHE::createBHEBottomDirichletBoundaryCondition(), ProcessLib::HeatTransportBHE::createBHEInflowDirichletBoundaryCondition(), ProcessLib::createBHEInflowPythonBoundaryCondition(), MeshLib::Mesh::getElementsConnectedToNode(), MeshLib::Mesh::getID(), INFO(), MeshLib::Node, OGS_FATAL, and ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::py_bc_object.

Referenced by initializeConcreteProcess().

◆ initializeConcreteProcess()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::initializeConcreteProcess ( NumLib::LocalToGlobalIndexMap const & dof_table,
MeshLib::Mesh const & mesh,
unsigned const integration_order )
overrideprivatevirtual

Process specific initialization called by initialize().

Implements ProcessLib::Process.

Definition at line 136 of file HeatTransportBHEProcess.cpp.

140{
141 // Quick access map to BHE's through element ids.
142 std::unordered_map<std::size_t, BHE::BHETypes*> element_to_bhe_map;
143 int const n_BHEs = _process_data._vec_BHE_property.size();
144 for (int i = 0; i < n_BHEs; i++)
145 {
146 auto const& bhe_elements = _bheMeshData.BHE_elements[i];
147 for (auto const& e : bhe_elements)
148 {
149 element_to_bhe_map[e->getID()] =
151 }
152 }
153
154 assert(mesh.getDimension() == 3);
156 HeatTransportBHELocalAssemblerSoil, HeatTransportBHELocalAssemblerBHE>(
157 mesh.getElements(), dof_table, _local_assemblers,
158 NumLib::IntegrationOrder{integration_order}, element_to_bhe_map,
159 mesh.isAxiallySymmetric(), _process_data);
160
161 // Create BHE boundary conditions for each of the BHEs
163
164 // Store BHE and soil elements to split the assembly and use the matrix
165 // cache in the linear case only for soil elements
167 {
168 _bhes_element_ids = _bheMeshData.BHE_elements | ranges::views::join |
169 MeshLib::views::ids | ranges::to<std::vector>;
170
171 // sort bhe elements if needed
172 if (!std::is_sorted(_bhes_element_ids.begin(), _bhes_element_ids.end()))
173 {
174 std::sort(_bhes_element_ids.begin(), _bhes_element_ids.end());
175 }
176
177 _soil_element_ids = mesh.getElements() | MeshLib::views::ids |
178 ranges::to<std::vector>();
179
180 // sort soil elements if needed
181 if (!std::is_sorted(_soil_element_ids.begin(), _soil_element_ids.end()))
182 {
183 std::sort(_soil_element_ids.begin(), _soil_element_ids.end());
184 }
185
186 _soil_element_ids = ranges::views::set_difference(_soil_element_ids,
188 ranges::to<std::vector>();
189 }
190
192 {
193 std::vector<std::size_t> const bhes_node_ids =
194 _bheMeshData.BHE_nodes | ranges::views::join |
195 ranges::views::transform([](auto const* const node)
196 { return node->getID(); }) |
197 ranges::to<std::vector>;
198
199 // all connected soil elements and also the BHE elements.
200 MeshLib::ElementSearch es{mesh};
201 es.searchByNodeIDs(bhes_node_ids);
202
205 mesh.getNumberOfElements(), false);
206 for (auto const id : es.getSearchedElementIDs())
207 {
209 }
210 }
211}
Element search class.
std::size_t searchByNodeIDs(const std::vector< std::size_t > &nodes)
Marks all elements connecting to any of the given nodes.
void createBHEBoundaryConditionTopBottom(std::vector< std::vector< MeshLib::Node * > > const &all_bhe_nodes)
constexpr ranges::views::view_closure ids
For an element of a range view return its id.
Definition Mesh.h:227
void createLocalAssemblers(std::vector< MeshLib::Element * > const &mesh_elements, NumLib::LocalToGlobalIndexMap const &dof_table, std::vector< std::unique_ptr< LocalAssemblerInterface > > &local_assemblers, NumLib::IntegrationOrder const integration_order, ExtraCtorArgs &&... extra_ctor_args)

References _bheMeshData, _bhes_element_ids, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_is_linear, _local_assemblers, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_mass_lumping, _process_data, _soil_element_ids, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_vec_BHE_property, ProcessLib::HeatTransportBHE::BHEMeshData::BHE_elements, ProcessLib::HeatTransportBHE::BHEMeshData::BHE_nodes, createBHEBoundaryConditionTopBottom(), ProcessLib::HeatTransportBHE::createLocalAssemblers(), MeshLib::Mesh::getDimension(), MeshLib::Mesh::getElements(), MeshLib::Mesh::getNumberOfElements(), MeshLib::views::ids, MeshLib::Mesh::isAxiallySymmetric(), and ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::mass_lumping_soil_elements.

◆ isLinear()

bool ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::isLinear ( ) const
inlineoverride

◆ postIterationConcreteProcess()

NumLib::IterationResult ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::postIterationConcreteProcess ( GlobalVector const & x)
overrideprivatevirtual

Reimplemented from ProcessLib::Process.

Definition at line 301 of file HeatTransportBHEProcess.cpp.

303{
304 // if the process use python boundary condition
307
308 // Here the task is to get current time flowrate and flow temperature from
309 // TESPy and determine whether it converges.
310 auto const Tout_nodes_id =
312 const std::size_t n_bc_nodes = Tout_nodes_id.size();
313
314 for (std::size_t i = 0; i < n_bc_nodes; i++)
315 {
316 // read the T_out and store them in dataframe
318 x[Tout_nodes_id[i]];
319 }
320 // Transfer Tin and Tout to TESPy and return the results
321 auto const tespy_result = _process_data.py_bc_object->tespySolver(
323 std::get<1>(_process_data.py_bc_object->dataframe_network), // T_in
324 std::get<2>(_process_data.py_bc_object->dataframe_network)); // T_out
326 {
327 DBUG("Method `tespySolver' not overridden in Python script.");
328 }
329
330 // update the Tin and flow rate
331 for (std::size_t i = 0; i < n_bc_nodes; i++)
332 {
334 std::get<2>(tespy_result)[i];
336 std::get<3>(tespy_result)[i];
337 }
338 auto const tespy_has_converged = std::get<1>(tespy_result);
339 if (tespy_has_converged == true)
341
343}
std::tuple< double, std::vector< double >, std::vector< double >, std::vector< int >, std::vector< double > > dataframe_network
virtual std::tuple< bool, bool, std::vector< double >, std::vector< double > > tespySolver(double, std::vector< double > const &, std::vector< double > const &) const

References _process_data, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_use_tespy, ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::dataframe_network, DBUG(), ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::isOverriddenTespy(), ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::py_bc_object, NumLib::REPEAT_ITERATION, NumLib::SUCCESS, and ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::tespySolver().

◆ postTimestepConcreteProcess()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::postTimestepConcreteProcess ( std::vector< GlobalVector * > const & x,
std::vector< GlobalVector * > const & x_prev,
const double t,
const double dt,
int const process_id )
overrideprivatevirtual

Reimplemented from ProcessLib::Process.

Definition at line 394 of file HeatTransportBHEProcess.cpp.

398{
399 if (_process_data.py_bc_object == nullptr ||
401 {
402 return;
403 }
404
405 auto& [time, Tin_value, Tout_value, Tout_nodes_ids, flowrate] =
407
408 // We found the problem that time != t, but it always equals the last
409 // step. The following line is to correct this, although we do not use
410 // it for server communication.
411 time = t;
412
413 auto const& solution = *x[process_id];
414
415 // Iterate through each BHE
416 const std::size_t n_bc_nodes = Tout_nodes_ids.size();
417 for (std::size_t i = 0; i < n_bc_nodes; i++)
418 {
419 // read the T_out and store them in dataframe
420 Tout_value[i] = solution[Tout_nodes_ids[i]];
421 }
422
423 // Transfer T_out to server_Communication
425 t, dt, Tin_value, Tout_value, flowrate);
428 {
429 DBUG("Method `serverCommunication' not overridden in Python script.");
430 }
431}
virtual void serverCommunicationPostTimestep(double, double, std::vector< double > const &, std::vector< double > const &, std::vector< double > const &) const

References _process_data, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_use_server_communication, ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::dataframe_network, DBUG(), ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::isOverriddenServerCommunicationPostTimestep(), ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::py_bc_object, and ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::serverCommunicationPostTimestep().

◆ preTimestepConcreteProcess()

void ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::preTimestepConcreteProcess ( std::vector< GlobalVector * > const & x,
const double t,
const double dt,
int const process_id )
overrideprivatevirtual

Reimplemented from ProcessLib::Process.

Definition at line 345 of file HeatTransportBHEProcess.cpp.

348{
349 if (_process_data.py_bc_object == nullptr ||
351 {
352 return;
353 }
354
355 auto& [time, Tin_value, Tout_value, Tout_nodes_ids, flowrate] =
357
358 // We found the problem that time != t, but it always equals the last
359 // step. The following line is to correct this, although we do not use
360 // it for server communication.
361 time = t;
362
363 auto const& solution = *x[process_id];
364
365 // Iterate through each BHE
366 const std::size_t n_bc_nodes = Tout_nodes_ids.size();
367 for (std::size_t i = 0; i < n_bc_nodes; i++)
368 {
369 // read the T_out and store them in dataframe
370 Tout_value[i] = solution[Tout_nodes_ids[i]];
371 }
372
373 // Transfer T_out to server_Communication and get back T_in and flowrate
374 auto const server_communication_result =
376 t, dt, Tin_value, Tout_value, flowrate);
379 {
380 DBUG("Method `serverCommunication' not overridden in Python script.");
381 }
382
383 auto const& [server_communication_Tin_value,
384 server_communication_flowrate] = server_communication_result;
385
386 std::copy(begin(server_communication_Tin_value),
387 end(server_communication_Tin_value),
388 begin(Tin_value));
389 std::copy(begin(server_communication_flowrate),
390 end(server_communication_flowrate),
391 begin(flowrate));
392}
virtual std::tuple< std::vector< double >, std::vector< double > > serverCommunicationPreTimestep(double, double, std::vector< double > const &, std::vector< double > const &, std::vector< double > const &) const

References _process_data, ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_use_server_communication, ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::dataframe_network, DBUG(), ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::isOverriddenServerCommunicationPreTimestep(), ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::py_bc_object, and ProcessLib::BHEInflowPythonBoundaryConditionPythonSideInterface::serverCommunicationPreTimestep().

◆ requiresNormalization()

bool ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::requiresNormalization ( ) const
inlineoverride

Definition at line 52 of file HeatTransportBHEProcess.h.

53 {
54 // In the current setup, when using algebraic bc,
55 // then normalization is always required
57 }

References ProcessLib::HeatTransportBHE::HeatTransportBHEProcessData::_algebraic_BC_Setting, _process_data, and ProcessLib::HeatTransportBHE::AlgebraicBCSetting::_use_algebraic_bc.

Member Data Documentation

◆ _asm_mat_cache

AssembledMatrixCache ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_asm_mat_cache
private

Definition at line 131 of file HeatTransportBHEProcess.h.

Referenced by assembleConcreteProcess().

◆ _bheMeshData

const BHEMeshData ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_bheMeshData
private

◆ _bhes_element_ids

std::vector<std::size_t> ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_bhes_element_ids
private

◆ _local_assemblers

std::vector<std::unique_ptr<HeatTransportBHELocalAssemblerInterface> > ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_local_assemblers
private

◆ _mesh_subset_BHE_nodes

std::vector<std::unique_ptr<MeshLib::MeshSubset const> > ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_mesh_subset_BHE_nodes
private

Definition at line 110 of file HeatTransportBHEProcess.h.

Referenced by constructDofTable().

◆ _mesh_subset_BHE_soil_nodes

std::vector<std::unique_ptr<MeshLib::MeshSubset const> > ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_mesh_subset_BHE_soil_nodes
private

Definition at line 113 of file HeatTransportBHEProcess.h.

◆ _mesh_subset_soil_nodes

std::unique_ptr<MeshLib::MeshSubset const> ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_mesh_subset_soil_nodes
private

Definition at line 127 of file HeatTransportBHEProcess.h.

Referenced by constructDofTable().

◆ _process_data

◆ _soil_element_ids

std::vector<std::size_t> ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_soil_element_ids
private

◆ _vec_bottom_BHE_node_indices

std::vector<std::tuple<std::size_t, GlobalIndexType, GlobalIndexType> > ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_vec_bottom_BHE_node_indices
private

◆ _vec_top_BHE_node_indices

std::vector<std::tuple<std::size_t, GlobalIndexType, GlobalIndexType> > ProcessLib::HeatTransportBHE::HeatTransportBHEProcess::_vec_top_BHE_node_indices
private

The documentation for this class was generated from the following files: