21#include "libmesh/threads.h"
24 const std::set<TagID> & vector_tags,
25 const std::set<TagID> & matrix_tags,
28 _compute_type(compute_type),
29 _nl(feproblem.currentNonlinearSystem()),
30 _vector_tags(vector_tags),
31 _matrix_tags(matrix_tags),
32 _dirac_kernels(_nl.getDiracKernelWarehouse())
39 _compute_type(x._compute_type),
41 _vector_tags(x._vector_tags),
42 _matrix_tags(x._matrix_tags),
43 _dirac_kernels(x._dirac_kernels)
62 std::set<MooseVariableFEBase *> needed_moose_vars;
66 std::unordered_set<unsigned int> needed_mat_props;
88 else if (tags.size() == 1)
102 if (!has_dirac_kernels_on_elem)
105 std::set<MooseVariableFEBase *> needed_moose_vars;
111 for (
const auto & dirac_kernel : dkernels)
115 if (dirac_kernel->getMaterialPropertyCalled())
122 for (
const auto & dirac_kernel : dkernels)
124 if (!dirac_kernel->hasPointsOnElem(elem))
129 dirac_kernel->computeResidual();
134 dirac_kernel->computeResidualAndJacobian();
139 const auto & coupling_entries =
140 dirac_kernel->subProblem().assembly(
_tid,
_nl.
number()).couplingEntries();
143 for (
const auto & it : coupling_entries)
153 if (dirac_kernel->variable().number() == ivariable->
number() &&
157 dirac_kernel->prepareShapes(jvariable->
number());
158 dirac_kernel->computeOffDiagJacobian(jvariable->
number());
208 console <<
"[DBG] Ordering of DiracKernels on subdomain " <<
_subdomain << std::endl;
209 printExecutionOrdering<DiracKernelBase>(dkernels,
false);
StoredRange< std::set< const Elem * >::const_iterator, const Elem * > DistElemRange
virtual void subdomainChanged() override
Called every time the current subdomain changes (i.e.
virtual void postElement(const Elem *) override
Called after the element assembly is done (including surface assembling)
virtual void pre() override
Called before the element range loop.
Moose::ComputeType _compute_type
MooseObjectTagWarehouse< DiracKernelBase > & _dirac_kernels
Storage for DiracKernel objects.
virtual ~ComputeDiracThread()
void join(const ComputeDiracThread &)
virtual void post() override
Called after the element range loop.
MooseObjectWarehouse< DiracKernelBase > * _dirac_warehouse
ComputeDiracThread(FEProblemBase &feproblem, const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags, Moose::ComputeType compute_type)
const std::set< TagID > & _matrix_tags
NonlinearSystemBase & _nl
virtual void onElement(const Elem *elem) override
Assembly of the element (not including surface assembly)
void printBlockExecutionInformation() const override
Output the order of execution of objects within the current subdomain.
const std::set< TagID > & _vector_tags
void printGeneralExecutionInformation() const override
Output a message indicating execution on this execution flag.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual bool reinitDirac(const Elem *elem, const THREAD_ID tid) override
Returns true if the Problem has Dirac kernels it needs to compute on elem.
virtual void addResidual(const THREAD_ID tid) override
virtual void addJacobian(const THREAD_ID tid) override
void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true)
void clearActiveMaterialProperties(const THREAD_ID tid)
Clear the active material properties.
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override
Clear the active elemental MooseVariableFEBase.
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
void setActiveMaterialProperties(const std::unordered_set< unsigned int > &mat_prop_ids, const THREAD_ID tid)
Record and set the material properties required by the current computing thread.
virtual void setActiveElementalMooseVariables(const std::set< MooseVariableFEBase * > &moose_vars, const THREAD_ID tid) override
Set the MOOSE variables to be reinited on each element.
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
const std::string & name() const
MooseObjectWarehouse< T > & getVectorTagObjectWarehouse(TagID tag_id, THREAD_ID tid)
Retrieve a moose object warehouse in which every moose object has the given vector tag.
MooseObjectWarehouse< T > & getMatrixTagsObjectWarehouse(const std::set< TagID > &tags, THREAD_ID tid)
Retrieve a moose object warehouse in which every moose object has one of the given matrix tags.
MooseObjectWarehouse< T > & getVectorTagsObjectWarehouse(const std::set< TagID > &tags, THREAD_ID tid)
Retrieve a moose object warehouse in which every moose object at least has one of the given vector ta...
MooseObjectWarehouse< T > & getMatrixTagObjectWarehouse(TagID tag_id, THREAD_ID tid)
Retrieve a moose object warehouse in which every moose object has the given matrix tag.
void updateVariableDependency(std::set< MooseVariableFieldBase * > &needed_moose_vars, THREAD_ID tid=0) const
Update variable dependency vector.
const std::map< SubdomainID, std::vector< std::shared_ptr< T > > > & getActiveBlockObjects(THREAD_ID tid=0) const
void updateMatPropDependency(std::unordered_set< unsigned int > &needed_mat_props, THREAD_ID tid=0, const bool producer_only=false) const
Update material property dependency vector.
bool hasActiveBlockObjects(THREAD_ID tid=0) const
const std::vector< std::shared_ptr< T > > & getActiveObjects(THREAD_ID tid=0) const
Retrieve complete vector to the active all/block/boundary restricted objects for a given thread.
virtual unsigned int numberOfDofs() const
Get the number of local DoFs.
unsigned int number() const
Get variable number coming from libMesh.
This class provides an interface for common operations on field variables of both FE and FV types wit...
bool activeOnSubdomain(SubdomainID subdomain) const
Is the variable active on the subdomain?
const ConsoleStream & console() const
Return console handle.
virtual unsigned int numMatrixTags() const
The total number of tags.
unsigned int number() const
Gets the number of this system.
SubdomainID _subdomain
The subdomain for the current element.
std::set< SubdomainID > _blocks_exec_printed
Keep track of which blocks were visited.
Base class for assembly-like calculations.
FEProblemBase & _fe_problem
ComputeType
The type of nonlinear computation being performed.