29 std::vector<std::vector<
37 std::vector<std::reference_wrapper<MeshLib::PropertyVector<double>>>>
54 :
pvma_{jacobian_assembler} {};
58 std::vector<std::reference_wrapper<MeshLib::Mesh>>
const& submeshes,
59 std::vector<std::vector<std::string>>
const& residuum_names,
60 std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>
const&
83 std::vector<std::reference_wrapper<MeshLib::PropertyVector<double>>>>
100template <
typename Process>
131 std::vector<std::reference_wrapper<MeshLib::Mesh>>
const& submeshes,
132 std::vector<std::vector<std::string>>
const& residuum_names)
136 derived().getProcessVariables());
146 std::vector<GlobalVector*>
const& ,
147 std::vector<GlobalVector*>
const& ,
151 DBUG(
"AssemblyMixin assemble(t={}, dt={}, process_id={}).", t, dt,
157 OGS_FATAL(
"AssemblyMixin for Picard scheme is not yet implemented.");
161 std::vector<GlobalVector*>
const& x,
162 std::vector<GlobalVector*>
const& x_prev,
166 DBUG(
"AssemblyMixin assembleWithJacobian(t={}, dt={}, process_id={}).",
169 std::vector<NumLib::LocalToGlobalIndexMap const*>
const dof_tables =
172 auto const& loc_asms =
derived().local_assemblers_;
174 std::exception_ptr exception =
nullptr;
187 dof_tables, t, dt, x, x_prev,
188 process_id, b_submesh, Jac);
192 exception = std::current_exception();
198 process_id, b_submesh, *(dof_tables[process_id]), sad);
208 loc_asms,
derived().getActiveElementIDs(), dof_tables, t,
209 dt, x, x_prev, process_id, b, Jac);
213 exception = std::current_exception();
224 std::rethrow_exception(exception);
238 return static_cast<Process const&
>(*this);
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Global vector based on Eigen vector.
virtual GlobalVector & getVector(std::size_t &id)=0
Get an uninitialized vector with the given id.
virtual void releaseVector(GlobalVector const &x)=0
Base class for Jacobian assemblers.
void initializeAssemblyOnSubmeshes(MeshLib::Mesh &bulk_mesh, std::vector< std::reference_wrapper< MeshLib::Mesh > > const &submeshes, std::vector< std::vector< std::string > > const &residuum_names, std::vector< std::vector< std::reference_wrapper< ProcessVariable > > > const &pvs)
AssemblyMixinBase(AbstractJacobianAssembler &jacobian_assembler)
Assembly::ParallelVectorMatrixAssembler pvma_
static void copyResiduumVectorsToBulkMesh(GlobalVector const &rhs, NumLib::LocalToGlobalIndexMap const &local_to_global_index_map, std::vector< std::reference_wrapper< MeshLib::PropertyVector< double > > > residuum_vectors)
@ NO_DEACTIVATED_SUBDOMAINS
@ HAS_DEACTIVATED_SUBDOMAINS
void updateActiveElementsImpl(Process const &process)
std::size_t b_submesh_id_
ID of the b vector on submeshes, cf. NumLib::VectorProvider.
ActiveElementIDsState ids_state_
void updateActiveElements(ProcessLib::Process const &process)
static void copyResiduumVectorsToSubmesh(int const process_id, GlobalVector const &rhs, NumLib::LocalToGlobalIndexMap const &local_to_global_index_map, SubmeshAssemblyData const &sad)
std::vector< SubmeshAssemblyData > submesh_assembly_data_
std::vector< std::vector< std::reference_wrapper< MeshLib::PropertyVector< double > > > > residuum_vectors_bulk_
void assemble(double const t, double const dt, std::vector< GlobalVector * > const &, std::vector< GlobalVector * > const &, int const process_id, GlobalMatrix &, GlobalMatrix &, GlobalVector &)
Process const & derived() const
void updateActiveElements()
void initializeAssemblyOnSubmeshes(std::vector< std::reference_wrapper< MeshLib::Mesh > > const &submeshes, std::vector< std::vector< std::string > > const &residuum_names)
void assembleWithJacobian(double const t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &x_prev, int const process_id, GlobalVector &b, GlobalMatrix &Jac)
void assembleWithJacobian(BaseLib::PolymorphicRandomAccessContainerView< LocalAssemblerInterface > const &local_assemblers, std::vector< std::size_t > const &active_elements, std::vector< NumLib::LocalToGlobalIndexMap const * > const &dof_tables, const double t, double const dt, std::vector< GlobalVector * > const &xs, std::vector< GlobalVector * > const &x_prevs, int const process_id, GlobalVector &b, GlobalMatrix &Jac)
std::vector< NumLib::LocalToGlobalIndexMap const * > getDOFTables(int const number_of_processes) const
static bool anyOf(bool const val, Mpi const &mpi=Mpi{MPI_COMM_WORLD})
void finalizeAssembly(PETScMatrix &A)
void axpy(PETScVector &y, PetscScalar const a, PETScVector const &x)
OGSMesh getMesh(std::string const &name)
static NUMLIB_EXPORT VectorProvider & provider
std::vector< std::vector< std::reference_wrapper< MeshLib::PropertyVector< double > > > > residuum_vectors
MeshLib::PropertyVector< std::size_t > const & bulk_node_ids
MeshLib::PropertyVector< std::size_t > const & bulk_element_ids
std::vector< std::size_t > active_element_ids
SubmeshAssemblyData(MeshLib::Mesh const &mesh, std::vector< std::vector< std::reference_wrapper< MeshLib::PropertyVector< double > > > > &&residuum_vectors)