OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
Electric_Field_1D_f1 Class Reference

#include <vlasov_f1.h>

Collaboration diagram for Electric_Field_1D_f1:

Public Member Functions

 Electric_Field_1D_f1 (size_t Nl, size_t Nm, double pmin, double pmax, size_t Np, double xmin, double xmax, size_t Nx)
 
void operator() (const DistFunc1D &Din, const Field1D &FEx, const Field1D &FEy, const Field1D &FEz, DistFunc1D &Dh)
 
void Implicit_Ex (const DistFunc1D &Din, const Field1D &FEx, DistFunc1D &Dh)
 
void Implicit_Ey (const DistFunc1D &Din, const Field1D &FEy, DistFunc1D &Dh)
 
void Implicit_Ez (const DistFunc1D &Din, const Field1D &FEz, DistFunc1D &Dh)
 

Private Member Functions

void MakeG00 (SHarmonic1D &f)
 
void MakeGH (SHarmonic1D &f, size_t l)
 

Private Attributes

SHarmonic1D H
 
SHarmonic1D G
 
SHarmonic1D TMP
 
complex< double > A100
 
complex< double > C100
 
complex< double > A210
 
complex< double > B211
 
complex< double > C311
 
complex< double > A310
 
valarray< complex< double > > pr
 
valarray< complex< double > > invpr
 
valarray< complex< double > > Hp0
 

Detailed Description

Definition at line 42 of file vlasov_f1.h.

Constructor & Destructor Documentation

◆ Electric_Field_1D_f1()

Electric_Field_1D_f1::Electric_Field_1D_f1 ( size_t  Nl,
size_t  Nm,
double  pmin,
double  pmax,
size_t  Np,
double  xmin,
double  xmax,
size_t  Nx 
)

Definition at line 37 of file vlasov_f1.cpp.

References A100, A210, A310, B211, C100, C311, Hp0, invpr, and pr.

43  : Hp0(Nl+1),
44  H(Np,Nx), G(Np,Nx), TMP(Np,Nx),
45  pr(Algorithms::MakeAxis(static_cast<complex<double> >(pmin),
46  static_cast<complex<double> >(pmax),
47  Np)),
48  invpr(pr)
49 {
50 
51 // - - - - - - - - - - - - - - - - - - - - - - - - - - -
52  complex<double> lc, mc;
53 
54 // Inverted momentum axis
55  for (size_t i(0); i < pr.size(); ++i) {
56  invpr[i] = 1.0/pr[i];
57  }
58  double idp = (-1.0)/ (2.0*(pmax-pmin)/double(Np-1)); // -1/(2dp)
59 
60 // - - - - - - - - - - - - - - - - - - - - - - - - - - -
61  A100 = static_cast<complex<double>>(idp);
62  C100 = static_cast<complex<double>>(0.5*idp);
63  A210 = static_cast<complex<double>>(1.0/3.0*idp);
64  B211 = static_cast<complex<double>>(2.0/3.0);
65  A310 = static_cast<complex<double>>(2.0/5.0*idp);
66  C311 = static_cast<complex<double>>(-0.5*idp/5.0);
67 
68 // - - - - - - - - - - - - - - - - - - - - - - - - - - -
69 // -2*Dp*H at the 0 momentum cell
70  Hp0[0] = 1.0 / pr[0];
71  for (size_t l(1); l < Nl+1; ++l) {
72  double ld(l);
73  Hp0[l] = Hp0[l-1] * (pr[0]/pr[1]) * (2.0*ld+1.0)/(2.0*ld-1.0);
74  }
75  Hp0 *= (-2.0)*(pr[1]-pr[0]);
76 
77 }
valarray< complex< double > > pr
Definition: vlasov_f1.h:69
valarray< complex< double > > invpr
Definition: vlasov_f1.h:69
complex< double > A100
Definition: vlasov_f1.h:63
complex< double > B211
Definition: vlasov_f1.h:63
complex< double > C311
Definition: vlasov_f1.h:63
SHarmonic1D TMP
Definition: vlasov_f1.h:61
valarray< T > MakeAxis(const T min, const T max, const size_t N)
SHarmonic1D G
Definition: vlasov_f1.h:61
SHarmonic1D H
Definition: vlasov_f1.h:61
complex< double > C100
Definition: vlasov_f1.h:63
complex< double > A210
Definition: vlasov_f1.h:63
valarray< complex< double > > Hp0
Definition: vlasov_f1.h:69
complex< double > A310
Definition: vlasov_f1.h:63

Member Function Documentation

◆ Implicit_Ex()

void Electric_Field_1D_f1::Implicit_Ex ( const DistFunc1D Din,
const Field1D FEx,
DistFunc1D Dh 
)

Definition at line 142 of file vlasov_f1.cpp.

References A100, A210, Field1D::array(), G, H, MakeG00(), MakeGH(), SHarmonic1D::mxaxis(), and DistFunc1D::q().

142  {
143 //--------------------------------------------------------------
144 // This is the calculation for the implicit electric field in x,
145 // which is to say Ex as it acts on the first few harmonics.
146 //--------------------------------------------------------------
147 
148  valarray<complex<double> > Ex(FEx.array());
149  Ex *= Din.q();
150 
151 // m = 0, l = 0
152  MakeG00(Din(0,0));
153  Ex *= A100; Dh(1,0) += G.mxaxis(Ex);
154 
155 // m = 0, l = 1
156  MakeGH(Din(1,0),1);
157  Ex *= A210 / A100; Dh(0,0) += H.mxaxis(Ex);
158  // Ex *= A1(1,0) / A2(1,0); Dh(2,0) += G.mxaxis(Ex);
159 
160 // m = 0, l = 2
161  // Din(2,0) = Din(0,0);
162  // Din(2,0) *= static_cast<complex<double>>(1.0/3.0);
163 
164  // MakeGH(Din(2,0),2);
165  // Ex *= A310 / A210; TMP = H; Dh(1,0) += H.mxaxis(Ex);
166 
167 
168 }
void MakeG00(SHarmonic1D &f)
Definition: vlasov_f1.cpp:278
complex< double > A100
Definition: vlasov_f1.h:63
SHarmonic1D & mxaxis(const valarray< complex< double > > &shmulti)
Definition: state.cpp:126
void MakeGH(SHarmonic1D &f, size_t l)
Definition: vlasov_f1.cpp:257
valarray< complex< double > > & array() const
Definition: state.h:196
double q() const
Definition: state.h:399
SHarmonic1D G
Definition: vlasov_f1.h:61
SHarmonic1D H
Definition: vlasov_f1.h:61
complex< double > A210
Definition: vlasov_f1.h:63
Here is the call graph for this function:

◆ Implicit_Ey()

void Electric_Field_1D_f1::Implicit_Ey ( const DistFunc1D Din,
const Field1D FEy,
DistFunc1D Dh 
)

Definition at line 171 of file vlasov_f1.cpp.

References Field1D::array(), B211, C100, G, H, MakeG00(), MakeGH(), SHarmonic1D::mxaxis(), DistFunc1D::q(), and SHarmonic1D::Re().

171  {
172 //--------------------------------------------------------------
173 // This is the calculation for the implicit electric field in y
174 // and z, which is to say Ex as it acts on the first few harmonics.
175 //--------------------------------------------------------------
176 
177  valarray<complex<double> > Em(FEy.array());
178  valarray<complex<double> > Ep(FEy.array());
179 
180 
181  Em *= Din.q();;
182  Ep *= Din.q();;
183 
184 // m = 0, l = 0
185  MakeG00(Din(0,0));
186  Em *= C100; Dh(1,1) += G.mxaxis(Em);
187 
188 // m = 0, l = 1
189  // MakeGH(Din(1,0),1);
190  // Em *= C1[1] / C1[0]; Dh(2,1) += G.mxaxis(Em);
191 
192 // m = 0, 1 < l < l0
193  // Din(2,0) = Din(0,0);
194  // Din(2,0) *= static_cast<complex<double>>(1.0/3.0);
195 
196  // MakeGH(Din(2,0),2);
197  // Em *= C311 / C100; Dh(1,1) += TMP.mxaxis(Em);
198 
199 // m = 0, l = 3
200  // MakeGH(Din(3,0),3);
201  // Em *= C3[3] / C3[2]; Dh(2,1) += H.mxaxis(Em);
202 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
203 
204 
205 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
206 // m = 1, l = 1
207  MakeGH(Din(1,1),1);
208  Ep *= B211; H = H.mxaxis(Ep); Dh(0,0) += H.Re();
209 }
void MakeG00(SHarmonic1D &f)
Definition: vlasov_f1.cpp:278
complex< double > B211
Definition: vlasov_f1.h:63
SHarmonic1D & mxaxis(const valarray< complex< double > > &shmulti)
Definition: state.cpp:126
SHarmonic1D & Re()
Definition: state.cpp:130
void MakeGH(SHarmonic1D &f, size_t l)
Definition: vlasov_f1.cpp:257
valarray< complex< double > > & array() const
Definition: state.h:196
double q() const
Definition: state.h:399
SHarmonic1D G
Definition: vlasov_f1.h:61
SHarmonic1D H
Definition: vlasov_f1.h:61
complex< double > C100
Definition: vlasov_f1.h:63
Here is the call graph for this function:

◆ Implicit_Ez()

void Electric_Field_1D_f1::Implicit_Ez ( const DistFunc1D Din,
const Field1D FEz,
DistFunc1D Dh 
)

Definition at line 212 of file vlasov_f1.cpp.

References Field1D::array(), B211, C100, C311, G, H, MakeG00(), MakeGH(), SHarmonic1D::mxaxis(), SHarmonic1D::Re(), and TMP.

212  {
213 //--------------------------------------------------------------
214 // This is the calculation for the implicit electric field in y
215 // and z, which is to say Ex as it acts on the first few harmonics.
216 //--------------------------------------------------------------
217  complex<double> ii(0.0,1.0);
218 
219 
220  valarray<complex<double> > Em(FEz.array());
221  Em *= (-1.0)*ii;
222 
223 
224  valarray<complex<double> > Ep(FEz.array());
225  Ep *= ii;
226  // m = 0, l = 0
227  MakeG00(Din(0,0));
228  Em *= C100; Dh(1,1) += G.mxaxis(Em);
229 
230 // m = 0, l = 1
231  // MakeGH(Din(1,0),1);
232  // Em *= C1[1] / C1[0]; Dh(2,1) += G.mxaxis(Em);
233 
234 // m = 0, 1 < l < l0
235  Din(2,0) = Din(0,0);
236  Din(2,0) *= static_cast<complex<double>>(1.0/3.0);
237 
238  MakeGH(Din(2,0),2);
239  Em *= C311 / C100; Dh(1,1) += TMP.mxaxis(Em);
240 
241 // // m = 0, l = 3
242 // MakeGH(Din(3,0),3);
243 // Em *= C3[3] / C3[2]; Dh(2,1) += H.mxaxis(Em);
244 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
245 
246 
247 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
248 // m = 1, l = 1
249  MakeGH(Din(1,1),1);
250  Ep *= B211; H = H.mxaxis(Ep); Dh(0,0) += H.Re();
251 }
void MakeG00(SHarmonic1D &f)
Definition: vlasov_f1.cpp:278
complex< double > B211
Definition: vlasov_f1.h:63
complex< double > C311
Definition: vlasov_f1.h:63
SHarmonic1D & mxaxis(const valarray< complex< double > > &shmulti)
Definition: state.cpp:126
SHarmonic1D TMP
Definition: vlasov_f1.h:61
SHarmonic1D & Re()
Definition: state.cpp:130
void MakeGH(SHarmonic1D &f, size_t l)
Definition: vlasov_f1.cpp:257
valarray< complex< double > > & array() const
Definition: state.h:196
SHarmonic1D G
Definition: vlasov_f1.h:61
SHarmonic1D H
Definition: vlasov_f1.h:61
complex< double > C100
Definition: vlasov_f1.h:63
Here is the call graph for this function:

◆ MakeG00()

void Electric_Field_1D_f1::MakeG00 ( SHarmonic1D f)
private

Definition at line 278 of file vlasov_f1.cpp.

References SHarmonic1D::Dp(), G, SHarmonic1D::numx(), and pr.

Referenced by Implicit_Ex(), Implicit_Ey(), Implicit_Ez(), and operator()().

278  {
279 //--------------------------------------------------------------
280  G = f; G = G.Dp();
281 
282  complex<double> p0p1_sq( pr[0]*pr[0]/(pr[1]*pr[1]) ),
283  inv_mp0p1_sq( 1.0/(1.0-p0p1_sq) ),
284  g_r = -4.0*(pr[1]-pr[0]) * pr[0]/(pr[1]*pr[1]),
285  f00;
286 
287  for (size_t i(0); i < f.numx(); ++i) {
288  f00 = ( f(0,i) - f(1,i) * p0p1_sq) * inv_mp0p1_sq;
289  G(0,i) = ( f(1,i) - f00) * g_r;
290  }
291 }
valarray< complex< double > > pr
Definition: vlasov_f1.h:69
size_t numx() const
Definition: state.h:72
SHarmonic1D & Dp()
Definition: state.cpp:139
SHarmonic1D G
Definition: vlasov_f1.h:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ MakeGH()

void Electric_Field_1D_f1::MakeGH ( SHarmonic1D f,
size_t  l 
)
private

Definition at line 257 of file vlasov_f1.cpp.

References SHarmonic1D::Dp(), G, H, Hp0, invpr, SHarmonic1D::mpaxis(), SHarmonic1D::numx(), and pr.

Referenced by Implicit_Ex(), Implicit_Ey(), Implicit_Ez(), and operator()().

257  {
258 //--------------------------------------------------------------
259  valarray<complex<double> > invpax(invpr);
260  complex<double> ld(el);
261 
262  invpax *= (-2.0)*(ld+1.0) * (pr[1]-pr[0]);
263 
264  G = f; H = f;
265  G = G.Dp();
266  H = H.mpaxis(invpax);
267  H += G;
268  G *= -(2.0*ld+1.0)/ld;
269  G += H;
270 
271  for (size_t i(0); i < G.numx(); ++i) G(0,i) = 0.0;
272  for (size_t i(0); i < H.numx(); ++i) H(0,i) = f(1,i) * Hp0[el];
273 }
valarray< complex< double > > pr
Definition: vlasov_f1.h:69
valarray< complex< double > > invpr
Definition: vlasov_f1.h:69
size_t numx() const
Definition: state.h:72
SHarmonic1D & Dp()
Definition: state.cpp:139
SHarmonic1D G
Definition: vlasov_f1.h:61
SHarmonic1D H
Definition: vlasov_f1.h:61
valarray< complex< double > > Hp0
Definition: vlasov_f1.h:69
SHarmonic1D & mpaxis(const valarray< complex< double > > &shmulti)
Definition: state.cpp:122
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator()()

void Electric_Field_1D_f1::operator() ( const DistFunc1D Din,
const Field1D FEx,
const Field1D FEy,
const Field1D FEz,
DistFunc1D Dh 
)

Definition at line 81 of file vlasov_f1.cpp.

References A100, A210, Field1D::array(), B211, C100, G, H, DistFunc1D::l0(), DistFunc1D::m0(), MakeG00(), MakeGH(), SHarmonic1D::mxaxis(), DistFunc1D::q(), SHarmonic1D::Re(), and TMP.

83  {
84 //--------------------------------------------------------------
85 // This is the core calculation for the electric field
86 //--------------------------------------------------------------
87 
88  complex<double> ii(0.0,1.0);
89 
90  valarray<complex<double> > Ex(FEx.array());
91  valarray<complex<double> > Em(FEz.array());
92  Em *= (-1.0)*ii;
93  Em += FEy.array();
94  valarray<complex<double> > Ep(FEz.array());
95  Ep *= ii;
96  Ep += FEy.array();
97 
98  Ex *= Din.q();
99  Em *= Din.q();
100  Ep *= Din.q();
101 
102  size_t l0(Din.l0());
103  size_t m0(Din.m0());
104 
105 
106 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
107 // m = 0, l = 0
108 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
109  MakeG00(Din(0,0));
110  Ex *= A100; TMP = G; Dh(1,0) += G.mxaxis(Ex);
111  Em *= C100; Dh(1,1) += TMP.mxaxis(Em);
112 
113 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
114 // m = 0, l = 1
115 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
116  MakeGH(Din(1,0),1);
117  Ex *= A210 / A100; Dh(0,0) += H.mxaxis(Ex);
118 
119 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
120 // m = 0, 1 < l < l0
121 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
122 
123  // Din(2,0) = Din(0,0);
124  // Din(2,0) *= static_cast<complex<double>>(1.0/3.0);
125 
126  // MakeGH(Din(2,0),2);
127  // Ex *= A310 / A210; TMP = H; Dh(1,0) += H.mxaxis(Ex);
128  // Em *= C311 / C100; Dh(1,1) += TMP.mxaxis(Em);
129 
130 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
131 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
132 // m = 1, l = 1
133 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
134  MakeGH(Din(1,1),1);
135  Ep *= B211; H = H.mxaxis(Ep); Dh(0,0) += H.Re();
136 
137 }
void MakeG00(SHarmonic1D &f)
Definition: vlasov_f1.cpp:278
complex< double > A100
Definition: vlasov_f1.h:63
complex< double > B211
Definition: vlasov_f1.h:63
SHarmonic1D & mxaxis(const valarray< complex< double > > &shmulti)
Definition: state.cpp:126
SHarmonic1D TMP
Definition: vlasov_f1.h:61
SHarmonic1D & Re()
Definition: state.cpp:130
void MakeGH(SHarmonic1D &f, size_t l)
Definition: vlasov_f1.cpp:257
valarray< complex< double > > & array() const
Definition: state.h:196
size_t m0() const
Definition: state.h:397
double q() const
Definition: state.h:399
SHarmonic1D G
Definition: vlasov_f1.h:61
SHarmonic1D H
Definition: vlasov_f1.h:61
complex< double > C100
Definition: vlasov_f1.h:63
complex< double > A210
Definition: vlasov_f1.h:63
size_t l0() const
Definition: state.h:396
Here is the call graph for this function:

Field Documentation

◆ A100

complex<double> Electric_Field_1D_f1::A100
private

Definition at line 63 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), Implicit_Ex(), and operator()().

◆ A210

complex<double> Electric_Field_1D_f1::A210
private

Definition at line 63 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), Implicit_Ex(), and operator()().

◆ A310

complex<double> Electric_Field_1D_f1::A310
private

Definition at line 63 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1().

◆ B211

complex<double> Electric_Field_1D_f1::B211
private

Definition at line 63 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), Implicit_Ey(), Implicit_Ez(), and operator()().

◆ C100

complex<double> Electric_Field_1D_f1::C100
private

Definition at line 63 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), Implicit_Ey(), Implicit_Ez(), and operator()().

◆ C311

complex<double> Electric_Field_1D_f1::C311
private

Definition at line 63 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), and Implicit_Ez().

◆ G

SHarmonic1D Electric_Field_1D_f1::G
private

Definition at line 61 of file vlasov_f1.h.

Referenced by Implicit_Ex(), Implicit_Ey(), Implicit_Ez(), MakeG00(), MakeGH(), and operator()().

◆ H

SHarmonic1D Electric_Field_1D_f1::H
private

Definition at line 61 of file vlasov_f1.h.

Referenced by Implicit_Ex(), Implicit_Ey(), Implicit_Ez(), MakeGH(), and operator()().

◆ Hp0

valarray< complex<double> > Electric_Field_1D_f1::Hp0
private

Definition at line 69 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), and MakeGH().

◆ invpr

valarray< complex<double> > Electric_Field_1D_f1::invpr
private

Definition at line 69 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), and MakeGH().

◆ pr

valarray< complex<double> > Electric_Field_1D_f1::pr
private

Definition at line 69 of file vlasov_f1.h.

Referenced by Electric_Field_1D_f1(), MakeG00(), and MakeGH().

◆ TMP

SHarmonic1D Electric_Field_1D_f1::TMP
private

Definition at line 61 of file vlasov_f1.h.

Referenced by Implicit_Ez(), and operator()().


The documentation for this class was generated from the following files: