00001
00009 #ifndef DiffusionCoefficient_H
00010 #define DiffusionCoefficient_H
00011
00012 #include <string>
00013 #include <vector>
00014 #include "../Matrix/Matrix.h"
00015 #include "../Grid/Grid.h"
00016
00017 using namespace std;
00018
00022 class DiffusionCoefficient : public Matrix3D<double> {
00024 bool initialized;
00025 public:
00026
00027 DiffusionCoefficientParamStructure Dxx_parameters;
00028
00029
00030
00032 string type;
00033
00035 bool is_active;
00036
00038 bool useScale;
00039
00040
00042 double Scale(double Kp);
00043
00044
00045
00046
00053 DiffusionCoefficient(int L_size, int pc_size, int alpha_size) : Matrix3D<double>(L_size, pc_size, alpha_size) { initialized = false; }
00054
00057 DiffusionCoefficient(Grid &grid);
00058
00062 DiffusionCoefficient(Grid &grid, DiffusionCoefficientParamStructure DxxParamStructure);
00063
00068 void AllocateMemory(int L_size, int pc_size, int alpha_size);
00069
00073 void Get(Grid &grid, DiffusionCoefficientParamStructure DxxParamStructure);
00074
00082 bool LoadDiffusionCoefficient(GridElement &L, GridElement &pc, GridElement &alpha, string D_filename, string filetype = "IFT_GRID");
00083
00085 bool LoadDiffusionCoefficientFromFileWithGrid(GridElement &L, GridElement &pc, GridElement &alpha, string D_filename, string gridOrder = "IFT_GRID_LPA");
00086
00088 bool LoadDiffusionCoefficientFromPlaneFile(GridElement &L, GridElement &pc, GridElement &alpha, string D_filename);
00089
00091 void Calculate(GridElement &L, GridElement &epc, GridElement &alpha, DiffusionCoefficientParamStructure DxxParamStructure);
00092
00094 DiffusionCoefficient& operator= (const Matrix3D<double> &M);
00095
00097 DiffusionCoefficient& operator= (double val);
00098
00100 DiffusionCoefficient operator* (double val);
00101
00103 DiffusionCoefficient operator* (Matrix3D<double> &M);
00104
00106 DiffusionCoefficient operator+ (Matrix3D<double> &M);
00107
00109 void MakeDLL(double Kp);
00111 void MakeDLL(GridElement &L, GridElement &pc, GridElement &alpha, double Kp, string DLLType = "DLLT_B");
00113 void MakeDLL_B(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
00115 void MakeDLL_FAKE(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
00117 void MakeDLL_BE_res(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
00119 void MakeDLL_BE(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
00121 void MakeDLL100(GridElement &L, GridElement &pc, GridElement &alpha, double Kp);
00122
00123 };
00124
00130
00131 class DiffusionCoefficientsGroup : public DiffusionCoefficient {
00132 private:
00134 bool initialized;
00135 public:
00136
00137
00139 vector <DiffusionCoefficient> DxxList;
00140
00145 bool ActivateAndScale(double time, double Kp);
00146
00147
00148
00149
00150
00152 DiffusionCoefficientsGroup(string type, Grid &grid);
00153
00160 DiffusionCoefficientsGroup(string type, int L_size, int pc_size, int alpha_size);
00161
00167 DiffusionCoefficientsGroup(string type, Grid &grid, DiffusionCoefficientParamStructureList DxxParamStructureList);
00168
00170 void Get(DiffusionCoefficientParamStructureList DxxParamStructureList);
00172 void Get(DiffusionCoefficientParamStructureList DxxParamStructureList, string type);
00174 void Get(Grid &grid, DiffusionCoefficientParamStructureList DxxParamStructureList);
00176 void Get(Grid &grid, DiffusionCoefficientParamStructureList DxxParamStructureList, string type);
00177
00179 DiffusionCoefficientsGroup& operator= (double val);
00181 DiffusionCoefficientsGroup& operator= (const Matrix3D<double> &M);
00183 DiffusionCoefficientsGroup& operator= (const DiffusionCoefficient &Dxx);
00184
00185 };
00186
00187
00188 double Dxx_ba(double L, double epc, double alpha, double int_Dxx_loc(double lambda, DiffusionCoefficientParamStructure DxxParamStructure), DiffusionCoefficientParamStructure DxxParamStructure);
00189 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, DiffusionCoefficientParamStructure DxxParamStructure), DiffusionCoefficientParamStructure DxxParamStructure);
00190
00191 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, DiffusionCoefficientParamStructure DxxParamStructure);
00192 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, DiffusionCoefficientParamStructure DxxParamStructure);
00193 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, DiffusionCoefficientParamStructure DxxParamStructure);
00194
00195 double int_Daa_loc(double lambda, DiffusionCoefficientParamStructure DxxParamStructure);
00196 double int_Dpp_loc(double lambda, DiffusionCoefficientParamStructure DxxParamStructure);
00197 double int_Dpa_loc(double lambda, DiffusionCoefficientParamStructure DxxParamStructure);
00198
00199
00200
00201 double f1(double lambda);
00202
00203 double Alpha_ne(double pangle, double lambda, double L);
00204 double func_tmp (double x, double Alpha);
00205
00206 double F_cap(double x, double y, double b, double s, double epsilon, DiffusionCoefficientParamStructure DxxParamStructure);
00207
00208
00210 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, DiffusionCoefficientParamStructure DxxParamStructure);
00211
00212 #endif