* \eta_K^2 = \sum_{F\in\partial K} c_F \int_{\partial K_F} \left[a
* \frac{\partial u_h}{\partial n}\right]^2 do \f] be the error estimator for
* cell $K$. $[\cdot]$ denotes the jump of the argument at the face. In the
- * paper of Ainsworth $ c_F=\frac h{24} $, but this factor is a bit esoteric,
+ * paper of Ainsworth $ c_F=\frac {h_K}{24} $, but this factor is a bit esoteric,
* stemming from interpolation estimates and stability constants which may
* hold for the Poisson problem, but may not hold for more general situations.
* Alternatively, we consider the case when $ c_F=\frac {h_F}{2p_F} $, where $
* h_F $ is face diagonal and $ p_F=max(p^+,p^-) $ is the maximum polynomial
- * degree of adjacent elements. The choice between the two is done by means of
+ * degree of adjacent elements; or $c_F=h_K$. The choice between these factors is done by means of
* the enumerator, provided as the last argument in all functions.
*
* To perform the integration, use is made of the FEFaceValues and
* standard library, with the iterator pointing to that face being the key
* into the map. When looping the second time over all cells, we have to sum
* up the contributions of the faces and take the square root. For the Kelly
- * estimator, the multiplication with $\frac h{24}$ is done in the second
- * loop. By doing so we avoid problems to decide with which $h$ to multiply,
+ * estimator, the multiplication with $\frac {h_K}{24}$ is done in the second
+ * loop. By doing so we avoid problems to decide with which $h_K$ to multiply,
* that of the cell on the one or that of the cell on the other side of the
* face. Whereas for the hp-estimator the @p map stores integrals multiplied
* by $\frac {h_F}{2p_F}$, which are then summed in the second loop.
*
- * $h$ ($h_F$) is taken to be the greatest length of the diagonals of the cell
+ * $h_K$ ($h_F$) is taken to be the greatest length of the diagonals of the cell
* (face). For more or less uniform cells (faces) without deformed angles,
* this coincides with the diameter of the cell (face).
*
* <li> The face belongs to a Neumann boundary. In this case, the
* contribution of the face $F\in\partial K$ looks like \f[ n_F\int_F
* \left|g-a\frac{\partial u_h}{\partial n}\right|^2 ds \f] where $g$ is the
- * Neumann boundary function, $n_F=\frac {h}{24}$ and $n_F=\frac {h_F}{p}$ for
+ * Neumann boundary function, $n_F=\frac {h_K}{24}$ and $n_F=\frac {h_F}{p}$ for
* the Kelly and hp-estimator, respectively. If the finite element is vector-
* valued, then obviously the function denoting the Neumann boundary
* conditions needs to be vector-valued as well.
*/
enum Strategy
{
- //! Kelly error estimator with the factor $\frac {h}{24}$.
+ //! Kelly error estimator with the factor $\frac {h_K}{24}$.
cell_diameter_over_24 = 0,
//! the boundary residual estimator with the factor $\frac {h_F}{2 max(p^+,p^-)}$.
- face_diameter_over_twice_max_degree
+ face_diameter_over_twice_max_degree,
+ //! Kelly error estimator with the factor $h_K$.
+ cell_diameter
};
/**
{
return 1.0;
}
+ case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::cell_diameter :
+ {
+ return 1.0;
+ }
case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::face_diameter_over_twice_max_degree :
{
const double cell_degree = fe_face_values_cell.get_fe_collection()[cell->active_fe_index()].degree;
{
return 1.0;
}
+ case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::cell_diameter :
+ {
+ return 1.0;
+ }
case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::face_diameter_over_twice_max_degree :
{
const double cell_degree = fe_face_values_cell.get_fe_collection()[cell->active_fe_index()].degree;
{
return 1.0;
}
+ case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::cell_diameter :
+ {
+ return 1.0;
+ }
case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::face_diameter_over_twice_max_degree :
{
const double cell_degree = fe_face_values.get_fe_collection()[cell->active_fe_index()].degree;
{
return cell->diameter()/24;
}
+ case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::cell_diameter :
+ {
+ return cell->diameter();
+ }
case KellyErrorEstimator<DoFHandlerType::dimension,DoFHandlerType::space_dimension>::face_diameter_over_twice_max_degree :
{
return 1.0;