00001 #ifndef PRESSURE_H
00002 #define PRESSURE_H
00003
00010 #include <iostream>
00011 #include <string>
00012 #include <cmath>
00013 #include "petscksp.h"
00014 #include "PetscLinearSolver.h"
00015 using namespace std;
00016
00017 #ifdef SINGLE
00018 #define real float
00019 #else
00020 #define real double
00021 #endif
00022
00023
00033 class pressure {
00034
00035 public:
00036
00040 pressure();
00041
00047 void initialize(int numberOfPatches,
00048 int cellNumberPerPatch,
00049 int ** StartIndex,
00050 int ** pointNumberMeshP,
00051 int dimension,
00052 real ***xP,
00053 real *h,
00054 real ****fp,
00055 real ****exactPressure,
00056 int ****pUnknowns,
00057 real ****p,
00058 int ****pCagePoint,
00059 PetscLinearSolver &pSolver,
00060 int &zeroInitialGuess
00061 );
00065 ~pressure();
00066
00067 private:
00068
00069 void coarseGhostPoint(real *h,
00070 real ****fp);
00071 void fineGhostPoint(real ix,
00072 real iy,
00073 real iz,
00074 real *h,
00075 real ****fp);
00076
00077 int * allocate1dIntArray(int size);
00078 int **** allocate4dIntArray(int nMeshes, int **pointNumberMesh);
00079 real * allocate1dRealArray(int size);
00080 real ** allocateValueMatrix();
00081 int ** allocateColumnMatrix();
00082
00083 void deleteMatrix(real **x, int n);
00084 void delete4dArray(int ****x, int nMeshes, int **pointNumberMesh);
00085 void delete1dArray(real *x);
00086 void delete1dArray(int *x);
00087 void deleteMatrix(real **x);
00088 void deleteMatrix(int **x);
00089
00090 void deallocateMemory(int ** pointNumberMesh);
00091
00092 int n;
00093
00094 int nStencil;
00095
00096 int dim;
00097
00098
00099
00100 int originalTotalPoints;
00101
00102
00103
00104 int i, j, k;
00105
00106 int ib;
00107 int iD;
00108
00109 int iFine, jFine, kFine;
00110 int iWSB, iESB,iWNB,iENB;
00111 int iWST, iEST,iWNT,iENT;
00112
00113
00114 int m;
00115
00116 int nPatch;
00117 int nMeshes;
00118
00119
00120
00121
00122
00123
00124
00125 int iC,iW,iE,iS,iN,iB,iT;
00126
00127
00128
00129 int nCellPerPatch;
00130
00131 int * indexM;
00132 int * indexI;
00133 int * indexJ;
00134 int * indexK;
00135
00136
00137 int ****index;
00138
00139
00140
00141
00142 real **valueA;
00143 int **columnA;
00144
00145 real tol;
00146 real *b;
00147 real *sol;
00148
00149
00150
00151
00152
00153
00154
00155
00156 real maxError;
00157
00158
00159
00160 };
00161
00162 #endif