00001 #ifndef CAGE_H
00002 #define CAGE_H
00003
00012 #ifdef SINGLE
00013 #define real float
00014 #else
00015 #define real double
00016 #endif
00017
00018
00019 #include <iostream>
00020 #include <string>
00021 #include <cmath>
00022 #include <vector>
00023 #include "analyticalSol.h"
00024 using namespace std;
00025
00033 class cage {
00034
00035 public:
00039 cage();
00040
00047 void solve(int numberOfCage,
00048 int cellNumberPerPatch,
00049 int dimension,
00050 int nTruncate,
00051 real ReynoldsNumber,
00052 real *xParticleCenter,
00053 real *yParticleCenter,
00054 real *zParticleCenter,
00055
00056 real ***xP,
00057 real ****p,
00058 int **pointNumberMeshP,
00059 int ****pCagePoint,
00060
00061 real ***xU,
00062 real ****u,
00063 int **pointNumberMeshU,
00064 int ****uCagePoint,
00065
00066 real ***xV,
00067 real ****v,
00068 int **pointNumberMeshV,
00069 int ****vCagePoint,
00070
00071 real ***xW,
00072 real ****w,
00073 int **pointNumberMeshW,
00074 int ****wCagePoint,
00075
00076 real ***xOmegaX,
00077 real ****omegaX,
00078 int **pointNumberMeshOmegaX,
00079 int ****omegaXCagePoint,
00080
00081 real ***xOmegaY,
00082 real ****omegaY,
00083 int **pointNumberMeshOmegaY,
00084 int ****omegaYCagePoint,
00085
00086 real ***xOmegaZ,
00087 real ****omegaZ,
00088 int **pointNumberMeshOmegaZ,
00089 int ****omegaZCagePoint,
00090 real **solvedABCoeffAllParticleNew,
00091 vector<real> &UFixedParticles,
00092 vector<real> &SFixedParticles,
00093 vector<real> &VFixedParticles,
00094 int &fixedParticles,
00095 int rotatingParticles,
00096 real **angVel,
00097 real **angVelAcc,
00098 real **torqueOld,
00099 real **torqueNew
00100 );
00101
00105 ~cage();
00106
00107 private:
00108
00109 void setIndexVariableCage(int ** pointNumberMeshVariable,
00110 int **** indexVariableCage,
00111 int **** variableCagePoint);
00112
00113 void setNVariableCage(int &nVariableCage,
00114 int ** pointNumberMeshVariable,
00115 int **** variableCagePoint);
00116
00117 void setVector(int nVariableCage,
00118 int **** indexVariableCage,
00119 int * indexIVariableCage,
00120 int * indexJVariableCage,
00121 int * indexKVariableCage,
00122 vector<real> &variableCage,
00123 vector<real> &xVariableCage,
00124 vector<real> &yVariableCage,
00125 vector<real> &zVariableCage,
00126 vector<real> &rVariableCage,
00127 vector<real> &thetaVariableCage,
00128 vector<real> &phiVariableCage,
00129
00130 real **** variable,
00131 real *** xVariable,
00132 int ** pointNumberMeshVariable,
00133 int **** variableCagePoint,
00134 real * xParticleCenter,
00135 real * yParticleCenter,
00136 real * zParticleCenter);
00137
00138 int * allocate1dArray(int size);
00139 void delete1dArray(int * x);
00140
00141 int **** allocate4dIntArrayCage(int nMeshes, int **pointNumberMesh);
00142 void delete4dArrayCage(int ****x, int nMeshes, int **pointNumberMesh);
00143
00144 int i, j, k, m;
00145
00146
00147 int nCage;
00148 int nMeshes;
00149 int nCellPerPatch;
00150 int dim;
00151
00152 int **** indexPCage;
00153 int * indexIPCage;
00154 int * indexJPCage;
00155 int * indexKPCage;
00156 int nPCage;
00157 vector<real> pCage;
00158 vector<real> xPCage;
00159 vector<real> yPCage;
00160 vector<real> zPCage;
00161 vector<real> rPCage;
00162 vector<real> thetaPCage;
00163 vector<real> phiPCage;
00164
00165 int **** indexOmegaXCage;
00166 int * indexIOmegaXCage;
00167 int * indexJOmegaXCage;
00168 int * indexKOmegaXCage;
00169 int nOmegaXCage;
00170 vector<real> omegaXCage;
00171 vector<real> xOmegaXCage;
00172 vector<real> yOmegaXCage;
00173 vector<real> zOmegaXCage;
00174 vector<real> rOmegaXCage;
00175 vector<real> thetaOmegaXCage;
00176 vector<real> phiOmegaXCage;
00177
00178 int **** indexOmegaYCage;
00179 int * indexIOmegaYCage;
00180 int * indexJOmegaYCage;
00181 int * indexKOmegaYCage;
00182 int nOmegaYCage;
00183 vector<real> omegaYCage;
00184 vector<real> xOmegaYCage;
00185 vector<real> yOmegaYCage;
00186 vector<real> zOmegaYCage;
00187 vector<real> rOmegaYCage;
00188 vector<real> thetaOmegaYCage;
00189 vector<real> phiOmegaYCage;
00190
00191 int **** indexOmegaZCage;
00192 int * indexIOmegaZCage;
00193 int * indexJOmegaZCage;
00194 int * indexKOmegaZCage;
00195 int nOmegaZCage;
00196 vector<real> omegaZCage;
00197 vector<real> xOmegaZCage;
00198 vector<real> yOmegaZCage;
00199 vector<real> zOmegaZCage;
00200 vector<real> rOmegaZCage;
00201 vector<real> thetaOmegaZCage;
00202 vector<real> phiOmegaZCage;
00203
00204 int **** indexUCage;
00205 int * indexIUCage;
00206 int * indexJUCage;
00207 int * indexKUCage;
00208 int nUCage;
00209 vector<real> uCage;
00210 vector<real> xUCage;
00211 vector<real> yUCage;
00212 vector<real> zUCage;
00213 vector<real> rUCage;
00214 vector<real> thetaUCage;
00215 vector<real> phiUCage;
00216
00217 int **** indexVCage;
00218 int * indexIVCage;
00219 int * indexJVCage;
00220 int * indexKVCage;
00221 int nVCage;
00222 vector<real> vCage;
00223 vector<real> xVCage;
00224 vector<real> yVCage;
00225 vector<real> zVCage;
00226 vector<real> rVCage;
00227 vector<real> thetaVCage;
00228 vector<real> phiVCage;
00229
00230 int **** indexWCage;
00231 int * indexIWCage;
00232 int * indexJWCage;
00233 int * indexKWCage;
00234 int nWCage;
00235 vector<real> wCage;
00236 vector<real> xWCage;
00237 vector<real> yWCage;
00238 vector<real> zWCage;
00239 vector<real> rWCage;
00240 vector<real> thetaWCage;
00241 vector<real> phiWCage;
00242
00243 int Nc;
00244 real Re;
00245
00246 vector<real> solvedABCoeffOneParticle;
00247
00248
00249
00250
00251 };
00252
00253 #endif