13#ifndef OPENVDB_MATH_STENCILS_HAS_BEEN_INCLUDED 
   14#define OPENVDB_MATH_STENCILS_HAS_BEEN_INCLUDED 
   34template<
typename DerivedType, 
typename Gr
idT, 
bool IsSafe>
 
   51        static_cast<DerivedType&
>(*this).init(
mCenter);
 
 
   63        static_cast<DerivedType&
>(*this).init(
mCenter);
 
 
   71    template<
typename IterType>
 
   72    inline void moveTo(
const IterType& iter)
 
   76        static_cast<DerivedType&
>(*this).init(
mCenter);
 
 
   85    template<
typename RealType>
 
  104    template<
int i, 
int j, 
int k>
 
  107        return mValues[
static_cast<const DerivedType&
>(*this).template pos<i,j,k>()];
 
 
  111    template<
int i, 
int j, 
int k>
 
  114        mValues[
static_cast<const DerivedType&
>(*this).template pos<i,j,k>()] = value;
 
 
  125        size_t midpoint = (tmp.size() - 1) >> 1;
 
  127#if !defined(_MSC_VER) || _MSC_VER < 1924 
  128        std::nth_element(tmp.begin(), tmp.begin() + midpoint, tmp.end());
 
  131        std::nth_element(tmp.begin(), tmp.begin() + midpoint, tmp.end(),
 
  132                         std::less<ValueType>());
 
  134        return tmp[midpoint];
 
 
  141        for (
int n = 0, s = 
int(
mValues.size()); n < s; ++n) sum += 
mValues[n];
 
 
  148        const auto iter = std::min_element(
mValues.begin(), 
mValues.end());
 
 
  155        const auto iter = std::max_element(
mValues.begin(), 
mValues.end());
 
 
  192        mask[0] = less  ^  (this->
getValue<-1, 0, 0>() < isoValue);
 
  194        mask[2] = less  ^  (this->getValue< 0,-1, 0>() < isoValue);
 
  196        mask[4] = less  ^  (this->getValue< 0, 0,-1>() < isoValue);
 
 
 
  233    template<
int i, 
int j, 
int k> 
struct SevenPt {};
 
  234    template<> 
struct SevenPt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  235    template<> 
struct SevenPt< 1, 0, 0> { 
enum { idx = 1 }; };
 
  236    template<> 
struct SevenPt< 0, 1, 0> { 
enum { idx = 2 }; };
 
  237    template<> 
struct SevenPt< 0, 0, 1> { 
enum { idx = 3 }; };
 
  238    template<> 
struct SevenPt<-1, 0, 0> { 
enum { idx = 4 }; };
 
  239    template<> 
struct SevenPt< 0,-1, 0> { 
enum { idx = 5 }; };
 
  240    template<> 
struct SevenPt< 0, 0,-1> { 
enum { idx = 6 }; };
 
  245template<
typename Gr
idT, 
bool IsSafe = true>
 
  260    template<
int i, 
int j, 
int k>
 
  261    unsigned int pos()
 const { 
return SevenPt<i,j,k>::idx; }
 
  264    inline void init(
const Coord& ijk)
 
  266        BaseType::template setValue<-1, 0, 0>(mAcc.getValue(ijk.
offsetBy(-1, 0, 0)));
 
  267        BaseType::template setValue< 1, 0, 0>(mAcc.getValue(ijk.
offsetBy( 1, 0, 0)));
 
  269        BaseType::template setValue< 0,-1, 0>(mAcc.getValue(ijk.
offsetBy( 0,-1, 0)));
 
  270        BaseType::template setValue< 0, 1, 0>(mAcc.getValue(ijk.
offsetBy( 0, 1, 0)));
 
  272        BaseType::template setValue< 0, 0,-1>(mAcc.getValue(ijk.
offsetBy( 0, 0,-1)));
 
  273        BaseType::template setValue< 0, 0, 1>(mAcc.getValue(ijk.
offsetBy( 0, 0, 1)));
 
 
  288    template<
int i, 
int j, 
int k> 
struct BoxPt {};
 
  289    template<> 
struct BoxPt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  290    template<> 
struct BoxPt< 0, 0, 1> { 
enum { idx = 1 }; };
 
  291    template<> 
struct BoxPt< 0, 1, 1> { 
enum { idx = 2 }; };
 
  292    template<> 
struct BoxPt< 0, 1, 0> { 
enum { idx = 3 }; };
 
  293    template<> 
struct BoxPt< 1, 0, 0> { 
enum { idx = 4 }; };
 
  294    template<> 
struct BoxPt< 1, 0, 1> { 
enum { idx = 5 }; };
 
  295    template<> 
struct BoxPt< 1, 1, 1> { 
enum { idx = 6 }; };
 
  296    template<> 
struct BoxPt< 1, 1, 0> { 
enum { idx = 7 }; };
 
  299template<
typename Gr
idT, 
bool IsSafe = true>
 
  314    template<
int i, 
int j, 
int k>
 
  315    unsigned int pos()
 const { 
return BoxPt<i,j,k>::idx; }
 
  321        const bool less = mValues[0] < isoValue;
 
  322        return (less  ^  (mValues[1] < isoValue)) ||
 
  323               (less  ^  (mValues[2] < isoValue)) ||
 
  324               (less  ^  (mValues[3] < isoValue)) ||
 
  325               (less  ^  (mValues[4] < isoValue)) ||
 
  326               (less  ^  (mValues[5] < isoValue)) ||
 
  327               (less  ^  (mValues[6] < isoValue)) ||
 
  328               (less  ^  (mValues[7] < isoValue))  ;
 
 
  362        return static_cast<ValueType>(C + (D - C) * u);
 
 
  394                                   static_cast<ValueType>(A + (B - A) * u));
 
  402        A = 
static_cast<ValueType>(D[0] + (D[1] - D[0]) * v);
 
  403        B = 
static_cast<ValueType>(D[2] + (D[3] - D[2]) * v);
 
  411        grad[1] = 
static_cast<ValueType>(A + (B - A) * u);
 
 
  417    inline void init(
const Coord& ijk)
 
  419        BaseType::template setValue< 0, 0, 1>(mAcc.getValue(ijk.
offsetBy( 0, 0, 1)));
 
  420        BaseType::template setValue< 0, 1, 1>(mAcc.getValue(ijk.
offsetBy( 0, 1, 1)));
 
  421        BaseType::template setValue< 0, 1, 0>(mAcc.getValue(ijk.
offsetBy( 0, 1, 0)));
 
  422        BaseType::template setValue< 1, 0, 0>(mAcc.getValue(ijk.
offsetBy( 1, 0, 0)));
 
  423        BaseType::template setValue< 1, 0, 1>(mAcc.getValue(ijk.
offsetBy( 1, 0, 1)));
 
  424        BaseType::template setValue< 1, 1, 1>(mAcc.getValue(ijk.
offsetBy( 1, 1, 1)));
 
  425        BaseType::template setValue< 1, 1, 0>(mAcc.getValue(ijk.
offsetBy( 1, 1, 0)));
 
 
  440    template<
int i, 
int j, 
int k> 
struct DensePt {};
 
  441    template<> 
struct DensePt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  443    template<> 
struct DensePt< 1, 0, 0> { 
enum { idx = 1 }; };
 
  444    template<> 
struct DensePt< 0, 1, 0> { 
enum { idx = 2 }; };
 
  445    template<> 
struct DensePt< 0, 0, 1> { 
enum { idx = 3 }; };
 
  447    template<> 
struct DensePt<-1, 0, 0> { 
enum { idx = 4 }; };
 
  448    template<> 
struct DensePt< 0,-1, 0> { 
enum { idx = 5 }; };
 
  449    template<> 
struct DensePt< 0, 0,-1> { 
enum { idx = 6 }; };
 
  451    template<> 
struct DensePt<-1,-1, 0> { 
enum { idx = 7 }; };
 
  452    template<> 
struct DensePt< 0,-1,-1> { 
enum { idx = 8 }; };
 
  453    template<> 
struct DensePt<-1, 0,-1> { 
enum { idx = 9 }; };
 
  455    template<> 
struct DensePt< 1,-1, 0> { 
enum { idx = 10 }; };
 
  456    template<> 
struct DensePt< 0, 1,-1> { 
enum { idx = 11 }; };
 
  457    template<> 
struct DensePt<-1, 0, 1> { 
enum { idx = 12 }; };
 
  459    template<> 
struct DensePt<-1, 1, 0> { 
enum { idx = 13 }; };
 
  460    template<> 
struct DensePt< 0,-1, 1> { 
enum { idx = 14 }; };
 
  461    template<> 
struct DensePt< 1, 0,-1> { 
enum { idx = 15 }; };
 
  463    template<> 
struct DensePt< 1, 1, 0> { 
enum { idx = 16 }; };
 
  464    template<> 
struct DensePt< 0, 1, 1> { 
enum { idx = 17 }; };
 
  465    template<> 
struct DensePt< 1, 0, 1> { 
enum { idx = 18 }; };
 
  469template<
typename Gr
idT, 
bool IsSafe = true>
 
  471    : 
public BaseStencil<SecondOrderDenseStencil<GridT, IsSafe>, GridT, IsSafe >
 
  485    template<
int i, 
int j, 
int k>
 
  486    unsigned int pos()
 const { 
return DensePt<i,j,k>::idx; }
 
  489    inline void init(
const Coord& ijk)
 
  491        mValues[DensePt< 1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,  0,  0));
 
  492        mValues[DensePt< 0, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  1,  0));
 
  493        mValues[DensePt< 0, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0,  1));
 
  495        mValues[DensePt<-1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,  0,  0));
 
  496        mValues[DensePt< 0,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -1,  0));
 
  497        mValues[DensePt< 0, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0, -1));
 
  499        mValues[DensePt<-1,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, -1,  0));
 
  500        mValues[DensePt< 1,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, -1,  0));
 
  501        mValues[DensePt<-1, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,  1,  0));
 
  502        mValues[DensePt< 1, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,  1,  0));
 
  504        mValues[DensePt<-1, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy(-1,  0, -1));
 
  505        mValues[DensePt< 1, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 1,  0, -1));
 
  506        mValues[DensePt<-1, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy(-1,  0,  1));
 
  507        mValues[DensePt< 1, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 1,  0,  1));
 
  509        mValues[DensePt< 0,-1,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -1, -1));
 
  510        mValues[DensePt< 0, 1,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  1, -1));
 
  511        mValues[DensePt< 0,-1, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -1,  1));
 
  512        mValues[DensePt< 0, 1, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  1,  1));
 
 
  527    template<
int i, 
int j, 
int k> 
struct ThirteenPt {};
 
  528    template<> 
struct ThirteenPt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  530    template<> 
struct ThirteenPt< 1, 0, 0> { 
enum { idx = 1 }; };
 
  531    template<> 
struct ThirteenPt< 0, 1, 0> { 
enum { idx = 2 }; };
 
  532    template<> 
struct ThirteenPt< 0, 0, 1> { 
enum { idx = 3 }; };
 
  534    template<> 
struct ThirteenPt<-1, 0, 0> { 
enum { idx = 4 }; };
 
  535    template<> 
struct ThirteenPt< 0,-1, 0> { 
enum { idx = 5 }; };
 
  536    template<> 
struct ThirteenPt< 0, 0,-1> { 
enum { idx = 6 }; };
 
  538    template<> 
struct ThirteenPt< 2, 0, 0> { 
enum { idx = 7 }; };
 
  539    template<> 
struct ThirteenPt< 0, 2, 0> { 
enum { idx = 8 }; };
 
  540    template<> 
struct ThirteenPt< 0, 0, 2> { 
enum { idx = 9 }; };
 
  542    template<> 
struct ThirteenPt<-2, 0, 0> { 
enum { idx = 10 }; };
 
  543    template<> 
struct ThirteenPt< 0,-2, 0> { 
enum { idx = 11 }; };
 
  544    template<> 
struct ThirteenPt< 0, 0,-2> { 
enum { idx = 12 }; };
 
  549template<
typename Gr
idT, 
bool IsSafe = true>
 
  551    : 
public BaseStencil<ThirteenPointStencil<GridT, IsSafe>, GridT, IsSafe>
 
  565    template<
int i, 
int j, 
int k>
 
  566    unsigned int pos()
 const { 
return ThirteenPt<i,j,k>::idx; }
 
  569    inline void init(
const Coord& ijk)
 
  571        mValues[ThirteenPt< 2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,  0,  0));
 
  572        mValues[ThirteenPt< 1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,  0,  0));
 
  573        mValues[ThirteenPt<-1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,  0,  0));
 
  574        mValues[ThirteenPt<-2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,  0,  0));
 
  576        mValues[ThirteenPt< 0, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  2,  0));
 
  577        mValues[ThirteenPt< 0, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  1,  0));
 
  578        mValues[ThirteenPt< 0,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -1,  0));
 
  579        mValues[ThirteenPt< 0,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -2,  0));
 
  581        mValues[ThirteenPt< 0, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0,  2));
 
  582        mValues[ThirteenPt< 0, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0,  1));
 
  583        mValues[ThirteenPt< 0, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0, -1));
 
  584        mValues[ThirteenPt< 0, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0, -2));
 
 
  599    template<
int i, 
int j, 
int k> 
struct FourthDensePt {};
 
  600    template<> 
struct FourthDensePt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  602    template<> 
struct FourthDensePt<-2, 2, 0> { 
enum { idx = 1 }; };
 
  603    template<> 
struct FourthDensePt<-1, 2, 0> { 
enum { idx = 2 }; };
 
  604    template<> 
struct FourthDensePt< 0, 2, 0> { 
enum { idx = 3 }; };
 
  605    template<> 
struct FourthDensePt< 1, 2, 0> { 
enum { idx = 4 }; };
 
  606    template<> 
struct FourthDensePt< 2, 2, 0> { 
enum { idx = 5 }; };
 
  608    template<> 
struct FourthDensePt<-2, 1, 0> { 
enum { idx = 6 }; };
 
  609    template<> 
struct FourthDensePt<-1, 1, 0> { 
enum { idx = 7 }; };
 
  610    template<> 
struct FourthDensePt< 0, 1, 0> { 
enum { idx = 8 }; };
 
  611    template<> 
struct FourthDensePt< 1, 1, 0> { 
enum { idx = 9 }; };
 
  612    template<> 
struct FourthDensePt< 2, 1, 0> { 
enum { idx = 10 }; };
 
  614    template<> 
struct FourthDensePt<-2, 0, 0> { 
enum { idx = 11 }; };
 
  615    template<> 
struct FourthDensePt<-1, 0, 0> { 
enum { idx = 12 }; };
 
  616    template<> 
struct FourthDensePt< 1, 0, 0> { 
enum { idx = 13 }; };
 
  617    template<> 
struct FourthDensePt< 2, 0, 0> { 
enum { idx = 14 }; };
 
  619    template<> 
struct FourthDensePt<-2,-1, 0> { 
enum { idx = 15 }; };
 
  620    template<> 
struct FourthDensePt<-1,-1, 0> { 
enum { idx = 16 }; };
 
  621    template<> 
struct FourthDensePt< 0,-1, 0> { 
enum { idx = 17 }; };
 
  622    template<> 
struct FourthDensePt< 1,-1, 0> { 
enum { idx = 18 }; };
 
  623    template<> 
struct FourthDensePt< 2,-1, 0> { 
enum { idx = 19 }; };
 
  625    template<> 
struct FourthDensePt<-2,-2, 0> { 
enum { idx = 20 }; };
 
  626    template<> 
struct FourthDensePt<-1,-2, 0> { 
enum { idx = 21 }; };
 
  627    template<> 
struct FourthDensePt< 0,-2, 0> { 
enum { idx = 22 }; };
 
  628    template<> 
struct FourthDensePt< 1,-2, 0> { 
enum { idx = 23 }; };
 
  629    template<> 
struct FourthDensePt< 2,-2, 0> { 
enum { idx = 24 }; };
 
  632    template<> 
struct FourthDensePt<-2, 0, 2> { 
enum { idx = 25 }; };
 
  633    template<> 
struct FourthDensePt<-1, 0, 2> { 
enum { idx = 26 }; };
 
  634    template<> 
struct FourthDensePt< 0, 0, 2> { 
enum { idx = 27 }; };
 
  635    template<> 
struct FourthDensePt< 1, 0, 2> { 
enum { idx = 28 }; };
 
  636    template<> 
struct FourthDensePt< 2, 0, 2> { 
enum { idx = 29 }; };
 
  638    template<> 
struct FourthDensePt<-2, 0, 1> { 
enum { idx = 30 }; };
 
  639    template<> 
struct FourthDensePt<-1, 0, 1> { 
enum { idx = 31 }; };
 
  640    template<> 
struct FourthDensePt< 0, 0, 1> { 
enum { idx = 32 }; };
 
  641    template<> 
struct FourthDensePt< 1, 0, 1> { 
enum { idx = 33 }; };
 
  642    template<> 
struct FourthDensePt< 2, 0, 1> { 
enum { idx = 34 }; };
 
  644    template<> 
struct FourthDensePt<-2, 0,-1> { 
enum { idx = 35 }; };
 
  645    template<> 
struct FourthDensePt<-1, 0,-1> { 
enum { idx = 36 }; };
 
  646    template<> 
struct FourthDensePt< 0, 0,-1> { 
enum { idx = 37 }; };
 
  647    template<> 
struct FourthDensePt< 1, 0,-1> { 
enum { idx = 38 }; };
 
  648    template<> 
struct FourthDensePt< 2, 0,-1> { 
enum { idx = 39 }; };
 
  650    template<> 
struct FourthDensePt<-2, 0,-2> { 
enum { idx = 40 }; };
 
  651    template<> 
struct FourthDensePt<-1, 0,-2> { 
enum { idx = 41 }; };
 
  652    template<> 
struct FourthDensePt< 0, 0,-2> { 
enum { idx = 42 }; };
 
  653    template<> 
struct FourthDensePt< 1, 0,-2> { 
enum { idx = 43 }; };
 
  654    template<> 
struct FourthDensePt< 2, 0,-2> { 
enum { idx = 44 }; };
 
  657    template<> 
struct FourthDensePt< 0,-2, 2> { 
enum { idx = 45 }; };
 
  658    template<> 
struct FourthDensePt< 0,-1, 2> { 
enum { idx = 46 }; };
 
  659    template<> 
struct FourthDensePt< 0, 1, 2> { 
enum { idx = 47 }; };
 
  660    template<> 
struct FourthDensePt< 0, 2, 2> { 
enum { idx = 48 }; };
 
  662    template<> 
struct FourthDensePt< 0,-2, 1> { 
enum { idx = 49 }; };
 
  663    template<> 
struct FourthDensePt< 0,-1, 1> { 
enum { idx = 50 }; };
 
  664    template<> 
struct FourthDensePt< 0, 1, 1> { 
enum { idx = 51 }; };
 
  665    template<> 
struct FourthDensePt< 0, 2, 1> { 
enum { idx = 52 }; };
 
  667    template<> 
struct FourthDensePt< 0,-2,-1> { 
enum { idx = 53 }; };
 
  668    template<> 
struct FourthDensePt< 0,-1,-1> { 
enum { idx = 54 }; };
 
  669    template<> 
struct FourthDensePt< 0, 1,-1> { 
enum { idx = 55 }; };
 
  670    template<> 
struct FourthDensePt< 0, 2,-1> { 
enum { idx = 56 }; };
 
  672    template<> 
struct FourthDensePt< 0,-2,-2> { 
enum { idx = 57 }; };
 
  673    template<> 
struct FourthDensePt< 0,-1,-2> { 
enum { idx = 58 }; };
 
  674    template<> 
struct FourthDensePt< 0, 1,-2> { 
enum { idx = 59 }; };
 
  675    template<> 
struct FourthDensePt< 0, 2,-2> { 
enum { idx = 60 }; };
 
  680template<
typename Gr
idT, 
bool IsSafe = true>
 
  682    : 
public BaseStencil<FourthOrderDenseStencil<GridT, IsSafe>, GridT, IsSafe>
 
  696    template<
int i, 
int j, 
int k>
 
  697    unsigned int pos()
 const { 
return FourthDensePt<i,j,k>::idx; }
 
  700    inline void init(
const Coord& ijk)
 
  702        mValues[FourthDensePt<-2, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 2, 0));
 
  703        mValues[FourthDensePt<-1, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 2, 0));
 
  704        mValues[FourthDensePt< 0, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 0));
 
  705        mValues[FourthDensePt< 1, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 2, 0));
 
  706        mValues[FourthDensePt< 2, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 2, 0));
 
  708        mValues[FourthDensePt<-2, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 1, 0));
 
  709        mValues[FourthDensePt<-1, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 1, 0));
 
  710        mValues[FourthDensePt< 0, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 0));
 
  711        mValues[FourthDensePt< 1, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 1, 0));
 
  712        mValues[FourthDensePt< 2, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 1, 0));
 
  714        mValues[FourthDensePt<-2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 0));
 
  715        mValues[FourthDensePt<-1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 0));
 
  716        mValues[FourthDensePt< 1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 0));
 
  717        mValues[FourthDensePt< 2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 0));
 
  719        mValues[FourthDensePt<-2,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,-1, 0));
 
  720        mValues[FourthDensePt<-1,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,-1, 0));
 
  721        mValues[FourthDensePt< 0,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 0));
 
  722        mValues[FourthDensePt< 1,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,-1, 0));
 
  723        mValues[FourthDensePt< 2,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,-1, 0));
 
  725        mValues[FourthDensePt<-2,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,-2, 0));
 
  726        mValues[FourthDensePt<-1,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,-2, 0));
 
  727        mValues[FourthDensePt< 0,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 0));
 
  728        mValues[FourthDensePt< 1,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,-2, 0));
 
  729        mValues[FourthDensePt< 2,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,-2, 0));
 
  731        mValues[FourthDensePt<-2, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 2));
 
  732        mValues[FourthDensePt<-1, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 2));
 
  733        mValues[FourthDensePt< 0, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0, 2));
 
  734        mValues[FourthDensePt< 1, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 2));
 
  735        mValues[FourthDensePt< 2, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 2));
 
  737        mValues[FourthDensePt<-2, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 1));
 
  738        mValues[FourthDensePt<-1, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 1));
 
  739        mValues[FourthDensePt< 0, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0, 1));
 
  740        mValues[FourthDensePt< 1, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 1));
 
  741        mValues[FourthDensePt< 2, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 1));
 
  743        mValues[FourthDensePt<-2, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0,-1));
 
  744        mValues[FourthDensePt<-1, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0,-1));
 
  745        mValues[FourthDensePt< 0, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0,-1));
 
  746        mValues[FourthDensePt< 1, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0,-1));
 
  747        mValues[FourthDensePt< 2, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0,-1));
 
  749        mValues[FourthDensePt<-2, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0,-2));
 
  750        mValues[FourthDensePt<-1, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0,-2));
 
  751        mValues[FourthDensePt< 0, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0,-2));
 
  752        mValues[FourthDensePt< 1, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0,-2));
 
  753        mValues[FourthDensePt< 2, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0,-2));
 
  756        mValues[FourthDensePt< 0,-2, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 2));
 
  757        mValues[FourthDensePt< 0,-1, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 2));
 
  758        mValues[FourthDensePt< 0, 1, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 2));
 
  759        mValues[FourthDensePt< 0, 2, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 2));
 
  761        mValues[FourthDensePt< 0,-2, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 1));
 
  762        mValues[FourthDensePt< 0,-1, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 1));
 
  763        mValues[FourthDensePt< 0, 1, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 1));
 
  764        mValues[FourthDensePt< 0, 2, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 1));
 
  766        mValues[FourthDensePt< 0,-2,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2,-1));
 
  767        mValues[FourthDensePt< 0,-1,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1,-1));
 
  768        mValues[FourthDensePt< 0, 1,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1,-1));
 
  769        mValues[FourthDensePt< 0, 2,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2,-1));
 
  771        mValues[FourthDensePt< 0,-2,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2,-2));
 
  772        mValues[FourthDensePt< 0,-1,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1,-2));
 
  773        mValues[FourthDensePt< 0, 1,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1,-2));
 
  774        mValues[FourthDensePt< 0, 2,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2,-2));
 
 
  789    template<
int i, 
int j, 
int k> 
struct NineteenPt {};
 
  790    template<> 
struct NineteenPt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  792    template<> 
struct NineteenPt< 1, 0, 0> { 
enum { idx = 1 }; };
 
  793    template<> 
struct NineteenPt< 0, 1, 0> { 
enum { idx = 2 }; };
 
  794    template<> 
struct NineteenPt< 0, 0, 1> { 
enum { idx = 3 }; };
 
  796    template<> 
struct NineteenPt<-1, 0, 0> { 
enum { idx = 4 }; };
 
  797    template<> 
struct NineteenPt< 0,-1, 0> { 
enum { idx = 5 }; };
 
  798    template<> 
struct NineteenPt< 0, 0,-1> { 
enum { idx = 6 }; };
 
  800    template<> 
struct NineteenPt< 2, 0, 0> { 
enum { idx = 7 }; };
 
  801    template<> 
struct NineteenPt< 0, 2, 0> { 
enum { idx = 8 }; };
 
  802    template<> 
struct NineteenPt< 0, 0, 2> { 
enum { idx = 9 }; };
 
  804    template<> 
struct NineteenPt<-2, 0, 0> { 
enum { idx = 10 }; };
 
  805    template<> 
struct NineteenPt< 0,-2, 0> { 
enum { idx = 11 }; };
 
  806    template<> 
struct NineteenPt< 0, 0,-2> { 
enum { idx = 12 }; };
 
  808    template<> 
struct NineteenPt< 3, 0, 0> { 
enum { idx = 13 }; };
 
  809    template<> 
struct NineteenPt< 0, 3, 0> { 
enum { idx = 14 }; };
 
  810    template<> 
struct NineteenPt< 0, 0, 3> { 
enum { idx = 15 }; };
 
  812    template<> 
struct NineteenPt<-3, 0, 0> { 
enum { idx = 16 }; };
 
  813    template<> 
struct NineteenPt< 0,-3, 0> { 
enum { idx = 17 }; };
 
  814    template<> 
struct NineteenPt< 0, 0,-3> { 
enum { idx = 18 }; };
 
  819template<
typename Gr
idT, 
bool IsSafe = true>
 
  821    : 
public BaseStencil<NineteenPointStencil<GridT, IsSafe>, GridT, IsSafe>
 
  835    template<
int i, 
int j, 
int k>
 
  836    unsigned int pos()
 const { 
return NineteenPt<i,j,k>::idx; }
 
  839    inline void init(
const Coord& ijk)
 
  841        mValues[NineteenPt< 3, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3,  0,  0));
 
  842        mValues[NineteenPt< 2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,  0,  0));
 
  843        mValues[NineteenPt< 1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,  0,  0));
 
  844        mValues[NineteenPt<-1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,  0,  0));
 
  845        mValues[NineteenPt<-2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,  0,  0));
 
  846        mValues[NineteenPt<-3, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3,  0,  0));
 
  848        mValues[NineteenPt< 0, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  3,  0));
 
  849        mValues[NineteenPt< 0, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  2,  0));
 
  850        mValues[NineteenPt< 0, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  1,  0));
 
  851        mValues[NineteenPt< 0,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -1,  0));
 
  852        mValues[NineteenPt< 0,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -2,  0));
 
  853        mValues[NineteenPt< 0,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, -3,  0));
 
  855        mValues[NineteenPt< 0, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0,  3));
 
  856        mValues[NineteenPt< 0, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0,  2));
 
  857        mValues[NineteenPt< 0, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0,  1));
 
  858        mValues[NineteenPt< 0, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0, -1));
 
  859        mValues[NineteenPt< 0, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0, -2));
 
  860        mValues[NineteenPt< 0, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,  0, -3));
 
 
  875    template<
int i, 
int j, 
int k> 
struct SixthDensePt { };
 
  876    template<> 
struct SixthDensePt< 0, 0, 0> { 
enum { idx = 0 }; };
 
  878    template<> 
struct SixthDensePt<-3, 3, 0> { 
enum { idx = 1 }; };
 
  879    template<> 
struct SixthDensePt<-2, 3, 0> { 
enum { idx = 2 }; };
 
  880    template<> 
struct SixthDensePt<-1, 3, 0> { 
enum { idx = 3 }; };
 
  881    template<> 
struct SixthDensePt< 0, 3, 0> { 
enum { idx = 4 }; };
 
  882    template<> 
struct SixthDensePt< 1, 3, 0> { 
enum { idx = 5 }; };
 
  883    template<> 
struct SixthDensePt< 2, 3, 0> { 
enum { idx = 6 }; };
 
  884    template<> 
struct SixthDensePt< 3, 3, 0> { 
enum { idx = 7 }; };
 
  886    template<> 
struct SixthDensePt<-3, 2, 0> { 
enum { idx = 8 }; };
 
  887    template<> 
struct SixthDensePt<-2, 2, 0> { 
enum { idx = 9 }; };
 
  888    template<> 
struct SixthDensePt<-1, 2, 0> { 
enum { idx = 10 }; };
 
  889    template<> 
struct SixthDensePt< 0, 2, 0> { 
enum { idx = 11 }; };
 
  890    template<> 
struct SixthDensePt< 1, 2, 0> { 
enum { idx = 12 }; };
 
  891    template<> 
struct SixthDensePt< 2, 2, 0> { 
enum { idx = 13 }; };
 
  892    template<> 
struct SixthDensePt< 3, 2, 0> { 
enum { idx = 14 }; };
 
  894    template<> 
struct SixthDensePt<-3, 1, 0> { 
enum { idx = 15 }; };
 
  895    template<> 
struct SixthDensePt<-2, 1, 0> { 
enum { idx = 16 }; };
 
  896    template<> 
struct SixthDensePt<-1, 1, 0> { 
enum { idx = 17 }; };
 
  897    template<> 
struct SixthDensePt< 0, 1, 0> { 
enum { idx = 18 }; };
 
  898    template<> 
struct SixthDensePt< 1, 1, 0> { 
enum { idx = 19 }; };
 
  899    template<> 
struct SixthDensePt< 2, 1, 0> { 
enum { idx = 20 }; };
 
  900    template<> 
struct SixthDensePt< 3, 1, 0> { 
enum { idx = 21 }; };
 
  902    template<> 
struct SixthDensePt<-3, 0, 0> { 
enum { idx = 22 }; };
 
  903    template<> 
struct SixthDensePt<-2, 0, 0> { 
enum { idx = 23 }; };
 
  904    template<> 
struct SixthDensePt<-1, 0, 0> { 
enum { idx = 24 }; };
 
  905    template<> 
struct SixthDensePt< 1, 0, 0> { 
enum { idx = 25 }; };
 
  906    template<> 
struct SixthDensePt< 2, 0, 0> { 
enum { idx = 26 }; };
 
  907    template<> 
struct SixthDensePt< 3, 0, 0> { 
enum { idx = 27 }; };
 
  910    template<> 
struct SixthDensePt<-3,-1, 0> { 
enum { idx = 28 }; };
 
  911    template<> 
struct SixthDensePt<-2,-1, 0> { 
enum { idx = 29 }; };
 
  912    template<> 
struct SixthDensePt<-1,-1, 0> { 
enum { idx = 30 }; };
 
  913    template<> 
struct SixthDensePt< 0,-1, 0> { 
enum { idx = 31 }; };
 
  914    template<> 
struct SixthDensePt< 1,-1, 0> { 
enum { idx = 32 }; };
 
  915    template<> 
struct SixthDensePt< 2,-1, 0> { 
enum { idx = 33 }; };
 
  916    template<> 
struct SixthDensePt< 3,-1, 0> { 
enum { idx = 34 }; };
 
  919    template<> 
struct SixthDensePt<-3,-2, 0> { 
enum { idx = 35 }; };
 
  920    template<> 
struct SixthDensePt<-2,-2, 0> { 
enum { idx = 36 }; };
 
  921    template<> 
struct SixthDensePt<-1,-2, 0> { 
enum { idx = 37 }; };
 
  922    template<> 
struct SixthDensePt< 0,-2, 0> { 
enum { idx = 38 }; };
 
  923    template<> 
struct SixthDensePt< 1,-2, 0> { 
enum { idx = 39 }; };
 
  924    template<> 
struct SixthDensePt< 2,-2, 0> { 
enum { idx = 40 }; };
 
  925    template<> 
struct SixthDensePt< 3,-2, 0> { 
enum { idx = 41 }; };
 
  928    template<> 
struct SixthDensePt<-3,-3, 0> { 
enum { idx = 42 }; };
 
  929    template<> 
struct SixthDensePt<-2,-3, 0> { 
enum { idx = 43 }; };
 
  930    template<> 
struct SixthDensePt<-1,-3, 0> { 
enum { idx = 44 }; };
 
  931    template<> 
struct SixthDensePt< 0,-3, 0> { 
enum { idx = 45 }; };
 
  932    template<> 
struct SixthDensePt< 1,-3, 0> { 
enum { idx = 46 }; };
 
  933    template<> 
struct SixthDensePt< 2,-3, 0> { 
enum { idx = 47 }; };
 
  934    template<> 
struct SixthDensePt< 3,-3, 0> { 
enum { idx = 48 }; };
 
  937    template<> 
struct SixthDensePt<-3, 0, 3> { 
enum { idx = 49 }; };
 
  938    template<> 
struct SixthDensePt<-2, 0, 3> { 
enum { idx = 50 }; };
 
  939    template<> 
struct SixthDensePt<-1, 0, 3> { 
enum { idx = 51 }; };
 
  940    template<> 
struct SixthDensePt< 0, 0, 3> { 
enum { idx = 52 }; };
 
  941    template<> 
struct SixthDensePt< 1, 0, 3> { 
enum { idx = 53 }; };
 
  942    template<> 
struct SixthDensePt< 2, 0, 3> { 
enum { idx = 54 }; };
 
  943    template<> 
struct SixthDensePt< 3, 0, 3> { 
enum { idx = 55 }; };
 
  946    template<> 
struct SixthDensePt<-3, 0, 2> { 
enum { idx = 56 }; };
 
  947    template<> 
struct SixthDensePt<-2, 0, 2> { 
enum { idx = 57 }; };
 
  948    template<> 
struct SixthDensePt<-1, 0, 2> { 
enum { idx = 58 }; };
 
  949    template<> 
struct SixthDensePt< 0, 0, 2> { 
enum { idx = 59 }; };
 
  950    template<> 
struct SixthDensePt< 1, 0, 2> { 
enum { idx = 60 }; };
 
  951    template<> 
struct SixthDensePt< 2, 0, 2> { 
enum { idx = 61 }; };
 
  952    template<> 
struct SixthDensePt< 3, 0, 2> { 
enum { idx = 62 }; };
 
  954    template<> 
struct SixthDensePt<-3, 0, 1> { 
enum { idx = 63 }; };
 
  955    template<> 
struct SixthDensePt<-2, 0, 1> { 
enum { idx = 64 }; };
 
  956    template<> 
struct SixthDensePt<-1, 0, 1> { 
enum { idx = 65 }; };
 
  957    template<> 
struct SixthDensePt< 0, 0, 1> { 
enum { idx = 66 }; };
 
  958    template<> 
struct SixthDensePt< 1, 0, 1> { 
enum { idx = 67 }; };
 
  959    template<> 
struct SixthDensePt< 2, 0, 1> { 
enum { idx = 68 }; };
 
  960    template<> 
struct SixthDensePt< 3, 0, 1> { 
enum { idx = 69 }; };
 
  963    template<> 
struct SixthDensePt<-3, 0,-1> { 
enum { idx = 70 }; };
 
  964    template<> 
struct SixthDensePt<-2, 0,-1> { 
enum { idx = 71 }; };
 
  965    template<> 
struct SixthDensePt<-1, 0,-1> { 
enum { idx = 72 }; };
 
  966    template<> 
struct SixthDensePt< 0, 0,-1> { 
enum { idx = 73 }; };
 
  967    template<> 
struct SixthDensePt< 1, 0,-1> { 
enum { idx = 74 }; };
 
  968    template<> 
struct SixthDensePt< 2, 0,-1> { 
enum { idx = 75 }; };
 
  969    template<> 
struct SixthDensePt< 3, 0,-1> { 
enum { idx = 76 }; };
 
  972    template<> 
struct SixthDensePt<-3, 0,-2> { 
enum { idx = 77 }; };
 
  973    template<> 
struct SixthDensePt<-2, 0,-2> { 
enum { idx = 78 }; };
 
  974    template<> 
struct SixthDensePt<-1, 0,-2> { 
enum { idx = 79 }; };
 
  975    template<> 
struct SixthDensePt< 0, 0,-2> { 
enum { idx = 80 }; };
 
  976    template<> 
struct SixthDensePt< 1, 0,-2> { 
enum { idx = 81 }; };
 
  977    template<> 
struct SixthDensePt< 2, 0,-2> { 
enum { idx = 82 }; };
 
  978    template<> 
struct SixthDensePt< 3, 0,-2> { 
enum { idx = 83 }; };
 
  981    template<> 
struct SixthDensePt<-3, 0,-3> { 
enum { idx = 84 }; };
 
  982    template<> 
struct SixthDensePt<-2, 0,-3> { 
enum { idx = 85 }; };
 
  983    template<> 
struct SixthDensePt<-1, 0,-3> { 
enum { idx = 86 }; };
 
  984    template<> 
struct SixthDensePt< 0, 0,-3> { 
enum { idx = 87 }; };
 
  985    template<> 
struct SixthDensePt< 1, 0,-3> { 
enum { idx = 88 }; };
 
  986    template<> 
struct SixthDensePt< 2, 0,-3> { 
enum { idx = 89 }; };
 
  987    template<> 
struct SixthDensePt< 3, 0,-3> { 
enum { idx = 90 }; };
 
  990    template<> 
struct SixthDensePt< 0,-3, 3> { 
enum { idx = 91 }; };
 
  991    template<> 
struct SixthDensePt< 0,-2, 3> { 
enum { idx = 92 }; };
 
  992    template<> 
struct SixthDensePt< 0,-1, 3> { 
enum { idx = 93 }; };
 
  993    template<> 
struct SixthDensePt< 0, 1, 3> { 
enum { idx = 94 }; };
 
  994    template<> 
struct SixthDensePt< 0, 2, 3> { 
enum { idx = 95 }; };
 
  995    template<> 
struct SixthDensePt< 0, 3, 3> { 
enum { idx = 96 }; };
 
  997    template<> 
struct SixthDensePt< 0,-3, 2> { 
enum { idx = 97 }; };
 
  998    template<> 
struct SixthDensePt< 0,-2, 2> { 
enum { idx = 98 }; };
 
  999    template<> 
struct SixthDensePt< 0,-1, 2> { 
enum { idx = 99 }; };
 
 1000    template<> 
struct SixthDensePt< 0, 1, 2> { 
enum { idx = 100 }; };
 
 1001    template<> 
struct SixthDensePt< 0, 2, 2> { 
enum { idx = 101 }; };
 
 1002    template<> 
struct SixthDensePt< 0, 3, 2> { 
enum { idx = 102 }; };
 
 1004    template<> 
struct SixthDensePt< 0,-3, 1> { 
enum { idx = 103 }; };
 
 1005    template<> 
struct SixthDensePt< 0,-2, 1> { 
enum { idx = 104 }; };
 
 1006    template<> 
struct SixthDensePt< 0,-1, 1> { 
enum { idx = 105 }; };
 
 1007    template<> 
struct SixthDensePt< 0, 1, 1> { 
enum { idx = 106 }; };
 
 1008    template<> 
struct SixthDensePt< 0, 2, 1> { 
enum { idx = 107 }; };
 
 1009    template<> 
struct SixthDensePt< 0, 3, 1> { 
enum { idx = 108 }; };
 
 1011    template<> 
struct SixthDensePt< 0,-3,-1> { 
enum { idx = 109 }; };
 
 1012    template<> 
struct SixthDensePt< 0,-2,-1> { 
enum { idx = 110 }; };
 
 1013    template<> 
struct SixthDensePt< 0,-1,-1> { 
enum { idx = 111 }; };
 
 1014    template<> 
struct SixthDensePt< 0, 1,-1> { 
enum { idx = 112 }; };
 
 1015    template<> 
struct SixthDensePt< 0, 2,-1> { 
enum { idx = 113 }; };
 
 1016    template<> 
struct SixthDensePt< 0, 3,-1> { 
enum { idx = 114 }; };
 
 1018    template<> 
struct SixthDensePt< 0,-3,-2> { 
enum { idx = 115 }; };
 
 1019    template<> 
struct SixthDensePt< 0,-2,-2> { 
enum { idx = 116 }; };
 
 1020    template<> 
struct SixthDensePt< 0,-1,-2> { 
enum { idx = 117 }; };
 
 1021    template<> 
struct SixthDensePt< 0, 1,-2> { 
enum { idx = 118 }; };
 
 1022    template<> 
struct SixthDensePt< 0, 2,-2> { 
enum { idx = 119 }; };
 
 1023    template<> 
struct SixthDensePt< 0, 3,-2> { 
enum { idx = 120 }; };
 
 1025    template<> 
struct SixthDensePt< 0,-3,-3> { 
enum { idx = 121 }; };
 
 1026    template<> 
struct SixthDensePt< 0,-2,-3> { 
enum { idx = 122 }; };
 
 1027    template<> 
struct SixthDensePt< 0,-1,-3> { 
enum { idx = 123 }; };
 
 1028    template<> 
struct SixthDensePt< 0, 1,-3> { 
enum { idx = 124 }; };
 
 1029    template<> 
struct SixthDensePt< 0, 2,-3> { 
enum { idx = 125 }; };
 
 1030    template<> 
struct SixthDensePt< 0, 3,-3> { 
enum { idx = 126 }; };
 
 1035template<
typename Gr
idT, 
bool IsSafe = true>
 
 1037    : 
public BaseStencil<SixthOrderDenseStencil<GridT, IsSafe>, GridT, IsSafe>
 
 1051    template<
int i, 
int j, 
int k>
 
 1052    unsigned int pos()
 const { 
return SixthDensePt<i,j,k>::idx; }
 
 1055    inline void init(
const Coord& ijk)
 
 1057        mValues[SixthDensePt<-3, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 3, 0));
 
 1058        mValues[SixthDensePt<-2, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 3, 0));
 
 1059        mValues[SixthDensePt<-1, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 3, 0));
 
 1060        mValues[SixthDensePt< 0, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3, 0));
 
 1061        mValues[SixthDensePt< 1, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 3, 0));
 
 1062        mValues[SixthDensePt< 2, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 3, 0));
 
 1063        mValues[SixthDensePt< 3, 3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 3, 0));
 
 1065        mValues[SixthDensePt<-3, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 2, 0));
 
 1066        mValues[SixthDensePt<-2, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 2, 0));
 
 1067        mValues[SixthDensePt<-1, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 2, 0));
 
 1068        mValues[SixthDensePt< 0, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 0));
 
 1069        mValues[SixthDensePt< 1, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 2, 0));
 
 1070        mValues[SixthDensePt< 2, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 2, 0));
 
 1071        mValues[SixthDensePt< 3, 2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 2, 0));
 
 1073        mValues[SixthDensePt<-3, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 1, 0));
 
 1074        mValues[SixthDensePt<-2, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 1, 0));
 
 1075        mValues[SixthDensePt<-1, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 1, 0));
 
 1076        mValues[SixthDensePt< 0, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 0));
 
 1077        mValues[SixthDensePt< 1, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 1, 0));
 
 1078        mValues[SixthDensePt< 2, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 1, 0));
 
 1079        mValues[SixthDensePt< 3, 1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 1, 0));
 
 1081        mValues[SixthDensePt<-3, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0, 0));
 
 1082        mValues[SixthDensePt<-2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 0));
 
 1083        mValues[SixthDensePt<-1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 0));
 
 1084        mValues[SixthDensePt< 1, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 0));
 
 1085        mValues[SixthDensePt< 2, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 0));
 
 1086        mValues[SixthDensePt< 3, 0, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0, 0));
 
 1088        mValues[SixthDensePt<-3,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3,-1, 0));
 
 1089        mValues[SixthDensePt<-2,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,-1, 0));
 
 1090        mValues[SixthDensePt<-1,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,-1, 0));
 
 1091        mValues[SixthDensePt< 0,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 0));
 
 1092        mValues[SixthDensePt< 1,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,-1, 0));
 
 1093        mValues[SixthDensePt< 2,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,-1, 0));
 
 1094        mValues[SixthDensePt< 3,-1, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3,-1, 0));
 
 1096        mValues[SixthDensePt<-3,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3,-2, 0));
 
 1097        mValues[SixthDensePt<-2,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,-2, 0));
 
 1098        mValues[SixthDensePt<-1,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,-2, 0));
 
 1099        mValues[SixthDensePt< 0,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 0));
 
 1100        mValues[SixthDensePt< 1,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,-2, 0));
 
 1101        mValues[SixthDensePt< 2,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,-2, 0));
 
 1102        mValues[SixthDensePt< 3,-2, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3,-2, 0));
 
 1104        mValues[SixthDensePt<-3,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-3,-3, 0));
 
 1105        mValues[SixthDensePt<-2,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-2,-3, 0));
 
 1106        mValues[SixthDensePt<-1,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy(-1,-3, 0));
 
 1107        mValues[SixthDensePt< 0,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3, 0));
 
 1108        mValues[SixthDensePt< 1,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 1,-3, 0));
 
 1109        mValues[SixthDensePt< 2,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 2,-3, 0));
 
 1110        mValues[SixthDensePt< 3,-3, 0>::idx] = mAcc.getValue(ijk.
offsetBy( 3,-3, 0));
 
 1112        mValues[SixthDensePt<-3, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0, 3));
 
 1113        mValues[SixthDensePt<-2, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 3));
 
 1114        mValues[SixthDensePt<-1, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 3));
 
 1115        mValues[SixthDensePt< 0, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0, 3));
 
 1116        mValues[SixthDensePt< 1, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 3));
 
 1117        mValues[SixthDensePt< 2, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 3));
 
 1118        mValues[SixthDensePt< 3, 0, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0, 3));
 
 1120        mValues[SixthDensePt<-3, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0, 2));
 
 1121        mValues[SixthDensePt<-2, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 2));
 
 1122        mValues[SixthDensePt<-1, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 2));
 
 1123        mValues[SixthDensePt< 0, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0, 2));
 
 1124        mValues[SixthDensePt< 1, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 2));
 
 1125        mValues[SixthDensePt< 2, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 2));
 
 1126        mValues[SixthDensePt< 3, 0, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0, 2));
 
 1128        mValues[SixthDensePt<-3, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0, 1));
 
 1129        mValues[SixthDensePt<-2, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0, 1));
 
 1130        mValues[SixthDensePt<-1, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0, 1));
 
 1131        mValues[SixthDensePt< 0, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0, 1));
 
 1132        mValues[SixthDensePt< 1, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0, 1));
 
 1133        mValues[SixthDensePt< 2, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0, 1));
 
 1134        mValues[SixthDensePt< 3, 0, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0, 1));
 
 1136        mValues[SixthDensePt<-3, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0,-1));
 
 1137        mValues[SixthDensePt<-2, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0,-1));
 
 1138        mValues[SixthDensePt<-1, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0,-1));
 
 1139        mValues[SixthDensePt< 0, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0,-1));
 
 1140        mValues[SixthDensePt< 1, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0,-1));
 
 1141        mValues[SixthDensePt< 2, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0,-1));
 
 1142        mValues[SixthDensePt< 3, 0,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0,-1));
 
 1144        mValues[SixthDensePt<-3, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0,-2));
 
 1145        mValues[SixthDensePt<-2, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0,-2));
 
 1146        mValues[SixthDensePt<-1, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0,-2));
 
 1147        mValues[SixthDensePt< 0, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0,-2));
 
 1148        mValues[SixthDensePt< 1, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0,-2));
 
 1149        mValues[SixthDensePt< 2, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0,-2));
 
 1150        mValues[SixthDensePt< 3, 0,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0,-2));
 
 1152        mValues[SixthDensePt<-3, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy(-3, 0,-3));
 
 1153        mValues[SixthDensePt<-2, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy(-2, 0,-3));
 
 1154        mValues[SixthDensePt<-1, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy(-1, 0,-3));
 
 1155        mValues[SixthDensePt< 0, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 0,-3));
 
 1156        mValues[SixthDensePt< 1, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 1, 0,-3));
 
 1157        mValues[SixthDensePt< 2, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 2, 0,-3));
 
 1158        mValues[SixthDensePt< 3, 0,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 3, 0,-3));
 
 1160        mValues[SixthDensePt< 0,-3, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3, 3));
 
 1161        mValues[SixthDensePt< 0,-2, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 3));
 
 1162        mValues[SixthDensePt< 0,-1, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 3));
 
 1163        mValues[SixthDensePt< 0, 1, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 3));
 
 1164        mValues[SixthDensePt< 0, 2, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 3));
 
 1165        mValues[SixthDensePt< 0, 3, 3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3, 3));
 
 1167        mValues[SixthDensePt< 0,-3, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3, 2));
 
 1168        mValues[SixthDensePt< 0,-2, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 2));
 
 1169        mValues[SixthDensePt< 0,-1, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 2));
 
 1170        mValues[SixthDensePt< 0, 1, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 2));
 
 1171        mValues[SixthDensePt< 0, 2, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 2));
 
 1172        mValues[SixthDensePt< 0, 3, 2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3, 2));
 
 1174        mValues[SixthDensePt< 0,-3, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3, 1));
 
 1175        mValues[SixthDensePt< 0,-2, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2, 1));
 
 1176        mValues[SixthDensePt< 0,-1, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1, 1));
 
 1177        mValues[SixthDensePt< 0, 1, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1, 1));
 
 1178        mValues[SixthDensePt< 0, 2, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2, 1));
 
 1179        mValues[SixthDensePt< 0, 3, 1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3, 1));
 
 1181        mValues[SixthDensePt< 0,-3,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3,-1));
 
 1182        mValues[SixthDensePt< 0,-2,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2,-1));
 
 1183        mValues[SixthDensePt< 0,-1,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1,-1));
 
 1184        mValues[SixthDensePt< 0, 1,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1,-1));
 
 1185        mValues[SixthDensePt< 0, 2,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2,-1));
 
 1186        mValues[SixthDensePt< 0, 3,-1>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3,-1));
 
 1188        mValues[SixthDensePt< 0,-3,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3,-2));
 
 1189        mValues[SixthDensePt< 0,-2,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2,-2));
 
 1190        mValues[SixthDensePt< 0,-1,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1,-2));
 
 1191        mValues[SixthDensePt< 0, 1,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1,-2));
 
 1192        mValues[SixthDensePt< 0, 2,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2,-2));
 
 1193        mValues[SixthDensePt< 0, 3,-2>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3,-2));
 
 1195        mValues[SixthDensePt< 0,-3,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-3,-3));
 
 1196        mValues[SixthDensePt< 0,-2,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-2,-3));
 
 1197        mValues[SixthDensePt< 0,-1,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0,-1,-3));
 
 1198        mValues[SixthDensePt< 0, 1,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 1,-3));
 
 1199        mValues[SixthDensePt< 0, 2,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 2,-3));
 
 1200        mValues[SixthDensePt< 0, 3,-3>::idx] = mAcc.getValue(ijk.
offsetBy( 0, 3,-3));
 
 
 1214    template<
int i, 
int j, 
int k> 
struct GradPt {};
 
 1215    template<> 
struct GradPt< 0, 0, 0> { 
enum { idx = 0 }; };
 
 1216    template<> 
struct GradPt< 1, 0, 0> { 
enum { idx = 2 }; };
 
 1217    template<> 
struct GradPt< 0, 1, 0> { 
enum { idx = 4 }; };
 
 1218    template<> 
struct GradPt< 0, 0, 1> { 
enum { idx = 6 }; };
 
 1219    template<> 
struct GradPt<-1, 0, 0> { 
enum { idx = 1 }; };
 
 1220    template<> 
struct GradPt< 0,-1, 0> { 
enum { idx = 3 }; };
 
 1221    template<> 
struct GradPt< 0, 0,-1> { 
enum { idx = 5 }; };
 
 1230template<
typename Gr
idT, 
bool IsSafe = true>
 
 1245        , mInvDx2(
ValueType(4.0 * mInv2Dx * mInv2Dx))
 
 
 1252        , mInvDx2(
ValueType(4.0 * mInv2Dx * mInv2Dx))
 
 
 1264                                                mValues[0] - mValues[1],
 
 1265                                                mValues[2] - mValues[0],
 
 1266                                                mValues[0] - mValues[3],
 
 1267                                                mValues[4] - mValues[0],
 
 1268                                                mValues[0] - mValues[5],
 
 1269                                                mValues[6] - mValues[0]);
 
 
 1280                                     mValues[4] - mValues[3],
 
 1281                                     mValues[6] - mValues[5])*mInv2Dx;
 
 
 1290               V[0]>0 ? mValues[0] - mValues[1] : mValues[2] - mValues[0],
 
 1291               V[1]>0 ? mValues[0] - mValues[3] : mValues[4] - mValues[0],
 
 1292               V[2]>0 ? mValues[0] - mValues[5] : mValues[6] - mValues[0])*2*mInv2Dx;
 
 
 1299        return mInvDx2 * (mValues[1] + mValues[2] +
 
 1300                          mValues[3] + mValues[4] +
 
 1301                          mValues[5] + mValues[6] - 6*mValues[0]);
 
 
 1309        return (v[0]>0 ? (v[1]<0 || v[2]<0 || v[3]<0 || v[4]<0 || v[5]<0 || v[6]<0)
 
 1310                       : (v[1]>0 || v[2]>0 || v[3]>0 || v[4]>0 || v[5]>0 || v[6]>0));
 
 
 1326                                                    ijk[1] - d*(mValues[4] - mValues[3]),
 
 1327                                                    ijk[2] - d*(mValues[6] - mValues[5]));
 
 
 1333    template<
int i, 
int j, 
int k>
 
 1334    unsigned int pos()
 const { 
return GradPt<i,j,k>::idx; }
 
 1338    inline void init(
const Coord& ijk)
 
 1340        BaseType::template setValue<-1, 0, 0>(mAcc.getValue(ijk.
offsetBy(-1, 0, 0)));
 
 1341        BaseType::template setValue< 1, 0, 0>(mAcc.getValue(ijk.
offsetBy( 1, 0, 0)));
 
 1343        BaseType::template setValue< 0,-1, 0>(mAcc.getValue(ijk.
offsetBy( 0,-1, 0)));
 
 1344        BaseType::template setValue< 0, 1, 0>(mAcc.getValue(ijk.
offsetBy( 0, 1, 0)));
 
 1346        BaseType::template setValue< 0, 0,-1>(mAcc.getValue(ijk.
offsetBy( 0, 0,-1)));
 
 1347        BaseType::template setValue< 0, 0, 1>(mAcc.getValue(ijk.
offsetBy( 0, 0, 1)));
 
 
 1364template<
typename Gr
idT, 
bool IsSafe = true>
 
 1381        , mDx2(static_cast<float>(_mDx2))
 
 
 1390        , mDx2(static_cast<float>(_mDx2))
 
 
 1405            v1(v[2]-v[1], v[ 8]-v[ 7], v[14]-v[13], 0),
 
 1406            v2(v[3]-v[2], v[ 9]-v[ 8], v[15]-v[14], 0),
 
 1407            v3(v[0]-v[3], v[ 0]-v[ 9], v[ 0]-v[15], 0),
 
 1408            v4(v[4]-v[0], v[10]-v[ 0], v[16]-v[ 0], 0),
 
 1409            v5(v[5]-v[4], v[11]-v[10], v[17]-v[16], 0),
 
 1410            v6(v[6]-v[5], v[12]-v[11], v[18]-v[17], 0),
 
 1417            dP_xm = 
math::WENO5(v[ 2]-v[ 1],v[ 3]-v[ 2],v[ 0]-v[ 3],v[ 4]-v[ 0],v[ 5]-v[ 4],mDx2),
 
 1418            dP_xp = 
math::WENO5(v[ 6]-v[ 5],v[ 5]-v[ 4],v[ 4]-v[ 0],v[ 0]-v[ 3],v[ 3]-v[ 2],mDx2),
 
 1419            dP_ym = 
math::WENO5(v[ 8]-v[ 7],v[ 9]-v[ 8],v[ 0]-v[ 9],v[10]-v[ 0],v[11]-v[10],mDx2),
 
 1420            dP_yp = 
math::WENO5(v[12]-v[11],v[11]-v[10],v[10]-v[ 0],v[ 0]-v[ 9],v[ 9]-v[ 8],mDx2),
 
 1421            dP_zm = 
math::WENO5(v[14]-v[13],v[15]-v[14],v[ 0]-v[15],v[16]-v[ 0],v[17]-v[16],mDx2),
 
 1422            dP_zp = 
math::WENO5(v[18]-v[17],v[17]-v[16],v[16]-v[ 0],v[ 0]-v[15],v[15]-v[14],mDx2);
 
 
 1437            V[0]>0 ? 
math::WENO5(v[ 2]-v[ 1],v[ 3]-v[ 2],v[ 0]-v[ 3], v[ 4]-v[ 0],v[ 5]-v[ 4],mDx2)
 
 1438                : 
math::WENO5(v[ 6]-v[ 5],v[ 5]-v[ 4],v[ 4]-v[ 0], v[ 0]-v[ 3],v[ 3]-v[ 2],mDx2),
 
 1439            V[1]>0 ? 
math::WENO5(v[ 8]-v[ 7],v[ 9]-v[ 8],v[ 0]-v[ 9], v[10]-v[ 0],v[11]-v[10],mDx2)
 
 1440                : 
math::WENO5(v[12]-v[11],v[11]-v[10],v[10]-v[ 0], v[ 0]-v[ 9],v[ 9]-v[ 8],mDx2),
 
 1441            V[2]>0 ? 
math::WENO5(v[14]-v[13],v[15]-v[14],v[ 0]-v[15], v[16]-v[ 0],v[17]-v[16],mDx2)
 
 1442                : 
math::WENO5(v[18]-v[17],v[17]-v[16],v[16]-v[ 0], v[ 0]-v[15],v[15]-v[14],mDx2));
 
 
 1452                                               mValues[10] - mValues[ 9],
 
 1453                                               mValues[16] - mValues[15]);
 
 
 1464            mValues[ 3] + mValues[ 4] +
 
 1465            mValues[ 9] + mValues[10] +
 
 1466            mValues[15] + mValues[16] - 6*mValues[0]);
 
 
 1474        return (v[ 0]>0 ? (v[ 3]<0 || v[ 4]<0 || v[ 9]<0 || v[10]<0 || v[15]<0 || v[16]<0)
 
 1475                        : (v[ 3]>0 || v[ 4]>0 || v[ 9]>0 || v[10]>0 || v[15]>0 || v[16]>0));
 
 
 1479    inline void init(
const Coord& ijk)
 
 1481        mValues[ 1] = mAcc.getValue(ijk.
offsetBy(-3,  0,  0));
 
 1482        mValues[ 2] = mAcc.getValue(ijk.
offsetBy(-2,  0,  0));
 
 1483        mValues[ 3] = mAcc.getValue(ijk.
offsetBy(-1,  0,  0));
 
 1484        mValues[ 4] = mAcc.getValue(ijk.
offsetBy( 1,  0,  0));
 
 1485        mValues[ 5] = mAcc.getValue(ijk.
offsetBy( 2,  0,  0));
 
 1486        mValues[ 6] = mAcc.getValue(ijk.
offsetBy( 3,  0,  0));
 
 1488        mValues[ 7] = mAcc.getValue(ijk.
offsetBy( 0, -3,  0));
 
 1489        mValues[ 8] = mAcc.getValue(ijk.
offsetBy( 0, -2,  0));
 
 1490        mValues[ 9] = mAcc.getValue(ijk.
offsetBy( 0, -1,  0));
 
 1491        mValues[10] = mAcc.getValue(ijk.
offsetBy( 0,  1,  0));
 
 1492        mValues[11] = mAcc.getValue(ijk.
offsetBy( 0,  2,  0));
 
 1493        mValues[12] = mAcc.getValue(ijk.
offsetBy( 0,  3,  0));
 
 1495        mValues[13] = mAcc.getValue(ijk.
offsetBy( 0,  0, -3));
 
 1496        mValues[14] = mAcc.getValue(ijk.
offsetBy( 0,  0, -2));
 
 1497        mValues[15] = mAcc.getValue(ijk.
offsetBy( 0,  0, -1));
 
 1498        mValues[16] = mAcc.getValue(ijk.
offsetBy( 0,  0,  1));
 
 1499        mValues[17] = mAcc.getValue(ijk.
offsetBy( 0,  0,  2));
 
 1500        mValues[18] = mAcc.getValue(ijk.
offsetBy( 0,  0,  3));
 
 1506    const ValueType _mDx2, mInv2Dx, mInvDx2;
 
 
 1514template<
typename Gr
idT, 
bool IsSafe = true>
 
 1529        , mInvDx2(
ValueType(4.0 * mInv2Dx * mInv2Dx))
 
 
 1536        , mInvDx2(
ValueType(4.0 * mInv2Dx * mInv2Dx))
 
 
 1546        Real alpha, normGrad;
 
 
 1557        Real alpha, normGrad;
 
 
 1569        Real alphaM, alphaG, normGrad;
 
 1570        if (this->
curvatures(alphaM, alphaG, normGrad)) {
 
 
 1586        Real alpha, normGrad;
 
 
 1598        Real alpha, normGrad;
 
 
 1610        Real alphaM, alphaG, normGrad;
 
 1611        if (this->
curvatures(alphaM, alphaG, normGrad)) {
 
 
 1626        std::pair<ValueType, ValueType> pair(0, 0);
 
 1627        Real alphaM, alphaG, normGrad;
 
 1628        if (this->
curvatures(alphaM, alphaG, normGrad)) {
 
 
 1645            mValues[1] + mValues[2] +
 
 1646            mValues[3] + mValues[4] +
 
 1647            mValues[5] + mValues[6] - 6*mValues[0]);
 
 
 1658            mValues[2] - mValues[1],
 
 1659            mValues[4] - mValues[3],
 
 1660            mValues[6] - mValues[5])*mInv2Dx;
 
 
 1664    inline void init(
const Coord &ijk)
 
 1666        mValues[ 1] = mAcc.getValue(ijk.
offsetBy(-1,  0,  0));
 
 1667        mValues[ 2] = mAcc.getValue(ijk.
offsetBy( 1,  0,  0));
 
 1669        mValues[ 3] = mAcc.getValue(ijk.
offsetBy( 0, -1,  0));
 
 1670        mValues[ 4] = mAcc.getValue(ijk.
offsetBy( 0,  1,  0));
 
 1672        mValues[ 5] = mAcc.getValue(ijk.
offsetBy( 0,  0, -1));
 
 1673        mValues[ 6] = mAcc.getValue(ijk.
offsetBy( 0,  0,  1));
 
 1675        mValues[ 7] = mAcc.getValue(ijk.
offsetBy(-1, -1,  0));
 
 1676        mValues[ 8] = mAcc.getValue(ijk.
offsetBy( 1, -1,  0));
 
 1677        mValues[ 9] = mAcc.getValue(ijk.
offsetBy(-1,  1,  0));
 
 1678        mValues[10] = mAcc.getValue(ijk.
offsetBy( 1,  1,  0));
 
 1680        mValues[11] = mAcc.getValue(ijk.
offsetBy(-1,  0, -1));
 
 1681        mValues[12] = mAcc.getValue(ijk.
offsetBy( 1,  0, -1));
 
 1682        mValues[13] = mAcc.getValue(ijk.
offsetBy(-1,  0,  1));
 
 1683        mValues[14] = mAcc.getValue(ijk.
offsetBy( 1,  0,  1));
 
 1685        mValues[15] = mAcc.getValue(ijk.
offsetBy( 0, -1, -1));
 
 1686        mValues[16] = mAcc.getValue(ijk.
offsetBy( 0,  1, -1));
 
 1687        mValues[17] = mAcc.getValue(ijk.
offsetBy( 0, -1,  1));
 
 1688        mValues[18] = mAcc.getValue(ijk.
offsetBy( 0,  1,  1));
 
 1691    inline Real Dx()
  const { 
return 0.5*(mValues[2] - mValues[1]); }
 
 1692    inline Real Dy()
  const { 
return 0.5*(mValues[4] - mValues[3]); }
 
 1693    inline Real Dz()
  const { 
return 0.5*(mValues[6] - mValues[5]); }
 
 1694    inline Real Dxx()
 const { 
return mValues[2] - 2 * mValues[0] + mValues[1]; }
 
 1695    inline Real Dyy()
 const { 
return mValues[4] - 2 * mValues[0] + mValues[3]; }
 
 1696    inline Real Dzz()
 const { 
return mValues[6] - 2 * mValues[0] + mValues[5]; }
 
 1697    inline Real Dxy()
 const { 
return 0.25 * (mValues[10] - mValues[ 8] + mValues[ 7] - mValues[ 9]); }
 
 1698    inline Real Dxz()
 const { 
return 0.25 * (mValues[14] - mValues[12] + mValues[11] - mValues[13]); }
 
 1699    inline Real Dyz()
 const { 
return 0.25 * (mValues[18] - mValues[16] + mValues[15] - mValues[17]); }
 
 1701    inline bool meanCurvature(Real& alpha, Real& normGrad)
 const 
 1704        const Real Dx = this->Dx(), Dy = this->Dy(), Dz = this->Dz(),
 
 1705                   Dx2 = Dx*Dx, Dy2 = Dy*Dy, Dz2 = Dz*Dz, normGrad2 = Dx2 + Dy2 + Dz2;
 
 1706        if (normGrad2 <= math::Tolerance<Real>::value()) {
 
 1707             alpha = normGrad = 0;
 
 1710        const Real Dxx = this->Dxx(), Dyy = this->Dyy(), Dzz = this->Dzz();
 
 1711        alpha = Dx2*(Dyy + Dzz) + Dy2*(Dxx + Dzz) + Dz2*(Dxx + Dyy) -
 
 1712                2*(Dx*(Dy*this->Dxy() + Dz*this->Dxz()) + Dy*Dz*this->Dyz());
 
 1713        normGrad = std::sqrt(normGrad2); 
 
 1717    inline bool gaussianCurvature(Real& alpha, Real& normGrad)
 const 
 1720        const Real Dx = this->Dx(), Dy = this->Dy(), Dz = this->Dz(),
 
 1721                   Dx2 = Dx*Dx, Dy2 = Dy*Dy, Dz2 = Dz*Dz, normGrad2 = Dx2 + Dy2 + Dz2;
 
 1722        if (normGrad2 <= math::Tolerance<Real>::value()) {
 
 1723             alpha = normGrad = 0;
 
 1726        const Real Dxx = this->Dxx(), Dyy = this->Dyy(), Dzz = this->Dzz(),
 
 1727                   Dxy = this->Dxy(), Dxz = this->Dxz(), Dyz = this->Dyz();
 
 1728        alpha = Dx2*(Dyy*Dzz - Dyz*Dyz) + Dy2*(Dxx*Dzz - Dxz*Dxz) + Dz2*(Dxx*Dyy - Dxy*Dxy) +
 
 1729                2*( Dy*Dz*(Dxy*Dxz - Dyz*Dxx) + Dx*Dz*(Dxy*Dyz - Dxz*Dyy) + Dx*Dy*(Dxz*Dyz - Dxy*Dzz) );
 
 1730        normGrad  = std::sqrt(normGrad2); 
 
 1733    inline bool curvatures(Real& alphaM, Real& alphaG, Real& normGrad)
 const 
 1736        const Real Dx = this->Dx(), Dy = this->Dy(), Dz = this->Dz(),
 
 1737                   Dx2 = Dx*Dx, Dy2 = Dy*Dy, Dz2 = Dz*Dz, normGrad2 = Dx2 + Dy2 + Dz2;
 
 1738        if (normGrad2 <= math::Tolerance<Real>::value()) {
 
 1739             alphaM = alphaG =normGrad = 0;
 
 1742        const Real Dxx = this->Dxx(), Dyy = this->Dyy(), Dzz = this->Dzz(),
 
 1743                   Dxy = this->Dxy(), Dxz = this->Dxz(), Dyz = this->Dyz();
 
 1744        alphaM = Dx2*(Dyy + Dzz) + Dy2*(Dxx + Dzz) + Dz2*(Dxx + Dyy) -
 
 1745                 2*(Dx*(Dy*Dxy + Dz*Dxz) + Dy*Dz*Dyz);
 
 1746        alphaG = Dx2*(Dyy*Dzz - Dyz*Dyz) + Dy2*(Dxx*Dzz - Dxz*Dxz) + Dz2*(Dxx*Dyy - Dxy*Dxy) +
 
 1747                 2*( Dy*Dz*(Dxy*Dxz - Dyz*Dxx) + Dx*Dz*(Dxy*Dyz - Dxz*Dyy) + Dx*Dy*(Dxz*Dyz - Dxy*Dzz) );
 
 1748        normGrad  = std::sqrt(normGrad2); 
 
 
 1763template<
typename Gr
idT, 
bool IsSafe = true>
 
 1775        , mHalfWidth(halfWidth)
 
 
 1791    template<
typename IterType>
 
 1801    inline void init(
const Coord& ijk)
 
 1805            for (p[1] = ijk[1]-mHalfWidth; p[1] <= q[1]; ++p[1]) {
 
 1806                for (p[2] = ijk[2]-mHalfWidth; p[2] <= q[2]; ++p[2]) {
 
 1807                    mValues[n++] = mAcc.getValue(p);
 
 1816    const int mHalfWidth;
 
 
#define OPENVDB_ASSERT(X)
Definition Assert.h:41
General-purpose arithmetic and comparison routines, most of which accept arbitrary value types (or at...
ValueAccessors are designed to help accelerate accesses into the OpenVDB Tree structures by storing c...
ValueType min() const
Return the smallest value in the stencil buffer.
Definition Stencils.h:146
void moveTo(const Vec3< RealType > &xyz)
Initialize the stencil buffer with the values of voxel (x, y, z) and its neighbors.
Definition Stencils.h:86
BufferType mValues
Definition Stencils.h:221
const AccessorType & accessor() const
Return a const reference to the ValueAccessor associated with this Stencil.
Definition Stencils.h:207
void moveTo(const IterType &iter)
Initialize the stencil buffer with the values of voxel (x, y, z) and its neighbors.
Definition Stencils.h:72
const ValueType & getValue(unsigned int pos=0) const
Return the value from the stencil buffer with linear offset pos.
Definition Stencils.h:97
ValueType mean() const
Return the mean value of the current stencil.
Definition Stencils.h:138
void setValue(const ValueType &value)
Set the value at the specified location relative to the center of the stencil.
Definition Stencils.h:112
void moveTo(const Coord &ijk, const ValueType ¢erValue)
Initialize the stencil buffer with the values of voxel (i, j, k) and its neighbors....
Definition Stencils.h:59
BaseStencil(const GridType &grid, int size)
Definition Stencils.h:211
GridT::ValueType ValueType
Definition Stencils.h:40
std::bitset< 6 > intersectionMask(const ValueType &isoValue=zeroVal< ValueType >()) const
Return true a bit-mask where the 6 bits indicates if the center of the stencil intersects the iso-con...
Definition Stencils.h:188
void moveTo(const Coord &ijk)
Initialize the stencil buffer with the values of voxel (i, j, k) and its neighbors.
Definition Stencils.h:47
Coord mCenter
Definition Stencils.h:222
const GridType * mGrid
Definition Stencils.h:219
const ValueType & getCenterValue() const
Return the value at the center of the stencil.
Definition Stencils.h:163
const ValueType & getValue() const
Return the value at the specified location relative to the center of the stencil.
Definition Stencils.h:105
const Coord & getCenterCoord() const
Return the coordinates of the center point of the stencil.
Definition Stencils.h:160
bool intersects(const ValueType &isoValue=zeroVal< ValueType >()) const
Return true if the center of the stencil intersects the iso-contour specified by the isoValue.
Definition Stencils.h:167
tree::ValueAccessor< const TreeType, IsSafe > AccessorType
Definition Stencils.h:41
ValueType median() const
Return the median value of the current stencil.
Definition Stencils.h:121
const GridType & grid() const
Return a const reference to the grid from which this stencil was constructed.
Definition Stencils.h:203
ValueType max() const
Return the largest value in the stencil buffer.
Definition Stencils.h:153
AccessorType mAcc
Definition Stencils.h:220
GridT::TreeType TreeType
Definition Stencils.h:39
std::vector< ValueType > BufferType
Definition Stencils.h:42
GridT GridType
Definition Stencils.h:38
int size()
Return the size of the stencil buffer.
Definition Stencils.h:118
math::Vec3< ValueType > gradient(const math::Vec3< ValueType > &xyz) const
Return the gradient in world space of the trilinear interpolation kernel.
Definition Stencils.h:372
BoxStencil(const GridType &grid)
Definition Stencils.h:311
GridT::ValueType ValueType
Definition Stencils.h:307
bool intersects(const ValueType &isoValue=zeroVal< ValueType >()) const
Return true if the center of the stencil intersects the.
Definition Stencils.h:319
friend class BaseStencil
Definition Stencils.h:428
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:315
GridT::TreeType TreeType
Definition Stencils.h:306
static const int SIZE
Definition Stencils.h:309
GridT GridType
Definition Stencils.h:305
ValueType interpolation(const math::Vec3< ValueType > &xyz) const
Return the trilinear interpolation at the normalized position.
Definition Stencils.h:338
Signed (x, y, z) 32-bit integer coordinates.
Definition Coord.h:26
Coord offsetBy(Int32 dx, Int32 dy, Int32 dz) const
Definition Coord.h:92
static Coord floor(const Vec3< T > &xyz)
Return the largest integer coordinates that are not greater than xyz (node centered conversion).
Definition Coord.h:57
void curvaturesNormGrad(ValueType &mean, ValueType &gauss) const
Return both the mean and the Gaussian curvature at the previously buffered location.
Definition Stencils.h:1608
CurvatureStencil(const GridType &grid, Real dx)
Definition Stencils.h:1533
CurvatureStencil(const GridType &grid)
Definition Stencils.h:1526
ValueType meanCurvature() const
Return the mean curvature at the previously buffered location.
Definition Stencils.h:1544
ValueType gaussianCurvatureNormGrad() const
Definition Stencils.h:1596
void curvatures(ValueType &mean, ValueType &gauss) const
Return both the mean and the Gaussian curvature at the previously buffered location.
Definition Stencils.h:1567
math::Vec3< ValueType > gradient() const
Definition Stencils.h:1655
GridT::ValueType ValueType
Definition Stencils.h:1522
ValueType laplacian() const
Definition Stencils.h:1642
std::pair< ValueType, ValueType > principalCurvatures() const
Return the pair (minimum, maximum) principal curvature at the previously buffered location.
Definition Stencils.h:1624
friend class BaseStencil
Definition Stencils.h:1752
ValueType meanCurvatureNormGrad() const
Definition Stencils.h:1584
ValueType gaussianCurvature() const
Return the Gaussian curvature at the previously buffered location.
Definition Stencils.h:1555
GridT::TreeType TreeType
Definition Stencils.h:1521
static const int SIZE
Definition Stencils.h:1524
GridT GridType
Definition Stencils.h:1520
void moveTo(const IterType &iter)
Initialize the stencil buffer with the values of voxel (x, y, z) and its neighbors.
Definition Stencils.h:1792
void moveTo(const Coord &ijk)
Initialize the stencil buffer with the values of voxel (x, y, z) and its neighbors.
Definition Stencils.h:1784
const ValueType & getCenterValue() const
Definition Stencils.h:1780
DenseStencil(const GridType &grid, int halfWidth)
Definition Stencils.h:1773
GridType::ValueType ValueType
Definition Stencils.h:1771
friend class BaseStencil
Definition Stencils.h:1813
GridT::TreeType TreeType
Definition Stencils.h:1770
GridT GridType
Definition Stencils.h:1769
FourthOrderDenseStencil(const GridType &grid)
Definition Stencils.h:693
GridType::ValueType ValueType
Definition Stencils.h:689
friend class BaseStencil
Definition Stencils.h:777
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:697
GridT::TreeType TreeType
Definition Stencils.h:688
static const int SIZE
Definition Stencils.h:691
GridT GridType
Definition Stencils.h:687
GradStencil(const GridType &grid)
Definition Stencils.h:1242
math::Vec3< ValueType > gradient(const math::Vec3< ValueType > &V) const
Return the first-order upwind gradient corresponding to the direction V.
Definition Stencils.h:1287
GradStencil(const GridType &grid, Real dx)
Definition Stencils.h:1249
math::Vec3< ValueType > gradient() const
Return the gradient computed at the previously buffered location by second order central differencing...
Definition Stencils.h:1277
ValueType laplacian() const
Definition Stencils.h:1297
bool zeroCrossing() const
Definition Stencils.h:1306
math::Vec3< ValueType > cpt()
Compute the closest-point transform to a level set.
Definition Stencils.h:1320
GridType::ValueType ValueType
Definition Stencils.h:1238
friend class BaseStencil
Definition Stencils.h:1350
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:1334
ValueType normSqGrad() const
Return the norm square of the single-sided upwind gradient (computed via Godunov's scheme) at the pre...
Definition Stencils.h:1261
GridT::TreeType TreeType
Definition Stencils.h:1237
static const int SIZE
Definition Stencils.h:1240
GridT GridType
Definition Stencils.h:1236
GridType::ValueType ValueType
Definition Stencils.h:828
friend class BaseStencil
Definition Stencils.h:863
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:836
GridType::TreeType TreeType
Definition Stencils.h:827
static const int SIZE
Definition Stencils.h:830
GridType GridType
Definition Stencils.h:826
NineteenPointStencil(const GridType &grid)
Definition Stencils.h:832
SecondOrderDenseStencil(const GridType &grid)
Definition Stencils.h:482
GridType::ValueType ValueType
Definition Stencils.h:478
friend class BaseStencil
Definition Stencils.h:515
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:486
GridT::TreeType TreeType
Definition Stencils.h:477
static const int SIZE
Definition Stencils.h:480
GridT GridType
Definition Stencils.h:476
SevenPointStencil(const GridT &grid)
Definition Stencils.h:257
GridType::ValueType ValueType
Definition Stencils.h:253
friend class BaseStencil
Definition Stencils.h:276
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:261
GridType::TreeType TreeType
Definition Stencils.h:252
static const int SIZE
Definition Stencils.h:255
GridType GridType
Definition Stencils.h:251
SixthOrderDenseStencil(const GridType &grid)
Definition Stencils.h:1048
GridType::ValueType ValueType
Definition Stencils.h:1044
friend class BaseStencil
Definition Stencils.h:1203
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:1052
GridT::TreeType TreeType
Definition Stencils.h:1043
static const int SIZE
Definition Stencils.h:1046
GridT GridType
Definition Stencils.h:1042
ThirteenPointStencil(const GridType &grid)
Definition Stencils.h:562
GridType::ValueType ValueType
Definition Stencils.h:558
friend class BaseStencil
Definition Stencils.h:587
unsigned int pos() const
Return linear offset for the specified stencil point relative to its center.
Definition Stencils.h:566
GridType::TreeType TreeType
Definition Stencils.h:557
static const int SIZE
Definition Stencils.h:560
GridType GridType
Definition Stencils.h:556
WenoStencil(const GridType &grid, Real dx)
Definition Stencils.h:1385
math::Vec3< ValueType > gradient(const math::Vec3< ValueType > &V) const
Definition Stencils.h:1433
WenoStencil(const GridType &grid)
Definition Stencils.h:1376
ValueType normSqGrad(const ValueType &isoValue=zeroVal< ValueType >()) const
Return the norm-square of the WENO upwind gradient (computed via WENO upwinding and Godunov's scheme)...
Definition Stencils.h:1399
math::Vec3< ValueType > gradient() const
Definition Stencils.h:1449
ValueType laplacian() const
Definition Stencils.h:1461
bool zeroCrossing() const
Definition Stencils.h:1471
GridType::ValueType ValueType
Definition Stencils.h:1372
friend class BaseStencil
Definition Stencils.h:1503
GridT::TreeType TreeType
Definition Stencils.h:1371
static const int SIZE
Definition Stencils.h:1374
GridT GridType
Definition Stencils.h:1370
ValueType WENO5(const ValueType &v1, const ValueType &v2, const ValueType &v3, const ValueType &v4, const ValueType &v5, float scale2=0.01f)
Implementation of nominally fifth-order finite-difference WENO.
Definition FiniteDifference.h:303
Real GodunovsNormSqrd(bool isOutside, Real dP_xm, Real dP_xp, Real dP_ym, Real dP_yp, Real dP_zm, Real dP_zp)
Definition FiniteDifference.h:325
Type Pow4(Type x)
Return x4.
Definition Math.h:556
Type Pow3(Type x)
Return x3.
Definition Math.h:552
Type Pow2(Type x)
Return x2.
Definition Math.h:548
Definition PointDataGrid.h:170
ValueAccessorImpl< TreeType, IsSafe, MutexType, openvdb::make_index_sequence< CacheLevels > > ValueAccessor
Default alias for a ValueAccessor. This is simply a helper alias for the generic definition but takes...
Definition ValueAccessor.h:86
double Real
Definition Types.h:60
constexpr T zeroVal()
Return the value of type T that corresponds to zero.
Definition Math.h:70
Definition Exceptions.h:13
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:218