OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
laser.cpp
Go to the documentation of this file.
1 
14 // Standard libraries
15 #include <iostream>
16 #include <vector>
17 #include <valarray>
18 #include <complex>
19 #include <algorithm>
20 #include <cstdlib>
21 #include <cfloat>
22 
23 #include <math.h>
24 #include <map>
25 
26 // My libraries
27 #include "lib-array.h"
28 #include "lib-algorithms.h"
29 #include "exprtk.hpp"
30 
31 // Declerations
32 #include "input.h"
33 #include "state.h"
34 #include "formulary.h"
35 #include "setup.h"
36 #include "laser.h"
37 
38 
39 void Setup_Y::checkparse(parser_t& parser, std::string& expression_str, expression_t& expression);
40 void Setup_Y::parseprofile( const valarray<double>& grid, std::string& str_profile, valarray<double>& profile);
41 
42 //*******************************************************************
43 //*******************************************************************
44 // Inverse Bremsstrahlung operator
45 //*******************************************************************
46 //*******************************************************************
47 
48 //*******************************************************************
49 //--------------------------------------------------------------
50 IB_f00::IB_f00(valarray<double>& fslope, double pmax)
51 //--------------------------------------------------------------
52 // Constructor
53 //--------------------------------------------------------------
54  : fh(fslope),
55 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 // Velocity
57 // vr(Algorithms::MakeAxis(pmax/(2.0*fslope.size()-1.0),pmax,fslope.size())),
58  vr(Algorithms::MakeCAxis(0.0,pmax,fslope.size())),
59 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 // Constants for Integrals
61  U4(0.0, fslope.size()),
62  U4m1(0.0, fslope.size()),
63  U2(0.0, fslope.size()),
64  U2m1(0.0, fslope.size()),
65 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66  Inv_Uav6(0.0, fslope.size()),
67  gn(0.0, fslope.size()),
68  Qn(0.0, fslope.size()),
69  Pn(0.0, fslope.size())
70 {
71 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
72 
73  //classical electron radius
74  double re(2.8179402894e-13);
75  double kp(sqrt(4.0*M_PI*(Input::List().density_np)*re));
76  double omega_0(3.0e+10*2.0*M_PI/(1.0e-4*Input::List().lambda_0));
77  double omega_p(5.64 * 1.0e+4*sqrt(Input::List().density_np));
78 
79 
80  vw_coeff_cube = omega_p/omega_0 * kp*re;
81  Qn_coeff = kp*re/6.0;
82 
83 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84  // Determine vr
85  for (size_t i(0); i < vr.size(); ++i) {
86  vr[i] = vr[i] / (sqrt(1.0+vr[i]*vr[i]));
87  }
88 
89 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90  // Determine U4, U4m1, U2, U2m1, U1, U1m1
91  for (size_t i(1); i < U4.size(); ++i) {
92  U4[i] = 0.5 * pow(vr[i],4) * (vr[i]-vr[i-1]);
93  U4m1[i] = 0.5 * pow(vr[i-1],4) * (vr[i]-vr[i-1]);
94  U2[i] = 0.5 * vr[i]*vr[i] * (vr[i]-vr[i-1]);
95  U2m1[i] = 0.5 * vr[i-1]*vr[i-1] * (vr[i]-vr[i-1]);
96  }
97 
98  // Determine <vr>
99  Inv_Uav6_nm1 = pow( 2.0/vr[0], 6);
100  for (size_t i(0); i < vr.size(); ++i) {
101  Inv_Uav6[i] = pow( 2.0/(vr[i+1]+vr[i]), 6);
102  }
103 
104  // Determine Qn
105  Qn[0] = 1.0 / ((vr[0]*vr[0]*vr[1])/2.0);
106  for (size_t i(1); i < Qn.size()-1; ++i) {
107  Qn[i] = 1.0 / (vr[i]*vr[i]*(vr[i+1]-vr[i-1])/2.0);
108  }
109  // Determine Pn
110  Pnm1 = 2.0/(vr[0]*vr[0]);
111  for (size_t i(0); i < Pn.size()-1; ++i) {
112  Pn[i] = 1.0 / ((vr[i+1]-vr[i])/2.0*(vr[i+1]+vr[i]));
113  }
114 
115 }
116 //--------------------------------------------------------------
117 
118 //-------------------------------------------------------------------
119 valarray<double>& IB_f00::Getslope(const valarray<double>& fin, const double Zval ,const double vos) {
120 //-------------------------------------------------------------------
121 
122 //-------------------------------------------------------------------
123  double ZLn_ei;
124  double I4, I2;
125  double vw_cube, qn_c;
126  // double p0overp1_sq(Input::List().pr(0)/ Input::List().pr(1));
127  double p0overp1_sq(vr[1]/ vr[0]);
128  p0overp1_sq *= p0overp1_sq;
129  /*debug*/ // cout << p0overp1_sq<<"\n";
130 
131 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
132  double f00((fin[0]-fin[1]*p0overp1_sq)/(1.0-p0overp1_sq));
133 
134  double b0(0.0);
135  double nueff(0.0);
136  double xsi(0.0);
137  /*debug*/ // cout << "(p0/p1)^2 =" << p0overp1_sq << ", f[1] = " << fin[1] << ", f[0] = " << fin[0]<< ", f[-1] = " << f00 <<"\n";
138  /*debug*/ // cout << "P[-1] = " << Pnm1 << ", Inv_U_av-1 = " << Inv_Uav6_nm1 << "\n";
139 
140 
141 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
142 // Evaluate the integrals in a standard manner
143  I4 = 0;
144  for (int n(1); n < U4.size(); ++n) {
145  I4 += U4[n]*fin[n]+U4m1[n]*fin[n-1];
146  }
147 
148  I2 = 0;
149  for (int n(1); n < U2.size(); ++n) {
150  I2 += U2[n]*fin[n]+U2m1[n]*fin[n-1];
151  }
152 
153  ZLn_ei = (formulas.Zeta*Zval)*formulas.LOGei(4.0*M_PI*I2,I4/3.0/I2,formulas.Zeta*Zval);
154  vw_cube = vw_coeff_cube * ZLn_ei * 4.0*M_PI*I2;
155 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
156  xsi = 3.84+(142.59-65.48*vos/sqrt(I2))/(27.3*vos/sqrt(I2)+vos*vos/I2);
157  for (size_t i(0); i < gn.size(); ++i) { //last location initialized with "1"
158 
159 
160 
161 
162  gn[i] = Inv_Uav6[i]*vw_cube*vw_cube;
163  gn[i] = 1.0/(1.0+gn[i]);
164 
165 
166 
167  /*debug*/ // cout << "g["<< vr[i]<<"] = " << gn[i]<< "\n";
168  // // // // // // // // // // // // // // // // // // // //
169  // // // // // // // // // // // // // // // // // // // //
174  // b0 = (vos*vos+5.0*vr[i]*vr[i])/5.0*vr[i]*vr[i];
175  // nueff = 1.0/pow((vr[i+1]*vr[i])/2.0+vos*vos/xsi,3.0);
176  // gn[i] = 1.0 - b0*nueff*vw_cube/(1.0+b0*b0*nueff*vw_cube);
177 
178  //
179  //
180  //
181  //
182  }
183 
184  /*debug*/// cout << "vos = "<< vos << ", n/np = " << 4.0*M_PI*I2<< ", ZLOG = " << ZLn_ei <<", vw = "<< pow(vw_cube,1.0/3.0) << "\n";
185 
186  qn_c = Qn_coeff*vos*vos*ZLn_ei*4.0*M_PI*I2; // where 4.0*M_PI*I2 is ne/np
187 
188  fh[0] = qn_c * Qn[0] * ( Pn[0] * gn[0] * (fin[1]-fin[0])
189  - Pnm1 /(1.0 + Inv_Uav6_nm1*vw_cube*vw_cube) * (fin[0]-f00));
190  /*debug*/ // cout << "fh["<< vr[0]<<"] = " << fh[0]<< "\n";
191  for (size_t i(1); i < fh.size()-1; ++i) {
192  fh[i] = qn_c * Qn[i] * ( Pn[i] * gn[i] * (fin[i+1]-fin[i])
193  - Pn[i-1] * gn[i-1] * (fin[i]-fin[i-1]));
194  /*debug*/ // cout << "fh["<< vr[i]<<"] = " << fh[i]<< "\n";
195  }
196  return fh;
197 }
198 //-------------------------------------------------------------------
199 //*******************************************************************
200 
201 
202 //><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><-><
203 
204 //*******************************************************************
205 //*******************************************************************
206 // Runge Kutta loop for the electron-electron collisions
207 //*******************************************************************
208 //*******************************************************************
209 
210 
211 //*******************************************************************
212 //-------------------------------------------------------------------
213 RK4_IB::RK4_IB(valarray<double>& fin, double pmax, int tout_start)
214 //-------------------------------------------------------------------
215 // Constructor
216 //-------------------------------------------------------------------
217  :t(static_cast<double>(tout_start) *
218  Input::List().t_stop / Input::List().n_outsteps), // Initialize time = 0
219  Tout(t + Input::List().t_stop / Input::List().n_outsteps), // The next output time
220  fh(0.0,fin.size()),
221  f0(0.0,fin.size()),
222  f1(0.0,fin.size()), // 3 local "State" Variables
223  f(fin), // Initialize a reference to "State" Y
224  Inversebremsstrahlung(fh, pmax){ // Initialize "Actions"
225 
226 }
227 //--------------------------------------------------------------
228 
229 // Output time
230 double& RK4_IB::tout() {return Tout;}
231 
232 // Output time
233 size_t& RK4_IB::numh() {return num_h;}
234 
235 // Output time
236 double& RK4_IB::th() {return h;}
237 
238 // Real time of the simulation (can only be modified in the RK)
239 double& RK4_IB::time() {return t;}
240 
241 // Call Advection Actions
242 valarray<double>& RK4_IB::F(const valarray<double>& fin, const double vosc, const double Zval) {
243  return Inversebremsstrahlung.Getslope(fin,vosc,Zval);
244 }
245 
246 //--------------------------------------------------------------
247 RK4_IB& RK4_IB::advance(const double vosc, const double Zval){
248 //--------------------------------------------------------------
249 // Take a step using RK4
250 //--------------------------------------------------------------
251 
252 // Initialization
253  f0 = f; f1 = f;
254 
255 // Step 1
256  F(f1,vosc,Zval); // fh = F(f1)
257  fh *= (0.5*h); f1 += fh; // f1 = f1 + (h/2)*fh
258  fh *= (1.0/3.0); f += fh; // f = f + (h/6)*fh
259 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
260 
261 // Step 2
262  F(f1,vosc,Zval); f1 = f0; // fh = F(f1)
263  fh *= (0.5*h); f1 += fh; // f1 = f0 + (h/2)*fh
264  fh *= (2.0/3.0); f += fh; // f = f + (h/3)*fh
265 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
266 
267 // Step 3
268  F(f1,vosc,Zval); // fh = F(f1)
269  fh *= h; f0 += fh; // f1 = f0 + h*Yh
270  fh *= (1.0/3.0); f += fh; // f = f + (h/3)*fh
271 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
272 
273 // Step 4
274  F(f0,vosc,Zval); // fh = F(f0)
275  fh *= (h/6.0); f += fh; // f = f + (h/6)*Yh
276 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
277 
278  t += h;
279 
280  return *this;
281 
282 }
283 //-------------------------------------------------------------------
284 //*******************************************************************
285 
286 
287 
288 
289 
290 //**************************************************************
291 //**************************************************************
292 // Inverse Brehmsstrahlung heating
293 //**************************************************************
294 //**************************************************************
295 //--------------------------------------------------------------
296 // InverseBremsstrahlung::InverseBremsstrahlung(DistFunc1D& DFin, int tout_start, const valarray<double>& grid)
297 InverseBremsstrahlung::InverseBremsstrahlung(double pmax, size_t nump, size_t numx, int tout_start,const valarray<double>& grid) //DistFunc1D& DFin,
298 //--------------------------------------------------------------
299 // Constructor
300 //--------------------------------------------------------------
301  :t(static_cast<double>(tout_start) *
302  Input::List().t_stop / Input::List().n_outsteps), // Initialize time = tout_start * dt_out
303  tout(t + Input::List().t_stop / Input::List().n_outsteps), // Initialize tout = time + dt_out
304  fc(0.0, nump),
305  rk4_ib(fc, pmax, tout_start),
306  vr(Algorithms::MakeCAxis(0.0,pmax,nump)),
307 // vr(Algorithms::MakeAxis(pmax/(2.0*nump-1.0),pmax,nump)),
308 // ------------------------
309  InvBremsstrahlung(Input::List().inverse_bremsstrahlung),
310 // ------------------------
311  omega_0(3.0e+10*2.0*M_PI/(1.0e-4*Input::List().lambda_0)),
312  omega_p(5.64 * 1.0e+4*sqrt(Input::List().density_np)),
313  w0overwp(omega_0/omega_p),
314 // -----
315 // -----
316  U2(0.0, nump),
317  U2m1(0.0, nump),
318 // -----
319  vos(Input::List().lambda_0 * sqrt(7.3e-19*Input::List().I_0)),
320  IL_xprofile(numx)
321 
322 {
323 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
324 // The intensity profile is: I0(t)*e^(-2*(r/w0)^2) and absorption takes place over
325 // depth L so that I0_r(t) ~ I0(t)*e^(-((x-x0)/L)^2). The idea is that if you
326 // integrate over x you get I0(t)
327 
328  // using Inputdata::IN;
330  szx = Input::List().NxLocal[0]; // size of useful x axis
331 
332  for (size_t i(1); i < U2.size(); ++i) {
333  U2[i] = 0.5 * vr[i]*vr[i] * (vr[i]-vr[i-1]);
334  U2m1[i] = 0.5 * vr[i-1]*vr[i-1] * (vr[i]-vr[i-1]);
335  }
336 
337  // Construct the intensity profile map
338  Setup_Y::parseprofile(grid, Input::List().intensity_profile_str, IL_xprofile);
339  if ( abs(InvBremsstrahlung) > 1 ) {
340  InvBremsstrahlung = 0;
341  }
342 
343 }
344 //--------------------------------------------------------------
345 
346 //--------------------------------------------------------------
348 //--------------------------------------------------------------
349 
350 //--------------------------------------------------------------
351 void InverseBremsstrahlung::loop(SHarmonic1D& f0, valarray<double>& Zarray, const double& tnew){
352 //--------------------------------------------------------------
353 // Calculate the effect of the laser source
354 //--------------------------------------------------------------
355 
356  //cout << "omega_0 = " << omega_0 <<"\n";
357  //cout << "omega_p = " << omega_p <<"\n";
358  //cout << "np/nc = " << pow(omega_p / omega_0,2) <<"\n";
359  // cout << "vos = " << vos <<"\n";
360  // cout << "polarization = " << POL() <<"\n";
361 
362  // double dt = tnew -t;
363  // double Envelope_Value = t_Profile(tnew)/dt; // This is Envelope(t)*dt/dt = Envelope(t)
364  /*debug*/ // cout << "vos("<<tnew<<") = " << Envelope_Value << "\n";
365 
366  // debug: cout << "Envelope = " << Envelope_Value << /*", Carrier Signal = " << Carrier_Signal(tnew) <<*/"\n";
367 
368  /*switch (POL()) {
369  case 1: {
370  for (size_t i(0); i < Y.SH(0,0).numx(); ++i){
371  for (size_t j(0); j < Y.SH(0,0).numy(); ++j){
372  LaserFields.Ex()(i,j) = vos * IL_xprofile[i] * IL_yprofile[j]
373  * Envelope_Value * Carrier_Signal(tnew-xaxis(i));
374  }
375  }
376  break;
377  }
378  case 2: {
379  for (size_t i(0); i < Y.SH(0,0).numx(); ++i){
380  for (size_t j(0); j < Y.SH(0,0).numy(); ++j){
381  LaserFields.Ey()(i,j) = vos * IL_xprofile[i] * IL_yprofile[j]
382  * Envelope_Value * Carrier_Signal(tnew-xaxis(i));
383  }
384  }
385  break;
386  }
387  case 3: {
388  for (size_t i(0); i < Y.SH(0,0).numx(); ++i){
389  for (size_t j(0); j < Y.SH(0,0).numy(); ++j){
390  LaserFields.Ez()(i,j) = vos * IL_xprofile[i] * IL_yprofile[j]
391  * Envelope_Value * Carrier_Signal(tnew-xaxis(i));
392  }
393  }
394  break;
395  }
396  default:
397  break;
398  }*/
399 
400  // Array2D< double > Vos(Y.SH(0,0).numx(),Y.SH(0,0).numy());
401  valarray< double > Vos(0.0,f0.numx());//,Y.SH(0,0).numy());
402 
403  // for (size_t iy(0); iy < Y.SH(0,0).numy(); ++iy){
404  for (size_t ix(0); ix < f0.numx(); ++ix){
405  Vos[ix] = vos * sqrt(IL_xprofile[ix]);// * IL_yprofile[iy]);
406  }
407  // }
408 
409 // Initialization
410  rk4_ib.tout() = tnew;
411  rk4_ib.numh() = static_cast<size_t>(static_cast<int>((tnew-t)/(Input::List().smaller_dt)))+1;
412  rk4_ib.th() = (tnew-t)/static_cast<double>(rk4_ib.numh());
413 
414 
415  // for (size_t iy(0); iy < szy-2*Nbc; ++iy){
416  for (size_t ix(0); ix < szx-2*Nbc; ++ix){
417 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
418  // Copy data for a specific location in space to valarray
419  for (size_t ip(0); ip < fc.size(); ++ip){
420  // fc[ip] = (Y.SH(0,0)(ip,ix+Nbc,iy+Nbc)).real();
421  fc[ip] = f0(ip,ix+Nbc).real();
422  }
423  double I2_before(0.0);
424  for (int n(1); n < U2.size(); ++n) {
425  I2_before+= U2[n]*fc[n]+U2m1[n]*fc[n-1];
426  }
427 
428  // Time loop: Update the valarray
429  rk4_ib.time() = t;
430  for (size_t h_step(0); h_step < rk4_ib.numh(); ++h_step){
431  rk4_ib.advance(Vos[ix+Nbc], Zarray[ix+Nbc]);//,iy+Nbc));
432  /*debug*/ // cout << "Vos("<<ix<<","<<iy<<") = "<< Vos(ix+Nbc,iy+Nbc) << "\n";
433  }
434  double I2_after(0.0);
435  for (int n(1); n < U2.size(); ++n) {
436  I2_after += U2[n]*fc[n]+U2m1[n]*fc[n-1];
437  }
438  fc *= I2_before/I2_after;
439  // Return updated data to the harmonic
440  for (int ip(0); ip < fc.size(); ++ip){
441  // Y.SH(0,0)(ip,ix+Nbc,iy+Nbc) = fc[ip];
442  f0(ip,ix+Nbc) = fc[ip];
443  }
444 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
445  }
446  // }
447  t = tnew;
448 
449 }
450 //--------------------------------------------------------------
451 
452 //--------------------------------------------------------------
453 // double InverseBremsstrahlung::t_Profile(const double& t2){
454 // //--------------------------------------------------------------
455 // // Calculate the effect of the laser profile
456 // //--------------------------------------------------------------
457 // double t;
458 
459 // if ( t2 < rise_time ) {
460 // t = t2 / rise_time;
461 // if ( polynomial_Ivst ) {
462 // return (10*pow(t,3)-15*pow(t,4)+6*pow(t,5))*(t2-t);
463 // }
464 // if ( linear_Ivst ) {
465 // return t * (t2-t);
466 // }
467 // return 0;
468 // } else {
469 // if ( t2 < rise_time + flat_time) {
470 // return t2-t;
471 // } else {
472 // if ( t2 < rise_time + flat_time + fall_time) {
473 // t = (rise_time + flat_time + fall_time - t2) / fall_time;
474 // if ( polynomial_Ivst ) {
475 // return (10*pow(t,3)-15*pow(t,4)+6*pow(t,5))*(t2-t);
476 // }
477 // if ( linear_Ivst ) {
478 // return t *(t2-t);
479 // }
480 // return 0;
481 // }
482 // else return -1.0;
483 // }
484 // }
485 // }
486 //--------------------------------------------------------------
487 //**************************************************************
488 
489 
Algorithms
valarray< double > Pn
Definition: laser.h:33
Plasma Formulary and Units - Declarations.
valarray< double > & F(const valarray< double > &fin, const double vosc, const double Zval)
Definition: laser.cpp:242
valarray< double > fc
Definition: laser.h:127
const double vos
Definition: laser.h:154
valarray< double > f1
Definition: laser.h:85
valarray< double > f0
Definition: laser.h:85
std::vector< size_t > NxLocal
Definition: input.h:168
double smaller_dt
Definition: input.h:77
Input reader - Declarations.
double Qn_coeff
Definition: laser.h:39
exprtk::parser< double > parser_t
Definition: setup.h:57
Underlying data structures.
size_t num_h
Definition: laser.h:91
exprtk::expression< double > expression_t
Definition: setup.h:56
double Zeta
Definition: formulary.h:104
Laser source - Declarations.
valarray< double > vr
Definition: laser.h:133
double vw_coeff_cube
Definition: laser.h:39
double Tout
Definition: laser.h:92
valarray< double > Inv_Uav6
Definition: laser.h:33
IB_f00(valarray< double > &fslope, double pmax)
Definition: laser.cpp:50
valarray< double > & f
Definition: laser.h:86
double & time()
Definition: laser.cpp:239
double h
Definition: laser.h:92
double & tout()
Definition: laser.cpp:230
double LOGei(double ne, double Te, double Z)
Definition: formulary.cpp:249
RK4_IB & advance(const double vosc, const double Zval)
Definition: laser.cpp:247
RK4_IB(valarray< double > &fin, double pmax, int tout_start)
Definition: laser.cpp:213
valarray< double > gn
Definition: laser.h:33
valarray< double > U2
Definition: laser.h:111
size_t numx() const
Definition: state.h:72
A 1D Spherical Harmonic.
Definition: state.h:57
IB_f00 Inversebremsstrahlung
Definition: laser.h:89
valarray< double > U2
Definition: laser.h:32
valarray< double > & Getslope(const valarray< double > &fin, const double vos, const double Zval)
Definition: laser.cpp:119
double & th()
Definition: laser.cpp:236
double Inv_Uav6_nm1
Definition: laser.h:40
int IBSOURCE() const
Definition: laser.cpp:347
valarray< double > vr
Definition: laser.h:29
Grid Setup - Declaration.
valarray< double > U4m1
Definition: laser.h:32
void loop(SHarmonic1D &f0, valarray< double > &Zarray, const double &tnew)
Definition: laser.cpp:351
valarray< double > U2m1
Definition: laser.h:32
Formulary formulas
Definition: laser.h:42
Fields, Distributions, Harmonics, States - Declarations.
valarray< double > U4
Definition: laser.h:32
valarray< T > MakeCAxis(const T min, const T max, const size_t N)
Input_List & List()
Definition: input.cpp:1585
double Pnm1
Definition: laser.h:40
InverseBremsstrahlung(double pmax, size_t nump, size_t numx, int tout_start, const valarray< double > &grid)
Definition: laser.cpp:297
valarray< double > U2m1
Definition: laser.h:111
double t
Definition: laser.h:92
valarray< double > & fh
Definition: laser.h:26
size_t & numh()
Definition: laser.cpp:233
void parseprofile(const valarray< double > &grid, std::string &str_profile, valarray< double > &profile)
{ function_description }
Definition: setup.cpp:410
valarray< double > Qn
Definition: laser.h:33
Definition: input.h:18
int BoundaryCells
Definition: input.h:50
valarray< double > fh
Definition: laser.h:85
void checkparse(parser_t &parser, std::string &expression_str, expression_t &expression)
Definition: setup.cpp:375
Definition: laser.h:63
valarray< double > IL_xprofile
Definition: laser.h:147