OGS
anonymous_namespace{ParallelVectorMatrixAssembler.cpp} Namespace Reference

Functions

void assembleWithJacobianOneElement (const std::size_t mesh_item_id, ProcessLib::LocalAssemblerInterface &local_assembler, const NumLib::LocalToGlobalIndexMap &dof_table, const double t, const double dt, const GlobalVector &x, const GlobalVector &x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data, std::vector< GlobalIndexType > &indices, ProcessLib::AbstractJacobianAssembler &jacobian_assembler, ProcessLib::Assembly::MultiMatrixElementCache &cache)
 
int getNumberOfThreads ()
 

Function Documentation

◆ assembleWithJacobianOneElement()

void anonymous_namespace{ParallelVectorMatrixAssembler.cpp}::assembleWithJacobianOneElement ( const std::size_t mesh_item_id,
ProcessLib::LocalAssemblerInterface & local_assembler,
const NumLib::LocalToGlobalIndexMap & dof_table,
const double t,
const double dt,
const GlobalVector & x,
const GlobalVector & x_prev,
std::vector< double > & local_M_data,
std::vector< double > & local_K_data,
std::vector< double > & local_b_data,
std::vector< double > & local_Jac_data,
std::vector< GlobalIndexType > & indices,
ProcessLib::AbstractJacobianAssembler & jacobian_assembler,
ProcessLib::Assembly::MultiMatrixElementCache & cache )

Definition at line 25 of file ParallelVectorMatrixAssembler.cpp.

35{
36 indices = NumLib::getIndices(mesh_item_id, dof_table);
37
38 local_M_data.clear();
39 local_K_data.clear();
40 local_b_data.clear();
41 local_Jac_data.clear();
42
43 auto const local_x = x.get(indices);
44 auto const local_x_prev = x_prev.get(indices);
45 jacobian_assembler.assembleWithJacobian(
46 local_assembler, t, dt, local_x, local_x_prev, local_M_data,
47 local_K_data, local_b_data, local_Jac_data);
48
49 if (local_Jac_data.empty())
50 {
52 "No Jacobian has been assembled! This might be due to "
53 "programming errors in the local assembler of the "
54 "current process.");
55 }
56
57 cache.add(local_M_data, local_K_data, local_b_data, local_Jac_data,
58 indices);
59}
#define OGS_FATAL(...)
Definition Error.h:26
double get(IndexType rowId) const
get entry
Definition EigenVector.h:58
virtual void assembleWithJacobian(LocalAssemblerInterface &local_assembler, double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &local_M_data, std::vector< double > &local_K_data, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data)=0
void add(std::vector< double > const &local_M_data, std::vector< double > const &local_K_data, std::vector< double > const &local_b_data, std::vector< double > const &local_Jac_data, std::vector< GlobalIndexType > const &indices)
std::vector< GlobalIndexType > getIndices(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table)

References ProcessLib::Assembly::MultiMatrixElementCache::add(), ProcessLib::AbstractJacobianAssembler::assembleWithJacobian(), MathLib::EigenVector::get(), NumLib::getIndices(), and OGS_FATAL.

◆ getNumberOfThreads()

int anonymous_namespace{ParallelVectorMatrixAssembler.cpp}::getNumberOfThreads ( )

Definition at line 61 of file ParallelVectorMatrixAssembler.cpp.

62{
63 char const* const num_threads_env = std::getenv("OGS_ASM_THREADS");
64
65 if (!num_threads_env)
66 {
67 return 1;
68 }
69
70 if (std::strlen(num_threads_env) == 0)
71 {
72 OGS_FATAL("The environment variable OGS_ASM_THREADS is set but empty.");
73 }
74
75 std::string num_threads_str{num_threads_env};
76 BaseLib::trim(num_threads_str);
77
78 std::istringstream num_threads_iss{num_threads_str};
79 int num_threads = -1;
80
81 num_threads_iss >> num_threads;
82
83 if (!num_threads_iss)
84 {
85 OGS_FATAL("Error parsing OGS_ASM_THREADS (= \"{}\").", num_threads_env);
86 }
87
88 if (!num_threads_iss.eof())
89 {
91 "Error parsing OGS_ASM_THREADS (= \"{}\"): not read entirely, the "
92 "remainder is \"{}\"",
93 num_threads_env,
94 num_threads_iss.str().substr(num_threads_iss.tellg()));
95 }
96
97 if (num_threads < 1)
98 {
100 "You asked (via OGS_ASM_THREADS) to assemble with {} < 1 thread.",
101 num_threads);
102 }
103
104 return num_threads;
105}
void trim(std::string &str, char ch)

References OGS_FATAL, and BaseLib::trim().