33 std::vector<std::reference_wrapper<MeshLib::PropertyVector<double>>>
50 :
pvma_{jacobian_assembler} {};
55 std::vector<std::reference_wrapper<MeshLib::Mesh>>
const& submeshes,
56 std::vector<std::string>
const& residuum_names,
57 std::vector<std::reference_wrapper<ProcessVariable>>
const& pvs);
77 std::vector<std::reference_wrapper<MeshLib::PropertyVector<double>>>
94template <
typename Process>
125 const int process_id,
126 std::vector<std::reference_wrapper<MeshLib::Mesh>>
const& submeshes,
127 std::vector<std::string>
const& residuum_names)
131 derived().getProcessVariables(process_id));
146 std::vector<GlobalVector*>
const& ,
147 std::vector<GlobalVector*>
const& ,
162 std::vector<GlobalVector*>
const& x,
163 std::vector<GlobalVector*>
const& x_prev,
168 DBUG(
"AssemblyMixin assembleWithJacobian(t={}, dt={}, process_id={}).",
173 dt, x, x_prev, process_id, M, K, b, Jac);
180 return static_cast<Process const&
>(*this);
185 template <
typename Method,
typename... Jac>
187 double const dt, std::vector<GlobalVector*>
const& x,
188 std::vector<GlobalVector*>
const& x_prev,
193 std::vector<NumLib::LocalToGlobalIndexMap const*>
const dof_tables{
196 auto const& loc_asms =
derived().local_assemblers_;
207 (
pvma_.*global_assembler_method)(
208 loc_asms, sad.active_element_ids, dof_tables, t, dt, x,
209 x_prev, process_id, M, K, b_submesh, jac_or_not_jac...);
214 b_submesh, *(dof_tables.front()), sad);
226 (
pvma_.*global_assembler_method)(
228 x_prev, process_id, M, K, b, jac_or_not_jac...);
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 updateActiveElementsImpl(ProcessLib::ProcessVariable const &pv)
static void copyResiduumVectorsToSubmesh(GlobalVector const &rhs, NumLib::LocalToGlobalIndexMap const &local_to_global_index_map, SubmeshAssemblyData const &sad)
AssemblyMixinBase(AbstractJacobianAssembler &jacobian_assembler)
std::vector< std::reference_wrapper< MeshLib::PropertyVector< double > > > residuum_vectors_bulk_
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 initializeAssemblyOnSubmeshes(const int process_id, MeshLib::Mesh &bulk_mesh, std::vector< std::reference_wrapper< MeshLib::Mesh > > const &submeshes, std::vector< std::string > const &residuum_names, std::vector< std::reference_wrapper< ProcessVariable > > const &pvs)
void updateActiveElements(ProcessLib::ProcessVariable const &pv)
std::size_t b_submesh_id_
ID of the b vector on submeshes, cf. NumLib::VectorProvider.
ActiveElementIDsState ids_state_
std::vector< SubmeshAssemblyData > submesh_assembly_data_
void assembleWithJacobian(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, GlobalMatrix &Jac)
void initializeAssemblyOnSubmeshes(const int process_id, std::vector< std::reference_wrapper< MeshLib::Mesh > > const &submeshes, std::vector< std::string > const &residuum_names)
Process const & derived() const
void assemble(const double, double const, std::vector< GlobalVector * > const &, std::vector< GlobalVector * > const &, int const, GlobalMatrix &, GlobalMatrix &, GlobalVector &)
void assembleGeneric(Method global_assembler_method, 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, Jac &... jac_or_not_jac)
void updateActiveElements(const int process_id)
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, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b, GlobalMatrix &Jac)
std::vector< std::size_t > const & getActiveElementIDs() const
std::vector< std::reference_wrapper< ProcessVariable > > const & getProcessVariables(const int process_id) const
std::unique_ptr< NumLib::LocalToGlobalIndexMap > _local_to_global_index_map
void axpy(PETScVector &y, PetscScalar const a, PETScVector const &x)
OGSMesh getMesh(std::string const &name)
static NUMLIB_EXPORT VectorProvider & provider
SubmeshAssemblyData(MeshLib::Mesh const &mesh, 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
std::vector< std::reference_wrapper< MeshLib::PropertyVector< double > > > residuum_vectors