VERB_code_2.3
DiffusionCoefficient.cpp File Reference
#include "DiffusionCoefficient.h"
#include <math.h>
#include <vector>
#include "rroots.h"
#include "../VariousFunctions/bisection.h"
#include "../Logging/Output.h"
#include "../Exceptions/error.h"
#include <ctime>

Go to the source code of this file.

Macros

#define double_zero   1.e-21
 
#define min_Dxx   1.e-21
 

Functions

double Alpha_ne (double pangle, double lambda, double L)
 
double f1 (double lambda)
 
double B (double lambda, double L)
 
double func_tmp (double x, double Alpha)
 
double F_cap (double x, double y, double b, double s, double epsilon, DxxParameters_structure DxxParameters)
 
double F_cap2 (double x, double y, double a, double beta, double mu, double s, double epsilon, double Alpha_star, DxxParameters_structure DxxParameters)
 
double quad1 (double(*func)(double lambda, DxxParameters_structure DxxParameters), double a, double b, int M, DxxParameters_structure DxxParameters)
 
double Dxx_ba (double L1, double EMeV, double Alpha, double int_Dxx_loc(double lambda, DxxParameters_structure DxxParameters), DxxParameters_structure DxxParameters)
 
double int_Daa_loc (double lambda, DxxParameters_structure DxxParameters)
 
double int_Dpp_loc (double lambda, DxxParameters_structure DxxParameters)
 
double int_Dpa_loc (double lambda, DxxParameters_structure DxxParameters)
 
double Dxx_local (double lambda, double Dxx_root(double Omega_e, double x, double mu, double su, double y, double beta, double a, double b, double Alpha_star, double s, double epsilon, double d_x, double x_m, double R, DxxParameters_structure DxxParameters), DxxParameters_structure DxxParameters)
 
double Daa_root (double Omega_e, double x, double mu, double su, double y, double beta, double a, double b, double Alpha_star, double s, double epsilon, double d_x, double x_m, double R, DxxParameters_structure DxxParameters)
 
double Dpa_root (double Omega_e, double x, double mu, double su, double y, double beta, double a, double b, double Alpha_star, double s, double epsilon, double d_x, double x_m, double R, DxxParameters_structure DxxParameters)
 
double Dpp_root (double Omega_e, double x, double mu, double su, double y, double beta, double a, double b, double Alpha_star, double s, double epsilon, double d_x, double x_m, double R, DxxParameters_structure DxxParameters)
 
std::vector< double > rrouts (double x_1, double x_2, double eta1, double eta2, double eta3, double epsilon, double beta, double mu, double Alpha_star, double a, DxxParameters_structure DxxParameters)
 routs finding routine More...
 
double Df (double L, double Kp)
 
double Df_Ozeke (double L, double Kp)
 
double Df_Ozeke_E (double L, double Kp)
 
void CreateAllDiffusionCoefficients (DiffusionCoefficient &DLL, DiffusionCoefficientsGroup &Daa, DiffusionCoefficientsGroup &Dpcpc, DiffusionCoefficientsGroup &Dpca, DiffusionCoefficientsGroup &DaaLpp, DiffusionCoefficientsGroup &DpcpcLpp, DiffusionCoefficientsGroup &DpcaLpp, Parameters_structure &parameters, Grid &radialDiffusionGrid, Grid &localDiffusionsGrid)
 
void Output1DHeaders (ofstream &output1D, DiffusionCoefficientsGroup &Daa, DiffusionCoefficientsGroup &Dpcpc, DiffusionCoefficientsGroup &Dpca, DiffusionCoefficientsGroup &DaaLpp, DiffusionCoefficientsGroup &DpcpcLpp, DiffusionCoefficientsGroup &DpcaLpp)
 Function used in main() to print header in output file. Header needs to understand the output file. More...
 
void Output1DValues (ofstream &output1D, DiffusionCoefficientsGroup &Daa, DiffusionCoefficientsGroup &Dpcpc, DiffusionCoefficientsGroup &Dpca, DiffusionCoefficientsGroup &DaaLpp, DiffusionCoefficientsGroup &DpcpcLpp, DiffusionCoefficientsGroup &DpcaLpp, double &time, Parameters_structure &parameters, int iteration)
 Function used in main() to print values of diffusion coefficients in output file. More...
 

Detailed Description

Diffusion coefficients calculation, loading, activating, scaling etc code

Todo:
comment this file if you understand the functions and math
Author
Developed by Yuri Shprits

Definition in file DiffusionCoefficient.cpp.

Function Documentation

double Alpha_ne ( double  pangle,
double  lambda,
double  L 
)

Return inverse of calculated parameters(?)

Parameters
pangle- pitch angle
lambda- lambda
L- L value
Todo:
L is not used in this function. delete it or use it.

\( \sin^{-1}( \sqrt{ f1(\lambda)} * \sin(pangle) ) \) where f1 is f1()

Definition at line 538 of file DiffusionCoefficient.cpp.

double B ( double  lambda,
double  L 
)

\( \frac{0.311 * f1(\lambda)}{L^3} \) where f1 is f1()

Definition at line 554 of file DiffusionCoefficient.cpp.

void CreateAllDiffusionCoefficients ( DiffusionCoefficient DLL,
DiffusionCoefficientsGroup Daa,
DiffusionCoefficientsGroup Dpcpc,
DiffusionCoefficientsGroup Dpca,
DiffusionCoefficientsGroup DaaLpp,
DiffusionCoefficientsGroup DpcpcLpp,
DiffusionCoefficientsGroup DpcaLpp,
Parameters_structure parameters,
Grid radialDiffusionGrid,
Grid localDiffusionsGrid 
)

Create all diffusion coefficients based on parameters

Parameters
&DLL- Diffusion coefficients DLL
&Daa- see Main.cpp for diffusion coefficient definitions
&Dpcpc
&Dpca
&DaaLpp
&DpcpcLpp
&DpcaLpp
&parameters- parameters structure
&radialDiffusionGrid- grid to copy from
&localDiffusionsGrid- grid to copy coefficients into

Definition at line 1005 of file DiffusionCoefficient.cpp.

double Daa_root ( double  Omega_e,
double  x,
double  mu,
double  su,
double  y,
double  beta,
double  a,
double  b,
double  Alpha_star,
double  s,
double  epsilon,
double  d_x,
double  x_m,
double  R,
DxxParameters_structure  DxxParameters 
)

Obtain roots for Daa coefficient

Returns
\( \frac{\pi}{2} * \frac{1}{\nu} * \Omega_e * \frac{1}{(EMeV + 1)^2} * \frac{R * (1 - \frac{x * \mu}{(y * \beta)})^2 * \left|fcap\right|} { (d_x * \left| \beta * \mu - fcap \right|} * e^{-(\frac{x - x_m}{d_x})^2} \)

where fcap = F_cap2()

Definition at line 830 of file DiffusionCoefficient.cpp.

double Df ( double  L,
double  Kp 
)

Radial Diffusion coefficient computed following [Brautigam and Albet , 2000]

Returns
\( 10^{0.506*Kp - 9.325} * L^{10} \)

Definition at line 952 of file DiffusionCoefficient.cpp.

double Df_Ozeke ( double  L,
double  Kp 
)

Radial Diffusion coefficient computed Ozeke, Ozeke et al, 2013 Analytic Expressions for ULL Wave Radiation Belt Radial Diffusion Coefficient // (before publishing) DLL_B \( days^{-1} \)

Returns
\( 6.62*10^{-13} * L^8 * 10^{L^2 * -0.0327 + L * 0.625 - Kp^2 * 0.0108 + Kp * 0.499} \)

Definition at line 963 of file DiffusionCoefficient.cpp.

double Df_Ozeke_E ( double  L,
double  Kp 
)

DLL_E

Returns
\( 2.16*10^{-8} * L^6 * 10^{0.217 * L + 0.461 * Kp} \)

Definition at line 970 of file DiffusionCoefficient.cpp.

double Dpa_root ( double  Omega_e,
double  x,
double  mu,
double  su,
double  y,
double  beta,
double  a,
double  b,
double  Alpha_star,
double  s,
double  epsilon,
double  d_x,
double  x_m,
double  R,
DxxParameters_structure  DxxParameters 
)

Obtain roots for Dpa coefficient

Returns
\( -\frac{\pi}{2} * \frac{1}{\nu} * \Omega_e * \frac{su}{\beta} * \frac{1}{(EMeV + 1)^2} * \frac{R * \frac{x}{y} * (1 - \frac{x * \mu}{y * \beta}) * \left|fcap\right|} { d_x * \left| \beta * \mu - fcap \right|} * e^{-(\frac{x - x_m}{d_x})^2} \)

where fcap = F_cap2()

Definition at line 848 of file DiffusionCoefficient.cpp.

double Dpp_root ( double  Omega_e,
double  x,
double  mu,
double  su,
double  y,
double  beta,
double  a,
double  b,
double  Alpha_star,
double  s,
double  epsilon,
double  d_x,
double  x_m,
double  R,
DxxParameters_structure  DxxParameters 
)

Obtain roots for Dpp coefficient

Returns
\( \frac{\pi}{2} * \frac{1}{\nu} * \frac{1}{\beta^2} * (1 - \mu^2) * \Omega_e * \frac{1}{(EMeV + 1)^2} * \frac{R * (\frac{x}{y})^2 * \left|fcap\right|} { d_x * \left| \beta * \mu - fcap \right|} * e^{-(\frac{x - x_m}{d_x})^2} \)

where fcap = F_cap2()

Definition at line 866 of file DiffusionCoefficient.cpp.

double Dxx_ba ( double  L1,
double  EMeV,
double  Alpha,
double   int_Dxx_locdouble lambda, DxxParameters_structure DxxParameters,
DxxParameters_structure  DxxParameters 
)

Return derivative of func_tmp

func_tmp = \( x^6+(3*\sin^4(\alpha)) * x-4*\sin^4(\alpha) \)

Todo:
L and EMeV aren't used again in this function. Do we need it?

Definition at line 623 of file DiffusionCoefficient.cpp.

double Dxx_local ( double  lambda,
double   Dxx_rootdouble Omega_e, double x, double mu, double su, double y, double beta, double a, double b, double Alpha_star, double s, double epsilon, double d_x, double x_m, double R, DxxParameters_structure DxxParameters,
DxxParameters_structure  DxxParameters 
)

Obtain local derivative for a certain diffusion coefficient

Parameters
lambda- lambda
Dxx_root()- function parameter that returns partial derivative of a diffusion coefficient
DxxParameters- Dxx parameters struct to obtain grid element parameters
Todo:
Get someone with physics background to document the Greek letter variables.

Definition at line 690 of file DiffusionCoefficient.cpp.

double f1 ( double  lambda)

\( \sqrt{4.0 - 3.0 * \frac {\cos^2(\lambda)}{\cos^6(\lambda)}} \)

Definition at line 546 of file DiffusionCoefficient.cpp.

double F_cap ( double  x,
double  y,
double  b,
double  s,
double  epsilon,
DxxParameters_structure  DxxParameters 
)

\( y*((x-s)^2)* \frac{(x+s*\epsilon)^2}{x*g} \) where g is polynomial sequence derived from b, s, and epsilon

Todo:
Function is never called anywhere. Most likely replaced by F_cap2. Should be removed.

Definition at line 571 of file DiffusionCoefficient.cpp.

double F_cap2 ( double  x,
double  y,
double  a,
double  beta,
double  mu,
double  s,
double  epsilon,
double  Alpha_star,
DxxParameters_structure  DxxParameters 
)

returns upper to lower ratio, using eta1, eta2, and eta3 from DxxParameters

Returns
\( \frac{up}{down} \)

where up = \( \frac{2(x+a)}{\beta * \mu} \) and

where down = \( 2x - (\frac{1}{\alpha^*} * \frac{1}{x-s}) + \frac{\eta1*\epsilon}{x + s*\epsilon} + \frac{\eta2*\epsilon}{4x + s*\epsilon} + \frac{\eta3*\epsilon}{16x + s*\epsilon} + (\frac{x}{\alpha^*} * \frac{1}{(x-s)^2}) + \frac{\eta1*\epsilon}{(x+s*\epsilon)^2} + \frac{4*\epsilon*\eta2}{(4x+s*\epsilon)^2} + \frac{16*\epsilon*\eta3}{(16x+s*\epsilon)^2} \)

Definition at line 590 of file DiffusionCoefficient.cpp.

double func_tmp ( double  x,
double  Alpha 
)

\( x^6 + ((3x)\sin^4(\alpha) - 4\sin^4(\alpha)) \)

Definition at line 561 of file DiffusionCoefficient.cpp.

double int_Daa_loc ( double  lambda,
DxxParameters_structure  DxxParameters 
)

calls function Dxx_local() to get Daa

returns \( Daa * \cos(Alpha\_ne(\alpha, \lambda, L)) * \frac{\cos^7(\lambda)}{\cos^2(\alpha)} \)

where Alpha_ne is Alpha_ne()

Definition at line 646 of file DiffusionCoefficient.cpp.

double int_Dpa_loc ( double  lambda,
DxxParameters_structure  DxxParameters 
)

calls function Dxx_local() to get Dpa

returns \( Dpa * \frac{ \sin(Alpha\_ne(\alpha, \lambda, L)) * \cos^7(\lambda) }{\cos(\alpha) * \sin(\alpha)} \)

where Alpha_ne is Alpha_ne()

Definition at line 674 of file DiffusionCoefficient.cpp.

double int_Dpp_loc ( double  lambda,
DxxParameters_structure  DxxParameters 
)

calls function Dxx_local() to get Dpp

returns \( Dpp * \frac{ \cos(\lambda) * \sqrt{1 + 3*\sin^2(\lambda)} }{\cos(Alpha\_ne(\alpha, \lambda, L))} \)

where Alpha_ne is Alpha_ne()

Definition at line 660 of file DiffusionCoefficient.cpp.

void Output1DHeaders ( ofstream &  output1D,
DiffusionCoefficientsGroup Daa,
DiffusionCoefficientsGroup Dpcpc,
DiffusionCoefficientsGroup Dpca,
DiffusionCoefficientsGroup DaaLpp,
DiffusionCoefficientsGroup DpcpcLpp,
DiffusionCoefficientsGroup DpcaLpp 
)

Function used in main() to print header in output file. Header needs to understand the output file.

Writing headers for all diffusion coefficients scaling coefficients

Parameters
output1D- output stream to file
Daa- Pitch-angle D. all other parameters - is a type of diffusion coefficients (DiffusionCoefficientsGroup). To file - Dxx.DxxList[Dxx_it].arr.name
Dpcpc- Energy D
Dpca- Mix pitch-angle and energy.
DaaLpp- Pitch-angle with plasma pause
DpcpcLpp- Energy with plasma pause
DpcaLpp- Pitch-angle and energy with plasma pause

Definition at line 1126 of file DiffusionCoefficient.cpp.

void Output1DValues ( ofstream &  output1D,
DiffusionCoefficientsGroup Daa,
DiffusionCoefficientsGroup Dpcpc,
DiffusionCoefficientsGroup Dpca,
DiffusionCoefficientsGroup DaaLpp,
DiffusionCoefficientsGroup DpcpcLpp,
DiffusionCoefficientsGroup DpcaLpp,
double &  time,
Parameters_structure parameters,
int  iteration 
)

Function used in main() to print values of diffusion coefficients in output file.

Write information about 1d variables into the file with 1d variables

Parameters
output1D- output stream to file
Daa- Pitch-angle D. all other parameters - is a type of diffusion coefficients (DiffusionCoefficientsGroup). To file - Dxx.DxxList[Dxx_it].arr.name
Dpcpc- Energy D
Dpca- Mix pitch-angle and energy.
DaaLpp- Pitch-angle with plasma pause
DpcpcLpp- Energy with plasma pause
DpcaLpp- Pitch-angle and energy with plasma pause
time- current simulation time
parameters- (Parameters_structure) structure with all parameters from ini files and loaded/calcaulated parameters such as Kp and UpperBoundary?
iteration- Number of current iteration of the simulation

Definition at line 1159 of file DiffusionCoefficient.cpp.

double quad1 ( double(*)(double lambda, DxxParameters_structure DxxParameters)  func,
double  a,
double  b,
int  M,
DxxParameters_structure  DxxParameters 
)

\( h * \frac{func(a, DxxParameters) + func(b, DxxParameters)}{2} + h*s \)

returns quad integral of func

Definition at line 602 of file DiffusionCoefficient.cpp.

std::vector<double> rrouts ( double  x_1,
double  x_2,
double  eta1,
double  eta2,
double  eta3,
double  epsilon,
double  beta,
double  mu,
double  Alpha_star,
double  a,
DxxParameters_structure  DxxParameters 
)

routs finding routine

rrouts implements roots() and get_quads() from rroots.cpp file to obtain real roots of polynomial

Definition at line 879 of file DiffusionCoefficient.cpp.