libMesh
Loading...
Searching...
No Matches
Public Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
FETestBase< order, family, elem_type, build_nx, CaseName > Class Template Reference

#include <fe_test.h>

Inheritance diagram for FETestBase< order, family, elem_type, build_nx, CaseName >:
[legend]

Public Member Functions

void setUp ()
 
void tearDown ()
 

Static Protected Member Functions

static RealGradient true_gradient (Point p)
 
static RealTensor true_hessian (Point p)
 

Protected Attributes

std::string libmesh_suite_name
 
std::string _case_name
 Name of the case, can be used in the test to switch cases.
 
unsigned int _dim
 
unsigned int _nx
 
unsigned int _ny
 
unsigned int _nz
 
Elem * _elem
 
std::vector< dof_id_type > _dof_indices
 
System * _sys
 
std::unique_ptr< Mesh > _mesh
 
std::unique_ptr< EquationSystems > _es
 
std::unique_ptr< FEBase > _fe
 
std::unique_ptr< QGauss > _qrule
 
Real _value_tol
 
Real _grad_tol
 
Real _hess_tol
 
Real _past_vertex_offset
 The offset, as a fraction of an edge, of the points past the vertices.
 
Real _past_vertex_tol_factor
 The factor by which the tolerances grow at the points past the vertices.
 

Detailed Description

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
class FETestBase< order, family, elem_type, build_nx, CaseName >

Definition at line 274 of file fe_test.h.

Member Function Documentation

◆ setUp()

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
void FETestBase< order, family, elem_type, build_nx, CaseName >::setUp ( )
inline

Definition at line 367 of file fe_test.h.

368 {
369 _mesh = std::make_unique<Mesh>(*TestCommWorld);
370 _dim = Elem::type_to_dim_map[elem_type];
371 const unsigned int build_ny = (_dim > 1) * build_nx;
372 const unsigned int build_nz = (_dim > 2) * build_nx;
373
374 unsigned char weight_index = 0;
375
376 if (family == RATIONAL_BERNSTEIN)
377 {
378 // Make sure we can handle non-zero weight indices
379 _mesh->add_node_integer("buffer integer");
380
381 // Default weight to 1.0 so we don't get NaN from contains_point
382 // checks with a default GhostPointNeighbors ghosting
383 const Real default_weight = 1.0;
384 weight_index = cast_int<unsigned char>
385 (_mesh->add_node_datum<Real>("rational_weight", true,
386 &default_weight));
387 libmesh_assert_not_equal_to(weight_index, 0);
388
389 // Set mapping data but not type, since here we're testing
390 // rational basis functions in the FE space but testing then
391 // with Lagrange bases for the mapping space.
392 _mesh->set_default_mapping_data(weight_index);
393 }
394
395 if (elem_type == C0POLYGON)
396 {
397 // Build a pentagon by hand for testing purposes. Make this
398 // one non-skewed so a MONOMIAL basis will be able to exactly
399 // represent the polynomials we're projecting.
400
401 _mesh->add_point(Point(0, 0), 0);
402 _mesh->add_point(Point(1, 0), 1);
403 _mesh->add_point(Point(1+cos(2*libMesh::pi/5), sin(2*libMesh::pi/5)), 2);
404 _mesh->add_point(Point(0.5, sin(2*libMesh::pi/5)+sin(libMesh::pi/5)), 3);
405 _mesh->add_point(Point(-cos(2*libMesh::pi/5), sin(2*libMesh::pi/5)), 4);
406
407 std::unique_ptr<Elem> polygon = std::make_unique<C0Polygon>(5);
408 for (auto i : make_range(5))
409 polygon->set_node(i, _mesh->node_ptr(i));
410 polygon->set_id() = 0;
411
412 _mesh->add_elem(std::move(polygon));
413 _mesh->prepare_for_use();
414 }
415 else if (elem_type == C0POLYHEDRON)
416 {
417 // Build a plain cube by hand for testing purposes. We could
418 // upgrade this, but it should be to something non-skewed so a
419 // MONOMIAL basis will be able to exactly represent the
420 // polynomials we're projecting.
421 //
422 // See elem_test.h for the limitations here.
423
424 _mesh->add_point(Point(0, 0, 0), 0);
425 _mesh->add_point(Point(1, 0, 0), 1);
426 _mesh->add_point(Point(1, 1, 0), 2);
427 _mesh->add_point(Point(0, 1, 0), 3);
428 _mesh->add_point(Point(0, 0, 1), 4);
429 _mesh->add_point(Point(1, 0, 1), 5);
430 _mesh->add_point(Point(1, 1, 1), 6);
431 _mesh->add_point(Point(0, 1, 1), 7);
432
433 // Pick case
434 std::vector<std::vector<unsigned int>> nodes_on_side;
435 if (_case_name == "Default")
436 nodes_on_side = { {0, 1, 2, 3}, // min z
437 {0, 1, 5, 4}, // min y
438 {2, 6, 5, 1}, // max x
439 {2, 3, 7, 6}, // max y
440 {0, 4, 7, 3}, // min x
441 {5, 6, 7, 4} }; // max z
442 else if (_case_name == "MidNode")
443 nodes_on_side = { {0, 1, 2, 3}, // min z
444 {0, 1, 5, 4}, // min y
445 {1, 2, 6, 5}, // max x
446 {2, 3, 7, 6}, // max y
447 {3, 0, 4, 7}, // min x
448 {4, 5, 6, 7} }; // max z
449 else
450 libmesh_error_msg("Unknown case name: " + _case_name);
451
452 // Build all the sides.
453 std::vector<std::shared_ptr<Polygon>> sides(nodes_on_side.size());
454
455 for (auto s : index_range(nodes_on_side))
456 {
457 const auto & nodes_on_s = nodes_on_side[s];
458 sides[s] = std::make_shared<C0Polygon>(nodes_on_s.size());
459 for (auto i : index_range(nodes_on_s))
460 sides[s]->set_node(i, _mesh->node_ptr(nodes_on_s[i]));
461 }
462
463 std::unique_ptr<libMesh::Node> mid_elem_node;
464 std::unique_ptr<Elem> polyhedron = std::make_unique<C0Polyhedron>(sides, mid_elem_node);
465 _mesh->add_elem(std::move(polyhedron));
466 if (mid_elem_node)
467 _mesh->add_node(std::move(mid_elem_node));
468 _mesh->prepare_for_use();
469 }
470 else
471 {
473 build_nx, build_ny, build_nz,
474 0., 1., 0., 1., 0., 1.,
475 elem_type);
476 }
477
478 // For debugging purposes it can be helpful to only consider one
479 // element even when we're using an element type that requires
480 // more than one element to fill out a square or cube.
481#if 0
482 for (dof_id_type i = 0; i != _mesh->max_elem_id(); ++i)
483 {
484 Elem * elem = _mesh->query_elem_ptr(i);
485 if (elem && elem->id())
486 _mesh->delete_elem(elem);
487 }
488 _mesh->prepare_for_use();
489 CPPUNIT_ASSERT_EQUAL(_mesh->n_elem(), dof_id_type(1));
490#endif
491
492 // Permute our elements randomly and rotate and skew our mesh so
493 // we test all sorts of orientations ... except with Hermite
494 // elements, which are only designed to support meshes with a
495 // single orientation shared by all elements. We're also not
496 // rotating and/or skewing the rational elements, since our test
497 // solution was designed for a specific weighted mesh.
498 if (family != HERMITE &&
499 family != RATIONAL_BERNSTEIN)
500 {
502
503 // Not yet testing manifolds embedded in higher-D space
504 if (_dim > 1)
506 8*(_dim>2), 16*(_dim>2));
507
508 SkewFunc skew_func;
510 }
511
512 // Set rational weights so we can exactly match our test solution
513 if (family == RATIONAL_BERNSTEIN)
514 {
515 for (auto elem : _mesh->active_element_ptr_range())
516 {
517 // Workaround for nvc++ bug
518 Elem & e = *elem;
519
520 const unsigned int nv = elem->n_vertices();
521 const unsigned int nn = elem->n_nodes();
522 // We want interiors in lower dimensional elements treated
523 // like edges or faces as appropriate.
524 const unsigned int n_edges =
525 (elem->type() == EDGE3) ? 1 : elem->n_edges();
526 const unsigned int n_faces =
527 (elem->type() == QUAD9) ? 1 : elem->n_faces();
528 const unsigned int nve = std::min(nv + n_edges, nn);
529 const unsigned int nvef = std::min(nve + n_faces, nn);
530
531 for (unsigned int i = 0; i != nv; ++i)
532 e.node_ref(i).set_extra_datum<Real>(weight_index, 1.);
533 for (unsigned int i = nv; i != nve; ++i)
534 e.node_ref(i).set_extra_datum<Real>(weight_index, rational_w);
535 const Real w2 = rational_w * rational_w;
536 for (unsigned int i = nve; i != nvef; ++i)
537 e.node_ref(i).set_extra_datum<Real>(weight_index, w2);
538 const Real w3 = rational_w * w2;
539 for (unsigned int i = nvef; i != nn; ++i)
540 e.node_ref(i).set_extra_datum<Real>(weight_index, w3);
541 }
542 }
543
544 _mesh->complete_preparation();
545 _es = std::make_unique<EquationSystems>(*_mesh);
546 _sys = &(_es->add_system<System> ("SimpleSystem"));
547 _sys->add_variable("u", order, family);
548 _es->init();
549
550 if (family == RATIONAL_BERNSTEIN && order > 1)
551 {
553 }
554 else if (order > 3)
555 {
557 }
558 // Lagrange "cubic" on Tet7 only supports a bubble function, not
559 // all of P^3
560 else if (FE_CAN_TEST_CUBIC)
561 {
563 }
564 else if (order > 1)
565 {
567 }
568 else
569 {
571 }
572
573 FEType fe_type = _sys->variable_type(0);
574 _fe = FEBase::build(_dim, fe_type);
575
576 // Create quadrature rule for use in computing dual shape coefficients
577 _qrule = std::make_unique<QGauss>(_dim, fe_type.default_quadrature_order());
578 _fe->attach_quadrature_rule(_qrule.get());
579
580 auto rng = _mesh->active_local_element_ptr_range();
581 this->_elem = rng.begin() == rng.end() ? nullptr : *(rng.begin());
582
584
585 _nx = 10;
586 _ny = (_dim > 1) ? _nx : 1;
587 _nz = (_dim > 2) ? _nx : 1;
588
589 this->_value_tol = TOLERANCE * sqrt(TOLERANCE);
590
591 // We see 6.5*tol*sqrt(tol) errors on cubic Hermites with the fe_cubic
592 // hermite test function
593 // On Tri7 we see 10*tol*sqrt(tol) errors, even!
594 // On Tet14 Monomial gives us at least 13*tol*sqrt(tol) in some
595 // cases
596 this->_grad_tol = 15 * TOLERANCE * sqrt(TOLERANCE);
597
598 this->_hess_tol = sqrt(TOLERANCE); // FIXME: we see some ~1e-5 errors?!?
599
600 // Reference vertices have coordinates of 0 and +/-1, so with a power of two offset the
601 // barycentric coordinates of each point, and their sums and differences, are computed
602 // exactly. A combination which vanishes on a point is then evaluated as exactly zero.
603 this->_past_vertex_offset = 0.25;
604
605 // Shape functions grow outside the element, and with them the rounding error in the
606 // solution there, so evaluations past the vertices get looser tolerances. Along the line
607 // through an edge the error is a polynomial of degree at most p, so an error within a
608 // tolerance on the edge is within T_p(1 + 2*offset) times that tolerance at offset past
609 // the edge's end, where T_p is the Chebyshev polynomial. Gradient errors have lower degree
610 // and grow more slowly.
611 const Real x = 1 + 2 * this->_past_vertex_offset;
612 Real t_prev = 1, t = x;
613 for (unsigned int k = 1; k < static_cast<unsigned int>(order); ++k)
614 t_prev = std::exchange(t, 2 * x * t - t_prev);
615 this->_past_vertex_tol_factor = (order == CONSTANT) ? 1 : t;
616
617 // Prerequest everything we'll want to calculate later.
618 _fe->get_phi();
619 _fe->get_dphi();
620 _fe->get_dphidx();
621#if LIBMESH_DIM > 1
622 _fe->get_dphidy();
623#endif
624#if LIBMESH_DIM > 2
625 _fe->get_dphidz();
626#endif
627
628#if LIBMESH_ENABLE_SECOND_DERIVATIVES
629
630 // Szabab elements don't have second derivatives yet
631 if (family == SZABAB)
632 return;
633
634 _fe->get_d2phi();
635 _fe->get_d2phidx2();
636#if LIBMESH_DIM > 1
637 _fe->get_d2phidxdy();
638 _fe->get_d2phidy2();
639#endif
640#if LIBMESH_DIM > 2
641 _fe->get_d2phidxdz();
642 _fe->get_d2phidydz();
643 _fe->get_d2phidz2();
644#endif
645
646#endif
647 }
unsigned int _ny
Definition fe_test.h:282
unsigned int _dim
Definition fe_test.h:282
Real _past_vertex_tol_factor
The factor by which the tolerances grow at the points past the vertices.
Definition fe_test.h:297
Real _hess_tol
Definition fe_test.h:291
std::string _case_name
Name of the case, can be used in the test to switch cases.
Definition fe_test.h:280
std::unique_ptr< EquationSystems > _es
Definition fe_test.h:287
std::unique_ptr< FEBase > _fe
Definition fe_test.h:288
unsigned int _nz
Definition fe_test.h:282
std::unique_ptr< Mesh > _mesh
Definition fe_test.h:286
std::vector< dof_id_type > _dof_indices
Definition fe_test.h:284
Real _grad_tol
Definition fe_test.h:291
std::unique_ptr< QGauss > _qrule
Definition fe_test.h:289
System * _sys
Definition fe_test.h:285
Elem * _elem
Definition fe_test.h:283
Real _value_tol
Definition fe_test.h:291
unsigned int _nx
Definition fe_test.h:282
Real _past_vertex_offset
The offset, as a fraction of an edge, of the points past the vertices.
Definition fe_test.h:294
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
Definition dof_map.C:2203
void set_extra_datum(const unsigned int index, const T value)
Sets the value on this object of the extra datum associated with index, which should have been obtain...
dof_id_type id() const
Definition dof_object.h:833
This is the base class from which all geometric element types are derived.
Definition elem.h:96
virtual unsigned int n_vertices() const =0
const Node & node_ref(const unsigned int i) const
Definition elem.h:2659
virtual unsigned int n_nodes() const =0
static const unsigned int type_to_dim_map[INVALID_ELEM]
This array maps the integer representation of the ElemType enum to the geometric dimension of the ele...
Definition elem.h:649
virtual ElemType type() const =0
static std::unique_ptr< FEGenericBase > build(const unsigned int dim, const FEType &type)
Builds a specific finite element type.
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
Definition fe_type.h:197
Order default_quadrature_order() const
Definition fe_type.h:415
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition point.h:41
Manages consistently variables, degrees of freedom, and coefficient vectors.
Definition system.h:100
void project_solution(FunctionBase< Number > *f, FunctionBase< Gradient > *g=nullptr, std::optional< ConstElemRange > active_local_range=std::nullopt, std::optional< std::vector< unsigned int > > variable_numbers=std::nullopt) const
Projects arbitrary functions onto the current solution.
const FEType & variable_type(const unsigned int i) const
Definition system.C:2721
unsigned int add_variable(std::string_view 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:1344
const DofMap & get_dof_map() const
Definition system.h:2417
static const Real rational_w
Definition fe_test.h:205
Number fe_cubic_test(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:136
Number rational_test(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:208
Gradient quadratic_test_grad(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:116
Number quadratic_test(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:103
Gradient fe_quartic_test_grad(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:182
Gradient linear_test_grad(const Point &, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:87
Number fe_quartic_test(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:169
Gradient rational_test_grad(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:225
Gradient fe_cubic_test_grad(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:149
Number linear_test(const Point &p, const Parameters &, const std::string &, const std::string &)
Definition fe_test.h:74
void build_cube(UnstructuredMesh &mesh, const unsigned int nx=0, const unsigned int ny=0, const unsigned int nz=0, const Real xmin=0., const Real xmax=1., const Real ymin=0., const Real ymax=1., const Real zmin=0., const Real zmax=1., const ElemType type=INVALID_ELEM, const bool gauss_lobatto_grid=false)
Builds a (elements) cube.
void redistribute(MeshBase &mesh, const FunctionBase< Real > &mapfunc)
Deterministically perturb the nodal locations.
RealTensorValue rotate(MeshBase &mesh, const Real phi, const Real theta=0., const Real psi=0.)
Rotates the mesh in 3D space.
void permute_elements(MeshBase &mesh)
Randomly permute the nodal ordering of each element (without twisting the element mapping).
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...
Definition int_range.h:153
const Real pi
.
Definition libmesh.h:292
static constexpr Real TOLERANCE
uint8_t dof_id_type
Definition id_types.h:67
@ RATIONAL_BERNSTEIN
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition int_range.h:176

References FETestBase< order, family, elem_type, build_nx, CaseName >::_case_name, FETestBase< order, family, elem_type, build_nx, CaseName >::_dim, FETestBase< order, family, elem_type, build_nx, CaseName >::_dof_indices, FETestBase< order, family, elem_type, build_nx, CaseName >::_es, FETestBase< order, family, elem_type, build_nx, CaseName >::_fe, FETestBase< order, family, elem_type, build_nx, CaseName >::_mesh, FETestBase< order, family, elem_type, build_nx, CaseName >::_nx, FETestBase< order, family, elem_type, build_nx, CaseName >::_ny, FETestBase< order, family, elem_type, build_nx, CaseName >::_nz, FETestBase< order, family, elem_type, build_nx, CaseName >::_past_vertex_offset, FETestBase< order, family, elem_type, build_nx, CaseName >::_qrule, FETestBase< order, family, elem_type, build_nx, CaseName >::_sys, libMesh::System::add_variable(), libMesh::FEGenericBase< OutputType >::build(), libMesh::MeshTools::Generation::build_cube(), libMesh::C0POLYGON, libMesh::C0POLYHEDRON, libMesh::CONSTANT, libMesh::FEType::default_quadrature_order(), libMesh::DofMap::dof_indices(), libMesh::EDGE3, fe_cubic_test(), fe_cubic_test_grad(), fe_quartic_test(), fe_quartic_test_grad(), libMesh::System::get_dof_map(), libMesh::HERMITE, libMesh::DofObject::id(), libMesh::index_range(), linear_test(), linear_test_grad(), libMesh::make_range(), libMesh::Elem::n_vertices(), libMesh::Elem::node_ref(), libMesh::MeshTools::Modification::permute_elements(), libMesh::pi, libMesh::System::project_solution(), libMesh::QUAD9, quadratic_test(), quadratic_test_grad(), libMesh::RATIONAL_BERNSTEIN, rational_test(), rational_test_grad(), rational_w, libMesh::Real, libMesh::MeshTools::Modification::redistribute(), libMesh::MeshTools::Modification::rotate(), libMesh::DofObject::set_extra_datum(), libMesh::SZABAB, TestCommWorld, libMesh::TOLERANCE, libMesh::Elem::type_to_dim_map, and libMesh::System::variable_type().

Referenced by FESideTest< order, family, elem_type >::setUp().

◆ tearDown()

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
void FETestBase< order, family, elem_type, build_nx, CaseName >::tearDown ( )
inline

Definition at line 649 of file fe_test.h.

649{}

Referenced by FESideTest< order, family, elem_type >::tearDown().

◆ true_gradient()

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
static RealGradient FETestBase< order, family, elem_type, build_nx, CaseName >::true_gradient ( Point  p)
inlinestaticprotected

Definition at line 300 of file fe_test.h.

301 {
302 Parameters dummy;
303
304 Gradient true_grad;
305 RealGradient returnval;
306
307 if (family == RATIONAL_BERNSTEIN && order > 1)
308 true_grad = rational_test_grad(p, dummy, "", "");
309 else if (order > 3)
310 true_grad = fe_quartic_test_grad(p, dummy, "", "");
311 else if (FE_CAN_TEST_CUBIC)
312 true_grad = fe_cubic_test_grad(p, dummy, "", "");
313 else if (order > 1)
314 {
315 const Real & x = p(0);
316 const Real & y = (LIBMESH_DIM > 1) ? p(1) : 0;
317 const Real & z = (LIBMESH_DIM > 2) ? p(2) : 0;
318
319 true_grad = Gradient(2*x+0.125*y+0.0625*z,
320 y+0.125*x+0.03125*z,
321 0.5*z+0.0625*x+0.03125*y);
322 }
323 else
324 true_grad = Gradient(1.0, 0.25, 0.0625);
325
326 for (unsigned int d=0; d != LIBMESH_DIM; ++d)
327 {
328 CPPUNIT_ASSERT(true_grad(d) ==
329 Number(libmesh_real(true_grad(d))));
330
331 returnval(d) = libmesh_real(true_grad(d));
332 }
333
334 return returnval;
335 }
This class provides the ability to map between arbitrary, user-defined strings and several data types...
Definition parameters.h:75
This class defines a vector in LIBMESH_DIM dimensional Real or Complex space.
NumberVectorValue Gradient
LIBMESH_DEVICE_INLINE T libmesh_real(T a)

References fe_cubic_test_grad(), fe_quartic_test_grad(), libMesh::libmesh_real(), libMesh::RATIONAL_BERNSTEIN, rational_test_grad(), and libMesh::Real.

◆ true_hessian()

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
static RealTensor FETestBase< order, family, elem_type, build_nx, CaseName >::true_hessian ( Point  p)
inlinestaticprotected

Definition at line 338 of file fe_test.h.

339 {
340 const Real & x = p(0);
341 const Real & y = LIBMESH_DIM > 1 ? p(1) : 0;
342 const Real & z = LIBMESH_DIM > 2 ? p(2) : 0;
343
344 if (order > 3)
345 return RealTensor
346 { 12*x*x-12*x+2+2*z*(1-y)-2*(1-y)*(1-z), -2*x*z-(1-2*x)*(1-z)-(1-2*y)*z, 2*x*(1-y)-(1-2*x)*(1-y)-y*(1-y),
347 -2*x*z-(1-2*x)*(1-z)-(1-2*y)*z, -2*(1-x)*z, -x*x+x*(1-x)+(1-x)*(1-2*y),
348 2*x*(1-y)-(1-2*x)*(1-y)-y*(1-y), -x*x+x*(1-x)+(1-x)*(1-2*y), 12*z*z-12*z+2 };
349 else if (FE_CAN_TEST_CUBIC)
350 return RealTensor
351 { 6*x-4+2*(1-y), -2*x+z-1, y-1,
352 -2*x+z-1, -2*z, x+1-2*y,
353 y-1, x+1-2*y, 6*z-4 };
354 else if (order > 1)
355 return RealTensor
356 { 2, 0.125, 0.0625,
357 0.125, 1, 0.03125,
358 0.0625, 0.03125, 0.5 };
359
360 return RealTensor
361 { 0, 0, 0,
362 0, 0, 0,
363 0, 0, 0 };
364 }
This class defines a tensor in LIBMESH_DIM dimensional Real or Complex space.

References libMesh::Real.

Member Data Documentation

◆ _case_name

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::string FETestBase< order, family, elem_type, build_nx, CaseName >::_case_name
protected

Name of the case, can be used in the test to switch cases.

Definition at line 280 of file fe_test.h.

Referenced by FETestBase< order, family, elem_type, build_nx, CaseName >::setUp().

◆ _dim

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
unsigned int FETestBase< order, family, elem_type, build_nx, CaseName >::_dim
protected

◆ _dof_indices

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::vector<dof_id_type> FETestBase< order, family, elem_type, build_nx, CaseName >::_dof_indices
protected

◆ _elem

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
Elem* FETestBase< order, family, elem_type, build_nx, CaseName >::_elem
protected

Definition at line 283 of file fe_test.h.

◆ _es

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::unique_ptr<EquationSystems> FETestBase< order, family, elem_type, build_nx, CaseName >::_es
protected

◆ _fe

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::unique_ptr<FEBase> FETestBase< order, family, elem_type, build_nx, CaseName >::_fe
protected

◆ _grad_tol

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
Real FETestBase< order, family, elem_type, build_nx, CaseName >::_grad_tol
protected

Definition at line 291 of file fe_test.h.

◆ _hess_tol

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
Real FETestBase< order, family, elem_type, build_nx, CaseName >::_hess_tol
protected

Definition at line 291 of file fe_test.h.

◆ _mesh

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::unique_ptr<Mesh> FETestBase< order, family, elem_type, build_nx, CaseName >::_mesh
protected

◆ _nx

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
unsigned int FETestBase< order, family, elem_type, build_nx, CaseName >::_nx
protected

◆ _ny

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
unsigned int FETestBase< order, family, elem_type, build_nx, CaseName >::_ny
protected

◆ _nz

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
unsigned int FETestBase< order, family, elem_type, build_nx, CaseName >::_nz
protected

◆ _past_vertex_offset

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
Real FETestBase< order, family, elem_type, build_nx, CaseName >::_past_vertex_offset
protected

The offset, as a fraction of an edge, of the points past the vertices.

Definition at line 294 of file fe_test.h.

Referenced by FETestBase< order, family, elem_type, build_nx, CaseName >::setUp().

◆ _past_vertex_tol_factor

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
Real FETestBase< order, family, elem_type, build_nx, CaseName >::_past_vertex_tol_factor
protected

The factor by which the tolerances grow at the points past the vertices.

Definition at line 297 of file fe_test.h.

◆ _qrule

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::unique_ptr<QGauss> FETestBase< order, family, elem_type, build_nx, CaseName >::_qrule
protected

◆ _sys

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
System* FETestBase< order, family, elem_type, build_nx, CaseName >::_sys
protected

◆ _value_tol

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
Real FETestBase< order, family, elem_type, build_nx, CaseName >::_value_tol
protected

Definition at line 291 of file fe_test.h.

◆ libmesh_suite_name

template<Order order, FEFamily family, ElemType elem_type, unsigned int build_nx, typename CaseName = Default>
std::string FETestBase< order, family, elem_type, build_nx, CaseName >::libmesh_suite_name
protected

Definition at line 277 of file fe_test.h.


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