OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
IntNGP.h
Go to the documentation of this file.
1// -*- C++ -*-
2/***************************************************************************
3 *
4 * The IPPL Framework
5 *
6 *
7 * Visit http://people.web.psi.ch/adelmann/ for more details
8 *
9 ***************************************************************************/
10
11#ifndef INT_NGP_H
12#define INT_NGP_H
13
14/* IntNGP.h -- Definition of simple class to perform nearest-grid-point
15 interpolation of data for a single particle to or from IPPL Field. */
16
17// include files
19#include "Field/Field.h"
20
21
22// forward declaration
23class IntNGP;
24
25// specialization of InterpolatorTraits
26
27template <class T, unsigned Dim>
30};
31
32
33// IntNGP class definition
34class IntNGP : public Interpolator {
35
36public:
37 // constructor/destructor
38 IntNGP() {}
40
41 // gather/scatter functions
42
43 // scatter particle data into Field using particle position and mesh
44 template <class FT, unsigned Dim, class M, class C, class PT>
45 static
46 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
47 const Vektor<PT,Dim>& ppos, const M& mesh) {
48 // find nearest-grid-point for particle position, store in NDIndex obj
49 NDIndex<Dim> ngp = FindNGP(mesh, ppos, CenteringTag<C>());
50 // scatter data value to Field ... this assumes that the Field
51 // data point is local to this processor, if not an error will be printed.
52
54 *fiter += pdata;
55
56 return;
57 }
58
59 // scatter particle data into Field using particle position and mesh
60 // and cache mesh information for reuse
61 template <class FT, unsigned Dim, class M, class C, class PT>
62 static
63 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
64 const Vektor<PT,Dim>& ppos, const M& mesh,
65 NDIndex<Dim>& ngp) {
66 // find nearest-grid-point for particle position, store in NDIndex obj
67 ngp = FindNGP(mesh, ppos, CenteringTag<C>());
68 // scatter data value to Field ... this assumes that the Field
69 // data point is local to this processor, if not an error will be printed.
70
72 *fiter += pdata;
73
74 return;
75 }
76
77 // scatter particle data into Field using cached mesh information
78 template <class FT, unsigned Dim, class M, class C>
79 static
80 void scatter(const FT& pdata, Field<FT,Dim,M,C>& f,
81 const NDIndex<Dim>& ngp) {
82 // scatter data value to Field ... this assumes that the Field
83 // data point is local to this processor, if not an error will be printed.
84
86 *fiter += pdata;
87
88 return;
89 }
90
91 // gather particle data from Field using particle position and mesh
92 template <class FT, unsigned Dim, class M, class C, class PT>
93 static
94 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
95 const Vektor<PT,Dim>& ppos, const M& mesh) {
96 // find nearest-grid-point for particle position, store in NDIndex obj
97 NDIndex<Dim> ngp = FindNGP(mesh, ppos, CenteringTag<C>());
98 // gather Field value to particle data ... this assumes that the Field
99 // data point is local to this processor, if not an error will be printed.
100
102 pdata = *fiter;
103
104 return;
105 }
106
107 // gather particle data from Field using particle position and mesh
108 // and cache mesh information for reuse
109 template <class FT, unsigned Dim, class M, class C, class PT>
110 static
111 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
112 const Vektor<PT,Dim>& ppos, const M& mesh,
113 NDIndex<Dim>& ngp) {
114 // find nearest-grid-point for particle position, store in NDIndex obj
115 ngp = FindNGP(mesh, ppos, CenteringTag<C>());
116 // gather Field value to particle data ... this assumes that the Field
117 // data point is local to this processor, if not an error will be printed.
118
120 pdata = *fiter;
121
122 return;
123 }
124
125 // gather particle data from Field using cached mesh information
126 template <class FT, unsigned Dim, class M, class C>
127 static
128 void gather(FT& pdata, const Field<FT,Dim,M,C>& f,
129 const NDIndex<Dim>& ngp) {
130 // gather Field value to particle data ... this assumes that the Field
131 // data point is local to this processor, if not an error will be printed.
132
134 pdata = *fiter;
135
136 return;
137 }
138
139};
140
141#endif // INT_NGP_H
142
143/***************************************************************************
144 * $RCSfile: IntNGP.h,v $ $Author: adelmann $
145 * $Revision: 1.1.1.1 $ $Date: 2003/01/23 07:40:28 $
146 * IPPL_VERSION_ID: $Id: IntNGP.h,v 1.1.1.1 2003/01/23 07:40:28 adelmann Exp $
147 ***************************************************************************/
148
const unsigned Dim
NDIndex< Dim > FindNGP(const M &mesh, const Vektor< PT, Dim > &ppos, CenteringTag< Cell >)
Definition: Interpolator.h:37
Definition: Vektor.h:32
Definition: Field.h:33
static CompressedBrickIterator< T, Dim > getFieldIter(const BareField< T, Dim > &f, const NDIndex< Dim > &pt)
Definition: Interpolator.h:183
Definition: IntNGP.h:34
static void scatter(const FT &pdata, Field< FT, Dim, M, C > &f, const Vektor< PT, Dim > &ppos, const M &mesh, NDIndex< Dim > &ngp)
Definition: IntNGP.h:63
static void gather(FT &pdata, const Field< FT, Dim, M, C > &f, const Vektor< PT, Dim > &ppos, const M &mesh, NDIndex< Dim > &ngp)
Definition: IntNGP.h:111
IntNGP()
Definition: IntNGP.h:38
static void scatter(const FT &pdata, Field< FT, Dim, M, C > &f, const Vektor< PT, Dim > &ppos, const M &mesh)
Definition: IntNGP.h:46
static void gather(FT &pdata, const Field< FT, Dim, M, C > &f, const NDIndex< Dim > &ngp)
Definition: IntNGP.h:128
~IntNGP()
Definition: IntNGP.h:39
static void gather(FT &pdata, const Field< FT, Dim, M, C > &f, const Vektor< PT, Dim > &ppos, const M &mesh)
Definition: IntNGP.h:94
static void scatter(const FT &pdata, Field< FT, Dim, M, C > &f, const NDIndex< Dim > &ngp)
Definition: IntNGP.h:80