hierarchicalprismp2localinterpolation.hh
Go to the documentation of this file.00001
00002
00003 #ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
00004 #define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
00005
00006 #include <vector>
00007
00008 namespace Dune
00009 {
00013 template<class LB>
00014 class HierarchicalPrismP2LocalInterpolation
00015 {
00016 public:
00017
00018 template<typename F, typename C>
00019 void interpolate (const F& f, std::vector<C>& out) const
00020 {
00021 typename LB::Traits::DomainType x;
00022 typename LB::Traits::RangeType y;
00023 out.resize(18);
00024
00025
00026
00027
00028
00029 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; f.evaluate(x, y); out[0] = y;
00030 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; f.evaluate(x, y); out[1] = y;
00031 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; f.evaluate(x, y); out[2] = y;
00032 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; f.evaluate(x, y); out[3] = y;
00033 x[0] = 1.0; x[1] = 0.0; x[2] = 1.0; f.evaluate(x, y); out[4] = y;
00034 x[0] = 0.0; x[1] = 1.0; x[2] = 1.0; f.evaluate(x, y); out[5] = y;
00035
00036
00037
00038 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; f.evaluate(x, y);
00039 out[6] = y - 0.5*(out[0] + out[3]);
00040
00041 x[0] = 1.0; x[1] = 0.0; x[2] = 0.5; f.evaluate(x, y);
00042 out[7] = y - 0.5*(out[1] + out[4]);
00043
00044 x[0] = 0.0; x[1] = 1.0; x[2] = 0.5; f.evaluate(x, y);
00045 out[8] = y - 0.5*(out[2] + out[5]);
00046
00047 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; f.evaluate(x, y);
00048 out[9] = y - 0.5*(out[0] + out[1]);
00049
00050 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; f.evaluate(x, y);
00051 out[10] = y - 0.5*(out[2] + out[0]);
00052
00053 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; f.evaluate(x, y);
00054 out[11] = y - 0.5*(out[2] + out[1]);
00055
00056 x[0] = 0.5; x[1] = 0.0; x[2] = 1.0; f.evaluate(x, y);
00057 out[12] = y - 0.5*(out[3] + out[4]);
00058
00059 x[0] = 0.0; x[1] = 0.5; x[2] = 1.0; f.evaluate(x, y);
00060 out[13] = y - 0.5*(out[3] + out[5]);
00061
00062 x[0] = 0.5; x[1] = 0.5; x[2] = 1.0; f.evaluate(x, y);
00063 out[14] = y - 0.5*(out[4] + out[5]);
00064
00065
00066
00067 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; f.evaluate(x, y);
00068 out[15] = y - 0.25*(out[4] + out[1] + out[0] + out[3] );
00069
00070 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; f.evaluate(x, y);
00071 out[16] = y - 0.25*(out[2] + out[0] + out[3] + out[5] );
00072
00073 x[0] = 0.5; x[1] = 0.5; x[2] = 0.5; f.evaluate(x, y);
00074 out[17] = y - 0.25*(out[2] + out[1] + out[4] + out[5] );
00075
00076 }
00077
00078
00079 };
00080 }
00081
00082 #endif