OGS
PythonSourceTerm.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "PythonSourceTerm.h"
5
6#include <algorithm>
7#include <pybind11/pybind11.h>
8
9#include <iostream>
10
11#include "FlushStdoutGuard.h"
16
17namespace ProcessLib
18{
19namespace SourceTerms
20{
21namespace Python
22{
24 std::unique_ptr<NumLib::LocalToGlobalIndexMap> source_term_dof_table,
25 PythonStData&& source_term_data, unsigned const integration_order,
26 unsigned const global_dim, bool const flush_stdout)
27 : SourceTerm(std::move(source_term_dof_table)),
28 _source_term_data(std::move(source_term_data)),
29 _flush_stdout(flush_stdout)
30{
33 global_dim, _source_term_data.bc_or_st_mesh.getElements(),
35 NumLib::IntegrationOrder{integration_order},
36 _source_term_data.bc_or_st_mesh.isAxiallySymmetric(),
38}
39
40void PythonSourceTerm::integrate(const double t, const GlobalVector& x,
41 GlobalVector& b, GlobalMatrix* Jac) const
42{
43 FlushStdoutGuard guard(_flush_stdout);
44
45 try
46 {
50 }
51 catch (pybind11::error_already_set const& e)
52 {
53 OGS_FATAL("Error evaluating source term in Python: {}", e.what());
54 }
55}
56
57} // namespace Python
58} // namespace SourceTerms
59} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
MathLib::EigenMatrix GlobalMatrix
MathLib::EigenVector GlobalVector
SourceTerm(std::unique_ptr< NumLib::LocalToGlobalIndexMap > source_term_dof_table)
std::unique_ptr< NumLib::LocalToGlobalIndexMap > const _source_term_dof_table
virtual void assemble(std::size_t const source_term_element_id, NumLib::LocalToGlobalIndexMap const &source_term_dof_table, double const t, const GlobalVector &x, GlobalVector &b, GlobalMatrix *Jac)=0
PythonSourceTerm(std::unique_ptr< NumLib::LocalToGlobalIndexMap > source_term_dof_table, PythonStData &&source_term_data, unsigned const integration_order, unsigned const global_dim, bool const flush_stdout)
std::vector< std::unique_ptr< PythonSourceTermLocalAssemblerInterface > > _local_assemblers
Local assemblers for all elements of the source term mesh.
void integrate(const double t, GlobalVector const &x, GlobalVector &b, GlobalMatrix *jac) const override
PythonStData _source_term_data
Auxiliary data used by the local assemblers.
void createLocalAssemblersPython(const unsigned dimension, 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)
static void executeMemberOnDereferenced(Method method, Container const &container, Args &&... args)