VERB_code_2.2  2
 All Classes Namespaces Files Functions Variables Typedefs Macros Pages
DiffusionCoefficient.h
Go to the documentation of this file.
1 /**
2  * Diffusion coefficients calculation, loading, activating, scaling etc. Header file.
3  *
4  * \file DiffusionCoefficient.h
5  *
6  * \author Developed by Yuri Shprits
7  */
8 
9 #ifndef DiffusionCoefficient_H
10 #define DiffusionCoefficient_H
11 
12 #include <string>
13 #include <vector>
14 #include "../Matrix/Matrix.h"
15 #include "../Grid/Grid.h"
16 
17 using namespace std;
18 
19 /** Class DiffusionCoefficient holds diffusion coefficient matrix and routines to load and calculate it.
20  * It gets DiffusionCoefficientParameters_structure as an input with all waves parameters.
21  */
23 public:
24  Matrix3D<double> arr; // array of diffusion coefficients
25 
26  /// flag, indicated that the initialization was passed
28 
29  // Parameters
31 
32  // Variables
33 
34  /// Type of the diffusion coefficient: Daa, Dpp, Dpa etc... Described in types.h file as an enumeration.
35  string type;
36 
37  /// flag, if is enabled right now
38  bool is_active;
39 
40  /// flag, if scale is applyable
41  bool useScale;
42 
43  /// Function, that scale diffusion coefficients
44  double Scale(double Kp);
45 
46  /// Create diffusion coefficients
47  void Create_Dxx(DxxParameters_structure DxxParameters, Grid &grid);
48 
49  /// Loads diffusion coefficients
50  /// Call other functions depends on filetupe - file type
51  /// \param &L - Grid element - L
52  /// \param &pc - Grid element - pc
53  /// \param &alpha - One more grid element - alpha
54  /// \param D_filename - filename to load diffusion coefficient from
55  /// \param filetype = IFT_GRID grid type inside the file (yes, it can be different)
56  bool LoadDiffusionCoefficient(GridElement &L, GridElement &pc, GridElement &alpha, string D_filename, string filetype = "IFT_GRID");
57 
58  /// Load Dxx from the file with Grid
59  bool LoadDiffusionCoefficientFromFileWithGrid(GridElement &L, GridElement &pc, GridElement &alpha, string D_filename, string gridOrder = "IFT_GRID_LPA");
60 
61  /// Load Dxx from file without grid
62  bool LoadDiffusionCoefficientFromPlaneFile(GridElement &L, GridElement &pc, GridElement &alpha, string D_filename);
63 
64  /// function calculare Dxx
65  void Calculate(GridElement &L, GridElement &epc, GridElement &alpha, DxxParameters_structure DxxParameters);
66 
67  /// Making DLL
68  void MakeDLL(double Kp);
69  /// Making DLL
70  void MakeDLL(GridElement &L, GridElement &pc, GridElement &alpha, double Kp, string DLLType = "DLLT_B");
71  /// Making DLL
72  void MakeDLL_B(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
73  /// Making DLL
74  void MakeDLL_FAKE(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
75  /// Making DLL
76  void MakeDLL_BE_res(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
77  /// Making DLL
78  void MakeDLL_BE(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
79  /// Making DLL
80  void MakeDLL100(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
81  /// Making DLL_M
82  void MakeDLL_Ozeke(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
83  /// Making DLL_ME
84  void MakeDLL_Ozeke_ME(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
85 
86 };
87 
88 /**
89  * It has DiffusionCoefficient class as a parent class, so it stores there summation of all the coefficients to use in diffusion.
90  * So, it is DiffusionCoefficient in common cense.
91  * \todo change DiffusionCoefficientGroup name to the DiffusionCoefficient name and DiffusionCoefficient name to something else.
92  */
93  /// Holds list of instances of DiffusionCoefficient class of same type (like Daa, Dpp, etc), but produced by different waves (Daa_chorus, Daa_EMIC, etc).
95 private:
96  /// flag, indicated that the initialization was passed
97  //bool DxxGroup_initialized;
98 public:
100  // variables
101 
102  /// List of diffusion coefficients in that group. Actually, it's a list of waves used in the diffusion coefficient that this group represent.
103  vector <DiffusionCoefficient> DxxList;
104 
105  /// Function activate (enable/disable) diffusion coefficients according time events and scale diffusion coefficients.
106  /// It would be cool to call it "Actualize", but unfortunatelly it would be too complicated
107  /// \param time - time
108  /// \param Kp - Kp
109  bool ActivateAndScale(double time, double Kp);
110 
111  // constructors
113  //DxxGroup_initialized = false;
114  //*this = 0;
115  }
116 
117 };
118 
119 // Calculations...
120  double Dxx_ba(double L, double epc, double alpha, double int_Dxx_loc(double lambda, DxxParameters_structure DxxParameters), DxxParameters_structure DxxParameters); //
121  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);
122 
123  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);
124  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);
125  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);
126 
127  double int_Daa_loc(double lambda, DxxParameters_structure DxxParameters);
128  double int_Dpp_loc(double lambda, DxxParameters_structure DxxParameters);
129  double int_Dpa_loc(double lambda, DxxParameters_structure DxxParameters);
130 
131  // various functions
132 // double B(double lambda, double L);
133  double f1(double lambda);
134 
135  double Alpha_ne(double pangle, double lambda, double L);
136  double func_tmp (double x, double Alpha);
137 
138  double F_cap(double x, double y, double b, double s, double epsilon, DxxParameters_structure DxxParameters);
139  //std::vector<double> rrouts(double Omega_e_eq, double Omega_e, double yida1, double yida2, double yida3, double epsilon, double beta, double mu, double alpha_star, double a, DiffusionCoefficientParameters_structure DxxParameters_structure);
140 
141  /// routs finding routine
142  std::vector<double> rrouts(double x_1, double x_2, double yida1, double yida2, double yida3, double epsilon, double beta, double mu, double alpha_star, double a, DxxParameters_structure DxxParameters);
143 
144  double Df (double L, double Kp) ;
145 
146  double Df_Ozeke (double L, double Kp) ;
147 
148  double Df_Ozeke_E (double L, double Kp) ;
149 
153  Parameters_structure &parameters, Grid &radialDiffusionGrid, Grid &localDiffusionsGrid);
154 
155  /**
156  * \brief Function used in main() to print header in output file. Header needs to unserstand the output file.
157  *
158  * Writing headers for all diffusion coefficients scaling coefficients
159  * \param output1D - output stream to file
160  * \param Daa - Pitch-angle D. all other parameters - is a type of diffusion coefficients (DiffusionCoefficientsGroup). To file - Dxx.DxxList[Dxx_it].arr.name
161  * \param Dpcpc - Energy D
162  * \param Dpca - Mix pitch-angle and energy.
163  * \param DaaLpp - ???
164  * \param DpcpcLpp - ???
165  * \param DpcaLpp - ???
166  */
167  void Output1DHeaders(ofstream &output1D,
170 
171  /**
172  * \brief Function used in main() to print values of diffusion coefficients in output file.
173  *
174  * Write information about 1d variables into the file with 1d variables
175  * \param output1D - output stream to file
176  * \param Daa - Pitch-angle D. all other parameters - is a type of diffusion coefficients (DiffusionCoefficientsGroup). To file - Dxx.DxxList[Dxx_it].arr.name
177  * \param Dpcpc - Energy D
178  * \param Dpca - Mix pitch-angle and energy.
179  * \param DaaLpp - ???
180  * \param DpcpcLpp - ???
181  * \param DpcaLpp - ???
182  * \param time - current simulation time
183  * \param parameters - (Parameters_structure) structure with all parameters from ini files and loaded/calcaulated parameters such as Kp and UpperBoubdary?
184  * \param iteration - Number of current iteration of the simulation
185  */
186  void Output1DValues(ofstream &output1D,
189  double &time, Parameters_structure &parameters, int iteration);
190 
191 
192 #endif
193 
194