00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #define initialize_interior true
00023
00024
00025 class P_interior {
00026 public:
00027 P_interior(Index3D I, P_interior* Next) : ind(I), next(Next) {};
00028
00029
00030 void initialize(const Grid* gitter, int var_ebene);
00031
00032
00033
00034
00035 double *varM(const Grid* gitter,int level) const;
00036
00037 double *varN(const Grid* gitter, int level) const;
00038 double *varS(const Grid* gitter, int level) const;
00039 double *varW(const Grid* gitter, int level) const;
00040 double *varE(const Grid* gitter, int level) const;
00041 double *varT(const Grid* gitter, int level) const;
00042 double *varD(const Grid* gitter, int level) const;
00043
00044 double *varND(const Grid* gitter, int level) const;
00045 double *varWN(const Grid* gitter, int level) const;
00046 double *varWT(const Grid* gitter, int level) const;
00047 double *varED(const Grid* gitter, int level) const;
00048 double *varST(const Grid* gitter, int level) const;
00049 double *varES(const Grid* gitter, int level) const;
00050
00051 double *varEST(const Grid* gitter, int level) const;
00052 double *varWND(const Grid* gitter, int level) const;
00053
00054
00055 double *varWD(const Grid* gitter, int level) const;
00056 double *varET(const Grid* gitter, int level) const;
00057
00058
00059 double *cell_varWSD(const Grid* gitter,int lev) const;
00060 double *cell_varWST(const Grid* gitter,int lev) const;
00061 double *cell_varWND(const Grid* gitter,int lev) const;
00062 double *cell_varWNT(const Grid* gitter,int lev) const;
00063 double *cell_varESD(const Grid* gitter,int lev) const;
00064 double *cell_varEST(const Grid* gitter,int lev) const;
00065 double *cell_varEND(const Grid* gitter,int lev) const;
00066 double *cell_varENT(const Grid* gitter,int lev) const;
00067
00068
00069
00070
00071 double *var_fine_M(const Grid* gitter, int level) const;
00072
00073 double *var_fine_N(const Grid* gitter, int level) const;
00074 double *var_fine_S(const Grid* gitter, int level) const;
00075 double *var_fine_W(const Grid* gitter, int level) const;
00076 double *var_fine_E(const Grid* gitter, int level) const;
00077 double *var_fine_T(const Grid* gitter, int level) const;
00078 double *var_fine_D(const Grid* gitter, int level) const;
00079
00080 double *var_fine_ND(const Grid* gitter, int level) const;
00081 double *var_fine_WN(const Grid* gitter, int level) const;
00082 double *var_fine_WT(const Grid* gitter, int level) const;
00083 double *var_fine_ED(const Grid* gitter, int level) const;
00084 double *var_fine_ST(const Grid* gitter, int level) const;
00085 double *var_fine_ES(const Grid* gitter, int level) const;
00086
00087 double *var_fine_EST(const Grid* gitter, int level) const;
00088 double *var_fine_WND(const Grid* gitter, int level) const;
00089
00090
00091
00092
00093 double *var_coarse_M(const Grid* gitter, int level) const;
00094
00095 double *var_coarse_N(const Grid* gitter, int level) const;
00096 double *var_coarse_S(const Grid* gitter, int level) const;
00097 double *var_coarse_W(const Grid* gitter, int level) const;
00098 double *var_coarse_E(const Grid* gitter, int level) const;
00099 double *var_coarse_T(const Grid* gitter, int level) const;
00100 double *var_coarse_D(const Grid* gitter, int level) const;
00101
00102 double *var_coarse_ND(const Grid* gitter, int level) const;
00103 double *var_coarse_WN(const Grid* gitter, int level) const;
00104 double *var_coarse_WT(const Grid* gitter, int level) const;
00105 double *var_coarse_ED(const Grid* gitter, int level) const;
00106 double *var_coarse_ST(const Grid* gitter, int level) const;
00107 double *var_coarse_ES(const Grid* gitter, int level) const;
00108
00109 double *var_coarse_EST(const Grid* gitter, int level) const;
00110 double *var_coarse_WND(const Grid* gitter, int level) const;
00111
00112
00113 D3vector coordinate(const Grid* gitter) const;
00114 double coordinateX(const Grid* gitter) const;
00115 double coordinateY(const Grid* gitter) const;
00116 double coordinateZ(const Grid* gitter) const;
00117
00118
00119 P_interior* Next() { return next; };
00120
00121
00122 Index3D Ind() const { return ind; };
00123 private:
00124
00125 double* pointer_varM;
00126
00127 double* pointer_varN;
00128 double* pointer_varS;
00129 double* pointer_varE;
00130 double* pointer_varW;
00131 double* pointer_varT;
00132 double* pointer_varD;
00133
00134 double* pointer_varND;
00135 double* pointer_varWN;
00136 double* pointer_varWT;
00137 double* pointer_varED;
00138 double* pointer_varST;
00139 double* pointer_varES;
00140
00141 double* pointer_varEST;
00142 double* pointer_varWND;
00143
00144
00145 double* pointer_fine_varM;
00146
00147 double* pointer_fine_varN;
00148 double* pointer_fine_varS;
00149 double* pointer_fine_varE;
00150 double* pointer_fine_varW;
00151 double* pointer_fine_varT;
00152 double* pointer_fine_varD;
00153
00154 double* pointer_fine_varND;
00155 double* pointer_fine_varWN;
00156 double* pointer_fine_varWT;
00157 double* pointer_fine_varED;
00158 double* pointer_fine_varST;
00159 double* pointer_fine_varES;
00160
00161 double* pointer_fine_varEST;
00162 double* pointer_fine_varWND;
00163
00164 Index3D ind;
00165 P_interior *next;
00166 };
00167
00168
00169
00170
00171 inline D3vector P_interior::coordinate(const Grid* gitter) const {
00172 return gitter->transform_coord(ind);
00173 };
00174 inline double P_interior::coordinateX(const Grid* gitter) const {
00175 return gitter->transform_coordX(ind);
00176 };
00177 inline double P_interior::coordinateY(const Grid* gitter) const {
00178 return gitter->transform_coordY(ind);
00179 };
00180 inline double P_interior::coordinateZ(const Grid* gitter) const {
00181 return gitter->transform_coordZ(ind);
00182 };
00183
00184
00185 inline void P_interior::initialize(const Grid* gitter, int level) {
00186
00187 pointer_varM = gitter->Give_variable(ind,level);
00188
00189 pointer_varN = gitter->Give_variable(ind.next_NS(Rd,level),level);
00190 pointer_varS = gitter->Give_variable(ind.next_NS(Ld,level),level);
00191 pointer_varE = gitter->Give_variable(ind.next_EW(Rd,level),level);
00192 pointer_varW = gitter->Give_variable(ind.next_EW(Ld,level),level);
00193 pointer_varT = gitter->Give_variable(ind.next_TD(Rd,level),level);
00194 pointer_varD = gitter->Give_variable(ind.next_TD(Ld,level),level);
00195 pointer_varND =
00196 gitter->Give_variable(ind.next_NS(Rd,level).next_TD(Ld,level),level);
00197 pointer_varWN =
00198 gitter->Give_variable(ind.next_NS(Rd,level).next_EW(Ld,level),level);
00199 pointer_varWT =
00200 gitter->Give_variable(ind.next_TD(Rd,level).next_EW(Ld,level),level);
00201 pointer_varED =
00202 gitter->Give_variable(ind.next_TD(Ld,level).next_EW(Rd,level),level);
00203 pointer_varST =
00204 gitter->Give_variable(ind.next_TD(Rd,level).next_NS(Ld,level),level);
00205 pointer_varES =
00206 gitter->Give_variable(ind.next_EW(Rd,level).next_NS(Ld,level),level);
00207 pointer_varEST =
00208 gitter->Give_variable(
00209 ind.next_EW(Rd,level).next_NS(Ld,level).next_TD(Rd,level),level);
00210 pointer_varWND =
00211 gitter->Give_variable(
00212 ind.next_EW(Ld,level).next_NS(Rd,level).next_TD(Ld,level),level);
00213
00214
00215 if(level<gitter->Max_level()) {
00216 pointer_fine_varM = gitter->Give_variable(ind,level+1);
00217
00218 pointer_fine_varN = gitter->Give_variable(ind.next_NS(Rd,level+1),level+1);
00219 pointer_fine_varS = gitter->Give_variable(ind.next_NS(Ld,level+1),level+1);
00220 pointer_fine_varE = gitter->Give_variable(ind.next_EW(Rd,level+1),level+1);
00221 pointer_fine_varW = gitter->Give_variable(ind.next_EW(Ld,level+1),level+1);
00222 pointer_fine_varT = gitter->Give_variable(ind.next_TD(Rd,level+1),level+1);
00223 pointer_fine_varD = gitter->Give_variable(ind.next_TD(Ld,level+1),level+1);
00224 pointer_fine_varND =
00225 gitter->Give_variable(ind.next_NS(Rd,level+1).next_TD(Ld,level+1),level+1);
00226 pointer_fine_varWN =
00227 gitter->Give_variable(ind.next_NS(Rd,level+1).next_EW(Ld,level+1),level+1);
00228 pointer_fine_varWT =
00229 gitter->Give_variable(ind.next_TD(Rd,level+1).next_EW(Ld,level+1),level+1);
00230 pointer_fine_varED =
00231 gitter->Give_variable(ind.next_TD(Ld,level+1).next_EW(Rd,level+1),level+1);
00232 pointer_fine_varST =
00233 gitter->Give_variable(ind.next_TD(Rd,level+1).next_NS(Ld,level+1),level+1);
00234 pointer_fine_varES =
00235 gitter->Give_variable(ind.next_EW(Rd,level+1).next_NS(Ld,level+1),level+1);
00236 pointer_fine_varEST =
00237 gitter->Give_variable(
00238 ind.next_EW(Rd,level+1).next_NS(Ld,level+1).next_TD(Rd,level+1),level+1);
00239 pointer_fine_varWND =
00240 gitter->Give_variable(
00241 ind.next_EW(Ld,level+1).next_NS(Rd,level+1).next_TD(Ld,level+1),level+1);
00242 }
00243 };
00244
00245
00246
00247
00248 inline double *P_interior::varM(const Grid* gitter, int level) const {
00249 return pointer_varM;
00250 };
00251
00252 inline double *P_interior::varN(const Grid* gitter, int level)
00253 const {
00254 return pointer_varN;
00255 };
00256 inline double *P_interior::varS(const Grid* gitter, int level)
00257 const {
00258 return pointer_varS;
00259 };
00260 inline double *P_interior::varE(const Grid* gitter, int level)
00261 const {
00262 return pointer_varE;
00263 };
00264 inline double *P_interior::varW(const Grid* gitter, int level)
00265 const {
00266 return pointer_varW;
00267 };
00268 inline double *P_interior::varT(const Grid* gitter, int level)
00269 const {
00270 return pointer_varT;
00271 };
00272 inline double *P_interior::varD(const Grid* gitter, int level)
00273 const {
00274 return pointer_varD;
00275 };
00276
00277 inline double *P_interior::varND(const Grid* gitter, int level)
00278 const {
00279 return pointer_varND;
00280 };
00281 inline double *P_interior::varWN(const Grid* gitter, int level)
00282 const {
00283 return pointer_varWN;
00284 };
00285 inline double *P_interior::varWT(const Grid* gitter, int level)
00286 const {
00287 return pointer_varWT;
00288 };
00289 inline double *P_interior::varED(const Grid* gitter, int level)
00290 const {
00291 return pointer_varED;
00292 };
00293 inline double *P_interior::varST(const Grid* gitter, int level)
00294 const {
00295 return pointer_varST;
00296 };
00297 inline double *P_interior::varES(const Grid* gitter, int level)
00298 const {
00299 return pointer_varES;
00300 };
00301
00302
00303 inline double *P_interior::varWD(const Grid* gitter, int level)
00304 const {
00305 return gitter->Give_variable(ind.next_WD(level),level);
00306 };
00307 inline double *P_interior::varET(const Grid* gitter, int level)
00308 const {
00309 return gitter->Give_variable(ind.next_ET(level),level);
00310 };
00311
00312
00313 inline double *P_interior::varEST(const Grid* gitter, int level)
00314 const {
00315 return pointer_varEST;
00316 };
00317 inline double *P_interior::varWND(const Grid* gitter, int level)
00318 const {
00319 return pointer_varWND;
00320 };
00321
00322
00323 inline double *P_interior::cell_varENT(const Grid* gitter,int lev) const {
00324 return gitter->Give_cell_variable(ind.next_ENT(lev+1));
00325 };
00326 inline double *P_interior::cell_varEND(const Grid* gitter,int lev) const {
00327 return gitter->Give_cell_variable(ind.next_END(lev+1));
00328 };
00329 inline double *P_interior::cell_varEST(const Grid* gitter,int lev) const {
00330 return gitter->Give_cell_variable(ind.next_EST(lev+1));
00331 };
00332 inline double *P_interior::cell_varESD(const Grid* gitter,int lev) const {
00333 return gitter->Give_cell_variable(ind.next_ESD(lev+1));
00334 };
00335 inline double *P_interior::cell_varWNT(const Grid* gitter,int lev) const {
00336 return gitter->Give_cell_variable(ind.next_WNT(lev+1));
00337 };
00338 inline double *P_interior::cell_varWND(const Grid* gitter,int lev) const {
00339 return gitter->Give_cell_variable(ind.next_WND(lev+1));
00340 };
00341 inline double *P_interior::cell_varWST(const Grid* gitter,int lev) const {
00342 return gitter->Give_cell_variable(ind.next_WST(lev+1));
00343 };
00344 inline double *P_interior::cell_varWSD(const Grid* gitter,int lev) const {
00345 return gitter->Give_cell_variable(ind.next_WSD(lev+1));
00346 };
00347
00348
00349
00350
00351
00352 inline double *P_interior::var_fine_M(const Grid* gitter, int level) const {
00353 return pointer_fine_varM;
00354 };
00355
00356 inline double *P_interior::var_fine_N(const Grid* gitter, int level)
00357 const {
00358 return pointer_fine_varN;
00359 };
00360 inline double *P_interior::var_fine_S(const Grid* gitter, int level)
00361 const {
00362 return pointer_fine_varS;
00363 };
00364 inline double *P_interior::var_fine_E(const Grid* gitter, int level)
00365 const {
00366 return pointer_fine_varE;
00367 };
00368 inline double *P_interior::var_fine_W(const Grid* gitter, int level)
00369 const {
00370 return pointer_fine_varW;
00371 };
00372 inline double *P_interior::var_fine_T(const Grid* gitter, int level)
00373 const {
00374 return pointer_fine_varT;
00375 };
00376 inline double *P_interior::var_fine_D(const Grid* gitter, int level)
00377 const {
00378 return pointer_fine_varD;
00379 };
00380
00381 inline double *P_interior::var_fine_ND(const Grid* gitter, int level)
00382 const {
00383 return pointer_fine_varND;
00384 };
00385 inline double *P_interior::var_fine_WN(const Grid* gitter, int level)
00386 const {
00387 return pointer_fine_varWN;
00388 };
00389 inline double *P_interior::var_fine_WT(const Grid* gitter, int level)
00390 const {
00391 return pointer_fine_varWT;
00392 };
00393 inline double *P_interior::var_fine_ED(const Grid* gitter, int level)
00394 const {
00395 return pointer_fine_varED;
00396 };
00397 inline double *P_interior::var_fine_ST(const Grid* gitter, int level)
00398 const {
00399 return pointer_fine_varST;
00400 };
00401 inline double *P_interior::var_fine_ES(const Grid* gitter, int level)
00402 const {
00403 return pointer_fine_varES;
00404 };
00405
00406 inline double *P_interior::var_fine_EST(const Grid* gitter, int level)
00407 const {
00408 return pointer_fine_varEST;
00409 };
00410 inline double *P_interior::var_fine_WND(const Grid* gitter, int level)
00411 const {
00412 return pointer_fine_varWND;
00413 };
00414
00415
00416
00417
00418 inline double *P_interior::var_coarse_M(const Grid* gitter, int level) const {
00419 return gitter->Give_variable(ind,level-1);
00420 };
00421
00422 inline double *P_interior::var_coarse_N(const Grid* gitter, int level)
00423 const {
00424 return gitter->Give_variable(ind.next_NS(Rd,level),level-1);
00425 };
00426 inline double *P_interior::var_coarse_S(const Grid* gitter, int level)
00427 const {
00428 return gitter->Give_variable(ind.next_NS(Ld,level),level-1);
00429 };
00430 inline double *P_interior::var_coarse_E(const Grid* gitter, int level)
00431 const {
00432 return gitter->Give_variable(ind.next_EW(Rd,level),level-1);
00433 };
00434 inline double *P_interior::var_coarse_W(const Grid* gitter, int level)
00435 const {
00436 return gitter->Give_variable(ind.next_EW(Ld,level),level-1);
00437 };
00438 inline double *P_interior::var_coarse_T(const Grid* gitter, int level)
00439 const {
00440 return gitter->Give_variable(ind.next_TD(Rd,level),level-1);
00441 };
00442 inline double *P_interior::var_coarse_D(const Grid* gitter, int level)
00443 const {
00444 return gitter->Give_variable(ind.next_TD(Ld,level),level-1);
00445 };
00446
00447 inline double *P_interior::var_coarse_ND(const Grid* gitter, int level)
00448 const {
00449 return gitter->Give_variable(ind.next_ND(level),level-1);
00450 };
00451 inline double *P_interior::var_coarse_WN(const Grid* gitter, int level)
00452 const {
00453 return gitter->Give_variable(ind.next_WN(level),level-1);
00454 };
00455 inline double *P_interior::var_coarse_WT(const Grid* gitter, int level)
00456 const {
00457 return gitter->Give_variable(ind.next_WT(level),level-1);
00458 };
00459 inline double *P_interior::var_coarse_ED(const Grid* gitter, int level)
00460 const {
00461 return gitter->Give_variable(ind.next_ED(level),level-1);
00462 };
00463 inline double *P_interior::var_coarse_ST(const Grid* gitter, int level)
00464 const {
00465 return gitter->Give_variable(ind.next_ST(level),level-1);
00466 };
00467 inline double *P_interior::var_coarse_ES(const Grid* gitter, int level)
00468 const {
00469 return gitter->Give_variable(ind.next_ES(level),level-1);
00470 };
00471
00472 inline double *P_interior::var_coarse_EST(const Grid* gitter, int level)
00473 const {
00474 return gitter->Give_variable(ind.next_EST(level),level-1);
00475 };
00476 inline double *P_interior::var_coarse_WND(const Grid* gitter, int level)
00477 const {
00478 return gitter->Give_variable(ind.next_WND(level),level-1);
00479 };