OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
vlasov.h
Go to the documentation of this file.
1 
9 #ifndef DECL_VLASOVMAXWELL_H
10 #define DECL_VLASOVMAXWELL_H
11 
15 //--------------------------------------------------------------
16 //--------------------------------------------------------------
17 // Spatial advection
19 //--------------------------------------------------------------
20 public:
21 // Constructors/Destructors
22  Spatial_Advection_1D(size_t Nl, size_t Nm,
23  double pmin, double pmax, size_t Np,
24  double xmin, double xmax, size_t Nx);
25 // Advance
26  void operator()(const DistFunc1D& Din, DistFunc1D& Dh);
27  void es1d(const DistFunc1D& Din, DistFunc1D& Dh);
28  void f1only(const DistFunc1D& Din, DistFunc1D& Dh);
29 
30 private:
32  complex<double> A00, A10, A20;
34  valarray< complex<double> > vr;
35 };
36 //--------------------------------------------------------------
37 
38 
39 //--------------------------------------------------------------
40 // Electric field
42 //--------------------------------------------------------------
43 public:
44 // Constructors/Destructors
45  Electric_Field_1D(size_t Nl, size_t Nm,
46  double pmin, double pmax, size_t Np,
47  double xmin, double xmax, size_t Nx);
48 // Advance
49  void operator()(const DistFunc1D& Din,
50  const Field1D& FEx, const Field1D& FEy, const Field1D& FEz,
51  DistFunc1D& Dh);
52  void es1d(const DistFunc1D& Din,
53  const Field1D& FEx, const Field1D& FEy, const Field1D& FEz,
54  DistFunc1D& Dh);
55  void f1only(const DistFunc1D& Din,
56  const Field1D& FEx, const Field1D& FEy, const Field1D& FEz,
57  DistFunc1D& Dh);
58  void Implicit_Ex(const DistFunc1D& Din, const Field1D& FEx, DistFunc1D& Dh);
59  void Implicit_Ey(const DistFunc1D& Din, const Field1D& FEy, DistFunc1D& Dh);
60  void Implicit_Ez(const DistFunc1D& Din, const Field1D& FEz, DistFunc1D& Dh);
61 
62  void Implicit_Ex_f1only(const DistFunc1D& Din, const Field1D& FEx, DistFunc1D& Dh);
63  void Implicit_Ey_f1only(const DistFunc1D& Din, const Field1D& FEy, DistFunc1D& Dh);
64  void Implicit_Ez_f1only(const DistFunc1D& Din, const Field1D& FEz, DistFunc1D& Dh);
65 
66 private:
67  void MakeG00(SHarmonic1D& f);
68  void MakeGH( SHarmonic1D& f, size_t l);
69 
71 
72  complex<double> A100, C100, A210, B211, C311, A310;
73 
75  valarray< complex<double> > B1, B2;
76  valarray< complex<double> > C1, C3;
78  valarray< complex<double> > pr, invpr, Hp0;
79 };
80 //--------------------------------------------------------------
81 
82 //--------------------------------------------------------------
83 // Magnetic field
85 //--------------------------------------------------------------
86 public:
87 // Constructors/Destructors
88  Magnetic_Field_1D(size_t Nl, size_t Nm,
89  double pmin, double pmax, size_t Np,
90  double xmin, double xmax, size_t Nx);
91 // Advance
92  void operator()(const DistFunc1D& Din,
93  const Field1D& FBx, const Field1D& FBy, const Field1D& FBz,
94  DistFunc1D& Dh);
95  void f1only(const DistFunc1D& Din,
96  const Field1D& FBx, const Field1D& FBy, const Field1D& FBz,
97  DistFunc1D& Dh);
98  void implicit(DistFunc1D& Din,
99  const Field1D& FBx, const Field1D& FBy, const Field1D& FBz,
100  double dt);
101 
102 private:
103 
105 
106  valarray< complex<double> > A1, B1;
108  complex<double> A3;
109 };
110 //--------------------------------------------------------------
111 
112 //--------------------------------------------------------------
113 //--------------------------------------------------------------
114 // Current
115 class Current_1D {
116 //--------------------------------------------------------------
117 public:
118 // Constructors/Destructors
119  Current_1D( double pmin, double pmax, size_t Np,
120  size_t Nx );
121 // Advance
122  void operator()(const DistFunc1D& Din,
123  Field1D& FExh, Field1D& FEyh, Field1D& FEzh);
124  void es1d(const DistFunc1D& Din,
125  Field1D& FExh);
126 
127 private:
128  Field1D Jx, Jy, Jz;
129  double small;
130 // valarray< complex<double> > pr, invg;
131 };
132 //--------------------------------------------------------------
133 
134 //--------------------------------------------------------------
135 // Update B with E term from Faraday's Law
136 class Faraday_1D {
137 //--------------------------------------------------------------
138 public:
139 // Constructors/Destructors
140  Faraday_1D(double xmin, double xmax, size_t Nx);
141 // Advance
142  void operator()(EMF1D& EMFin, EMF1D& EMFh);
143 
144 private:
146  complex<double> idx;
147  size_t numx;
148 
149 };
150 //--------------------------------------------------------------
151 
152 //--------------------------------------------------------------
153 // Update E with B from Ampere's Law
154 class Ampere_1D {
155 //--------------------------------------------------------------
156 public:
157 // Constructors/Destructors
158  Ampere_1D(double xmin, double xmax, size_t Nx);
159 // Advance
160  void operator()(EMF1D& EMFin, EMF1D& EMFh);
161 
162 private:
164  complex<double> idx;
165  size_t numx;
166 
167 };
168 //--------------------------------------------------------------
169 
170 
171 #endif
valarray< complex< double > > C3
Definition: vlasov.h:76
valarray< complex< double > > B1
Definition: vlasov.h:106
complex< double > A3
Definition: vlasov.h:108
complex< double > idx
Definition: vlasov.h:146
A 1D Field.
Definition: state.h:184
Field1D tmpB
Definition: vlasov.h:163
SHarmonic1D FLM
Definition: vlasov.h:104
SHarmonic1D fd2
Definition: vlasov.h:31
complex< double > A00
Definition: vlasov.h:32
complex< double > idx
Definition: vlasov.h:164
Array2D< complex< double > > A2
Definition: vlasov.h:107
Array2D< complex< double > > A2
Definition: vlasov.h:33
Field1D Jz
Definition: vlasov.h:128
valarray< complex< double > > vr
Definition: vlasov.h:34
Spatial_Advection_1D(size_t Nl, size_t Nm, double pmin, double pmax, size_t Np, double xmin, double xmax, size_t Nx)
Definition: vlasov.cpp:1199
complex< double > A20
Definition: vlasov.h:32
A 1D Spherical Harmonic.
Definition: state.h:57
complex< double > C311
Definition: vlasov.h:72
size_t numx
Definition: vlasov.h:147
size_t numx
Definition: vlasov.h:165
void f1only(const DistFunc1D &Din, DistFunc1D &Dh)
Definition: vlasov.cpp:1306
double small
Definition: vlasov.h:129
Array2D< complex< double > > A1
Definition: vlasov.h:33
Field1D tmpE
Definition: vlasov.h:145
valarray< complex< double > > B2
Definition: vlasov.h:75
valarray< complex< double > > pr
Definition: vlasov.h:78
Definition: state.h:271
SHarmonic1D fd1
Definition: vlasov.h:31
SHarmonic1D TMP
Definition: vlasov.h:70
void operator()(const DistFunc1D &Din, DistFunc1D &Dh)
Definition: vlasov.cpp:1249
complex< double > A10
Definition: vlasov.h:32
Array2D< complex< double > > C4
Definition: vlasov.h:77
Array2D< complex< double > > A2
Definition: vlasov.h:74
The 1D distribution function is the container for all SHarmonic1D per species.
Definition: state.h:376
void es1d(const DistFunc1D &Din, DistFunc1D &Dh)
Definition: vlasov.cpp:1280