https://mooseframework.inl.gov
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
ComputeFVFluxThread< RangeType, AttributeTagType > Class Template Referenceabstract

Base class for assembly-like calculations. More...

#include <ComputeFVFluxThread.h>

Inheritance diagram for ComputeFVFluxThread< RangeType, AttributeTagType >:
[legend]

Public Member Functions

 ComputeFVFluxThread (FEProblemBase &fe_problem, const unsigned int nl_system_num, const std::set< TagID > &tags, bool on_displaced)
 
 ComputeFVFluxThread (ComputeFVFluxThread &x, Threads::split split)
 
virtual ~ComputeFVFluxThread ()
 
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)
 
virtual void postFace (const FaceInfo &)
 This is called once for each face after all face and boundary callbacks have been finished for that face. More...
 
void caughtMooseException (MooseException &e)
 Called if a MooseException is caught anywhere during the computation. More...
 

Protected Member Functions

virtual void compute (FVFaceResidualObject &ro, const FaceInfo &fi)=0
 call either computeResidual, computeJacobian, or computeResidualAndJacobian on the provided residual object depending on what derived class of this class is instantiated More...
 
virtual void setup (SetupInterface &obj)=0
 call either residualSetup or jacobianSetup depending on what derived class of this class is instantiated More...
 
virtual void addCached ()=0
 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 = 0
 
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...
 

Private Member Functions

void reinitVariables (const FaceInfo &fi)
 
void finalizeContainers ()
 
virtual void printGeneralExecutionInformation () const override
 Print list of object types executed and in which order. More...
 
virtual void printBlockExecutionInformation () const override
 Print ordering of objects executed on each block. More...
 
virtual void printBoundaryExecutionInformation (const BoundaryID bnd_id) const override
 Print ordering of objects exected on each boundary. More...
 
std::pair< SubdomainName, SubdomainName > getBlockNames () const
 Utility to get the subdomain names from the ids. More...
 

Private Attributes

std::set< MooseVariableFieldBase * > _fv_vars
 Variables. More...
 
std::set< MooseVariableFieldBase * > _elem_sub_fv_vars
 
std::set< MooseVariableFieldBase * > _neigh_sub_fv_vars
 
std::set< FVFluxKernel * > _fv_flux_kernels
 FVFluxKernels. More...
 
std::set< FVFluxKernel * > _elem_sub_fv_flux_kernels
 
std::set< FVFluxKernel * > _neigh_sub_fv_flux_kernels
 
std::vector< std::shared_ptr< MaterialBase > > _elem_face_mats
 Element face materials. More...
 
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_elem_face_mats
 
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_elem_face_mats
 
std::vector< std::shared_ptr< MaterialBase > > _neigh_face_mats
 
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_neigh_face_mats
 
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_neigh_face_mats
 
const bool _scaling_jacobian
 
const bool _scaling_residual
 

Detailed Description

template<typename RangeType, typename AttributeTagType>
class ComputeFVFluxThread< RangeType, AttributeTagType >

Base class for assembly-like calculations.

Definition at line 344 of file ComputeFVFluxThread.h.

Constructor & Destructor Documentation

◆ ComputeFVFluxThread() [1/2]

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

Definition at line 438 of file ComputeFVFluxThread.h.

442  : ThreadedFaceLoop<RangeType>(fe_problem, nl_system_num, tags, on_displaced),
443  _scaling_jacobian(fe_problem.computingScalingJacobian()),
444  _scaling_residual(fe_problem.computingScalingResidual())
445 {
446 }
This loops over a set of mesh faces (i.e.

◆ ComputeFVFluxThread() [2/2]

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

Definition at line 449 of file ComputeFVFluxThread.h.

452  _fv_vars(x._fv_vars),
453  _scaling_jacobian(x._scaling_jacobian),
454  _scaling_residual(x._scaling_residual)
455 {
456 }
std::set< MooseVariableFieldBase * > _fv_vars
Variables.
tbb::split split
This loops over a set of mesh faces (i.e.

◆ ~ComputeFVFluxThread()

template<typename RangeType , typename AttributeTagType >
ComputeFVFluxThread< RangeType, AttributeTagType >::~ComputeFVFluxThread ( )
virtual

Definition at line 459 of file ComputeFVFluxThread.h.

460 {
461 }

Member Function Documentation

◆ addCached()

template<typename RangeType, typename AttributeTagType>
virtual void ComputeFVFluxThread< RangeType, AttributeTagType >::addCached ( )
protectedpure virtual

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

Implemented in ComputeFVFluxRJThread< RangeType >, ComputeFVFluxJacobianThread< RangeType >, and ComputeFVFluxResidualThread< RangeType >.

◆ 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, typename AttributeTagType>
virtual void ComputeFVFluxThread< RangeType, AttributeTagType >::compute ( FVFaceResidualObject ro,
const FaceInfo fi 
)
protectedpure virtual

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

Implemented in ComputeFVFluxRJThread< RangeType >, ComputeFVFluxJacobianThread< RangeType >, and ComputeFVFluxResidualThread< RangeType >.

◆ finalizeContainers()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::finalizeContainers ( )
private

Definition at line 569 of file ComputeFVFluxThread.h.

570 {
571  //
572  // Finalize our variables
573  //
574  std::set_union(_elem_sub_fv_vars.begin(),
575  _elem_sub_fv_vars.end(),
576  _neigh_sub_fv_vars.begin(),
577  _neigh_sub_fv_vars.end(),
578  std::inserter(_fv_vars, _fv_vars.begin()));
579 
580  //
581  // Finalize our kernels
582  //
583  const bool same_kernels = _elem_sub_fv_flux_kernels == _neigh_sub_fv_flux_kernels;
584  if (same_kernels)
586  else
587  std::set_union(_elem_sub_fv_flux_kernels.begin(),
591  std::inserter(_fv_flux_kernels, _fv_flux_kernels.begin()));
592  const bool need_ghosting = !same_kernels;
593 
594  //
595  // Finalize our element face materials
596  //
598 
599  if (need_ghosting)
600  // Add any element face materials from the neighboring subdomain that do not exist on the
601  // element subdomain
602  for (std::shared_ptr<MaterialBase> neigh_sub_elem_face_mat : _neigh_sub_elem_face_mats)
603  if (std::find(_elem_sub_elem_face_mats.begin(),
605  neigh_sub_elem_face_mat) == _elem_sub_elem_face_mats.end())
606  _elem_face_mats.push_back(neigh_sub_elem_face_mat);
607 
608  //
609  // Finalize our neighbor face materials
610  //
612 
613  if (need_ghosting)
614  // Add any neighbor face materials from the element subdomain that do not exist on the
615  // neighbor subdomain
616  for (std::shared_ptr<MaterialBase> elem_sub_neigh_face_mat : _elem_sub_neigh_face_mats)
617  if (std::find(_neigh_sub_neigh_face_mats.begin(),
619  elem_sub_neigh_face_mat) == _neigh_sub_neigh_face_mats.end())
620  _neigh_face_mats.push_back(elem_sub_neigh_face_mat);
621 }
std::vector< std::shared_ptr< MaterialBase > > _neigh_face_mats
std::set< FVFluxKernel * > _neigh_sub_fv_flux_kernels
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_neigh_face_mats
std::vector< std::shared_ptr< MaterialBase > > _elem_sub_neigh_face_mats
std::vector< std::shared_ptr< MaterialBase > > _neigh_sub_elem_face_mats
std::set< MooseVariableFieldBase * > _neigh_sub_fv_vars
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.
std::set< FVFluxKernel * > _elem_sub_fv_flux_kernels

◆ getBlockNames()

template<typename RangeType , typename AttributeTagType >
std::pair< SubdomainName, SubdomainName > ComputeFVFluxThread< RangeType, AttributeTagType >::getBlockNames ( ) const
private

Utility to get the subdomain names from the ids.

Definition at line 1086 of file ComputeFVFluxThread.h.

1087 {
1088  auto block_names = std::make_pair(_mesh.getSubdomainName(_subdomain),
1090  if (block_names.first == "")
1091  block_names.first = Moose::stringify(_subdomain);
1092  if (block_names.second == "")
1093  block_names.second = Moose::stringify(_neighbor_subdomain);
1094  return block_names;
1095 }
SubdomainID _subdomain
The subdomain for the current element.
const std::string & getSubdomainName(SubdomainID subdomain_id) const
Return the name of a block given an id.
Definition: MooseMesh.C:1758
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
std::string stringify(const T &t)
conversion to string
Definition: Conversion.h:64

◆ 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()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::neighborSubdomainChanged ( )
overridevirtual

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::set< FVFluxKernel * > _neigh_sub_fv_flux_kernels
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()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::onBoundary ( const FaceInfo fi,
BoundaryID  boundary 
)
overridevirtual

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()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::onFace ( const FaceInfo fi)
overridevirtual

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.
void reinitVariables(const FaceInfo &fi)

◆ 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()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::post ( )
overridevirtual

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>
virtual void ThreadedFaceLoop< RangeType >::postFace ( const FaceInfo )
inlinevirtualinherited

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

Reimplemented in ComputeFVFluxRJThread< RangeType >, ComputeFVFluxJacobianThread< RangeType >, and ComputeFVFluxResidualThread< RangeType >.

Definition at line 92 of file ComputeFVFluxThread.h.

92 {}

◆ pre()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::pre ( )
overridevirtual

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::set< FVFluxKernel * > _neigh_sub_fv_flux_kernels
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.
std::set< FVFluxKernel * > _elem_sub_fv_flux_kernels
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.

◆ printBlockExecutionInformation()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::printBlockExecutionInformation ( ) const
overrideprivatevirtual

Print ordering of objects executed on each block.

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 1000 of file ComputeFVFluxThread.h.

1001 {
1003  return;
1004 
1005  // Print the location of the execution
1006  const auto block_pair = std::make_pair(_subdomain, _neighbor_subdomain);
1007  const auto block_pair_names = this->getBlockNames();
1008  if (_blocks_exec_printed.count(block_pair))
1009  return;
1010  auto & console = _fe_problem.console();
1011  console << "[DBG] Flux kernels on block " << block_pair_names.first;
1013  console << " and neighbor " << block_pair_names.second << std::endl;
1014  else
1015  console << " with no neighbor block" << std::endl;
1016 
1017  // Print the list of objects
1018  std::vector<MooseObject *> fv_flux_kernels;
1019  for (const auto & fv_kernel : _fv_flux_kernels)
1020  fv_flux_kernels.push_back(dynamic_cast<MooseObject *>(fv_kernel));
1022  "[DBG]")
1023  << std::endl;
1024  _blocks_exec_printed.insert(block_pair);
1025 }
std::string mooseObjectVectorToString(const std::vector< MooseObject *> &objs, const std::string &sep=" ")
Routine to output the name of MooseObjects in a string.
Definition: ConsoleUtils.C:598
FEProblemBase & _fe_problem
SubdomainID _subdomain
The subdomain for the current element.
std::pair< SubdomainName, SubdomainName > getBlockNames() const
Utility to get the subdomain names from the ids.
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
const SubdomainID INVALID_BLOCK_ID
Definition: MooseTypes.C:20
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
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...
Definition: ConsoleUtils.C:582
std::set< FVFluxKernel * > _fv_flux_kernels
FVFluxKernels.
const ConsoleStream & console() const
Return console handle.
Definition: Problem.h:48
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.

◆ printBoundaryExecutionInformation()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::printBoundaryExecutionInformation ( const BoundaryID  bnd_id) const
overrideprivatevirtual

Print ordering of objects exected on each boundary.

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 1029 of file ComputeFVFluxThread.h.

1031 {
1033  return;
1034  if (_boundaries_exec_printed.count(bnd_id))
1035  return;
1036  std::vector<MooseObject *> bcs;
1038  .query()
1039  .template condition<AttribSystem>("FVFluxBC")
1040  .template condition<AttribDisplaced>(_on_displaced)
1041  .template condition<AttribThread>(_tid)
1042  .template condition<AttributeTagType>(_tags)
1043  .template condition<AttribBoundaries>(bnd_id)
1044  .queryInto(bcs);
1045 
1046  std::vector<MooseObject *> iks;
1048  .query()
1049  .template condition<AttribSystem>("FVInterfaceKernel")
1050  .template condition<AttribDisplaced>(_on_displaced)
1051  .template condition<AttribThread>(_tid)
1052  .template condition<AttributeTagType>(_tags)
1053  .template condition<AttribBoundaries>(bnd_id)
1054  .queryInto(iks);
1055 
1056  const auto block_pair_names = this->getBlockNames();
1057  if (bcs.size())
1058  {
1059  auto & console = _fe_problem.console();
1060  console << "[DBG] FVBCs on boundary " << bnd_id << " between subdomain "
1061  << block_pair_names.first;
1063  console << " and neighbor " << block_pair_names.second << std::endl;
1064  else
1065  console << " and the exterior of the mesh " << std::endl;
1066  const std::string fv_bcs = ConsoleUtils::mooseObjectVectorToString(bcs);
1067  console << ConsoleUtils::formatString(fv_bcs, "[DBG]") << std::endl;
1068  }
1069  if (iks.size())
1070  {
1071  auto & console = _fe_problem.console();
1072  console << "[DBG] FVIKs on boundary " << bnd_id << " between subdomain "
1073  << block_pair_names.first;
1075  console << " and neighbor " << block_pair_names.second << std::endl;
1076  else
1077  console << " and the exterior of the mesh " << std::endl;
1078  const std::string fv_iks = ConsoleUtils::mooseObjectVectorToString(iks);
1079  console << ConsoleUtils::formatString(fv_iks, "[DBG]") << std::endl;
1080  }
1081  _boundaries_exec_printed.insert(bnd_id);
1082 }
std::string mooseObjectVectorToString(const std::vector< MooseObject *> &objs, const std::string &sep=" ")
Routine to output the name of MooseObjects in a string.
Definition: ConsoleUtils.C:598
std::set< BoundaryID > _boundaries_exec_printed
Set to keep track of boundaries for which we have printed the execution pattern.
FEProblemBase & _fe_problem
std::pair< SubdomainName, SubdomainName > getBlockNames() const
Utility to get the subdomain names from the ids.
const std::set< TagID > & _tags
SubdomainID _neighbor_subdomain
The subdomain for the current neighbor.
const SubdomainID INVALID_BLOCK_ID
Definition: MooseTypes.C:20
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
TheWarehouse & theWarehouse() const
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...
Definition: ConsoleUtils.C:582
const ConsoleStream & console() const
Return console handle.
Definition: Problem.h:48
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.

◆ printGeneralExecutionInformation()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::printGeneralExecutionInformation ( ) const
overrideprivatevirtual

Print list of object types executed and in which order.

Reimplemented from ThreadedFaceLoop< RangeType >.

Definition at line 984 of file ComputeFVFluxThread.h.

985 {
987  return;
988  auto & console = _fe_problem.console();
989  auto execute_on = _fe_problem.getCurrentExecuteOnFlag();
990  console << "[DBG] Beginning finite volume flux objects loop on " << execute_on << std::endl;
991  mooseDoOnce(console << "[DBG] Loop on faces (FaceInfo), objects ordered on each face: "
992  << std::endl;
993  console << "[DBG] - (finite volume) flux kernels" << std::endl;
994  console << "[DBG] - (finite volume) flux boundary conditions" << std::endl;
995  console << "[DBG] - (finite volume) interface kernels" << std::endl;);
996 }
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
FEProblemBase & _fe_problem
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
const ConsoleStream & console() const
Return console handle.
Definition: Problem.h:48

◆ reinitVariables()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::reinitVariables ( const FaceInfo fi)
private

Definition at line 465 of file ComputeFVFluxThread.h.

466 {
467  // TODO: this skips necessary FE reinit. In addition to this call, we need
468  // to conditionally do some FE-specific reinit here if we have any active FE
469  // variables. However, we still want to keep/do FV-style quadrature.
470  // Figure out how to do all this some day.
471  this->_subproblem.reinitFVFace(_tid, fi);
472 
473  // TODO: for FE variables, this is handled via setting needed vars through
474  // fe problem API which passes the value on to the system class. Then
475  // reinit is called on fe problem which forwards its calls to the system
476  // function and then fe problem also calls displaced problem reinit. All
477  // the call forwarding seems silly, but it does allow the displaced problem
478  // to be easily kept in sync. However, the displaced problem has different
479  // pointers for its own face info objects, etc, we can't just pass in fe
480  // problem's face info down to the sub-problem -- centroids are different,
481  // volumes are different, etc. To support displaced meshes correctly, we
482  // need to be able to reinit the subproblems variables using its equivalent
483  // face info object. How? See https://github.com/idaholab/moose/issues/15064
484 
485  for (auto var : _fv_vars)
486  var->computeFaceValues(fi);
487 
489 
490  for (std::shared_ptr<MaterialBase> mat : _elem_face_mats)
491  {
492  mat->setFaceInfo(fi);
493  mat->computeProperties();
494  }
495 
496  if (fi.neighborPtr())
497  {
500 
501  for (std::shared_ptr<MaterialBase> mat : _neigh_face_mats)
502  {
503  mat->setFaceInfo(fi);
504  mat->computeProperties();
505  }
506  }
507 }
std::vector< std::shared_ptr< MaterialBase > > _neigh_face_mats
FEProblemBase & _fe_problem
void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid)
Resize material data.
void reinitFVFace(const THREAD_ID tid, const FaceInfo &fi)
reinitialize the finite volume assembly data for the provided face and thread
Definition: SubProblem.C:1278
const Elem * neighborPtr() const
Definition: FaceInfo.h:84
std::vector< std::shared_ptr< MaterialBase > > _elem_face_mats
Element face materials.
SubProblem & _subproblem
FEProblemBase or DisplacedProblem depending on _on_displaced.
std::set< MooseVariableFieldBase * > _fv_vars
Variables.

◆ 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, typename AttributeTagType>
virtual void ComputeFVFluxThread< RangeType, AttributeTagType >::setup ( SetupInterface obj)
protectedpure virtual

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

Implemented in ComputeFVFluxRJThread< RangeType >, ComputeFVFluxJacobianThread< RangeType >, and ComputeFVFluxResidualThread< RangeType >.

◆ subdomainChanged()

template<typename RangeType , typename AttributeTagType >
void ComputeFVFluxThread< RangeType, AttributeTagType >::subdomainChanged ( )
overridevirtual

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.
std::set< FVFluxKernel * > _elem_sub_fv_flux_kernels
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().

◆ _elem_face_mats

template<typename RangeType, typename AttributeTagType>
std::vector<std::shared_ptr<MaterialBase> > ComputeFVFluxThread< RangeType, AttributeTagType >::_elem_face_mats
private

Element face materials.

Definition at line 424 of file ComputeFVFluxThread.h.

◆ _elem_sub_elem_face_mats

template<typename RangeType, typename AttributeTagType>
std::vector<std::shared_ptr<MaterialBase> > ComputeFVFluxThread< RangeType, AttributeTagType >::_elem_sub_elem_face_mats
private

Definition at line 425 of file ComputeFVFluxThread.h.

◆ _elem_sub_fv_flux_kernels

template<typename RangeType, typename AttributeTagType>
std::set<FVFluxKernel *> ComputeFVFluxThread< RangeType, AttributeTagType >::_elem_sub_fv_flux_kernels
private

Definition at line 420 of file ComputeFVFluxThread.h.

◆ _elem_sub_fv_vars

template<typename RangeType, typename AttributeTagType>
std::set<MooseVariableFieldBase *> ComputeFVFluxThread< RangeType, AttributeTagType >::_elem_sub_fv_vars
private

Definition at line 415 of file ComputeFVFluxThread.h.

◆ _elem_sub_neigh_face_mats

template<typename RangeType, typename AttributeTagType>
std::vector<std::shared_ptr<MaterialBase> > ComputeFVFluxThread< RangeType, AttributeTagType >::_elem_sub_neigh_face_mats
private

Definition at line 430 of file ComputeFVFluxThread.h.

◆ _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

◆ _fv_flux_kernels

template<typename RangeType, typename AttributeTagType>
std::set<FVFluxKernel *> ComputeFVFluxThread< RangeType, AttributeTagType >::_fv_flux_kernels
private

FVFluxKernels.

Definition at line 419 of file ComputeFVFluxThread.h.

◆ _fv_vars

template<typename RangeType, typename AttributeTagType>
std::set<MooseVariableFieldBase *> ComputeFVFluxThread< RangeType, AttributeTagType >::_fv_vars
private

Variables.

Definition at line 414 of file ComputeFVFluxThread.h.

◆ _mesh

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

Definition at line 139 of file ComputeFVFluxThread.h.

◆ _neigh_face_mats

template<typename RangeType, typename AttributeTagType>
std::vector<std::shared_ptr<MaterialBase> > ComputeFVFluxThread< RangeType, AttributeTagType >::_neigh_face_mats
private

Definition at line 429 of file ComputeFVFluxThread.h.

◆ _neigh_sub_elem_face_mats

template<typename RangeType, typename AttributeTagType>
std::vector<std::shared_ptr<MaterialBase> > ComputeFVFluxThread< RangeType, AttributeTagType >::_neigh_sub_elem_face_mats
private

Definition at line 426 of file ComputeFVFluxThread.h.

◆ _neigh_sub_fv_flux_kernels

template<typename RangeType, typename AttributeTagType>
std::set<FVFluxKernel *> ComputeFVFluxThread< RangeType, AttributeTagType >::_neigh_sub_fv_flux_kernels
private

Definition at line 421 of file ComputeFVFluxThread.h.

◆ _neigh_sub_fv_vars

template<typename RangeType, typename AttributeTagType>
std::set<MooseVariableFieldBase *> ComputeFVFluxThread< RangeType, AttributeTagType >::_neigh_sub_fv_vars
private

Definition at line 416 of file ComputeFVFluxThread.h.

◆ _neigh_sub_neigh_face_mats

template<typename RangeType, typename AttributeTagType>
std::vector<std::shared_ptr<MaterialBase> > ComputeFVFluxThread< RangeType, AttributeTagType >::_neigh_sub_neigh_face_mats
private

Definition at line 431 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

template<typename RangeType, typename AttributeTagType>
unsigned int ComputeFVFluxThread< RangeType, AttributeTagType >::_num_cached = 0
protected

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.

◆ _scaling_jacobian

template<typename RangeType, typename AttributeTagType>
const bool ComputeFVFluxThread< RangeType, AttributeTagType >::_scaling_jacobian
private

Definition at line 433 of file ComputeFVFluxThread.h.

◆ _scaling_residual

template<typename RangeType, typename AttributeTagType>
const bool ComputeFVFluxThread< RangeType, AttributeTagType >::_scaling_residual
private

Definition at line 434 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: