17 const unsigned int system_num,
19 const std::set<TagID> & vector_tags,
20 const std::set<TagID> & matrix_tags)
21 : _fe_problem(fe_problem),
22 _system_number(system_num),
24 _vector_tags(vector_tags),
25 _matrix_tags(matrix_tags),
26 _system_contrib_objects_ready(false)
33 : _fe_problem(x._fe_problem),
34 _system_number(x._system_number),
36 _vector_tags(x._vector_tags),
37 _matrix_tags(x._matrix_tags),
38 _system_contrib_objects_ready(x._system_contrib_objects_ready)
55 for (
const auto & face_info : range)
59 face_info->neighborPtr() ? face_info->neighbor().subdomain_id() :
_subdomain;
66 const Real face_area = face_info->faceArea() * face_info->faceCoord();
72 kernel->setupFaceData(face_info);
73 kernel->setCurrentFaceArea(face_area);
74 kernel->addMatrixContribution();
75 kernel->addRightHandSideContribution();
90 std::vector<LinearFVFluxKernel *> kernels_after_vectors;
94 .template condition<AttribSystem>(
"LinearFVFluxKernel")
95 .template condition<AttribKokkos>(
false)
96 .template condition<AttribThread>(
_tid)
100 std::vector<LinearFVFluxKernel *> kernels_after_matrices;
104 .template condition<AttribSystem>(
"LinearFVFluxKernel")
105 .template condition<AttribKokkos>(
false)
106 .template condition<AttribThread>(
_tid)
111 std::vector<LinearFVFluxKernel *> kernels;
112 MooseUtils::getUnion(kernels_after_vectors, kernels_after_matrices, kernels);
115 for (
auto & kernel : kernels)
125 "The system contribution objects need to be set up before we fetch the "
126 "block-restricted objects!");
133 std::vector<LinearFVFluxKernel *> kernels_after_vector;
137 .template condition<AttribSystem>(
"LinearFVFluxKernel")
138 .template condition<AttribKokkos>(
false)
139 .template condition<AttribThread>(
_tid)
141 .template condition<AttribSubdomains>(
_subdomain)
143 std::vector<LinearFVFluxKernel *> kernels_after_matrix;
147 .template condition<AttribSystem>(
"LinearFVFluxKernel")
148 .template condition<AttribKokkos>(
false)
149 .template condition<AttribThread>(
_tid)
151 .template condition<AttribSubdomains>(
_subdomain)
163 std::vector<LinearFVFluxKernel *> kernels_after_vector;
167 .template condition<AttribSystem>(
"LinearFVFluxKernel")
168 .template condition<AttribKokkos>(
false)
169 .template condition<AttribThread>(
_tid)
173 std::vector<LinearFVFluxKernel *> kernels_after_matrix;
177 .template condition<AttribSystem>(
"LinearFVFluxKernel")
178 .template condition<AttribKokkos>(
false)
179 .template condition<AttribThread>(
_tid)
198 console <<
"[DBG] Beginning linear finite volume flux objects loop on " << execute_on
200 mooseDoOnce(console <<
"[DBG] Loop on faces (FaceInfo), objects ordered on each face: "
202 console <<
"[DBG] - linear finite volume flux kernels" << std::endl);
213 console <<
"[DBG] Linear flux kernels on block "
219 console <<
" with no neighbor block" << std::endl;
222 std::vector<MooseObject *> kernels_to_print;
224 kernels_to_print.push_back(
dynamic_cast<MooseObject *
>(kernel));
Adds contributions from face terms discretized using the finite volume method to the matrix and right...
const std::set< TagID > & _vector_tags
The vector tags this thread contributes to.
void join(const ComputeLinearFVFaceThread &)
Join threads at the end of the execution.
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
SubdomainID _old_neighbor_subdomain
The subdomain for the last neighbor.
void operator()(const FaceInfoRange &range)
Operator which is used to execute the thread over a certain iterator range.
std::set< LinearFVFluxKernel * > _fv_flux_kernels
Combined LinearFVFluxKernels which will be used to contribute to a system.
const std::set< TagID > & _matrix_tags
The matrix tags this thread contributes to.
FEProblemBase & _fe_problem
Reference to the problem.
void printBlockExecutionInformation() const
Print ordering of objects executed on each block.
StoredRange< MooseMesh::const_face_info_iterator, const FaceInfo * > FaceInfoRange
std::vector< LinearFVFluxKernel * > _fv_flux_kernels_elem
Kernels which will only contribute to a matrix from the element-side of the face.
SubdomainID _subdomain
The subdomain for the current element.
std::vector< LinearFVFluxKernel * > _fv_flux_kernels_neighbor
Kernels which will only contribute to a matrix from the neighbor-side of the face.
void fetchBlockSystemContributionObjects()
Fetch LinearFVFluxKernels for a given block.
void setupSystemContributionObjects()
Setup the contribution objects before we start the loop.
SubdomainID _old_subdomain
The subdomain for the last element.
const unsigned int _system_number
The number of the linear system we are contributing to.
ComputeLinearFVFaceThread(FEProblemBase &fe_problem, const unsigned int linear_system_num, const Moose::FV::LinearFVComputationMode mode, const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags)
Class constructor.
bool _system_contrib_objects_ready
Boolean that is used to check if the kernels are ready to start contributing to the system.
void printGeneralExecutionInformation() const
Print list of executed object types together with the execution order.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
virtual MooseMesh & mesh() override
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
TheWarehouse & theWarehouse() const
const std::string & getSubdomainName(SubdomainID subdomain_id) const
Return the name of a block given an id.
Every object that can be built by the factory should be derived from this class.
const ConsoleStream & console() const
Return console handle.
std::vector< T * > & queryInto(std::vector< T * > &results, Args &&... args)
queryInto executes the query and stores the results in the given vector.
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse.
std::string formatString(std::string message, const std::string &prefix)
Add new lines and prefixes to a string for pretty display in output NOTE: This makes a copy of the st...
std::string mooseObjectVectorToString(const std::vector< MooseObject * > &objs, const std::string &sep=" ")
Routine to output the name of MooseObjects in a string.
const SubdomainID INVALID_BLOCK_ID