00001 #ifndef FLOWSOLVER_H
00002 #define FLOWSOLVER_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
00014
00015
00016
00018
00026 #include <fstream>
00027 #include <sstream>
00028 #include <iostream>
00029 #include <string>
00030 #include <cmath>
00031 #include <vector>
00032 #include <cstdlib>
00033 #include <ctime>
00034 #include "inputData.h"
00035 #include "initCond.h"
00036 #include "exactSol.h"
00037 #include "outputData.h"
00038 #include "initStage.h"
00039 #include "NSSolver.h"
00040 #include "setDt.h"
00041 #include "constant.h"
00042 using namespace std;
00043
00044 #ifdef SINGLE
00045 #define real float
00046 #else
00047 #define real double
00048 #endif
00049
00056 class flowSolver {
00057
00058 public:
00059
00063 flowSolver();
00064
00068 ~flowSolver();
00069
00070
00077 void solve();
00078
00079 private:
00080
00081 void setCoord();
00082 void setUnknowns();
00083
00084 int * allocate1dIntArray(int size);
00085 real * allocate1dRealArray(int size);
00086 int ** allocate2dArray(int nMeshes, int dimension);
00087 real ** allocate2dRealArray(int ny, int nz);
00088 real *** allocate3dRealArray(int nMeshes, int dim, int **pointNumberMesh);
00089 real **** allocate4dRealArray(int nMeshes, int **pointNumberMesh);
00090 int **** allocate4dIntArray(int nMeshes, int **pointNumberMesh);
00091 real **** allocate4dRealArrayCage(int nMeshes, int **pointNumberMesh);
00092 int **** allocate4dIntArrayCage(int nMeshes, int **pointNumberMesh);
00093
00094 void delete1dArray(int *x);
00095 void delete1dArray(real *x);
00096 void delete2dArray(int **x, int size);
00097 void delete2dRealArray(real **x, int ny);
00098 void delete3dArray(real ***x, int nMeshes, int dim);
00099 void delete4dArray(real ****x, int nMeshes, int **pointNumberMesh);
00100 void delete4dArray(int ****x, int nMeshes, int **pointNumberMesh);
00101 void delete4dArrayCage(real ****x, int nMeshes, int **pointNumberMesh);
00102 void delete4dArrayCage(int ****x, int nMeshes, int **pointNumberMesh);
00103 void releaseMemory();
00104 string iToString(int k);
00105
00106
00107
00108 int dim;
00109 real t;
00110 real dt;
00111 real Re;
00112
00113 int Nc;
00114
00115 int nPatch;
00116 int NumberOfMeshes;
00117
00118
00119
00120 int **nCell;
00121
00122 int nCoarseCellCompDomain;
00123
00124
00125
00126
00127
00128 int cellNumberPerPatch;
00129
00130 int nCellPerParticle;
00131
00132 int **StartIndex;
00133
00134
00135
00136
00137
00138
00139
00140
00141 int i, j, k;
00142
00143 int tStep;
00144
00145
00146 int m;
00147
00148
00149 int **pointNumberMeshP;
00150
00151
00152 int **pointNumberMeshU;
00153
00154
00155 int **pointNumberMeshV;
00156
00157
00158 int **pointNumberMeshW;
00159
00160
00161 int **pointNumberMeshOmegaX;
00162
00163
00164 int **pointNumberMeshOmegaY;
00165
00166
00167 int **pointNumberMeshOmegaZ;
00168
00169
00170
00171 int nx, ny, nz;
00172
00173
00174
00175 real hCoarse, hFine;
00176 real *h;
00177
00178
00179
00180 real ***xP;
00181 real ****fp;
00182 real ****exactP;
00183 real ****p;
00184 int ****pUnknowns;
00185
00186
00187 real ***xU;
00188 real ****exactU;
00189 real ****u;
00190 real ****uAux;
00191 int ****uUnknowns;
00192
00193
00194 real ***xV;
00195 real ****exactV;
00196 real ****v;
00197 real ****vAux;
00198 int ****vUnknowns;
00199
00200
00201 real ***xW;
00202 real ****exactW;
00203 real ****w;
00204 real ****wAux;
00205 int ****wUnknowns;
00206
00207
00208 real *xParticleCenter;
00209 real *yParticleCenter;
00210 real *zParticleCenter;
00211
00212
00213 int ****pInsideParticle;
00214 int ****pCagePoint;
00215 int ****uCagePoint;
00216 int ****vCagePoint;
00217 int ****wCagePoint;
00218 int ****omegaXCagePoint;
00219 int ****omegaYCagePoint;
00220 int ****omegaZCagePoint;
00221
00222
00223 real ***xOmegaX;
00224 real ****omegaX;
00225
00226 real ***xOmegaY;
00227 real ****omegaY;
00228
00229 real ***xOmegaZ;
00230 real ****omegaZ;
00231
00232
00233
00234
00235
00236 int fixedParticles;
00237 vector<real> UFixedParticles;
00238 vector<real> SFixedParticles;
00239 vector<real> VFixedParticles;
00240
00241
00242 int rotatingParticles;
00243 real **angVel;
00244 real **angVelAcc;
00245 real **torqueOld;
00246 real **torqueNew;
00247
00248
00249 string filename;
00250 ofstream ofParticle ;
00251 int restart;
00252
00253 };
00254
00255 #endif