/usr/include/dune/grid/test/checkgeometry.hh is in libdune-grid-dev 2.4.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#ifndef DUNE_GRID_TEST_CHECKGEOMETRY_HH
#define DUNE_GRID_TEST_CHECKGEOMETRY_HH
#include <limits>
#include <dune/common/forloop.hh>
#include <dune/common/typetraits.hh>
#include <dune/geometry/test/checkgeometry.hh>
#include <dune/grid/common/geometry.hh>
#include <dune/grid/common/entity.hh>
#include <dune/grid/common/gridview.hh>
namespace Dune
{
/** \param geometry The local geometry to be tested
* \param type The type of the element that the local geometry is embedded in
* \param geoName Helper string that will appear in the error message
*/
template< int mydim, int cdim, class Grid, template< int, int, class > class Imp >
void checkLocalGeometry ( const Geometry< mydim, cdim, Grid, Imp > &geometry,
GeometryType type, const std::string &geoName = "local geometry" )
{
checkGeometry( geometry );
// check that corners are within the reference element of the given type
assert( type.dim() == cdim );
const ReferenceElement< typename Grid::ctype, cdim > &refElement
= ReferenceElements< typename Grid::ctype, cdim >::general( type );
const int numCorners = geometry.corners();
for( int i = 0; i < numCorners; ++i )
{
if( !refElement.checkInside( geometry.corner( i ) ) )
{
std::cerr << "Corner " << i
<< " of " << geoName << " not within reference element: "
<< geometry.corner( i ) << "." << std::endl;
}
}
}
template <int codim>
struct CheckSubEntityGeometry
{
template <int dim,class GI,template <int,int,class> class EI>
static void apply(const Entity<0,dim,GI,EI> &entity)
{
integral_constant<
bool, Dune::Capabilities::hasEntity<GI,codim>::v
> capVar;
check(capVar,entity);
}
template <class Entity>
static void check(const true_type&, const Entity &entity)
{
for (unsigned int i=0; i<entity.subEntities(codim); ++i)
{
typedef typename Entity::template Codim< codim >::Entity SubE;
#if not DISABLE_DEPRECATED_METHOD_CHECK or defined(DUNE_GRID_CHECK_USE_DEPRECATED_ENTITY_AND_INTERSECTION_INTERFACE)
typedef typename Entity::template Codim< codim >::EntityPointer SubEP;
const SubEP subEP = entity.template subEntity<codim>(i);
*subEP;
#endif
#if defined(DUNE_GRID_CHECK_USE_DEPRECATED_ENTITY_AND_INTERSECTION_INTERFACE)
const SubE& subEn = *subEP;
#else
const SubE subEn = entity.template subEntity<codim>(i);
#endif
typename SubE::Geometry subGeo = subEn.geometry();
if( subEn.type() != subGeo.type() )
std::cerr << "Error: Entity and geometry report different geometry types on codimension " << codim << "." << std::endl;
checkGeometry(subGeo);
}
}
template <class Entity>
static void check(const false_type&, const Entity &)
{}
};
template<typename GV>
void checkGeometryLifetime (const GV &gridView)
{
typedef typename GV::template Codim<0>::Iterator Iterator;
typedef typename GV::template Codim<0>::Geometry Geometry;
typedef typename GV::ctype ctype;
enum { dim = GV::dimension };
enum { dimw = GV::dimensionworld };
const FieldVector<ctype, dim> pos(0.2);
Iterator it = gridView.template begin<0>();
const Iterator end = gridView.template end<0>();
// check that it != end otherwise the following is not valid
if( it == end ) return ;
#ifndef NDEBUG
const FieldVector<ctype, dimw> glob = it->geometry().global(pos);
#endif
const Geometry geomCopy = it->geometry();
checkGeometry ( geomCopy );
for( ; it != end; ++it )
{
// due to register/memory differences we might have
// errors < 1e-16
assert (std::abs((geomCopy.global(pos) - glob).one_norm()) < std::numeric_limits<ctype>::epsilon());
}
}
template< class VT >
void checkGeometry ( const GridView< VT > &gridView )
{
typedef typename GridView< VT >::template Codim<0>::Iterator Iterator;
const Iterator end = gridView.template end<0>();
Iterator it = gridView.template begin<0>();
for( ; it != end; ++it )
{
ForLoop<CheckSubEntityGeometry,0,GridView<VT>::dimension>::apply(*it);
}
}
} // namespace Dune
#endif // #ifndef DUNE_GRID_TEST_CHECKGEOMETRY_HH
|