https://mooseframework.inl.gov
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeFVFluxResidualThread< RangeType > Class Template Reference

#include <ComputeFVFluxThread.h>

Inheritance diagram for ComputeFVFluxResidualThread< RangeType >:
[legend]

Public Member Functions

 ComputeFVFluxResidualThread (FEProblemBase &fe_problem, const unsigned int nl_system_num, const std::set< TagID > &tags, bool on_displaced)
 
 ComputeFVFluxResidualThread (ComputeFVFluxResidualThread &x, Threads::split split)
 
virtual void onFace (const FaceInfo &fi) override
 
virtual void pre () override
 This is called once before all face-looping. More...
 
virtual void post () override
 This is called once after all face-looping is finished. More...
 
virtual void onBoundary (const FaceInfo &fi, BoundaryID boundary) override
 This is called once for every face that is on a boundary after onFace is called for the face. More...
 
virtual void subdomainChanged () override
 Called every time the current subdomain changes (i.e. More...
 
virtual void neighborSubdomainChanged () override
 Called every time the neighbor subdomain changes (i.e. More...
 
virtual void operator() (const RangeType &range, bool bypass_threading=false)
 
void join (const ThreadedFaceLoop &y)
 
void caughtMooseException (MooseException &e)
 Called if a MooseException is caught anywhere during the computation. More...
 

Protected Member Functions

void postFace (const FaceInfo &fi) override
 This is called once for each face after all face and boundary callbacks have been finished for that face. More...
 
void compute (FVFaceResidualObject &ro, const FaceInfo &fi) override
 call either computeResidual, computeJacobian, or computeResidualAndJacobian on the provided residual object depending on what derived class of this class is instantiated More...
 
void setup (SetupInterface &obj) override
 call either residualSetup or jacobianSetup depending on what derived class of this class is instantiated More...
 
void addCached () override
 call either addCachedJacobian or addCachedResidual or both depending on what derived class of this class is instantiated More...
 
void resetExecutionPrinting ()
 Reset lists of blocks and boundaries for which execution printing has been done. More...
 

Protected Attributes

unsigned int _num_cached
 
FEProblemBase_fe_problem
 
MooseMesh_mesh
 
const std::set< TagID > & _tags
 
THREAD_ID _tid
 
const unsigned int _nl_system_num
 
const bool _on_displaced
 Whether this loop is operating on the displaced mesh. More...
 
SubProblem_subproblem
 FEProblemBase or DisplacedProblem depending on _on_displaced. More...
 
SubdomainID _subdomain
 The subdomain for the current element. More...
 
SubdomainID _old_subdomain
 The subdomain for the last element. More...
 
SubdomainID _neighbor_subdomain
 The subdomain for the current neighbor. More...
 
SubdomainID _old_neighbor_subdomain
 The subdomain for the last neighbor. More...
 
std::set< std::pair< const SubdomainID, const SubdomainID > > _blocks_exec_printed
 Set to keep track of blocks for which we have printed the execution pattern. More...
 
std::set< BoundaryID_boundaries_exec_printed
 Set to keep track of boundaries for which we have printed the execution pattern. More...
 
std::string _error_message
 Holds caught runtime error messages. More...
 

Detailed Description

template<typename RangeType>
class ComputeFVFluxResidualThread< RangeType >

Definition at line 809 of file ComputeFVFluxThread.h.

Constructor & Destructor Documentation

◆ ComputeFVFluxResidualThread() [1/2]

template<typename RangeType >
ComputeFVFluxResidualThread< RangeType >::ComputeFVFluxResidualThread ( FEProblemBase fe_problem,
const unsigned int  nl_system_num,
const std::set< TagID > &  tags,
bool  on_displaced 
)

Definition at line 833 of file ComputeFVFluxThread.h.

838  : ComputeFVFluxThread<RangeType, AttribVectorTags>(fe_problem, nl_system_num, tags, on_displaced)
839 {
840 }

◆ ComputeFVFluxResidualThread() [2/2]

template<typename RangeType >
ComputeFVFluxResidualThread< RangeType >::ComputeFVFluxResidualThread ( ComputeFVFluxResidualThread< RangeType > &  x,
Threads::split  split 
)

Member Function Documentation

◆ addCached()

template<typename RangeType>
void ComputeFVFluxResidualThread< RangeType >::addCached ( )
inlineoverrideprotectedvirtual

call either addCachedJacobian or addCachedResidual or both depending on what derived class of this class is instantiated

Implements ComputeFVFluxThread< RangeType, AttribVectorTags >.

Definition at line 829 of file ComputeFVFluxThread.h.

829 { this->_subproblem.SubProblem::addCachedResidual(_tid); }
SubProblem & _subproblem
FEProblemBase or DisplacedProblem depending on _on_displaced.

◆ caughtMooseException()

template<typename RangeType>
void ThreadedFaceLoop< RangeType >::caughtMooseException ( MooseException e)
inlineinherited

Called if a MooseException is caught anywhere during the computation.

Definition at line 114 of file ComputeFVFluxThread.h.

115  {
116  Threads::spin_mutex::scoped_lock lock(threaded_element_mutex);
117  std::string what(e.what());
119  }
virtual const char * what() const
Get out the error message.
FEProblemBase & _fe_problem
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class...
static Threads::spin_mutex threaded_element_mutex
This mutex is used by all derived classes of the ThreadedElementLoop.

◆ compute()

template<typename RangeType>
void ComputeFVFluxResidualThread< RangeType >::compute ( FVFaceResidualObject ro,
const FaceInfo fi 
)
inlineoverrideprotectedvirtual

call either computeResidual, computeJacobian, or computeResidualAndJacobian on the provided residual object depending on what derived class of this class is instantiated

Implements ComputeFVFluxThread< RangeType, AttribVectorTags >.

Definition at line 827 of file ComputeFVFluxThread.h.

827 { ro.computeResidual(fi); }
virtual void computeResidual(const FaceInfo &fi)=0
Compute the residual on the supplied face.

◆ join()

template<typename RangeType >
void ThreadedFaceLoop< RangeType >::join ( const ThreadedFaceLoop< RangeType > &  y)
inherited

Definition at line 225 of file ComputeFVFluxThread.h.

226 {
227  if (_error_message.empty() && !y._error_message.empty())
229 }
std::string _error_message
Holds caught runtime error messages.

◆ neighborSubdomainChanged()

void ComputeFVFluxThread< RangeType, AttribVectorTags >::neighborSubdomainChanged ( )
overridevirtualinherited

Called every time the neighbor subdomain changes (i.e.

the subdomain of this face's neighbor element is not the same as the subdomain of the last face's neighbor element).

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 685 of file ComputeFVFluxThread.h.

686 {
688 
689  // Clear variables
690  _fv_vars.clear();
691  _neigh_sub_fv_vars.clear();
692 
693  // Clear kernels
694  _fv_flux_kernels.clear();
696 
697  // Clear element face materials
698  _elem_face_mats.clear();
700 
701  // Clear neighbor face materials
702  _neigh_face_mats.clear();
704 
705  // TODO: do this for other relevant objects - like FV BCs, FV source term
706  // kernels, etc. - but we don't need to add them for other types of objects
707  // like FE or DG kernels because those kernels don't run in this loop. Do we
708  // really want to integrate fv source kernels into this loop?
709  std::vector<FVFluxKernel *> kernels;
711  .query()
712  .template condition<AttribSysNum>(_nl_system_num)
713  .template condition<AttribSystem>("FVFluxKernel")
714  .template condition<AttribDisplaced>(_on_displaced)
715  .template condition<AttribSubdomains>(_neighbor_subdomain)
716  .template condition<AttribThread>(_tid)
717  .template condition<AttributeTagType>(_tags)
718  .queryInto(kernels);
719 
720  _neigh_sub_fv_flux_kernels = std::set<FVFluxKernel *>(kernels.begin(), kernels.end());
721 
722  for (auto * k : _neigh_sub_fv_flux_kernels)
723  {
724  // TODO: we need a better way to do this - especially when FE objects begin to
725  // couple to FV vars. This code shoud be refactored out into one place
726  // where it is easy for users to say initialize all materials and
727  // variables needed by these objects for me.
728  const auto & deps = k->getMooseVariableDependencies();
729  for (auto var : deps)
730  {
731  mooseAssert(var->isFV(),
732  "We do not currently support coupling of FE variables into FV objects");
733  _neigh_sub_fv_vars.insert(var);
734  }
735  }
736 
741  _tid);
742 
744 }
std::vector< std::shared_ptr< MaterialBase > > _neigh_face_mats
void getFVMatsAndDependencies(SubdomainID block_id, std::vector< std::shared_ptr< MaterialBase >> &face_materials, std::vector< std::shared_ptr< MaterialBase >> &neighbor_materials, std::set< MooseVariableFieldBase *> &variables, const THREAD_ID tid)
Get the materials and variables potentially needed for FV.
const unsigned int _nl_system_num
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_neigh_face_mats
FEProblemBase & _fe_problem
std::vector< T * > & queryInto(std::vector< T *> &results, Args &&... args)
queryInto executes the query and stores the results in the given vector.
Definition: TheWarehouse.h:311
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_elem_face_mats
std::set< MooseVariableFieldBase *> _neigh_sub_fv_vars
const std::set< TagID > & _tags
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
virtual void neighborSubdomainChanged()
Called every time the neighbor subdomain changes (i.e.
TheWarehouse & theWarehouse() const
std::vector< std::shared_ptr< MaterialBase > > _elem_face_mats
Element face materials.
std::set< FVFluxKernel *> _fv_flux_kernels
FVFluxKernels.
std::set< MooseVariableFieldBase *> _fv_vars
Variables.
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466
const bool _on_displaced
Whether this loop is operating on the displaced mesh.

◆ onBoundary()

void ComputeFVFluxThread< RangeType, AttribVectorTags >::onBoundary ( const FaceInfo fi,
BoundaryID  boundary 
)
overridevirtualinherited

This is called once for every face that is on a boundary after onFace is called for the face.

Implements ThreadedFaceLoop< RangeType >.

Definition at line 521 of file ComputeFVFluxThread.h.

522 {
524  return;
525 
526  std::vector<FVFluxBC *> bcs;
528  .query()
529  .template condition<AttribSysNum>(_nl_system_num)
530  .template condition<AttribSystem>("FVFluxBC")
531  .template condition<AttribDisplaced>(_on_displaced)
532  .template condition<AttribThread>(_tid)
533  .template condition<AttributeTagType>(_tags)
534  .template condition<AttribBoundaries>(bnd_id)
535  .queryInto(bcs);
536 
537  for (auto * const bc : bcs)
538  compute(*bc, fi);
539 
540  std::vector<FVInterfaceKernel *> iks;
542  .query()
543  .template condition<AttribSysNum>(_nl_system_num)
544  .template condition<AttribSystem>("FVInterfaceKernel")
545  .template condition<AttribDisplaced>(_on_displaced)
546  .template condition<AttribThread>(_tid)
547  .template condition<AttributeTagType>(_tags)
548  .template condition<AttribBoundaries>(bnd_id)
549  .queryInto(iks);
550 
551  for (auto * const ik : iks)
552  compute(*ik, fi);
553 }
const unsigned int _nl_system_num
FEProblemBase & _fe_problem
std::vector< T * > & queryInto(std::vector< T *> &results, Args &&... args)
queryInto executes the query and stores the results in the given vector.
Definition: TheWarehouse.h:311
virtual void compute(FVFaceResidualObject &ro, const FaceInfo &fi)=0
call either computeResidual, computeJacobian, or computeResidualAndJacobian on the provided residual ...
const std::set< TagID > & _tags
TheWarehouse & theWarehouse() const
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466
const bool _on_displaced
Whether this loop is operating on the displaced mesh.

◆ onFace()

void ComputeFVFluxThread< RangeType, AttribVectorTags >::onFace ( const FaceInfo fi)
overridevirtualinherited

Implements ThreadedFaceLoop< RangeType >.

Definition at line 511 of file ComputeFVFluxThread.h.

512 {
513  reinitVariables(fi);
514 
515  for (auto * const k : _fv_flux_kernels)
516  compute(*k, fi);
517 }
virtual void compute(FVFaceResidualObject &ro, const FaceInfo &fi)=0
call either computeResidual, computeJacobian, or computeResidualAndJacobian on the provided residual ...
std::set< FVFluxKernel *> _fv_flux_kernels
FVFluxKernels.

◆ operator()()

template<typename RangeType >
void ThreadedFaceLoop< RangeType >::operator() ( const RangeType &  range,
bool  bypass_threading = false 
)
virtualinherited

Definition at line 239 of file ComputeFVFluxThread.h.

240 {
241  // TODO: make this query fv flux kernel specific or somehow integrate the
242  // fv source kernels into this loop. Also this check will need to increase
243  // in generality if/when other systems and objects besides FV stuff get
244  // added to this loop.
245  std::vector<FVKernel *> kernels;
247  .query()
248  .template condition<AttribSysNum>(_nl_system_num)
249  .template condition<AttribSystem>("FVFluxKernel")
250  .template condition<AttribDisplaced>(_on_displaced)
251  .queryInto(kernels);
252  if (kernels.size() == 0)
253  return;
254 
255  try
256  {
257  try
258  {
259  ParallelUniqueId puid;
260  _tid = bypass_threading ? 0 : puid.id;
261 
262  pre();
264 
267 
268  typename RangeType::const_iterator faceinfo = range.begin();
269  for (faceinfo = range.begin(); faceinfo != range.end(); ++faceinfo)
270  {
271  const Elem & elem = (*faceinfo)->elem();
272 
274 
276  _subdomain = elem.subdomain_id();
277  if (_subdomain != _old_subdomain)
278  {
281  }
282 
284  if (const Elem * const neighbor = (*faceinfo)->neighborPtr())
285  {
287  _neighbor_subdomain = neighbor->subdomain_id();
288  }
289  else
291 
293  {
295  // This is going to cause a lot more printing
297  }
298 
299  onFace(**faceinfo);
300  // Cache data now because onBoundary may clear it. E.g. there was a nasty bug for two
301  // variable FV systems where if one variable was executing an FVFluxKernel on a boundary
302  // while the other was executing an FVFluxBC, the FVFluxKernel data would get lost because
303  // onBoundary would clear the residual/Jacobian data before it was cached
304  postFace(**faceinfo);
305 
306  const std::set<BoundaryID> boundary_ids = (*faceinfo)->boundaryIDs();
307  for (auto & it : boundary_ids)
308  {
310  onBoundary(**faceinfo, it);
311  }
312 
313  postFace(**faceinfo);
314 
315  } // range
316  post();
317 
318  // Clear execution printing sets to start printing on every block and boundary again
320  }
321  catch (libMesh::LogicError & e)
322  {
323  mooseException("We caught a libMesh error: ", e.what());
324  }
325  catch (MetaPhysicL::LogicError & e)
326  {
328  }
329  }
330  catch (MooseException & e)
331  {
333  }
334  catch (std::runtime_error & e)
335  {
336  _error_message = e.what();
337  }
338 }
const unsigned int _nl_system_num
std::string _error_message
Holds caught runtime error messages.
FEProblemBase & _fe_problem
void translateMetaPhysicLError(const MetaPhysicL::LogicError &)
emit a relatively clear error message when we catch a MetaPhysicL logic error
Definition: MooseError.C:112
SubdomainID _subdomain
The subdomain for the current element.
virtual void postFace(const FaceInfo &)
This is called once for each face after all face and boundary callbacks have been finished for that f...
void resetExecutionPrinting()
Reset lists of blocks and boundaries for which execution printing has been done.
virtual void post()
This is called once after all face-looping is finished.
virtual void printBoundaryExecutionInformation(const BoundaryID) const
Print ordering of objects exected on each boundary.
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
const SubdomainID INVALID_BLOCK_ID
Definition: MooseTypes.C:20
virtual void neighborSubdomainChanged()
Called every time the neighbor subdomain changes (i.e.
virtual void onBoundary(const FaceInfo &fi, BoundaryID boundary)=0
This is called once for every face that is on a boundary after onFace is called for the face...
TheWarehouse & theWarehouse() const
virtual void printGeneralExecutionInformation() const
Print list of object types executed and in which order.
virtual void pre()
This is called once before all face-looping.
virtual void onFace(const FaceInfo &fi)=0
virtual void setCurrentSubdomainID(const Elem *elem, const THREAD_ID tid) override
Provides a way for users to bail out of the current solve.
void caughtMooseException(MooseException &e)
Called if a MooseException is caught anywhere during the computation.
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466
virtual void subdomainChanged()
Called every time the current subdomain changes (i.e.
const bool _on_displaced
Whether this loop is operating on the displaced mesh.
virtual void printBlockExecutionInformation() const
Print ordering of objects executed on each block.
virtual void setNeighborSubdomainID(const Elem *elem, unsigned int side, const THREAD_ID tid) override
SubdomainID _old_subdomain
The subdomain for the last element.
SubdomainID _old_neighbor_subdomain
The subdomain for the last neighbor.

◆ post()

void ComputeFVFluxThread< RangeType, AttribVectorTags >::post ( )
overridevirtualinherited

This is called once after all face-looping is finished.

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 557 of file ComputeFVFluxThread.h.

558 {
559  // make sure we add any remaining cached residuals/jacobians to add/record
560  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
561  addCached();
562 
565 }
FEProblemBase & _fe_problem
void clearActiveMaterialProperties(const THREAD_ID tid)
Clear the active material properties.
virtual void addCached()=0
call either addCachedJacobian or addCachedResidual or both depending on what derived class of this cl...
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override
Clear the active elemental MooseVariableFEBase.

◆ postFace()

template<typename RangeType >
void ComputeFVFluxResidualThread< RangeType >::postFace ( const FaceInfo )
overrideprotectedvirtual

This is called once for each face after all face and boundary callbacks have been finished for that face.

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 851 of file ComputeFVFluxThread.h.

852 {
853  _num_cached++;
854  // TODO: do we need both calls - or just the neighbor one? - confirm this
855  this->_subproblem.SubProblem::cacheResidual(_tid);
856  this->_subproblem.SubProblem::cacheResidualNeighbor(_tid);
857 
858  this->_subproblem.SubProblem::addCachedResidual(_tid);
859 }
SubProblem & _subproblem
FEProblemBase or DisplacedProblem depending on _on_displaced.

◆ pre()

void ComputeFVFluxThread< RangeType, AttribVectorTags >::pre ( )
overridevirtualinherited

This is called once before all face-looping.

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 748 of file ComputeFVFluxThread.h.

749 {
750  std::vector<FVFluxBC *> bcs;
752  .query()
753  .template condition<AttribSysNum>(_nl_system_num)
754  .template condition<AttribSystem>("FVFluxBC")
755  .template condition<AttribDisplaced>(_on_displaced)
756  .template condition<AttribThread>(_tid)
757  .template condition<AttributeTagType>(_tags)
758  .queryInto(bcs);
759 
760  std::vector<FVInterfaceKernel *> iks;
762  .query()
763  .template condition<AttribSysNum>(_nl_system_num)
764  .template condition<AttribSystem>("FVInterfaceKernel")
765  .template condition<AttribDisplaced>(_on_displaced)
766  .template condition<AttribThread>(_tid)
767  .template condition<AttributeTagType>(_tags)
768  .queryInto(iks);
769 
770  std::vector<FVFluxKernel *> kernels;
772  .query()
773  .template condition<AttribSysNum>(_nl_system_num)
774  .template condition<AttribSystem>("FVFluxKernel")
775  .template condition<AttribDisplaced>(_on_displaced)
776  .template condition<AttribThread>(_tid)
777  .template condition<AttributeTagType>(_tags)
778  .queryInto(kernels);
779 
780  for (auto * const bc : bcs)
781  setup(*bc);
782  for (auto * const ik : iks)
783  setup(*ik);
784  for (auto * const kernel : kernels)
785  setup(*kernel);
786 
787  // Clear variables
788  _fv_vars.clear();
789  _elem_sub_fv_vars.clear();
790  _neigh_sub_fv_vars.clear();
791 
792  // Clear kernels
793  _fv_flux_kernels.clear();
796 
797  // Clear element face materials
798  _elem_face_mats.clear();
799  _elem_sub_elem_face_mats.clear();
801 
802  // Clear neighbor face materials
803  _neigh_face_mats.clear();
806 }
std::vector< std::shared_ptr< MaterialBase > > _neigh_face_mats
const unsigned int _nl_system_num
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_neigh_face_mats
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_neigh_face_mats
FEProblemBase & _fe_problem
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_elem_face_mats
std::set< MooseVariableFieldBase *> _neigh_sub_fv_vars
const std::set< TagID > & _tags
TheWarehouse & theWarehouse() const
std::vector< std::shared_ptr< MaterialBase > > _elem_face_mats
Element face materials.
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_elem_face_mats
std::set< FVFluxKernel *> _fv_flux_kernels
FVFluxKernels.
std::set< MooseVariableFieldBase *> _elem_sub_fv_vars
std::set< MooseVariableFieldBase *> _fv_vars
Variables.
virtual void setup(SetupInterface &obj)=0
call either residualSetup or jacobianSetup depending on what derived class of this class is instantia...
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466
const bool _on_displaced
Whether this loop is operating on the displaced mesh.

◆ resetExecutionPrinting()

template<typename RangeType>
void ThreadedFaceLoop< RangeType >::resetExecutionPrinting ( )
inlineprotectedinherited

Reset lists of blocks and boundaries for which execution printing has been done.

Definition at line 132 of file ComputeFVFluxThread.h.

133  {
134  _blocks_exec_printed.clear();
135  _boundaries_exec_printed.clear();
136  }
std::set< BoundaryID > _boundaries_exec_printed
Set to keep track of boundaries for which we have printed the execution pattern.
std::set< std::pair< const SubdomainID, const SubdomainID > > _blocks_exec_printed
Set to keep track of blocks for which we have printed the execution pattern.

◆ setup()

template<typename RangeType>
void ComputeFVFluxResidualThread< RangeType >::setup ( SetupInterface obj)
inlineoverrideprotectedvirtual

call either residualSetup or jacobianSetup depending on what derived class of this class is instantiated

Implements ComputeFVFluxThread< RangeType, AttribVectorTags >.

Definition at line 828 of file ComputeFVFluxThread.h.

828 { obj.residualSetup(); }
virtual void residualSetup()
Gets called just before the residual is computed and before this object is asked to do its job...

◆ subdomainChanged()

void ComputeFVFluxThread< RangeType, AttribVectorTags >::subdomainChanged ( )
overridevirtualinherited

Called every time the current subdomain changes (i.e.

the subdomain of this face's elem element is not the same as the subdomain of the last face's elem element).

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 625 of file ComputeFVFluxThread.h.

626 {
628 
629  // Clear variables
630  _fv_vars.clear();
631  _elem_sub_fv_vars.clear();
632 
633  // Clear kernels
634  _fv_flux_kernels.clear();
636 
637  // Clear element face materials
638  _elem_face_mats.clear();
639  _elem_sub_elem_face_mats.clear();
640 
641  // Clear neighbor face materials
642  _neigh_face_mats.clear();
644 
645  // TODO: do this for other relevant objects - like FV BCs, FV source term
646  // kernels, etc. - but we don't need to add them for other types of objects
647  // like FE or DG kernels because those kernels don't run in this loop. Do we
648  // really want to integrate fv source kernels into this loop?
649  std::vector<FVFluxKernel *> kernels;
651  .query()
652  .template condition<AttribSysNum>(_nl_system_num)
653  .template condition<AttribSystem>("FVFluxKernel")
654  .template condition<AttribDisplaced>(_on_displaced)
655  .template condition<AttribSubdomains>(_subdomain)
656  .template condition<AttribThread>(_tid)
657  .template condition<AttributeTagType>(_tags)
658  .queryInto(kernels);
659 
660  _elem_sub_fv_flux_kernels = std::set<FVFluxKernel *>(kernels.begin(), kernels.end());
661 
662  for (auto * k : _elem_sub_fv_flux_kernels)
663  {
664  // TODO: we need a better way to do this - especially when FE objects begin to
665  // couple to FV vars. This code shoud be refactored out into one place
666  // where it is easy for users to say initialize all materials and
667  // variables needed by these objects for me.
668  const auto & deps = k->getMooseVariableDependencies();
669  for (auto var : deps)
670  {
671  mooseAssert(var->isFV(),
672  "We do not currently support coupling of FE variables into FV objects");
673  _elem_sub_fv_vars.insert(var);
674  }
675  }
676 
679 
681 }
std::vector< std::shared_ptr< MaterialBase > > _neigh_face_mats
void getFVMatsAndDependencies(SubdomainID block_id, std::vector< std::shared_ptr< MaterialBase >> &face_materials, std::vector< std::shared_ptr< MaterialBase >> &neighbor_materials, std::set< MooseVariableFieldBase *> &variables, const THREAD_ID tid)
Get the materials and variables potentially needed for FV.
const unsigned int _nl_system_num
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_neigh_face_mats
FEProblemBase & _fe_problem
SubdomainID _subdomain
The subdomain for the current element.
std::vector< T * > & queryInto(std::vector< T *> &results, Args &&... args)
queryInto executes the query and stores the results in the given vector.
Definition: TheWarehouse.h:311
const std::set< TagID > & _tags
TheWarehouse & theWarehouse() const
std::vector< std::shared_ptr< MaterialBase > > _elem_face_mats
Element face materials.
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_elem_face_mats
std::set< FVFluxKernel *> _fv_flux_kernels
FVFluxKernels.
std::set< MooseVariableFieldBase *> _elem_sub_fv_vars
std::set< MooseVariableFieldBase *> _fv_vars
Variables.
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:466
virtual void subdomainChanged()
Called every time the current subdomain changes (i.e.
const bool _on_displaced
Whether this loop is operating on the displaced mesh.

Member Data Documentation

◆ _blocks_exec_printed

template<typename RangeType>
std::set<std::pair<const SubdomainID, const SubdomainID> > ThreadedFaceLoop< RangeType >::_blocks_exec_printed
mutableprotectedinherited

Set to keep track of blocks for which we have printed the execution pattern.

Definition at line 163 of file ComputeFVFluxThread.h.

Referenced by ThreadedFaceLoop< RangeType >::resetExecutionPrinting().

◆ _boundaries_exec_printed

template<typename RangeType>
std::set<BoundaryID> ThreadedFaceLoop< RangeType >::_boundaries_exec_printed
mutableprotectedinherited

Set to keep track of boundaries for which we have printed the execution pattern.

Definition at line 166 of file ComputeFVFluxThread.h.

Referenced by ThreadedFaceLoop< RangeType >::resetExecutionPrinting().

◆ _error_message

template<typename RangeType>
std::string ThreadedFaceLoop< RangeType >::_error_message
protectedinherited

Holds caught runtime error messages.

Definition at line 169 of file ComputeFVFluxThread.h.

Referenced by ThreadedFaceLoop< RangeType >::join().

◆ _fe_problem

template<typename RangeType>
FEProblemBase& ThreadedFaceLoop< RangeType >::_fe_problem
protectedinherited

◆ _mesh

template<typename RangeType>
MooseMesh& ThreadedFaceLoop< RangeType >::_mesh
protectedinherited

Definition at line 139 of file ComputeFVFluxThread.h.

◆ _neighbor_subdomain

template<typename RangeType>
SubdomainID ThreadedFaceLoop< RangeType >::_neighbor_subdomain
protectedinherited

The subdomain for the current neighbor.

Definition at line 157 of file ComputeFVFluxThread.h.

Referenced by ThreadedFaceLoop< RangeType >::neighborSubdomainChanged().

◆ _nl_system_num

template<typename RangeType>
const unsigned int ThreadedFaceLoop< RangeType >::_nl_system_num
protectedinherited

Definition at line 142 of file ComputeFVFluxThread.h.

◆ _num_cached

unsigned int ComputeFVFluxThread< RangeType, AttribVectorTags >::_num_cached
protectedinherited

Definition at line 384 of file ComputeFVFluxThread.h.

◆ _old_neighbor_subdomain

template<typename RangeType>
SubdomainID ThreadedFaceLoop< RangeType >::_old_neighbor_subdomain
protectedinherited

The subdomain for the last neighbor.

Definition at line 160 of file ComputeFVFluxThread.h.

◆ _old_subdomain

template<typename RangeType>
SubdomainID ThreadedFaceLoop< RangeType >::_old_subdomain
protectedinherited

The subdomain for the last element.

Definition at line 154 of file ComputeFVFluxThread.h.

◆ _on_displaced

template<typename RangeType>
const bool ThreadedFaceLoop< RangeType >::_on_displaced
protectedinherited

Whether this loop is operating on the displaced mesh.

Definition at line 145 of file ComputeFVFluxThread.h.

◆ _subdomain

template<typename RangeType>
SubdomainID ThreadedFaceLoop< RangeType >::_subdomain
protectedinherited

The subdomain for the current element.

Definition at line 151 of file ComputeFVFluxThread.h.

Referenced by ThreadedFaceLoop< RangeType >::subdomainChanged().

◆ _subproblem

template<typename RangeType>
SubProblem& ThreadedFaceLoop< RangeType >::_subproblem
protectedinherited

◆ _tags

template<typename RangeType>
const std::set<TagID>& ThreadedFaceLoop< RangeType >::_tags
protectedinherited

Definition at line 140 of file ComputeFVFluxThread.h.

◆ _tid

template<typename RangeType>
THREAD_ID ThreadedFaceLoop< RangeType >::_tid
protectedinherited

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