/usr/include/dune/grid/alugrid/3d/alu3dinclude.hh is in libdune-grid-dev 2.2.1-2.
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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 | #ifndef DUNE_ALU3DINCLUDE_HH
#define DUNE_ALU3DINCLUDE_HH
//////////////////////////////////////////////////////////////////////
// compile imp.cc into lib (1 yes, 0 no)
// if you change this, you'll get what you deserve
//////////////////////////////////////////////////////////////////////
#define COMPILE_ALUGRID_LIB 0
#if COMPILE_ALUGRID_LIB
#define COMPILE_ALUGRID_INLINE 0
#else
#define COMPILE_ALUGRID_INLINE 1
#endif
#if COMPILE_ALUGRID_INLINE
#define alu_inline inline
#else
#define alu_inline
#endif
/////////////////////////////////////////////////////////////////////
// all methods and classes of the ALUGrid are defined in the namespace
#define ALU3DSPACE ALUGridSpace ::
#include <dune/common/mpicollectivecommunication.hh>
#include <dune/grid/alugrid/common/checkparallel.hh>
// if MPI was found include all headers
#if ALU3DGRID_PARALLEL
#include <alugrid_parallel.h>
#else
// if not, include only headers for serial version
#include <alugrid_serial.h>
#endif
//- local includes
#include <dune/grid/alugrid/3d/topology.hh>
namespace ALUGridSpace
{
static const int ProcessorBoundary_t = Gitter::hbndseg_STI::closure;
// general GatherScatter type
typedef GatherScatter GatherScatterType;
}
namespace Dune
{
// typedef of ALU3dGridElementType see topology.hh
// i.e. double or float
typedef double alu3d_ctype;
// ALU3dBasicImplTraits
// --------------------
template< class Comm >
struct ALU3dBasicImplTraits;
template<>
struct ALU3dBasicImplTraits< No_Comm >
{
typedef ALU3DSPACE Gitter GitterType;
typedef ALU3DSPACE GitterDuneImpl GitterImplType;
typedef GitterType::helement_STI HElementType; // Interface Element
typedef GitterType::hface_STI HFaceType; // Interface Face
typedef GitterType::hedge_STI HEdgeType; // Interface Edge
typedef GitterType::vertex_STI VertexType; // Interface Vertex
typedef GitterType::hbndseg_STI HBndSegType;
typedef GitterType::ghostpair_STI GhostPairType;
typedef HElementType PllElementType;
typedef GitterType::Geometric::hedge1_GEO GEOEdgeType;
//! method for ghost check
template <class BndFaceType>
static bool isGhost( const BndFaceType* ghost )
{
return false ;
}
};
#if ALU3DGRID_PARALLEL
template<>
struct ALU3dBasicImplTraits< MPI_Comm >
{
typedef ALU3DSPACE GitterDunePll GitterType;
typedef ALU3DSPACE GitterDunePll GitterImplType;
typedef GitterType::helement_STI HElementType; // Interface Element
typedef GitterType::hface_STI HFaceType; // Interface Face
typedef GitterType::hedge_STI HEdgeType; // Interface Edge
typedef GitterType::vertex_STI VertexType; // Interface Vertex
typedef GitterType::hbndseg_STI HBndSegType;
typedef GitterType::ghostpair_STI GhostPairType;
typedef ALU3DSPACE ElementPllXIF_t PllElementType;
typedef GitterType::Geometric::hedge1_GEO GEOEdgeType;
// method for ghost check
template <class BndFaceType>
static bool isGhost( const BndFaceType* ghost )
{
return ( ghost != 0 );
}
};
#endif // #if ALU3DGRID_PARALLEL
// ALU3dCodimImplTraits
// --------------------
template< ALU3dGridElementType elType, class Comm, int codim >
struct ALU3dCodimImplTraits;
template< class Comm >
struct ALU3dCodimImplTraits< tetra, Comm, 0 >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename ALU3dBasicImplTraits< Comm >::GitterImplType GitterImplType;
typedef typename GitterType::helement_STI InterfaceType;
typedef typename GitterType::Geometric::hasFace3 EntitySeedType;
typedef typename GitterImplType::Objects::tetra_IMPL ImplementationType;
typedef typename GitterType::hbndseg_STI GhostInterfaceType;
typedef typename GitterImplType::Objects::Hbnd3Default GhostImplementationType;
};
template< class Comm >
struct ALU3dCodimImplTraits< hexa, Comm, 0 >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename ALU3dBasicImplTraits< Comm >::GitterImplType GitterImplType;
typedef typename GitterType::helement_STI InterfaceType;
typedef typename GitterType::Geometric::hasFace4 EntitySeedType;
typedef typename GitterImplType::Objects::hexa_IMPL ImplementationType;
typedef typename GitterType::hbndseg_STI GhostInterfaceType;
typedef typename GitterImplType::Objects::Hbnd4Default GhostImplementationType;
};
template< class Comm >
struct ALU3dCodimImplTraits< tetra, Comm, 1 >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename GitterType::hface_STI InterfaceType;
typedef InterfaceType EntitySeedType;
typedef typename GitterType::Geometric::hface3_GEO ImplementationType;
};
template< class Comm >
struct ALU3dCodimImplTraits< hexa, Comm, 1 >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename GitterType::hface_STI InterfaceType;
typedef InterfaceType EntitySeedType;
typedef typename GitterType::Geometric::hface4_GEO ImplementationType;
};
template< ALU3dGridElementType elType, class Comm >
struct ALU3dCodimImplTraits< elType, Comm, 2 >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename GitterType::hedge_STI InterfaceType;
typedef InterfaceType EntitySeedType;
typedef typename GitterType::Geometric::hedge1_GEO ImplementationType;
};
template< ALU3dGridElementType elType, class Comm >
struct ALU3dCodimImplTraits< elType, Comm, 3 >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename GitterType::vertex_STI InterfaceType;
typedef InterfaceType EntitySeedType;
typedef typename GitterType::Geometric::VertexGeo ImplementationType;
};
// ALU3dImplTraits
// ---------------
template< ALU3dGridElementType elType, class Comm >
struct ALU3dImplTraits;
template< class Comm >
struct ALU3dImplTraits< tetra, Comm >
: public ALU3dBasicImplTraits< Comm >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename ALU3dBasicImplTraits< Comm >::GitterImplType GitterImplType;
typedef typename GitterType::Geometric::hface3_GEO GEOFaceType;
typedef typename GitterType::Geometric::VertexGeo GEOVertexType;
typedef typename GitterImplType::Objects::tetra_IMPL IMPLElementType;
typedef typename GitterType::Geometric::tetra_GEO GEOElementType;
typedef typename GitterType::Geometric::periodic3_GEO GEOPeriodicType;
typedef typename GitterType::Geometric::hasFace3 HasFaceType;
typedef typename GitterType::Geometric::Hface3Rule HfaceRuleType;
typedef typename GitterImplType::Objects::Hbnd3Default BNDFaceType;
typedef typename GitterImplType::Objects::hbndseg3_IMPL ImplBndFaceType;
typedef typename GitterType::Geometric::TetraRule MarkRuleType;
// refinement and coarsening enum
enum { bisect_element_t =
#ifdef ALUGRID_PERIODIC_BOUNDARY_PARALLEL
MarkRuleType::bisect
#else
MarkRuleType::iso8
#endif
};
enum { refine_element_t = MarkRuleType::iso8 };
enum { coarse_element_t = MarkRuleType::crs };
enum { nosplit_element_t = MarkRuleType::nosplit };
typedef std::pair< GEOFaceType *, int > NeighbourFaceType;
typedef std::pair< HasFaceType *, int > NeighbourPairType;
template< int codim >
struct Codim
: public ALU3dCodimImplTraits< tetra, Comm, codim >
{};
// access of faces
template <class Elem>
static const GEOFaceType* getFace( const Elem& elem, const int aluFace )
{
return elem.myhface3( aluFace );
}
};
template< class Comm >
struct ALU3dImplTraits< hexa, Comm >
: public ALU3dBasicImplTraits< Comm >
{
typedef typename ALU3dBasicImplTraits< Comm >::GitterType GitterType;
typedef typename ALU3dBasicImplTraits< Comm >::GitterImplType GitterImplType;
typedef typename GitterType::Geometric::hface4_GEO GEOFaceType;
typedef typename GitterType::Geometric::VertexGeo GEOVertexType;
typedef typename GitterImplType::Objects::hexa_IMPL IMPLElementType;
typedef typename GitterType::Geometric::hexa_GEO GEOElementType;
typedef typename GitterType::Geometric::periodic4_GEO GEOPeriodicType;
typedef typename GitterType::Geometric::hasFace4 HasFaceType;
typedef typename GitterType::Geometric::Hface4Rule HfaceRuleType;
typedef typename GitterImplType::Objects::Hbnd4Default BNDFaceType;
typedef typename GitterImplType::Objects::hbndseg4_IMPL ImplBndFaceType;
typedef typename GitterType::Geometric::HexaRule MarkRuleType;
// refinement and coarsening enum
enum { refine_element_t = MarkRuleType::iso8 };
enum { bisect_element_t = MarkRuleType::iso8 };
enum { coarse_element_t = MarkRuleType::crs };
enum { nosplit_element_t = MarkRuleType::nosplit };
typedef std::pair< GEOFaceType *, int > NeighbourFaceType;
typedef std::pair< HasFaceType *, int > NeighbourPairType;
template< int codim >
struct Codim
: public ALU3dCodimImplTraits< hexa, Comm, codim >
{};
// access of faces
template <class Elem>
static const GEOFaceType* getFace( const Elem& elem, const int aluFace )
{
return elem.myhface4( aluFace );
}
};
//! contains list of vertices of one level
//! needed for VertexLevelIterator
template< class Comm >
struct ALU3dGridVertexList
{
// level vertex iterator list
typedef typename ALU3dBasicImplTraits< Comm >::VertexType VertexType;
typedef std::vector< VertexType * > VertexListType;
typedef typename VertexListType::iterator IteratorType;
ALU3dGridVertexList ()
: up2Date_( false )
{}
size_t size () const { return vertexList_.size(); }
bool up2Date () const { return up2Date_; }
void unsetUp2Date () { up2Date_ = false; }
// make grid walkthrough and calc global size
template <class GridType>
void setupVxList (const GridType & grid, int level);
IteratorType begin () { return vertexList_.begin(); }
IteratorType end () { return vertexList_.end(); }
VertexListType & getItemList() { return vertexList_; }
private:
bool up2Date_;
VertexListType vertexList_;
};
//! contains list of vertices of one level
//! needed for VertexLevelIterator
template< class Comm >
struct ALU3dGridLeafVertexList
{
// level vertex iterator list
typedef typename ALU3dBasicImplTraits< Comm >::VertexType VertexType;
typedef std::pair< VertexType *, int > ItemType;
typedef std::vector< ItemType > VertexListType;
typedef typename VertexListType::iterator IteratorType;
ALU3dGridLeafVertexList ()
: up2Date_( false )
{}
size_t size () const { return vertexList_.size(); }
bool up2Date () const { return up2Date_; }
void unsetUp2Date () { up2Date_ = false; }
// make grid walkthrough and calc global size
template <class GridType>
void setupVxList (const GridType & grid);
IteratorType begin () { return vertexList_.begin(); }
IteratorType end () { return vertexList_.end(); }
VertexListType & getItemList() { return vertexList_; }
int getLevel ( const VertexType &vertex ) const
{
const int idx = vertex.getIndex();
assert( idx >= 0 );
assert( idx < (int)size());
const ItemType & p = vertexList_[idx];
if( p.first == 0 )
return vertex.level();
else
return p.second;
}
private:
bool up2Date_;
VertexListType vertexList_;
};
class ALU3dGridItemList
{
public:
// level vertex iterator list
typedef std::vector < void * > ItemListType;
typedef ItemListType :: iterator IteratorType;
ALU3dGridItemList () : up2Date_(false) {}
size_t size () const { return itemList_.size(); }
bool up2Date () const { return up2Date_; }
void unsetUp2Date () { up2Date_ = false; }
void markAsUp2Date() { up2Date_ = true; }
IteratorType begin () { return itemList_.begin(); }
IteratorType end () { return itemList_.end(); }
ItemListType & getItemList() { return itemList_; }
private:
bool up2Date_;
ItemListType itemList_;
};
typedef ALU3dGridItemList ALU3dGridItemListType;
/////////////////////////////////////////////////////////////////////////
// some helper functions
/////////////////////////////////////////////////////////////////////////
template< class Comm >
struct ALU3dGridFaceGetter
{
static const typename ALU3dImplTraits< tetra, Comm >::GEOFaceType *
getFace( const typename ALU3dImplTraits< tetra, Comm >::GEOElementType& elem, int index)
{
assert(index >= 0 && index < 4);
return elem.myhface3( ElementTopologyMapping< tetra >::dune2aluFace(index) );
}
static const typename ALU3dImplTraits< hexa, Comm >::GEOFaceType*
getFace( const typename ALU3dImplTraits< hexa, Comm >::GEOElementType &elem, int index )
{
assert(index >= 0 && index < 6);
return elem.myhface4( ElementTopologyMapping< hexa >::dune2aluFace(index) );
}
};
} // end namespace Dune
#endif // #ifndef DUNE_ALU3DINCLUDE_HH
|