https://mooseframework.inl.gov
ComputeBoundaryInitialConditionThread.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
12 // MOOSE includes
13 #include "Assembly.h"
14 #include "InitialCondition.h"
15 #include "MooseVariableFE.h"
16 #include "SystemBase.h"
17 
19  FEProblemBase & fe_problem)
20  : ThreadedNodeLoop<ConstBndNodeRange, ConstBndNodeRange::const_iterator>(fe_problem)
21 {
22 }
23 
27 {
28 }
29 
31  FEProblemBase & fe_problem, const std::set<VariableName> * target_vars)
32  : ThreadedNodeLoop<ConstBndNodeRange, ConstBndNodeRange::const_iterator>(fe_problem),
33  _target_vars(target_vars)
34 {
35 }
36 
37 void
39 {
40  const BndNode * bnode = *nd;
41 
42  Node * node = bnode->_node;
43  BoundaryID boundary_id = bnode->_bnd_id;
44 
45  for (const auto nl_sys_num : make_range(_fe_problem.numNonlinearSystems()))
46  _fe_problem.assembly(_tid, nl_sys_num).reinit(node);
47 
49 
50  if (warehouse.hasActiveBoundaryObjects(boundary_id, _tid))
51  {
52  const auto & ics = warehouse.getActiveBoundaryObjects(boundary_id, _tid);
53  for (const auto & ic : ics)
54  {
55  // Skip or include initial conditions based on target variable usage
56  const auto & var_name = ic->variable().name();
57  if (_target_vars && !_target_vars->count(var_name))
58  continue;
59 
60  if (node->processor_id() == _fe_problem.processor_id())
61  ic->computeNodal(*node);
62  }
63  }
64 }
65 
66 void
68 {
69 }
virtual std::size_t numNonlinearSystems() const override
Warehouse for storing initial conditions.
const InitialConditionWarehouse & getInitialConditionWarehouse() const
Return InitialCondition storage.
BoundaryID _bnd_id
boundary id for the node
Definition: BndNode.h:26
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
void reinit(const Elem *elem)
Reinitialize objects (JxW, q_points, ...) for an elements.
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
bool hasActiveBoundaryObjects(THREAD_ID tid=0) const
boundary_id_type BoundaryID
libMesh::Node * _node
pointer to the node
Definition: BndNode.h:24
const std::map< BoundaryID, std::vector< std::shared_ptr< T > > > & getActiveBoundaryObjects(THREAD_ID tid=0) const
tbb::split split
vec_type::const_iterator const_iterator
void onNode(ConstBndNodeRange::const_iterator &nd)
Called for each node.
IntRange< T > make_range(T beg, T end)
const std::set< VariableName > * _target_vars
the names of target variables for which the initial conditions are applied
processor_id_type processor_id() const
void join(const ComputeBoundaryInitialConditionThread &)