00001 #ifndef NSSOLVER_H
00002 #define NSSOLVER_H
00003
00012 #include <iostream>
00013 #include <fstream>
00014 #include <sstream>
00015 #include <string>
00016 #include <cmath>
00017 #include <vector>
00018 #include <cstdlib>
00019 #include <ctime>
00020 #include "projectionMethod.h"
00021 #include "cage.h"
00022 #include "vorticity.h"
00023 using namespace std;
00024
00025 #ifdef SINGLE
00026 #define real float
00027 #else
00028 #define real double
00029 #endif
00030
00037 class NSSolver {
00038
00039 public:
00040
00044 NSSolver();
00045
00054 void solve(int nPatch,
00055 real t,
00056 real dt,
00057 real Re,
00058 int nTruncate,
00059 int cellNumberPerPatch,
00060 int ** StartIndex,
00061 real *xParticleCenter,
00062 real *yParticleCenter,
00063 real *zParticleCenter,
00064 int ** pointNumberMeshU,
00065 int ** pointNumberMeshV,
00066 int ** pointNumberMeshW,
00067 int ** pointNumberMeshP,
00068 int ** pointNumberMeshOmegaX,
00069 int ** pointNumberMeshOmegaY,
00070 int ** pointNumberMeshOmegaZ,
00071 int dim,
00072 real ***xU,
00073 real ***xV,
00074 real ***xW,
00075 real ***xP,
00076 real ***xOmegaX,
00077 real ***xOmegaY,
00078 real ***xOmegaZ,
00079 real *h,
00080 real ****u,
00081 real ****v,
00082 real ****w,
00083 real ****p,
00084 real ****omegaX,
00085 real ****omegaY,
00086 real ****omegaZ,
00087 real ****uAux,
00088 real ****vAux,
00089 real ****wAux,
00090 real ****fp,
00091 real ****exactP,
00092 int ****pUnknowns,
00093 int ****uCagePoint,
00094 int ****vCagePoint,
00095 int ****wCagePoint,
00096 int ****pCagePoint,
00097 int ****omegaXCagePoint,
00098 int ****omegaYCagePoint,
00099 int ****omegaZCagePoint,
00100 vector<real> &UFixedParticles,
00101 vector<real> &SFixedParticles,
00102 vector<real> &VFixedParticles,
00103 int &fixedParticles,
00104 int rotatingParticles,
00105 real **angVel,
00106 real **angVelAcc,
00107 real **torqueOld,
00108 real **torqueNew,
00109 PetscLinearSolver &pSolver,
00110 int &zeroInitialGuess
00111 );
00112
00116 ~NSSolver();
00117
00118 private:
00119
00120
00121 void updateAngVel(int particle,
00122 real **angVel,
00123 real **angVelAcc,
00124 real **torqueOld,
00125 real **torqueNew,
00126 real t,
00127 real dt,
00128 real Re);
00129
00130 string iToString(int k);
00131 real ** allocate2dRealArray(int nMeshes, int size);
00132 void delete2dArray(real **x, int nMeshes);
00133 real **** allocate4dRealArray(int nMeshes, int **pointNumberMesh);
00134 void delete4dArray(real ****x, int nMeshes, int **pointNumberMesh);
00135
00136 int m, i, j, k, iter;
00137
00138 int NumberOfMeshes;
00139
00140
00141
00142 real ****uIter;
00143 real ****vIter;
00144 real ****wIter;
00145
00146 int nCoeff;
00147 real **solvedABCoeffAllParticleOld;
00148 real **solvedABCoeffAllParticleNew;
00149 real relError;
00150
00151 string filename;
00152 ofstream ofParticle ;
00153
00154 };
00155
00156 #endif