https://mooseframework.inl.gov
Loading...
Searching...
No Matches
GhostLowerDElems.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
10// App includes
11#include "GhostLowerDElems.h"
12#include "Executioner.h"
13#include "FEProblemBase.h"
14#include "MooseApp.h"
15
16// libMesh includes
17#include "libmesh/elem.h"
18#include "libmesh/mesh_base.h"
19#include "libmesh/boundary_info.h"
20
22
25{
27 params.set<bool>("attach_geometric_early") = false;
28 return params;
29}
30
32
34
35std::string
37{
38 std::ostringstream oss;
39 oss << "GhostLowerDElems";
40 return oss.str();
41}
42
43void
44GhostLowerDElems::operator()(const MeshBase::const_element_iterator & range_begin,
45 const MeshBase::const_element_iterator & range_end,
46 const processor_id_type p,
47 map_type & coupled_elements)
48{
49 mooseAssert(_moose_mesh,
50 "The MOOSE mesh must be non-null in order for this relationship manager to work.");
51 if (!_moose_mesh->hasLowerD())
52 return;
53
54 static const CouplingMatrix * const null_mat = nullptr;
55
56 for (const Elem * const elem : as_range(range_begin, range_end))
57 for (const auto s : elem->side_index_range())
58 {
59 const Elem * const neighbor = elem->neighbor_ptr(s);
60 const bool elem_owns_lowerd = !neighbor || elem->id() < neighbor->id();
61
62 const Elem * const lower_d_elem =
63 elem_owns_lowerd
64 ? _moose_mesh->getLowerDElem(elem, s)
65 : _moose_mesh->getLowerDElem(neighbor, neighbor->which_neighbor_am_i(elem));
66
67 if (lower_d_elem && lower_d_elem->processor_id() != p)
68 coupled_elements.emplace(lower_d_elem, null_mat);
69 }
70}
71
72bool
74{
75 return dynamic_cast<const GhostLowerDElems *>(&other);
76}
77
78std::unique_ptr<libMesh::GhostingFunctor>
80{
81 return _app.getFactory().copyConstruct(*this);
82}
registerMooseObject("MooseApp", GhostLowerDElems)
std::unique_ptr< T > copyConstruct(const T &object)
Copy constructs the object object.
Definition Factory.h:358
void operator()(const MeshBase::const_element_iterator &range_begin, const MeshBase::const_element_iterator &range_end, processor_id_type p, map_type &coupled_elements) override
virtual bool operator>=(const RelationshipManager &other) const override
Whether this relationship manager provides more or the same amount and type of ghosting as the rhs.
std::unique_ptr< GhostingFunctor > clone() const override
std::string getInfo() const override
Method for returning relationship manager information (suitable for console output).
static InputParameters validParams()
GhostLowerDElems(const InputParameters &)
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
Factory & getFactory()
Retrieve a writable reference to the Factory associated with this App.
Definition MooseApp.h:407
const Elem * getLowerDElem(const Elem *, unsigned short int) const
Returns a const pointer to a lower dimensional element that corresponds to a side of a higher dimensi...
Definition MooseMesh.C:1693
bool hasLowerD() const
Definition MooseMesh.h:1545
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
RelationshipManagers are used for describing what kinds of non-local resources are needed for an obje...
static InputParameters validParams()
MooseMesh * _moose_mesh
Pointer to the MooseMesh object.
std::map< const Elem *, const CouplingMatrix *, CompareDofObjectsByPIDAndThenID > map_type