00001
00011 #ifndef PhaseSpaceDensity_H
00012 #define PhaseSpaceDensity_H
00013
00014 #include <fstream>
00015 #include <string>
00016 #include <map>
00017 #include "../Grid/Grid.h"
00018 #include "../Matrix/Matrix.h"
00019 #include "../DiffusionCoefficient/DiffusionCoefficient.h"
00020 #include "../Parameters/Parameters.h"
00021 #include "MatrixSolver.h"
00022
00023
00024 using namespace std;
00025
00026
00033 class PSD : public Matrix3D<double> {
00034 private:
00035 bool initialized;
00036
00037 public:
00038
00039 ParamStructure::PSD PSD_parameters;
00040
00045
00047 PSD(){ initialized = false; };
00048 PSD(ParamStructure::PSD parameters, Grid &grid);
00049 PSD(ParamStructure::PSD parameters, Grid &grid, PSD &otherPSD, Grid &otherPSD_grid, ParamStructure::Interpolation constantsInterpolation);
00050 PSD(ParamStructure::PSD parameters, Grid &grid, BoundaryCondition L_UpperBoundaryCondition);
00051 ~PSD();
00052
00053
00054
00055 void Initialize(ParamStructure::PSD parameters, Grid &grid, Matrix2D<double> L_UpperBoundaryCondition = Matrix2D<double>());
00056
00057
00058 void LoadInitialValue(ParamStructure::PSD parameters, Grid &grid, Matrix2D<double> L_UpperBoundaryCondition = Matrix2D<double>());
00059 void Interpolate(PSD &otherPSD, ParamStructure::Interpolation interpolationParameters, Grid &oldGrid, Grid &newGrid, Matrix2D<double> newGrid_pc_lowerBoundaryCondition, Matrix2D<double> newGrid_pc_upperBoundaryCondition);
00060
00061
00062 void Load_initial_f(GridElement &L, GridElement &pc, GridElement &alpha, double tau, double Kp, double min_psd = 1.e-99, string J_L7_function = "J_L7", double fb_out = 1, double fb_in = 0);
00063 void Load_initial_f(GridElement &L, GridElement &pc, GridElement &alpha, double tau, double Kp, Matrix2D<double> L_UpperBoundaryCondition, double min_psd = 1.e-99, double fb_out = 1, double fb_in = 0);
00064 void Load_initial_f_2d(GridElement &L, GridElement &pc, GridElement &alpha, const char *filename);
00065 void Load_initial_f_file(GridElement &L, GridElement &pc, GridElement &alpha, const char *filename, bool with_grid);
00066
00067
00068
00069 void DiffusionMixTermExplicit(double dt, double Lpp,
00070 DiffusionCoefficient &Dpca, DiffusionCoefficient &DpcaLpp,
00071 GridElement &L, GridElement &pc, GridElement &alpha, Matrix3D<double> Jacobian,
00072 Matrix2D<double> pc_lowerBoundaryCondition,
00073 Matrix2D<double> pc_upperBoundaryCondition,
00074 Matrix2D<double> alpha_lowerBoundaryCondition,
00075 Matrix2D<double> alpha_upperBoundaryCondition,
00076 string pc_lowerBoundaryCondition_calculationType,
00077 string pc_upperBoundaryCondition_calculationType,
00078 string alpha_lowerBoundaryCondition_calculationType,
00079 string alpha_upperBoundaryCondition_calculationType);
00080
00081
00082 void Diffusion_alpha(double dt, double Lpp,
00083 DiffusionCoefficient &Daa, DiffusionCoefficient &DaaLpp,
00084 GridElement &L, GridElement &pc, GridElement &alpha, Matrix3D<double> Jacobian,
00085 Matrix2D<double> alpha_lowerBoundaryCondition,
00086 Matrix2D<double> alpha_upperBoundaryCondition,
00087 string alpha_lowerBoundaryCondition_calculationType,
00088 string alpha_upperBoundaryCondition_calculationType);
00089
00090 void Diffusion_pc(double dt, double Lpp,
00091 DiffusionCoefficient &Dpcpc, DiffusionCoefficient &DpcpcLpp,
00092 GridElement &L, GridElement &pc, GridElement &alpha, Matrix3D<double> Jacobian,
00093 Matrix2D<double> pc_lowerBoundaryCondition,
00094 Matrix2D<double> pc_upperBoundaryCondition,
00095 string pc_lowerBoundaryCondition_calculationType,
00096 string pc_upperBoundaryCondition_calculationType);
00097
00098 void Diffusion_L(double dt, double Lpp,
00099 DiffusionCoefficient &DLL,
00100 GridElement &L, GridElement &pc, GridElement &alpha, Matrix3D<double> Jacobian,
00101 Matrix2D<double> lowerBoundaryCondition,
00102 Matrix2D<double> upperBoundaryCondition,
00103 string lowerBoundaryCondition_calculationType,
00104 string upperBoundaryCondition_calculationType,
00105 double tau, double tauLpp);
00106
00107
00108 void Diffusion_pc_alpha(double dt, double Lpp,
00109 DiffusionCoefficient &Dpcpc, DiffusionCoefficient &DpcpcLpp,
00110 DiffusionCoefficient &Daa, DiffusionCoefficient &DaaLpp,
00111 DiffusionCoefficient &Dpca, DiffusionCoefficient &DpcaLpp,
00112 GridElement &L, GridElement &pc, GridElement &alpha, Matrix3D<double> Jacobian,
00113 Matrix2D<double> pc_lowerBoundaryCondition,
00114 Matrix2D<double> pc_upperBoundaryCondition,
00115 Matrix2D<double> alpha_lowerBoundaryCondition,
00116 Matrix2D<double> alpha_upperBoundaryCondition,
00117 string pc_lowerBoundaryCondition_calculationType,
00118 string pc_upperBoundaryCondition_calculationType,
00119 string alpha_lowerBoundaryCondition_calculationType,
00120 string alpha_upperBoundaryCondition_calculationType);
00121
00122
00123 void SourcesAndLosses(GridElement &L, GridElement &pc, GridElement &alpha,
00124 Matrix3D<double> &SL,
00125 double dt,
00126 double Lpp, double tau, double tauLpp);
00127
00128
00129 void Output_without_grid(double time);
00130 ofstream *output_without_grid_file;
00131
00132 };
00133
00136 void steady_state(Matrix1D<double> &f, double tau, double Kp, int nx, Matrix1D<double> &CL, double f_bnd_out = 1, double f_bnd_in = 0);
00137
00138
00139 #endif
00140