www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeNodalKernelBCJacobiansThread Class Reference

#include <ComputeNodalKernelBCJacobiansThread.h>

Inheritance diagram for ComputeNodalKernelBCJacobiansThread:
[legend]

Public Member Functions

 ComputeNodalKernelBCJacobiansThread (FEProblemBase &fe_problem, NonlinearSystemBase &nl, MooseObjectTagWarehouse< NodalKernelBase > &nodal_kernels, const std::set< TagID > &tags)
 
 ComputeNodalKernelBCJacobiansThread (ComputeNodalKernelBCJacobiansThread &x, Threads::split split)
 
virtual void pre () override
 Called before the node range loop. More...
 
virtual void onNode (ConstBndNodeRange::const_iterator &node_it) override
 Called for each node. More...
 
void join (const ComputeNodalKernelBCJacobiansThread &)
 
void operator() (const ConstBndNodeRange &range)
 
virtual void post ()
 Called after the node range loop. More...
 
virtual void postNode (ConstBndNodeRange::const_iterator &node_it)
 Called after the node assembly is done (including surface assembling) More...
 
virtual void caughtMooseException (MooseException &e)
 Called if a MooseException is caught anywhere during the computation. More...
 
virtual bool keepGoing ()
 Whether or not the loop should continue. More...
 

Protected Member Functions

void printGeneralExecutionInformation () const override
 Print information about the loop, mostly order of execution of objects. More...
 

Protected Attributes

FEProblemBase_fe_problem
 
NonlinearSystemBase_nl
 
AuxiliarySystem_aux_sys
 
const std::set< TagID > & _tags
 
MooseObjectTagWarehouse< NodalKernelBase > & _nodal_kernels
 
MooseObjectWarehouse< NodalKernelBase > * _nkernel_warehouse
 
unsigned int _num_cached
 Number of contributions cached up. More...
 
THREAD_ID _tid
 

Detailed Description

Definition at line 20 of file ComputeNodalKernelBCJacobiansThread.h.

Constructor & Destructor Documentation

◆ ComputeNodalKernelBCJacobiansThread() [1/2]

ComputeNodalKernelBCJacobiansThread::ComputeNodalKernelBCJacobiansThread ( FEProblemBase fe_problem,
NonlinearSystemBase nl,
MooseObjectTagWarehouse< NodalKernelBase > &  nodal_kernels,
const std::set< TagID > &  tags 
)

◆ ComputeNodalKernelBCJacobiansThread() [2/2]

ComputeNodalKernelBCJacobiansThread::ComputeNodalKernelBCJacobiansThread ( ComputeNodalKernelBCJacobiansThread x,
Threads::split  split 
)

Member Function Documentation

◆ caughtMooseException()

virtual void ThreadedNodeLoop< ConstBndNodeRange , ConstBndNodeRange::const_iterator >::caughtMooseException ( MooseException e)
inlinevirtualinherited

Called if a MooseException is caught anywhere during the computation.

The single input parameter taken is a MooseException object.

Definition at line 56 of file ThreadedNodeLoop.h.

57  {
58  Threads::spin_mutex::scoped_lock lock(threaded_node_mutex);
59 
60  std::string what(e.what());
62  };
virtual const char * what() const
Get out the error message.
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_node_mutex

◆ join()

void ComputeNodalKernelBCJacobiansThread::join ( const ComputeNodalKernelBCJacobiansThread )

Definition at line 145 of file ComputeNodalKernelBCJacobiansThread.C.

146 {
147 }

◆ keepGoing()

virtual bool ThreadedNodeLoop< ConstBndNodeRange , ConstBndNodeRange::const_iterator >::keepGoing ( )
inlinevirtualinherited

Whether or not the loop should continue.

Returns
true to keep going, false to stop.

Definition at line 69 of file ThreadedNodeLoop.h.

69 { return !_fe_problem.hasException(); }
virtual bool hasException()
Whether or not an exception has occurred.

◆ onNode()

void ComputeNodalKernelBCJacobiansThread::onNode ( ConstBndNodeRange::const_iterator &  node_it)
overridevirtual

Called for each node.

Reimplemented from ThreadedNodeLoop< ConstBndNodeRange, ConstBndNodeRange::const_iterator >.

Definition at line 64 of file ComputeNodalKernelBCJacobiansThread.C.

65 {
66  const BndNode * bnode = *node_it;
67 
68  BoundaryID boundary_id = bnode->_bnd_id;
69 
70  auto & ce = _fe_problem.couplingEntries(_tid, _nl.number());
71  for (const auto & it : ce)
72  {
73  MooseVariableFEBase & ivariable = *(it.first);
74  MooseVariableFEBase & jvariable = *(it.second);
75 
76  unsigned int ivar = ivariable.number();
77  unsigned int jvar = jvariable.number();
78 
79  // The NodalKernels that are active and are coupled to the jvar in question
80  std::vector<std::shared_ptr<NodalKernelBase>> active_involved_kernels;
81 
83  {
84  // Loop over each NodalKernel to see if it's involved with the jvar
85  const auto & objects = _nkernel_warehouse->getActiveBoundaryObjects(boundary_id, _tid);
86  for (const auto & nodal_kernel : objects)
87  {
88  if (nodal_kernel->variable().number() == ivar)
89  {
90  // If this NodalKernel is acting on the jvar add it to the list and short-circuit the
91  // loop
92  if (nodal_kernel->variable().number() == jvar)
93  {
94  active_involved_kernels.push_back(nodal_kernel);
95  continue;
96  }
97 
98  // See if this NodalKernel is coupled to the jvar
99  const std::vector<MooseVariableFEBase *> & coupled_vars =
100  nodal_kernel->getCoupledMooseVars();
101  for (const auto & var : coupled_vars)
102  {
103  if (var->number() == jvar)
104  {
105  active_involved_kernels.push_back(nodal_kernel);
106  break; // It only takes one
107  }
108  }
109  }
110  }
111  }
112 
113  // Did we find any NodalKernels coupled to this jvar?
114  if (!active_involved_kernels.empty())
115  {
116  // prepare variables
117  for (auto * var : _aux_sys._nodal_vars[_tid])
118  var->prepareAux();
119 
121  {
122  Node * node = bnode->_node;
123  if (node->processor_id() == _fe_problem.processor_id())
124  {
125  _fe_problem.reinitNodeFace(node, boundary_id, _tid);
126  for (const auto & nodal_kernel : active_involved_kernels)
127  nodal_kernel->computeOffDiagJacobian(jvar);
128 
129  _num_cached++;
130  }
131  }
132 
133  if (_num_cached == 20) // cache 20 nodes worth before adding into the jacobian
134  {
135  _num_cached = 0;
136  // vectors are thread-safe, but matrices are not yet
137  Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
139  }
140  }
141  }
142 }
std::vector< std::pair< MooseVariableFEBase *, MooseVariableFEBase * > > & couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
unsigned int number() const
Get variable number coming from libMesh.
This class provides an interface for common operations on field variables of both FE and FV types wit...
BoundaryID _bnd_id
boundary id for the node
Definition: BndNode.h:26
Node * _node
pointer to the node
Definition: BndNode.h:24
bool hasActiveBoundaryObjects(THREAD_ID tid=0) const
boundary_id_type BoundaryID
unsigned int _num_cached
Number of contributions cached up.
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1125
MooseObjectWarehouse< NodalKernelBase > * _nkernel_warehouse
const std::map< BoundaryID, std::vector< std::shared_ptr< T > > > & getActiveBoundaryObjects(THREAD_ID tid=0) const
std::vector< std::vector< MooseVariableFEBase * > > _nodal_vars
processor_id_type processor_id() const
virtual void reinitNodeFace(const Node *node, BoundaryID bnd_id, const THREAD_ID tid) override
virtual void addCachedJacobian(const THREAD_ID tid) override

◆ operator()()

void ThreadedNodeLoop< ConstBndNodeRange , ConstBndNodeRange::const_iterator >::operator() ( const ConstBndNodeRange range)
inherited

Definition at line 94 of file ThreadedNodeLoop.h.

95 {
96  try
97  {
98  ParallelUniqueId puid;
99  _tid = puid.id;
100 
101  pre();
103 
104  for (IteratorType nd = range.begin(); nd != range.end(); ++nd)
105  {
106  if (!keepGoing())
107  break;
108 
109  onNode(nd);
110 
111  postNode(nd);
112  }
113 
114  post();
115  }
116  catch (MooseException & e)
117  {
119  }
120 }
virtual void printGeneralExecutionInformation() const
Print information about the loop, mostly order of execution of objects.
virtual void caughtMooseException(MooseException &e)
Called if a MooseException is caught anywhere during the computation.
virtual bool keepGoing()
Whether or not the loop should continue.
Provides a way for users to bail out of the current solve.
virtual void postNode(ConstBndNodeRange::const_iterator &node_it)
Called after the node assembly is done (including surface assembling)
virtual void onNode(ConstBndNodeRange::const_iterator &node_it)
Called for each node.

◆ post()

void ThreadedNodeLoop< ConstBndNodeRange , ConstBndNodeRange::const_iterator >::post ( )
virtualinherited

Called after the node range loop.

Definition at line 130 of file ThreadedNodeLoop.h.

131 {
132 }

◆ postNode()

void ThreadedNodeLoop< ConstBndNodeRange , ConstBndNodeRange::const_iterator >::postNode ( ConstBndNodeRange::const_iterator &  node_it)
virtualinherited

Called after the node assembly is done (including surface assembling)

Parameters
node- active node

Definition at line 142 of file ThreadedNodeLoop.h.

143 {
144 }

◆ pre()

void ComputeNodalKernelBCJacobiansThread::pre ( )
overridevirtual

Called before the node range loop.

Reimplemented from ThreadedNodeLoop< ConstBndNodeRange, ConstBndNodeRange::const_iterator >.

Definition at line 51 of file ComputeNodalKernelBCJacobiansThread.C.

52 {
53  _num_cached = 0;
54 
55  if (!_tags.size() || _tags.size() == _fe_problem.numMatrixTags())
57  else if (_tags.size() == 1)
59  else
61 }
unsigned int _num_cached
Number of contributions cached up.
MooseObjectWarehouse< T > & getMatrixTagObjectWarehouse(TagID tag_id, THREAD_ID tid)
Retrieve a moose object warehouse in which every moose object has the given matrix tag...
MooseObjectWarehouse< NodalKernelBase > * _nkernel_warehouse
virtual unsigned int numMatrixTags() const
The total number of tags.
Definition: SubProblem.h:210
MooseObjectWarehouse< T > & getMatrixTagsObjectWarehouse(const std::set< TagID > &tags, THREAD_ID tid)
Retrieve a moose object warehouse in which every moose object has one of the given matrix tags...
MooseObjectTagWarehouse< NodalKernelBase > & _nodal_kernels

◆ printGeneralExecutionInformation()

void ComputeNodalKernelBCJacobiansThread::printGeneralExecutionInformation ( ) const
overrideprotectedvirtual

Print information about the loop, mostly order of execution of objects.

Reimplemented from ThreadedNodeLoop< ConstBndNodeRange, ConstBndNodeRange::const_iterator >.

Definition at line 150 of file ComputeNodalKernelBCJacobiansThread.C.

151 {
153  return;
154 
155  const auto & console = _fe_problem.console();
156  const auto & execute_on = _fe_problem.getCurrentExecuteOnFlag();
157  console << "[DBG] Computing nodal kernel & boundary conditions contribution to the Jacobian on "
158  "boundary nodes on "
159  << execute_on << std::endl;
160  console << "[DBG] Ordering on boundaries they are defined on:" << std::endl;
161  console << _nkernel_warehouse->activeObjectsToFormattedString() << std::endl;
162 }
std::string activeObjectsToFormattedString(THREAD_ID tid=0, const std::string &prefix="[DBG]") const
Output the active content of the warehouse to a string, meant to be output to the console...
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
bool hasActiveBoundaryObjects(THREAD_ID tid=0) const
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
MooseObjectWarehouse< NodalKernelBase > * _nkernel_warehouse
const ConsoleStream & console() const
Return console handle.
Definition: Problem.h:48

Member Data Documentation

◆ _aux_sys

AuxiliarySystem& ComputeNodalKernelBCJacobiansThread::_aux_sys
protected

Definition at line 45 of file ComputeNodalKernelBCJacobiansThread.h.

Referenced by onNode().

◆ _fe_problem

FEProblemBase& ComputeNodalKernelBCJacobiansThread::_fe_problem
protected

◆ _nkernel_warehouse

MooseObjectWarehouse<NodalKernelBase>* ComputeNodalKernelBCJacobiansThread::_nkernel_warehouse
protected

◆ _nl

NonlinearSystemBase& ComputeNodalKernelBCJacobiansThread::_nl
protected

Definition at line 44 of file ComputeNodalKernelBCJacobiansThread.h.

Referenced by onNode().

◆ _nodal_kernels

MooseObjectTagWarehouse<NodalKernelBase>& ComputeNodalKernelBCJacobiansThread::_nodal_kernels
protected

Definition at line 49 of file ComputeNodalKernelBCJacobiansThread.h.

Referenced by pre().

◆ _num_cached

unsigned int ComputeNodalKernelBCJacobiansThread::_num_cached
protected

Number of contributions cached up.

Definition at line 54 of file ComputeNodalKernelBCJacobiansThread.h.

Referenced by onNode(), and pre().

◆ _tags

const std::set<TagID>& ComputeNodalKernelBCJacobiansThread::_tags
protected

Definition at line 47 of file ComputeNodalKernelBCJacobiansThread.h.

Referenced by pre().

◆ _tid

THREAD_ID ThreadedNodeLoop< ConstBndNodeRange , ConstBndNodeRange::const_iterator >::_tid
protectedinherited

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