Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef GAMGAgglomeration_H
00039 #define GAMGAgglomeration_H
00040
00041 #include <OpenFOAM/MeshObject.H>
00042 #include <OpenFOAM/lduPrimitiveMesh.H>
00043 #include <OpenFOAM/lduInterfacePtrsList.H>
00044 #include <OpenFOAM/primitiveFields.H>
00045 #include <OpenFOAM/runTimeSelectionTables.H>
00046
00047
00048
00049 namespace Foam
00050 {
00051
00052 class lduMesh;
00053 class lduMatrix;
00054
00055
00056
00057
00058
00059 class GAMGAgglomeration
00060 :
00061 public MeshObject<lduMesh, GAMGAgglomeration>
00062 {
00063 protected:
00064
00065
00066
00067
00068 label maxLevels_;
00069
00070
00071 label nCellsInCoarsestLevel_;
00072
00073
00074 labelList nCells_;
00075
00076
00077
00078 PtrList<labelField> restrictAddressing_;
00079
00080
00081
00082
00083
00084
00085
00086 PtrList<labelList> faceRestrictAddressing_;
00087
00088
00089 PtrList<lduPrimitiveMesh> meshLevels_;
00090
00091
00092
00093 PtrList<lduInterfacePtrsList> interfaceLevels_;
00094
00095
00096 void agglomerateLduAddressing(const label fineLevelIndex);
00097
00098
00099 void compactLevels(const label nCreatedLevels);
00100
00101
00102 bool continueAgglomerating(const label nCoarseCells) const;
00103
00104
00105
00106
00107
00108 GAMGAgglomeration(const GAMGAgglomeration&);
00109
00110
00111 void operator=(const GAMGAgglomeration&);
00112
00113
00114 public:
00115
00116
00117 TypeName("GAMGAgglomeration");
00118
00119
00120
00121
00122
00123 declareRunTimeSelectionTable
00124 (
00125 autoPtr,
00126 GAMGAgglomeration,
00127 lduMesh,
00128 (
00129 const lduMesh& mesh,
00130 const dictionary& controlDict
00131 ),
00132 (
00133 mesh,
00134 controlDict
00135 )
00136 );
00137
00138
00139
00140 declareRunTimeSelectionTable
00141 (
00142 autoPtr,
00143 GAMGAgglomeration,
00144 lduMatrix,
00145 (
00146 const lduMatrix& matrix,
00147 const dictionary& controlDict
00148 ),
00149 (
00150 matrix,
00151 controlDict
00152 )
00153 );
00154
00155
00156
00157
00158
00159 GAMGAgglomeration
00160 (
00161 const lduMesh& mesh,
00162 const dictionary& controlDict
00163 );
00164
00165
00166
00167
00168
00169 static const GAMGAgglomeration& New
00170 (
00171 const lduMesh& mesh,
00172 const dictionary& controlDict
00173 );
00174
00175
00176 static const GAMGAgglomeration& New
00177 (
00178 const lduMatrix& matrix,
00179 const dictionary& controlDict
00180 );
00181
00182
00183
00184
00185 ~GAMGAgglomeration();
00186
00187
00188
00189
00190
00191
00192 label size() const
00193 {
00194 return meshLevels_.size();
00195 }
00196
00197
00198 const lduMesh& meshLevel(const label leveli) const;
00199
00200
00201 const lduInterfacePtrsList& interfaceLevel
00202 (
00203 const label leveli
00204 ) const;
00205
00206
00207 const labelField& restrictAddressing(const label leveli) const
00208 {
00209 return restrictAddressing_[leveli];
00210 }
00211
00212
00213 const labelList& faceRestrictAddressing(const label leveli) const
00214 {
00215 return faceRestrictAddressing_[leveli];
00216 }
00217
00218
00219
00220
00221
00222 template<class Type>
00223 void restrictField
00224 (
00225 Field<Type>& cf,
00226 const Field<Type>& ff,
00227 const label fineLevelIndex
00228 ) const;
00229
00230
00231 template<class Type>
00232 void restrictFaceField
00233 (
00234 Field<Type>& cf,
00235 const Field<Type>& ff,
00236 const label fineLevelIndex
00237 ) const;
00238
00239
00240 template<class Type>
00241 void prolongField
00242 (
00243 Field<Type>& ff,
00244 const Field<Type>& cf,
00245 const label coarseLevelIndex
00246 ) const;
00247 };
00248
00249
00250
00251
00252 }
00253
00254
00255
00256 #ifdef NoRepository
00257 # include <OpenFOAM/GAMGAgglomerationTemplates.C>
00258 #endif
00259
00260
00261
00262 #endif
00263
00264