00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef INT_NGP_H
00012 #define INT_NGP_H
00013
00014
00015
00016
00017
00018 #include "Particle/Interpolator.h"
00019 #include "Field/Field.h"
00020
00021
00022
00023 class IntNGP;
00024
00025
00026
00027 template <class T, unsigned Dim>
00028 struct InterpolatorTraits<T,Dim,IntNGP> {
00029 typedef NDIndex<Dim> Cache_t;
00030 };
00031
00032
00033
00034 class IntNGP : public Interpolator {
00035
00036 public:
00037
00038 IntNGP() {}
00039 ~IntNGP() {}
00040
00041
00042
00043
00044 template <class FT, unsigned Dim, class M, class C, class PT>
00045 static
00046 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00047 const Vektor<PT,Dim>& ppos, const M& mesh) {
00048
00049 NDIndex<Dim> ngp = FindNGP(mesh, ppos, CenteringTag<C>());
00050
00051
00052
00053 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00054 *fiter += pdata;
00055
00056 return;
00057 }
00058
00059
00060
00061 template <class FT, unsigned Dim, class M, class C, class PT>
00062 static
00063 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00064 const Vektor<PT,Dim>& ppos, const M& mesh,
00065 NDIndex<Dim>& ngp) {
00066
00067 ngp = FindNGP(mesh, ppos, CenteringTag<C>());
00068
00069
00070
00071 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00072 *fiter += pdata;
00073
00074 return;
00075 }
00076
00077
00078 template <class FT, unsigned Dim, class M, class C>
00079 static
00080 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
00081 const NDIndex<Dim>& ngp) {
00082
00083
00084
00085 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00086 *fiter += pdata;
00087
00088 return;
00089 }
00090
00091
00092 template <class FT, unsigned Dim, class M, class C, class PT>
00093 static
00094 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00095 const Vektor<PT,Dim>& ppos, const M& mesh) {
00096
00097 NDIndex<Dim> ngp = FindNGP(mesh, ppos, CenteringTag<C>());
00098
00099
00100
00101 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00102 pdata = *fiter;
00103
00104 return;
00105 }
00106
00107
00108
00109 template <class FT, unsigned Dim, class M, class C, class PT>
00110 static
00111 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00112 const Vektor<PT,Dim>& ppos, const M& mesh,
00113 NDIndex<Dim>& ngp) {
00114
00115 ngp = FindNGP(mesh, ppos, CenteringTag<C>());
00116
00117
00118
00119 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00120 pdata = *fiter;
00121
00122 return;
00123 }
00124
00125
00126 template <class FT, unsigned Dim, class M, class C>
00127 static
00128 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
00129 const NDIndex<Dim>& ngp) {
00130
00131
00132
00133 CompressedBrickIterator<FT,Dim> fiter = getFieldIter(f,ngp);
00134 pdata = *fiter;
00135
00136 return;
00137 }
00138
00139 };
00140
00141 #endif // INT_NGP_H
00142
00143
00144
00145
00146
00147
00148