libMesh
Static Public Member Functions | Private Member Functions | List of all members
libMesh::InfFERadial Class Reference

Infinite elements are in some sense directional, compared to conventional finite elements. More...

#include <inf_fe.h>

Static Public Member Functions

static Real decay (const unsigned int dim, const Real v)
 
static Real decay_deriv (const unsigned int dim, const Real)
 
static Real D (const Real v)
 
static Real Dxr_sq (const Real)
 
static Real D_deriv (const Real v)
 
static Order mapping_order ()
 
static unsigned int n_dofs (const Order o_radial)
 
static unsigned int n_dofs_at_node (const Order o_radial, const unsigned int n_onion)
 
static unsigned int n_dofs_per_elem (const Order o_radial)
 

Private Member Functions

 InfFERadial ()
 Never use an object of this type. More...
 

Detailed Description

Infinite elements are in some sense directional, compared to conventional finite elements.

All methods related to the radial part, which extends perpendicular from the base, are collected in this class. This class offers static methods for use in InfFE and InfFEMap

Author
Daniel Dreyer
Date
2003

Definition at line 53 of file inf_fe.h.

Constructor & Destructor Documentation

◆ InfFERadial()

libMesh::InfFERadial::InfFERadial ( )
inlineprivate

Never use an object of this type.

Definition at line 60 of file inf_fe.h.

60 {}

Member Function Documentation

◆ D()

static Real libMesh::InfFERadial::D ( const Real  v)
inlinestatic
Returns
The radial weight D, used as an additional weight for the test function, evaluated at local radial coordinate v. FIXME: This is only valid for 3D!! And also makes assumptions on the mapping

Definition at line 82 of file inf_fe.h.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::init_shape_functions().

82 { return (1.-v)*(1.-v)/4.; }

◆ D_deriv()

static Real libMesh::InfFERadial::D_deriv ( const Real  v)
inlinestatic
Returns
The first (local) radial derivative of the radial weight D. FIXME: this is valid only in 3D.

Definition at line 90 of file inf_fe.h.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::init_shape_functions().

90 { return (v-1.)/2.; }

◆ decay()

Real libMesh::InfFERadial::decay ( const unsigned int  dim,
const Real  v 
)
inlinestatic
Returns
The decay in the radial direction of the Dim dimensional infinite element.

Definition at line 1266 of file inf_fe.h.

References dim.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::compute_data(), libMesh::InfFE< Dim, T_radial, T_map >::init_radial_shape_functions(), libMesh::InfFE< Dim, T_radial, T_map >::shape(), and libMesh::InfFE< Dim, T_radial, T_map >::shape_deriv().

1267 {
1268  switch (dim)
1269  {
1270  case 3:
1271  return (1.-v)/2.;
1272 
1273  case 2:
1274  // according to P. Bettess "Infinite Elements",
1275  // the 2D case is rather tricky:
1276  // - the sqrt() requires special integration rules
1277  // if not both trial- and test function are involved
1278  // - the analytic solutions contain not only the sqrt, but
1279  // also a polynomial with rather many terms, so convergence
1280  // might be bad.
1281  return sqrt((1.-v)/2.);
1282 
1283  case 1:
1284  return 1.;
1285 
1286  default:
1287  libmesh_error_msg("Invalid dim = " << dim);
1288  }
1289 }
unsigned int dim

◆ decay_deriv()

Real libMesh::InfFERadial::decay_deriv ( const unsigned int  dim,
const Real  v 
)
inlinestatic
Returns
The first (local) derivative of the decay in radial direction of the infinite element.

Definition at line 1292 of file inf_fe.h.

References dim, and libMesh::libmesh_assert().

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::compute_data(), libMesh::InfFE< Dim, T_radial, T_map >::init_radial_shape_functions(), and libMesh::InfFE< Dim, T_radial, T_map >::shape_deriv().

1293 {
1294  switch (dim)
1295  {
1296  case 3:
1297  return -0.5;
1298 
1299  case 2:
1300  // according to P. Bettess "Infinite Elements",
1301  // the 2D case is rather tricky:
1302  // - the sqrt() requires special integration rules
1303  // if not both trial- and test function are involved
1304  // - the analytic solutions contain not only the sqrt, but
1305  // also a polynomial with rather many terms, so convergence
1306  // might be bad.
1307 
1308  libmesh_assert (-1.-1.e-5 <= v && v < 1.);
1309  return -0.25/sqrt(1.-v);
1310 
1311  case 1:
1312  return 0.;
1313 
1314  default:
1315  libmesh_error_msg("Invalid dim = " << dim);
1316  }
1317 }
unsigned int dim
libmesh_assert(ctx)

◆ Dxr_sq()

static Real libMesh::InfFERadial::Dxr_sq ( const Real  )
inlinestatic

Definition at line 84 of file inf_fe.h.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::init_shape_functions().

84 { return 1.; }

◆ mapping_order()

static Order libMesh::InfFERadial::mapping_order ( )
inlinestatic
Returns
The Order of the mapping functions in the radial direction. Currently, this is always FIRST.

Definition at line 97 of file inf_fe.h.

References libMesh::FIRST.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::compute_data(), and libMesh::InfFEMap::map().

97 { return FIRST; }

◆ n_dofs()

static unsigned int libMesh::InfFERadial::n_dofs ( const Order  o_radial)
inlinestatic
Returns
The number of shape functions in radial direction associated with this infinite element. Either way, if the modes are stored as nodal dofs (n_dofs_at_node) or as element dofs (n_dofs_per_elem), in each case we have the same number of modes in radial direction.
Note
For the case of 1D infinite elements, in the base the dof-per-node scheme is used.

From the formulation of the infinite elements, we have 1 mode, when o_radial=CONST. Therefore, we have a total of o_radial+1 modes in radial direction.

Definition at line 113 of file inf_fe.h.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::compute_shape_functions(), libMesh::InfFE< Dim, T_radial, T_map >::init_radial_shape_functions(), libMesh::InfFE< Dim, T_radial, T_map >::init_shape_functions(), and libMesh::InfFE< Dim, T_radial, T_map >::n_dofs().

114  { return static_cast<unsigned int>(o_radial)+1; }

◆ n_dofs_at_node()

unsigned int libMesh::InfFERadial::n_dofs_at_node ( const Order  o_radial,
const unsigned int  n_onion 
)
static
Returns
The number of dofs in radial direction on "onion slice" n (either 0 or 1) for an infinite element of type inf_elem_type and radial order o_radial.

Currently, the first radial mode is associated with the nodes in the base. All higher radial modes are associated with the physically existing nodes further out.

Definition at line 115 of file inf_fe_base_radial.C.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::n_dofs_at_node().

117 {
118  libmesh_assert_less (n_onion, 2);
119 
120  if (n_onion == 0)
121  /*
122  * in the base, no matter what, we have 1 node associated
123  * with radial direction
124  */
125  return 1;
126  else
127  /*
128  * this works, since for Order o_radial=CONST=0, we still
129  * have the (1-v)/2 mode, associated to the base
130  */
131  return static_cast<unsigned int>(o_radial);
132 }

◆ n_dofs_per_elem()

static unsigned int libMesh::InfFERadial::n_dofs_per_elem ( const Order  o_radial)
inlinestatic
Returns
The number of modes in radial direction interior to the element, not associated with any interior nodes.
Note
These modes are a discontinuous approximation, therefore we have no special formulation for coupling in the base, like in the case of associating (possibly) multiple dofs per (outer) node.

Definition at line 136 of file inf_fe.h.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::n_dofs_per_elem().

137  { return static_cast<unsigned int>(o_radial)+1; }

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