libMesh
Protected Member Functions | Protected Attributes | List of all members
OverlappingTestBase Class Reference
Inheritance diagram for OverlappingTestBase:
[legend]

Protected Member Functions

void build_quad_mesh (unsigned int n_refinements=0)
 
void init (MeshBase &mesh)
 
void clear ()
 
void setup_coupling_matrix (std::unique_ptr< CouplingMatrix > &coupling)
 

Protected Attributes

std::unique_ptr< MeshBase_mesh
 
std::unique_ptr< EquationSystems_es
 

Detailed Description

Definition at line 230 of file overlapping_coupling_test.C.

Member Function Documentation

◆ build_quad_mesh()

void OverlappingTestBase::build_quad_mesh ( unsigned int  n_refinements = 0)
inlineprotected

Definition at line 238 of file overlapping_coupling_test.C.

239  {
240  // We are making assumptions in various places about the presence
241  // of the elements on the current processor so we're restricting to
242  // ReplicatedMesh for now.
243  _mesh = libmesh_make_unique<ReplicatedMesh>(*TestCommWorld);
244 
245  _mesh->set_mesh_dimension(2);
246 
247  _mesh->add_point( Point(0.0,0.0),0 );
248  _mesh->add_point( Point(1.0,0.0),1 );
249  _mesh->add_point( Point(1.0,1.0),2 );
250  _mesh->add_point( Point(0.0,1.0),3 );
251 
252  {
253  Elem* elem = _mesh->add_elem( new Quad4 );
254  elem->set_id(0);
255  elem->subdomain_id() = 1;
256 
257  for (unsigned int n=0; n<4; n++)
258  elem->set_node(n) = _mesh->node_ptr(n);
259  }
260 
261  _mesh->add_point( Point(1.0,2.0),4 );
262  _mesh->add_point( Point(0.0,2.0),5 );
263 
264  {
265  Elem* elem = _mesh->add_elem( new Quad4 );
266  elem->set_id(1);
267  elem->subdomain_id() = 1;
268 
269  elem->set_node(0) = _mesh->node_ptr(3);
270  elem->set_node(1) = _mesh->node_ptr(2);
271  elem->set_node(2) = _mesh->node_ptr(4);
272  elem->set_node(3) = _mesh->node_ptr(5);
273  }
274 
275  _mesh->add_point( Point(0.0,0.0),6 );
276  _mesh->add_point( Point(1.0,0.0),7 );
277  _mesh->add_point( Point(1.0,2.0),8 );
278  _mesh->add_point( Point(0.0,2.0),9 );
279 
280  {
281  Elem* elem = _mesh->add_elem( new Quad4 );
282  elem->set_id(2);
283  elem->subdomain_id() = 2;
284 
285  elem->set_node(0) = _mesh->node_ptr(6);
286  elem->set_node(1) = _mesh->node_ptr(7);
287  elem->set_node(2) = _mesh->node_ptr(8);
288  elem->set_node(3) = _mesh->node_ptr(9);
289  }
290 
291  _mesh->partitioner() = libmesh_make_unique<OverlappingTestPartitioner>();
292 
293  _mesh->prepare_for_use();
294 
295 #ifdef LIBMESH_ENABLE_AMR
296  if (n_refinements > 0)
297  {
298  MeshRefinement refine(*_mesh);
299  refine.uniformly_refine(n_refinements);
300  }
301 #endif // LIBMESH_ENABLE_AMR
302  }

References libMesh::DofObject::set_id(), libMesh::Elem::set_node(), libMesh::Elem::subdomain_id(), TestCommWorld, and libMesh::MeshRefinement::uniformly_refine().

◆ clear()

void OverlappingTestBase::clear ( )
inlineprotected

Definition at line 324 of file overlapping_coupling_test.C.

325  {
326  _es.reset();
327  _mesh.reset();
328  }

◆ init()

void OverlappingTestBase::init ( MeshBase mesh)
inlineprotected

Definition at line 304 of file overlapping_coupling_test.C.

305  {
306  _es = libmesh_make_unique<EquationSystems>(*_mesh);
307  LinearImplicitSystem & sys = _es->add_system<LinearImplicitSystem> ("SimpleSystem");
308 
309  std::set<subdomain_id_type> sub_one;
310  sub_one.insert(1);
311 
312  std::set<subdomain_id_type> sub_two;
313  sub_two.insert(2);
314 
315  sys.add_variable("U", FIRST, LAGRANGE, &sub_two);
316  sys.add_variable("L", FIRST, LAGRANGE, &sub_two);
317 
318  sys.add_variable("V", FIRST, LAGRANGE, &sub_one);
319  sys.add_variable("p", FIRST, LAGRANGE, &sub_one);
320 
321  _es->init();
322  }

References libMesh::System::add_variable(), libMesh::FIRST, and libMesh::LAGRANGE.

◆ setup_coupling_matrix()

void OverlappingTestBase::setup_coupling_matrix ( std::unique_ptr< CouplingMatrix > &  coupling)
inlineprotected

Definition at line 330 of file overlapping_coupling_test.C.

331  {
332  System & system = _es->get_system("SimpleSystem");
333 
334  coupling = libmesh_make_unique<CouplingMatrix>(system.n_vars());
335 
336  const unsigned int u_var = system.variable_number("U");
337  const unsigned int l_var = system.variable_number("L");
338  const unsigned int v_var = system.variable_number("V");
339  const unsigned int p_var = system.variable_number("p");
340 
341  // Only adding the overlapping couplings since the primary ones should
342  // be there by default.
343  (*coupling)(u_var,v_var) = true;
344  (*coupling)(l_var,v_var) = true;
345  (*coupling)(l_var,p_var) = true;
346  (*coupling)(v_var,u_var) = true;
347  (*coupling)(v_var,l_var) = true;
348  }

References libMesh::System::n_vars(), and libMesh::System::variable_number().

Member Data Documentation

◆ _es

std::unique_ptr<EquationSystems> OverlappingTestBase::_es
protected

Definition at line 236 of file overlapping_coupling_test.C.

◆ _mesh

std::unique_ptr<MeshBase> OverlappingTestBase::_mesh
protected

Definition at line 234 of file overlapping_coupling_test.C.


The documentation for this class was generated from the following file:
libMesh::System
Manages consistently variables, degrees of freedom, and coefficient vectors.
Definition: system.h:100
libMesh::System::n_vars
unsigned int n_vars() const
Definition: system.h:2155
libMesh::DofObject::set_id
dof_id_type & set_id()
Definition: dof_object.h:776
libMesh::MeshRefinement
Implements (adaptive) mesh refinement algorithms for a MeshBase.
Definition: mesh_refinement.h:61
OverlappingTestBase::_mesh
std::unique_ptr< MeshBase > _mesh
Definition: overlapping_coupling_test.C:234
libMesh::System::add_variable
unsigned int add_variable(const std::string &var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=nullptr)
Adds the variable var to the list of variables for this system.
Definition: system.C:1069
OverlappingTestBase::_es
std::unique_ptr< EquationSystems > _es
Definition: overlapping_coupling_test.C:236
TestCommWorld
libMesh::Parallel::Communicator * TestCommWorld
Definition: driver.C:111
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
libMesh::Quad4
The QUAD4 is an element in 2D composed of 4 nodes.
Definition: face_quad4.h:51
libMesh::Elem::set_node
virtual Node *& set_node(const unsigned int i)
Definition: elem.h:2059
libMesh::Elem::subdomain_id
subdomain_id_type subdomain_id() const
Definition: elem.h:2069
libMesh::Elem
This is the base class from which all geometric element types are derived.
Definition: elem.h:100
libMesh::System::variable_number
unsigned short int variable_number(const std::string &var) const
Definition: system.C:1232
libMesh::LAGRANGE
Definition: enum_fe_family.h:36
libMesh::LinearImplicitSystem
Manages consistently variables, degrees of freedom, coefficient vectors, matrices and linear solvers ...
Definition: linear_implicit_system.h:55
libMesh::FIRST
Definition: enum_order.h:42