https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
ComputeLinearFVFaceThread Class Reference

Adds contributions from face terms discretized using the finite volume method to the matrix and right hand side of a linear system. More...

#include <ComputeLinearFVFaceThread.h>

Public Types

using FaceInfoRange = StoredRange< MooseMesh::const_face_info_iterator, const FaceInfo * >
 

Public Member Functions

 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.
 
 ComputeLinearFVFaceThread (ComputeLinearFVFaceThread &x, Threads::split split)
 Splitting constructor.
 
void operator() (const FaceInfoRange &range)
 Operator which is used to execute the thread over a certain iterator range.
 
void join (const ComputeLinearFVFaceThread &)
 Join threads at the end of the execution.
 

Protected Member Functions

void setupSystemContributionObjects ()
 Setup the contribution objects before we start the loop.
 
void fetchBlockSystemContributionObjects ()
 Fetch LinearFVFluxKernels for a given block.
 
void printGeneralExecutionInformation () const
 Print list of executed object types together with the execution order.
 
void printBlockExecutionInformation () const
 Print ordering of objects executed on each block.
 

Protected Attributes

FEProblemBase_fe_problem
 Reference to the problem.
 
const unsigned int _system_number
 The number of the linear system we are contributing to.
 
const Moose::FV::LinearFVComputationMode _mode
 The mode in which this thread is operating.
 
const std::set< TagID > & _vector_tags
 The vector tags this thread contributes to.
 
const std::set< TagID > & _matrix_tags
 The matrix tags this thread contributes to.
 
SubdomainID _subdomain
 The subdomain for the current element.
 
SubdomainID _old_subdomain
 The subdomain for the last element.
 
SubdomainID _neighbor_subdomain
 The subdomain for the current neighbor.
 
SubdomainID _old_neighbor_subdomain
 The subdomain for the last neighbor.
 
THREAD_ID _tid
 Thread ID.
 
std::vector< LinearFVFluxKernel * > _fv_flux_kernels_elem
 Kernels which will only contribute to a matrix from the element-side of the face.
 
std::vector< LinearFVFluxKernel * > _fv_flux_kernels_neighbor
 Kernels which will only contribute to a matrix from the neighbor-side of the face.
 
std::set< LinearFVFluxKernel * > _fv_flux_kernels
 Combined LinearFVFluxKernels which will be used to contribute to a system.
 

Private Attributes

bool _system_contrib_objects_ready
 Boolean that is used to check if the kernels are ready to start contributing to the system.
 

Detailed Description

Adds contributions from face terms discretized using the finite volume method to the matrix and right hand side of a linear system.

Definition at line 27 of file ComputeLinearFVFaceThread.h.

Member Typedef Documentation

◆ FaceInfoRange

Definition at line 53 of file ComputeLinearFVFaceThread.h.

Constructor & Destructor Documentation

◆ ComputeLinearFVFaceThread() [1/2]

ComputeLinearFVFaceThread::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.

Parameters
fe_problemReference to the problem
linear_system_numThe number of the linear system which is assembled by this thread
modeComputation mode (rhs, matrix or both)
vector_tagsThe vector tags this thread should contribute to. These are used to query the warehouse for the objects that should contribute to the right hand side.
matrix_tagsThe matrix tags this thread should contribute to. These are used to query the warehouse for the objects that should contribute to the matrix.

Definition at line 16 of file ComputeLinearFVFaceThread.C.

21 : _fe_problem(fe_problem),
22 _system_number(system_num),
23 _mode(mode),
24 _vector_tags(vector_tags),
25 _matrix_tags(matrix_tags),
27{
28}
const std::set< TagID > & _vector_tags
The vector tags this thread contributes to.
const std::set< TagID > & _matrix_tags
The matrix tags this thread contributes to.
FEProblemBase & _fe_problem
Reference to the problem.
const Moose::FV::LinearFVComputationMode _mode
The mode in which this thread is operating.
const unsigned int _system_number
The number of the linear system we are contributing to.
bool _system_contrib_objects_ready
Boolean that is used to check if the kernels are ready to start contributing to the system.

◆ ComputeLinearFVFaceThread() [2/2]

ComputeLinearFVFaceThread::ComputeLinearFVFaceThread ( ComputeLinearFVFaceThread x,
Threads::split  split 
)

Splitting constructor.

Parameters
xReference to the other thread
splitThe thread split

Definition at line 31 of file ComputeLinearFVFaceThread.C.

Member Function Documentation

◆ fetchBlockSystemContributionObjects()

void ComputeLinearFVFaceThread::fetchBlockSystemContributionObjects ( )
protected

Fetch LinearFVFluxKernels for a given block.

We only call this when we transition from one block to another.

Definition at line 122 of file ComputeLinearFVFaceThread.C.

123{
125 "The system contribution objects need to be set up before we fetch the "
126 "block-restricted objects!");
127
128 _fv_flux_kernels.clear();
129
131 {
132 // We just filter based on subdomain ID on top of everything else
133 std::vector<LinearFVFluxKernel *> kernels_after_vector;
135 .query()
136 .template condition<AttribSysNum>(_system_number)
137 .template condition<AttribSystem>("LinearFVFluxKernel")
138 .template condition<AttribKokkos>(false)
139 .template condition<AttribThread>(_tid)
140 .template condition<AttribVectorTags>(_vector_tags)
141 .template condition<AttribSubdomains>(_subdomain)
142 .queryInto(kernels_after_vector);
143 std::vector<LinearFVFluxKernel *> kernels_after_matrix;
145 .query()
146 .template condition<AttribSysNum>(_system_number)
147 .template condition<AttribSystem>("LinearFVFluxKernel")
148 .template condition<AttribKokkos>(false)
149 .template condition<AttribThread>(_tid)
150 .template condition<AttribMatrixTags>(_matrix_tags)
151 .template condition<AttribSubdomains>(_subdomain)
152 .queryInto(kernels_after_matrix);
153
154 // We populate the list of kernels with the union of the two vectors
155 MooseUtils::getUnion(kernels_after_vector, kernels_after_matrix, _fv_flux_kernels_elem);
157 }
159
161 {
162 // Here we just filter based on subdomain ID on top of everything else
163 std::vector<LinearFVFluxKernel *> kernels_after_vector;
165 .query()
166 .template condition<AttribSysNum>(_system_number)
167 .template condition<AttribSystem>("LinearFVFluxKernel")
168 .template condition<AttribKokkos>(false)
169 .template condition<AttribThread>(_tid)
170 .template condition<AttribVectorTags>(_vector_tags)
171 .template condition<AttribSubdomains>(_neighbor_subdomain)
172 .queryInto(kernels_after_vector);
173 std::vector<LinearFVFluxKernel *> kernels_after_matrix;
175 .query()
176 .template condition<AttribSysNum>(_system_number)
177 .template condition<AttribSystem>("LinearFVFluxKernel")
178 .template condition<AttribKokkos>(false)
179 .template condition<AttribThread>(_tid)
180 .template condition<AttribMatrixTags>(_matrix_tags)
181 .template condition<AttribSubdomains>(_neighbor_subdomain)
182 .queryInto(kernels_after_matrix);
183
184 // We populate the list of kernels with the union of the two vectors
185 MooseUtils::getUnion(kernels_after_vector, kernels_after_matrix, _fv_flux_kernels_neighbor);
187 }
189}
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
SubdomainID _old_neighbor_subdomain
The subdomain for the last neighbor.
std::set< LinearFVFluxKernel * > _fv_flux_kernels
Combined LinearFVFluxKernels which will be used to contribute to a system.
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.
SubdomainID _old_subdomain
The subdomain for the last element.
TheWarehouse & theWarehouse() const
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.

Referenced by operator()().

◆ join()

void ComputeLinearFVFaceThread::join ( const ComputeLinearFVFaceThread )

Join threads at the end of the execution.

Definition at line 81 of file ComputeLinearFVFaceThread.C.

82{
83}

◆ operator()()

void ComputeLinearFVFaceThread::operator() ( const FaceInfoRange range)

Operator which is used to execute the thread over a certain iterator range.

Parameters
rangeThe range of FaceInfos which should be computed.

Definition at line 43 of file ComputeLinearFVFaceThread.C.

44{
46 _tid = puid.id;
47
50
53
54 // Iterate over all the elements in the range
55 for (const auto & face_info : range)
56 {
57 _subdomain = face_info->elem().subdomain_id();
59 face_info->neighborPtr() ? face_info->neighbor().subdomain_id() : _subdomain;
61 {
64 }
65
66 const Real face_area = face_info->faceArea() * face_info->faceCoord();
67
68 // Time to execute the kernels that contribute to the matrix and
69 // right hand side
70 for (auto & kernel : _fv_flux_kernels)
71 {
72 kernel->setupFaceData(face_info);
73 kernel->setCurrentFaceArea(face_area);
74 kernel->addMatrixContribution();
75 kernel->addRightHandSideContribution();
76 }
77 }
78}
void printBlockExecutionInformation() const
Print ordering of objects executed on each block.
void fetchBlockSystemContributionObjects()
Fetch LinearFVFluxKernels for a given block.
void setupSystemContributionObjects()
Setup the contribution objects before we start the loop.
void printGeneralExecutionInformation() const
Print list of executed object types together with the execution order.
const SubdomainID INVALID_BLOCK_ID
Definition MooseTypes.C:20
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ printBlockExecutionInformation()

void ComputeLinearFVFaceThread::printBlockExecutionInformation ( ) const
protected

Print ordering of objects executed on each block.

Definition at line 206 of file ComputeLinearFVFaceThread.C.

207{
209 return;
210
211 // Print the location of the execution
212 auto & console = _fe_problem.console();
213 console << "[DBG] Linear flux kernels on block "
216 console << " and neighbor " << _fe_problem.mesh().getSubdomainName(_neighbor_subdomain)
217 << std::endl;
218 else
219 console << " with no neighbor block" << std::endl;
220
221 // Print the list of objects
222 std::vector<MooseObject *> kernels_to_print;
223 for (const auto & kernel : _fv_flux_kernels)
224 kernels_to_print.push_back(dynamic_cast<MooseObject *>(kernel));
226 "[DBG]")
227 << std::endl;
228}
virtual MooseMesh & mesh() override
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
const std::string & getSubdomainName(SubdomainID subdomain_id) const
Return the name of a block given an id.
Definition MooseMesh.C:1751
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
const ConsoleStream & console() const
Return console handle.
Definition Problem.h:48
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.

Referenced by operator()().

◆ printGeneralExecutionInformation()

void ComputeLinearFVFaceThread::printGeneralExecutionInformation ( ) const
protected

Print list of executed object types together with the execution order.

Definition at line 192 of file ComputeLinearFVFaceThread.C.

193{
195 return;
196 auto & console = _fe_problem.console();
197 auto execute_on = _fe_problem.getCurrentExecuteOnFlag();
198 console << "[DBG] Beginning linear finite volume flux objects loop on " << execute_on
199 << std::endl;
200 mooseDoOnce(console << "[DBG] Loop on faces (FaceInfo), objects ordered on each face: "
201 << std::endl;
202 console << "[DBG] - linear finite volume flux kernels" << std::endl);
203}
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.

Referenced by operator()().

◆ setupSystemContributionObjects()

void ComputeLinearFVFaceThread::setupSystemContributionObjects ( )
protected

Setup the contribution objects before we start the loop.

Definition at line 86 of file ComputeLinearFVFaceThread.C.

87{
88 // The reason why we need to grab vectors and matrices separately is that
89 // we want to grab a union instead of an intersection.
90 std::vector<LinearFVFluxKernel *> kernels_after_vectors;
92 .query()
93 .template condition<AttribSysNum>(_system_number)
94 .template condition<AttribSystem>("LinearFVFluxKernel")
95 .template condition<AttribKokkos>(false)
96 .template condition<AttribThread>(_tid)
97 .template condition<AttribVectorTags>(_vector_tags)
98 .queryInto(kernels_after_vectors);
99
100 std::vector<LinearFVFluxKernel *> kernels_after_matrices;
102 .query()
103 .template condition<AttribSysNum>(_system_number)
104 .template condition<AttribSystem>("LinearFVFluxKernel")
105 .template condition<AttribKokkos>(false)
106 .template condition<AttribThread>(_tid)
107 .template condition<AttribMatrixTags>(_matrix_tags)
108 .queryInto(kernels_after_matrices);
109
110 // We fetch the union of the available objects
111 std::vector<LinearFVFluxKernel *> kernels;
112 MooseUtils::getUnion(kernels_after_vectors, kernels_after_matrices, kernels);
113
114 // As a last step, we make sure the kernels know which vectors/matrices they need to contribute to
115 for (auto & kernel : kernels)
116 kernel->linkTaggedVectorsAndMatrices(_vector_tags, _matrix_tags);
117
119}

Referenced by operator()().

Member Data Documentation

◆ _fe_problem

FEProblemBase& ComputeLinearFVFaceThread::_fe_problem
protected

◆ _fv_flux_kernels

std::set<LinearFVFluxKernel *> ComputeLinearFVFaceThread::_fv_flux_kernels
protected

Combined LinearFVFluxKernels which will be used to contribute to a system.

Definition at line 114 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), operator()(), and printBlockExecutionInformation().

◆ _fv_flux_kernels_elem

std::vector<LinearFVFluxKernel *> ComputeLinearFVFaceThread::_fv_flux_kernels_elem
protected

Kernels which will only contribute to a matrix from the element-side of the face.

Definition at line 107 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects().

◆ _fv_flux_kernels_neighbor

std::vector<LinearFVFluxKernel *> ComputeLinearFVFaceThread::_fv_flux_kernels_neighbor
protected

Kernels which will only contribute to a matrix from the neighbor-side of the face.

Definition at line 111 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects().

◆ _matrix_tags

const std::set<TagID>& ComputeLinearFVFaceThread::_matrix_tags
protected

The matrix tags this thread contributes to.

Definition at line 88 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), and setupSystemContributionObjects().

◆ _mode

const Moose::FV::LinearFVComputationMode ComputeLinearFVFaceThread::_mode
protected

The mode in which this thread is operating.

Definition at line 82 of file ComputeLinearFVFaceThread.h.

◆ _neighbor_subdomain

SubdomainID ComputeLinearFVFaceThread::_neighbor_subdomain
protected

The subdomain for the current neighbor.

Definition at line 97 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), operator()(), and printBlockExecutionInformation().

◆ _old_neighbor_subdomain

SubdomainID ComputeLinearFVFaceThread::_old_neighbor_subdomain
protected

The subdomain for the last neighbor.

Definition at line 100 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), and operator()().

◆ _old_subdomain

SubdomainID ComputeLinearFVFaceThread::_old_subdomain
protected

The subdomain for the last element.

Definition at line 94 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), and operator()().

◆ _subdomain

SubdomainID ComputeLinearFVFaceThread::_subdomain
protected

The subdomain for the current element.

Definition at line 91 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), operator()(), and printBlockExecutionInformation().

◆ _system_contrib_objects_ready

bool ComputeLinearFVFaceThread::_system_contrib_objects_ready
private

Boolean that is used to check if the kernels are ready to start contributing to the system.

Definition at line 119 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), and setupSystemContributionObjects().

◆ _system_number

const unsigned int ComputeLinearFVFaceThread::_system_number
protected

The number of the linear system we are contributing to.

Definition at line 79 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), and setupSystemContributionObjects().

◆ _tid

THREAD_ID ComputeLinearFVFaceThread::_tid
protected

◆ _vector_tags

const std::set<TagID>& ComputeLinearFVFaceThread::_vector_tags
protected

The vector tags this thread contributes to.

Definition at line 85 of file ComputeLinearFVFaceThread.h.

Referenced by fetchBlockSystemContributionObjects(), and setupSystemContributionObjects().


The documentation for this class was generated from the following files: