blob: d9d207f7eb1ce3c11f7e9563f3efbd2339224211 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <PlasmaInjector.H>
#include <cmath>
#include <iostream>
#include <WarpXConst.H>
using namespace amrex;
Real PredefinedDensityProfile::getDensity(Real x, Real y, Real z) const {
Real n;
if ( which_profile == predefined_profile_flag::parabolic_channel ) {
n = ParabolicChannel(x,y,z);
}
return n;
}
///
/// plateau between linear upramp and downramp, and parab transverse profile
///
Real PredefinedDensityProfile::ParabolicChannel(Real x, Real y, Real z) const {
// params = [z_start ramp_up plateau ramp_down rc n0]
Real z_start = params[0];
Real ramp_up = params[1];
Real plateau = params[2];
Real ramp_down = params[3];
Real rc = params[4];
Real n0 = params[5];
Real n;
Real kp = PhysConst::q_e/PhysConst::c*sqrt( n0/(PhysConst::m_e*PhysConst::ep0) );
if ((z-z_start)>=0 and (z-z_start)<ramp_up ) {
n = (z-z_start)/ramp_up;
} else if ((z-z_start)>=ramp_up and (z-z_start)<ramp_up+plateau ) {
n = 1;
} else if ((z-z_start)>=ramp_up+plateau and (z-z_start)<ramp_up+plateau+ramp_down) {
n = 1-((z-z_start)-ramp_up-plateau)/ramp_down;
} else {
n = 0;
}
n *= n0*(1+4*(x*x+y*y)/(kp*kp*std::pow(rc,4)));
return n;
}
|