OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
collisions.h
Go to the documentation of this file.
1 
14 #ifndef DECLERATION_FOKKER_PLANCK_H
15 #define DECLERATION_FOKKER_PLANCK_H
16 
17 #include "interspeciescollisions.h"
18 
19 //-------------------------------------------------------------------
24 //-------------------------------------------------------------------
25 private:
26 
27  double mass;
28  double dt;
29  bool ib;
31  valarray<double> vr;
32  valarray<double> dvr;
33  valarray<double> vrh;
34  valarray<double> dtoverv2;
35 
36 
38  valarray<double> p2dp, p2dpm1, phdp, phdpm1, p4dp, laser_Inv_Uav6;
39 
41  valarray<double> C_RB, D_RB;
42  double I4_Lnee;
43 
45  valarray<double> delta_CC;
46 
48  double c_kpre;
49  double vw_coeff_cube;
50 
52 
53  void update_C_Rosenbluth(valarray<double>& fin);
54  double update_D_Rosenbluth(const size_t& k, valarray<double>& fin, const double& delta);
55  void update_D_and_delta(valarray<double>& fin);
56  void update_D_inversebremsstrahlung(const double& Z0, const double& heatingcoefficient, const double& vos);
57  double calc_delta_ChangCooper(const size_t& k, const double& C, const double& D);
58 
59 public:
60 
61  self_f00_implicit_step(const size_t &nump, const double &pmax, const double &_mass, const double &_deltat, bool& _ib);
62 
63  void takestep(valarray<double> &fin, valarray<double> &fh, const double& Z0, const double& heating, const double& cooling);
64  void getleftside(valarray<double> &fin, const double& Z0, const double& heating, const double& cooling, Array2D<double> &LHStemp);
65 };
66 
67 //-------------------------------------------------------------------
78 //--------------------------------------------------------------
79 public:
81  self_f00_implicit_collisions(const DistFunc1D& DFin, const double& deltat);
82 
86  void loop(SHarmonic1D& SHin, valarray<double>& Zarray, const double time, SHarmonic1D& SHout);
87 
88 private:
89  // Variables
90  valarray<double> fin, fout;
91  valarray<double> xgrid;
92  bool ib;
94 
96  bool IB_heating;
97  bool MX_cooling;
98 
99  valarray<double> heatingprofile;
100  valarray<double> coolingprofile;
101 
102 
103  int Nbc;
104  int szx;
105 
106 };
107 //--------------------------------------------------------------
108 
109 //-------------------------------------------------------------------
122 //-------------------------------------------------------------------
123  private:
125  // valarray<double> fh;
126  // valarray<double>& fslope;
127  double mass;
129  valarray<double> vr;
130 
132  valarray<double> U4, U4m1, U2, U2m1, U1, U1m1, U3, Qn, Pn;
133 
135  valarray<double> J1, I2, I4;
136 
138  double c_kpre;
139  int NB;
141 
142 
143 
144  double G(const int& n, const valarray<double>& fin);
145 
146  public:
147 
148  self_f00_explicit_step(const size_t& nump, const double& pmax, const double& _mass);
149 
150  void takestep(const valarray<double>& fin, valarray<double>& fh);
151 };
152 //--------------------------------------------------------------
155 //--------------------------------------------------------------
156 // Functor to be used in the Runge-Kutta methods
157  class self_f00_RKfunctor : public Algorithms::AbstFunctor<valarray<double>> {
158 //--------------------------------------------------------------
159  public:
160 // Constructor
161  self_f00_RKfunctor(const size_t& nump, const double& pmax, const double& mass);
163 
164 // Collect all the operators and apply on Yin
165  void operator()(const valarray<double>& fin, valarray<double>& fslope);
166  void operator()(const valarray<double>& fin, valarray<double>& fslope, size_t dir);
167  void operator()(const valarray<double>& fin, const valarray<double>& f2in, valarray<double>& fslope);
168  private:
169  // Variables
171 
172  };
173 //--------------------------------------------------------------
174 
175 
176 
180 //-------------------------------------------------------------------
191 //--------------------------------------------------------------
192  public:
194  self_f00_explicit_collisions(const DistFunc1D& DFin, const double& deltat); //DistFunc1D& DFin,
195 
199  void loop(SHarmonic1D& SHin, SHarmonic1D& SHout);
200 
201  private:
202  // Variables
203  valarray<double> fin; //, fout;
204 
205 
209 
211 
213 
214  size_t num_h;
215  double h;
216 
217  int Nbc;
218  int szx;
219 
220  };
221 //--------------------------------------------------------------
222 
223 //--------------------------------------------------------------
224 
228 //--------------------------------------------------------------
237 //--------------------------------------------------------------
239 //-------------------------------------------------------------------
240  private:
241 
242 // Define the powers of the velocity
243  valarray<double> vr;
244 
245 // Parameters
246  valarray<double> U4, U4m1, U2, U2m1, U1, U1m1;
247 
248 // Define the integrals
249  valarray<double> J1m, I0, I2;
250 
251 // Define the derivatives of f0
252  valarray<double> df0, ddf0;
253 
254 // Variables for the matrix A, such that A*x = b
255  valarray<double> Scattering_Term;
258  double mass;
259 
260 // Constant
261  double I0_density, I2_temperature;
262  double _ZLOGei, _LOGee, kpre, Dt;
263 
265 
266  public:
267 // Constructors/Destructors
268  self_flm_implicit_step(double pmax, size_t nump, double mass);
269 
270 // Calculate the coefficients
271  void reset_coeff(const valarray<double>& f00, double Zvalue, const double Delta_t);
272 
273 // Explicit Advance
274  void advance(valarray<complex<double> >& fin, const int el);
275  };
276 //-------------------------------------------------------------------
282 //-------------------------------------------------------------------
293  public:
295  self_flm_implicit_collisions(const DistFunc1D &DFin, const double& deltat);
296 
298  void advancef1(DistFunc1D& DF, valarray<double>& Zarray, DistFunc1D& DFh);
299 
301  void advanceflm(DistFunc1D& DF, valarray<double>& Zarray, DistFunc1D& DFh);
302 
303  private:
304  // State1D& Y;
305  double Dt;
306 
307  int Nbc;
308  int szx;
310 
311  size_t l0;
312  size_t m0;
313 
314  valarray<complex<double> > fc;
315  valarray<double> f00;
316 
319 
320  };
321 //--------------------------------------------------------------
324 //-------------------------------------------------------------------
332 //--------------------------------------------------------------
333  public:
335  self_collisions(const DistFunc1D& DFin, const double& deltat);
336  // ~self_collisions();
337  void advancef00(SHarmonic1D& f00, valarray<double>& Zarray, const double time, SHarmonic1D& f00h);
338  void advancef1(DistFunc1D& DF, valarray<double>& Zarray, DistFunc1D& DFh);
339  void advanceflm(DistFunc1D& DF, valarray<double>& Zarray, DistFunc1D& DFh);
340 
341  private:
342  // Variables
346  };
347 
348 //-------------------------------------------------------------------
355  class collisions {
356 //--------------------------------------------------------------
357  public:
359  collisions(const State1D& Yin, const double& deltat);
360  // ~self_collisions();
361  void advance(State1D& Y, const Clock& W);
362  void advancef0(State1D& Y, const Clock& W, State1D& Yh);
363  void advancef1(State1D& Y, State1D& Yh);
364  void advanceflm(State1D& Y, State1D& Yh);
365 
366  vector<self_collisions> self();
367  // void advancef1(State1D& Y);
368  // void advanceflm(State1D& Y);
369 
370  private:
371  // Variables
373  vector<self_collisions> self_coll;
374  // vector<interspecies_collisions> unself_coll;
375 // vector<interspecies_f00_explicit_collisions> unself_f00_coll;
376  };
377 
378  #endif
int Nbc
Number of boundary cells in each direction.
Definition: collisions.h:103
double c_kpre
Constants.
Definition: collisions.h:48
valarray< double > vr
Define the velocity axis.
Definition: collisions.h:31
void update_D_inversebremsstrahlung(const double &Z0, const double &heatingcoefficient, const double &vos)
Definition: collisions.cpp:235
valarray< double > coolingprofile
Definition: collisions.h:100
int szx
Total cells including boundary cells in x-direction.
Definition: collisions.h:218
self_f00_RKfunctor rkf00
Definition: collisions.h:212
int szx
Total cells including boundary cells in x-direction.
Definition: collisions.h:308
The top-level container for self collisions over all species on l=0.
Definition: collisions.h:331
void getleftside(valarray< double > &fin, const double &Z0, const double &heating, const double &cooling, Array2D< double > &LHStemp)
Definition: collisions.cpp:343
valarray< double > xgrid
Definition: collisions.h:91
self_f00_explicit_collisions self_f00_exp_collisions
Definition: collisions.h:343
Interspecies Collisions - Definitions.
valarray< double > df0
Definition: collisions.h:252
self_f00_implicit_collisions self_f00_imp_collisions
Definition: collisions.h:344
valarray< double > dvr
Definition: collisions.h:32
void update_D_and_delta(valarray< double > &fin)
Definition: collisions.cpp:166
The top-level container for collisions on l=0.
Definition: collisions.h:121
valarray< double > p4dp
Definition: collisions.h:38
valarray< double > fin
Definition: collisions.h:203
int Nbc
Number of boundary cells in each direction.
Definition: collisions.h:217
valarray< double > p2dp
Various coefficients for the integrals.
Definition: collisions.h:38
valarray< double > phdp
Definition: collisions.h:38
size_t l0
Number of m harmonics.
Definition: collisions.h:311
valarray< double > f00
Array for isotropic component distribution function. Needed for calculating coefficients.
Definition: collisions.h:315
valarray< double > phdpm1
Definition: collisions.h:38
valarray< complex< double > > fc
Dummy array.
Definition: collisions.h:314
valarray< double > U4m1
Definition: collisions.h:132
double mass
Array output by getslope.
Definition: collisions.h:127
valarray< double > vr
Define the velocity axis.
Definition: collisions.h:129
int szx
Total cells including boundary cells in x-direction.
Definition: collisions.h:104
valarray< double > vr
Definition: collisions.h:243
A 1D Spherical Harmonic.
Definition: state.h:57
vector< self_collisions > self_coll
Definition: collisions.h:373
valarray< double > fout
Definition: collisions.h:90
valarray< double > p2dpm1
Definition: collisions.h:38
Definition: state.h:577
valarray< double > laser_Inv_Uav6
Definition: collisions.h:38
double update_D_Rosenbluth(const size_t &k, valarray< double > &fin, const double &delta)
Definition: collisions.cpp:127
self_flm_implicit_collisions self_flm_collisions
Definition: collisions.h:345
State1D Yh
Definition: collisions.h:372
size_t m0
Number of m harmonics.
Definition: collisions.h:312
double c_kpre
Constants.
Definition: collisions.h:138
valarray< double > C_RB
Rosenbluth Potentials.
Definition: collisions.h:41
self_f00_implicit_step collide
Definition: collisions.h:93
Collisions for l >= 1.
Definition: collisions.h:238
self_f00_explicit_step collide
Definition: collisions.h:170
void takestep(valarray< double > &fin, valarray< double > &fh, const double &Z0, const double &heating, const double &cooling)
Definition: collisions.cpp:266
valarray< double > dtoverv2
Definition: collisions.h:34
bool IB_heating
Switches for inverse bremsstrahlung and maxwellian cooling.
Definition: collisions.h:96
valarray< double > U4m1
Definition: collisions.h:246
Algorithms::RK4< valarray< double > > RK
Definition: collisions.h:210
int Nbc
Number of boundary cells in each direction.
Definition: collisions.h:307
valarray< double > J1
The integrals.
Definition: collisions.h:135
valarray< double > D_RB
Definition: collisions.h:41
valarray< double > delta_CC
Chang-Cooper weighting delta.
Definition: collisions.h:45
valarray< double > vrh
Definition: collisions.h:33
self_flm_implicit_step implicit_step
The object that is responsible for performing the algebra required for the integrals.
Definition: collisions.h:318
valarray< double > J1m
Definition: collisions.h:249
double calc_delta_ChangCooper(const size_t &k, const double &C, const double &D)
Definition: collisions.cpp:224
self_f00_implicit_step(const size_t &nump, const double &pmax, const double &_mass, const double &_deltat, bool &_ib)
Definition: collisions.cpp:44
valarray< double > Scattering_Term
Definition: collisions.h:255
Array2D< double > Alpha_Tri
Definition: collisions.h:256
The 1D distribution function is the container for all SHarmonic1D per species.
Definition: state.h:376
void update_C_Rosenbluth(valarray< double > &fin)
Definition: collisions.cpp:104
valarray< double > heatingprofile
Definition: collisions.h:99