OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
vlasov_f1.h
Go to the documentation of this file.
1 
11 #ifndef DECL_VLASOVMAXWELLF1_H
12 #define DECL_VLASOVMAXWELLF1_H
13 
17 //--------------------------------------------------------------
18 //--------------------------------------------------------------
19 // Spatial advection
21 //--------------------------------------------------------------
22 public:
23 // Constructors/Destructors
24  Spatial_Advection_1D_f1(size_t Nl, size_t Nm,
25  double pmin, double pmax, size_t Np,
26  double xmin, double xmax, size_t Nx);
27 // Advance
28  void operator()(const DistFunc1D& Din, DistFunc1D& Dh);
29 
30 private:
32 // Array2D< complex<double> > A1, A2;
33  valarray< complex<double> > vr;
34  complex<double> A00, A10, A20;
35 
36 };
37 //--------------------------------------------------------------
38 
39 
40 //--------------------------------------------------------------
41 // Electric field
43 //--------------------------------------------------------------
44 public:
45 // Constructors/Destructors
46  Electric_Field_1D_f1(size_t Nl, size_t Nm,
47  double pmin, double pmax, size_t Np,
48  double xmin, double xmax, size_t Nx);
49 // Advance
50  void operator()(const DistFunc1D& Din,
51  const Field1D& FEx, const Field1D& FEy, const Field1D& FEz,
52  DistFunc1D& Dh);
53  void Implicit_Ex(const DistFunc1D& Din, const Field1D& FEx, DistFunc1D& Dh);
54  void Implicit_Ey(const DistFunc1D& Din, const Field1D& FEy, DistFunc1D& Dh);
55  void Implicit_Ez(const DistFunc1D& Din, const Field1D& FEz, DistFunc1D& Dh);
56 
57 private:
58  void MakeG00(SHarmonic1D& f);
59  void MakeGH( SHarmonic1D& f, size_t l);
60 
62 
63  complex<double> A100, C100, A210, B211, C311, A310;
64 
65  // Array2D< complex<double> > A1, A2;
66 // valarray< complex<double> > B1, B2;
67 // valarray< complex<double> > C1, C3;
68 // Array2D< complex<double> > C2, C4;
69  valarray< complex<double> > pr, invpr, Hp0;
70 };
71 //--------------------------------------------------------------
72 
73 //--------------------------------------------------------------
74 // Magnetic field
76 //--------------------------------------------------------------
77 public:
78 // Constructors/Destructors
79  Magnetic_Field_1D_f1(size_t Nl, size_t Nm,
80  double pmin, double pmax, size_t Np,
81  double xmin, double xmax, size_t Nx);
82 // Advance
83  void operator()(const DistFunc1D& Din,
84  const Field1D& FBx, const Field1D& FBy, const Field1D& FBz,
85  DistFunc1D& Dh);
86  void implicit(DistFunc1D& Din,
87  const Field1D& FBx, const Field1D& FBy, const Field1D& FBz,
88  double dt);
89 
90 private:
91 
93 
94  valarray< complex<double> > A1, B1;
96  complex<double> A3;
97 };
98 //--------------------------------------------------------------
99 
100 //--------------------------------------------------------------
101 // Functor to be used in the Runge-Kutta methods
103 //--------------------------------------------------------------
104 public:
105 // Constructor
106  VlasovFunctor1D_f1_explicitE(vector<size_t> Nl, vector<size_t> Nm,
107  vector<double> pmax, vector<size_t> Np,
108  double xmin, double xmax, size_t Nx);
110 
111 // Collect all the operators and apply on Yin
112  void operator()(const State1D& Yin, State1D& Yslope);
113  void operator()(const State1D& Yin, const State1D& Y2in, State1D& Yslope);
114  void operator()(const State1D& Yin, State1D& Yslope, size_t dir);
115  // void implicit_rest(const State1D& Yin, State1D& Yslope);
116  // void implicit_E(const State1D& Yin, State1D& Yslope, size_t dir);
117 
118 
119 
120 private:
121  vector<Spatial_Advection_1D_f1> SA;
122  vector<Electric_Field_1D_f1> EF;
123  vector<Current_1D> JX;
124  vector<Ampere_1D> AM;
125  vector<Magnetic_Field_1D_f1> BF;
126  vector<Faraday_1D> FA;
127 // vector<Hydro_Advection_1D> HA;
128 
129 };
130 //--------------------------------------------------------------
131 
132 //--------------------------------------------------------------
133 // Functor to be used in the Runge-Kutta methods
135 //--------------------------------------------------------------
136 public:
137 // Constructor
138  VlasovFunctor1D_f1_explicitEB(vector<size_t> Nl, vector<size_t> Nm,
139  vector<double> pmax, vector<size_t> Np,
140  double xmin, double xmax, size_t Nx);
142 
143 // Collect all the operators and apply on Yin
144  void operator()(const State1D& Yin, State1D& Yslope);
145  void operator()(const State1D& Yin, const State1D& Y2in, State1D& Yslope);
146  void operator()(const State1D& Yin, State1D& Yslope, size_t dir);
147  // void implicit_rest(const State1D& Yin, State1D& Yslope);
148  // void implicit_E(const State1D& Yin, State1D& Yslope, size_t dir);
149 
150 
151 
152 private:
153  vector<Spatial_Advection_1D_f1> SA;
154  vector<Electric_Field_1D_f1> EF;
155  vector<Current_1D> JX;
156  vector<Ampere_1D> AM;
157 // vector<Magnetic_Field_1D> BF;
158  vector<Faraday_1D> FA;
159 // vector<Hydro_Advection_1D> HA;
160 
161 };
162 //--------------------------------------------------------------
163 
164 //--------------------------------------------------------------
165 // Functor to be used in the Runge-Kutta methods
167 //--------------------------------------------------------------
168 public:
169 // Constructor
170  VlasovFunctor1D_f1_implicitE_p1(vector<size_t> Nl, vector<size_t> Nm,
171  vector<double> pmax, vector<size_t> Np,
172  double xmin, double xmax, size_t Nx);
174 
175 // Collect all the operators and apply on Yin
176  void operator()(const State1D& Yin, State1D& Yslope);
177  void operator()(const State1D& Yin, const State1D& Y2in, State1D& Yslope);
178  void operator()(const State1D& Yin, State1D& Yslope, size_t dir);
179 
180 private:
181  vector<Spatial_Advection_1D_f1> SA;
182  // vector<Electric_Field_1D> EF;
183  // vector<Current_1D> JX;
184  // vector<Ampere_1D> AM;
185  vector<Magnetic_Field_1D_f1> BF;
186 // vector<Faraday_1D> FA;
187 // vector<Hydro_Advection_1D> HA;
188 };
189 //--------------------------------------------------------------
190 //--------------------------------------------------------------
191 // Functor to be used in the Runge-Kutta methods
193 //--------------------------------------------------------------
194 public:
195 // Constructor
196  VlasovFunctor1D_f1_implicitEB_p1(vector<size_t> Nl, vector<size_t> Nm,
197  vector<double> pmax, vector<size_t> Np,
198  double xmin, double xmax, size_t Nx);
200 
201 // Collect all the operators and apply on Yin
202  void operator()(const State1D& Yin, State1D& Yslope);
203  void operator()(const State1D& Yin, const State1D& Y2in, State1D& Yslope);
204  void operator()(const State1D& Yin, State1D& Yslope, size_t dir);
205 
206 private:
207  vector<Spatial_Advection_1D_f1> SA;
208  // vector<Electric_Field_1D> EF;
209  // vector<Current_1D> JX;
210  // vector<Ampere_1D> AM;
211 // vector<Magnetic_Field_1D> BF;
212 // vector<Faraday_1D> FA;
213 // vector<Hydro_Advection_1D> HA;
214 };
215 //--------------------------------------------------------------
216 //--------------------------------------------------------------
217 // Functor to be used in the Runge-Kutta methods
219 //--------------------------------------------------------------
220 public:
221 // Constructor
222  VlasovFunctor1D_f1_implicitE_p2(vector<size_t> Nl, vector<size_t> Nm,
223  vector<double> pmax, vector<size_t> Np,
224  double xmin, double xmax, size_t Nx);
226 
227 // Collect all the operators and apply on Yin
228  void operator()(const State1D& Yin, State1D& Yslope);
229  void operator()(const State1D& Yin, const State1D& Y2in, State1D& Yslope);
230  void operator()(const State1D& Yin, State1D& Yslope, size_t dir);
231 
232 
233 private:
234  // vector<Spatial_Advection_1D> SA;
235  vector<Electric_Field_1D_f1> EF;
236  // vector<Current_1D> JX;
237  // vector<Ampere_1D> AM;
238  // vector<Magnetic_Field_1D> BF;
239  vector<Faraday_1D> FA;
240 };
241 //--------------------------------------------------------------
242 
243 
244 
248 #endif
valarray< complex< double > > pr
Definition: vlasov_f1.h:69
valarray< complex< double > > B1
Definition: vlasov_f1.h:94
vector< Faraday_1D > FA
Definition: vlasov_f1.h:158
vector< Spatial_Advection_1D_f1 > SA
Definition: vlasov_f1.h:207
SHarmonic1D FLM
Definition: vlasov_f1.h:92
vector< Current_1D > JX
Definition: vlasov_f1.h:123
A 1D Field.
Definition: state.h:184
Array2D< complex< double > > A2
Definition: vlasov_f1.h:95
vector< Current_1D > JX
Definition: vlasov_f1.h:155
Spatial_Advection_1D_f1(size_t Nl, size_t Nm, double pmin, double pmax, size_t Np, double xmin, double xmax, size_t Nx)
Definition: vlasov_f1.cpp:573
vector< Ampere_1D > AM
Definition: vlasov_f1.h:124
complex< double > A3
Definition: vlasov_f1.h:96
complex< double > C311
Definition: vlasov_f1.h:63
vector< Spatial_Advection_1D_f1 > SA
Definition: vlasov_f1.h:121
vector< Spatial_Advection_1D_f1 > SA
Definition: vlasov_f1.h:153
SHarmonic1D TMP
Definition: vlasov_f1.h:61
vector< Electric_Field_1D_f1 > EF
Definition: vlasov_f1.h:154
complex< double > A10
Definition: vlasov_f1.h:34
A 1D Spherical Harmonic.
Definition: state.h:57
Definition: state.h:577
vector< Faraday_1D > FA
Definition: vlasov_f1.h:239
vector< Spatial_Advection_1D_f1 > SA
Definition: vlasov_f1.h:181
vector< Electric_Field_1D_f1 > EF
Definition: vlasov_f1.h:122
vector< Faraday_1D > FA
Definition: vlasov_f1.h:126
complex< double > A20
Definition: vlasov_f1.h:34
vector< Magnetic_Field_1D_f1 > BF
Definition: vlasov_f1.h:125
vector< Magnetic_Field_1D_f1 > BF
Definition: vlasov_f1.h:185
vector< Ampere_1D > AM
Definition: vlasov_f1.h:156
void operator()(const DistFunc1D &Din, DistFunc1D &Dh)
Definition: vlasov_f1.cpp:603
complex< double > A00
Definition: vlasov_f1.h:34
valarray< complex< double > > vr
Definition: vlasov_f1.h:33
vector< Electric_Field_1D_f1 > EF
Definition: vlasov_f1.h:235
The 1D distribution function is the container for all SHarmonic1D per species.
Definition: state.h:376