/** * \file * \copyright * Copyright (c) 2012-2021, 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 "HeatTransportBHEProcessData.h" #include "ProcessLib/HeatTransportBHE/BHE/MeshUtils.h" #include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHEProcessAssemblerInterface.h" #include "ProcessLib/Process.h" namespace ProcessLib { namespace HeatTransportBHE { struct BHEMeshData; class HeatTransportBHEProcess final : public Process { public: HeatTransportBHEProcess( std::string name, MeshLib::Mesh& mesh, std::unique_ptr&& jacobian_assembler, std::vector> const& parameters, unsigned const integration_order, std::vector>>&& process_variables, HeatTransportBHEProcessData&& process_data, SecondaryVariableCollection&& secondary_variables); //! \name ODESystem interface //! @{ bool isLinear() const override { return false; } void computeSecondaryVariableConcrete(double const t, double const dt, std::vector const& x, GlobalVector const& x_dot, int const process_id) override; private: void constructDofTable() override; void initializeConcreteProcess( NumLib::LocalToGlobalIndexMap const& dof_table, MeshLib::Mesh const& mesh, unsigned const integration_order) override; void assembleConcreteProcess(const double t, double const dt, std::vector const& x, std::vector const& xdot, int const process_id, GlobalMatrix& M, GlobalMatrix& K, GlobalVector& b) override; void assembleWithJacobianConcreteProcess( const double t, double const dt, std::vector const& x, std::vector const& xdot, const double dxdot_dx, const double dx_dx, int const process_id, GlobalMatrix& M, GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override; void createBHEBoundaryConditionTopBottom( std::vector> const& all_bhe_nodes); #ifdef OGS_USE_PYTHON NumLib::IterationResult postIterationConcreteProcess( GlobalVector const& x) override; void postTimestepConcreteProcess(std::vector const& x, const double t, const double dt, int const process_id) override; #endif HeatTransportBHEProcessData _process_data; std::vector> _local_assemblers; std::vector> _mesh_subset_BHE_nodes; std::vector> _mesh_subset_BHE_soil_nodes; std::unique_ptr _mesh_subset_soil_nodes; const BHEMeshData _bheMeshData; }; } // namespace HeatTransportBHE } // namespace ProcessLib