Skip to content
Snippets Groups Projects

Exchange troubled cell

Merged Robert K requested to merge feature/exchange-troubled-cell into master
Compare and Show latest version
1 file
+ 18
6
Compare changes
  • Side-by-side
  • Inline
@@ -60,19 +60,31 @@ namespace Fem
static_assert( std::is_same<typename ModelType::RangeType, typename DestinationType::RangeType>::value, "range type does not fit.");
// default quadrature selection should be CachingQuadrature
template <class Grid, bool useCaching>
template <class Grid, bool cachingStorage, bool regularGrid>
struct SelectQuadrature
{
typedef Fem::CachingQuadrature< GridPartType, 0, QuadratureTraits > VolumeQuadratureType;
typedef Fem::CachingQuadrature< GridPartType, 1, QuadratureTraits > FaceQuadratureType;
};
// if selected discrete function space has caching storage,
// but the grid is polygonal or polyhedral in 2d we can use
// CachingQuadarature for face integrals (edges in 2d)
template <class Grid>
struct SelectQuadrature< Grid, true, false >
{
typedef Fem::ElementQuadrature< GridPartType, 0, QuadratureTraits > VolumeQuadratureType;
typedef typename std::conditional< GridType::dimension < 3,
Fem::CachingQuadrature< GridPartType, 1, QuadratureTraits >,
Fem::ElementQuadrature< GridPartType, 1, QuadratureTraits > > ::type FaceQuadratureType;
};
// if selected discrete function space has no caching storage,
// then select ElementQuadrature, and not CachingQuadrature
// also, if the grid is polygonal or polyhedral
// CachingQuadarature cannot be used
template <class Grid>
struct SelectQuadrature< Grid, false >
struct SelectQuadrature< Grid, false, false >
{
typedef Fem::ElementQuadrature< GridPartType, 0, QuadratureTraits > VolumeQuadratureType;
typedef Fem::ElementQuadrature< GridPartType, 1, QuadratureTraits > FaceQuadratureType;
@@ -105,10 +117,10 @@ namespace Fem
static const bool value = false;
};
static const bool useCaching = CheckSpace< DiscreteFunctionSpaceType > :: value &&
CheckGrid < GridType > :: value;
typedef SelectQuadrature< GridType, useCaching > SelectQuadratureType;
// define quad selector which contains the correct types for quadratures
typedef SelectQuadrature< GridType,
CheckSpace< DiscreteFunctionSpaceType > :: value,
CheckGrid < GridType > :: value > SelectQuadratureType;
typedef typename SelectQuadratureType::VolumeQuadratureType VolumeQuadratureType;
typedef typename SelectQuadratureType::FaceQuadratureType FaceQuadratureType;
Loading