src/expde/grid/listint/listint3.h

Go to the documentation of this file.
00001 //    expde: expression templates for partial differential equations.
00002 //    Copyright (C) 2000  Christoph Pflaum
00003 //    This program is free software; you can redistribute it and/or modify
00004 //    it under the terms of the GNU General Public License as published by
00005 //    the Free Software Foundation; either version 2 of the License, or
00006 //    (at your option) any later version.
00007 //
00008 //    This program is distributed in the hope that it will be useful,
00009 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00011 //    GNU General Public License for more details.
00012 
00013 // ------------------------------------------------------------
00014 // listint3.h
00015 //
00016 // ------------------------------------------------------------
00017 
00018 #define initialize_interior true
00019 
00020 
00021 class P_interior {
00022  public:
00023   P_interior(Index3D I, P_interior* Next) : ind(I), next(Next) {};
00024 
00025   // initialize
00026   void initialize(const Grid* gitter, int var_ebene);
00027 
00028   // same level
00029   // --------------
00030   // idem:
00031   double *varM(const Grid* gitter,int level) const;
00032   // next:
00033   double *varN(const Grid* gitter, int level) const;
00034   double *varS(const Grid* gitter, int level) const;
00035   double *varW(const Grid* gitter, int level) const;
00036   double *varE(const Grid* gitter, int level) const;
00037   double *varT(const Grid* gitter, int level) const;
00038   double *varD(const Grid* gitter, int level) const;
00039   // double next:
00040   double *varND(const Grid* gitter, int level) const;
00041   double *varWN(const Grid* gitter, int level) const;
00042   double *varWT(const Grid* gitter, int level) const;
00043   double *varED(const Grid* gitter, int level) const;
00044   double *varST(const Grid* gitter, int level) const;
00045   double *varES(const Grid* gitter, int level) const;
00046   // third next:
00047   double *varEST(const Grid* gitter, int level) const;
00048   double *varWND(const Grid* gitter, int level) const;
00049 
00050   // double next special
00051   double *varWD(const Grid* gitter, int level) const;
00052   double *varET(const Grid* gitter, int level) const;
00053 
00054   // cell variable:
00055   double *cell_varWSD(const Grid* gitter,int lev) const;
00056   double *cell_varWST(const Grid* gitter,int lev) const;
00057   double *cell_varWND(const Grid* gitter,int lev) const;
00058   double *cell_varWNT(const Grid* gitter,int lev) const;
00059   double *cell_varESD(const Grid* gitter,int lev) const;
00060   double *cell_varEST(const Grid* gitter,int lev) const;
00061   double *cell_varEND(const Grid* gitter,int lev) const;
00062   double *cell_varENT(const Grid* gitter,int lev) const;
00063 
00064   // finer level
00065   // --------------
00066   // idem:
00067   double *var_fine_M(const Grid* gitter, int level) const;
00068   // next:
00069   double *var_fine_N(const Grid* gitter, int level) const;
00070   double *var_fine_S(const Grid* gitter, int level) const;
00071   double *var_fine_W(const Grid* gitter, int level) const;
00072   double *var_fine_E(const Grid* gitter, int level) const;
00073   double *var_fine_T(const Grid* gitter, int level) const;
00074   double *var_fine_D(const Grid* gitter, int level) const;
00075   // double next:
00076   double *var_fine_ND(const Grid* gitter, int level) const;
00077   double *var_fine_WN(const Grid* gitter, int level) const;
00078   double *var_fine_WT(const Grid* gitter, int level) const;
00079   double *var_fine_ED(const Grid* gitter, int level) const;
00080   double *var_fine_ST(const Grid* gitter, int level) const;
00081   double *var_fine_ES(const Grid* gitter, int level) const;
00082   // third next:
00083   double *var_fine_EST(const Grid* gitter, int level) const;
00084   double *var_fine_WND(const Grid* gitter, int level) const;
00085 
00086   // coarse level
00087   // --------------
00088   // idem:
00089   double *var_coarse_M(const Grid* gitter, int level) const;
00090   // next:
00091   double *var_coarse_N(const Grid* gitter, int level) const;
00092   double *var_coarse_S(const Grid* gitter, int level) const;
00093   double *var_coarse_W(const Grid* gitter, int level) const;
00094   double *var_coarse_E(const Grid* gitter, int level) const;
00095   double *var_coarse_T(const Grid* gitter, int level) const;
00096   double *var_coarse_D(const Grid* gitter, int level) const;
00097   // double next:
00098   double *var_coarse_ND(const Grid* gitter, int level) const;
00099   double *var_coarse_WN(const Grid* gitter, int level) const;
00100   double *var_coarse_WT(const Grid* gitter, int level) const;
00101   double *var_coarse_ED(const Grid* gitter, int level) const;
00102   double *var_coarse_ST(const Grid* gitter, int level) const;
00103   double *var_coarse_ES(const Grid* gitter, int level) const;
00104   // third next:
00105   double *var_coarse_EST(const Grid* gitter, int level) const;
00106   double *var_coarse_WND(const Grid* gitter, int level) const;
00107 
00108   // physical coordinates of the point
00109   D3vector coordinate(const Grid* gitter) const;
00110   double coordinateX(const Grid* gitter) const;
00111   double coordinateY(const Grid* gitter) const;
00112   double coordinateZ(const Grid* gitter) const;
00113 
00114   // for iteration:
00115   P_interior* Next() { return next; };
00116 
00117   // index of the point
00118   Index3D Ind() const { return ind; };
00119  private:
00120   double* pointer_varM;
00121 
00122   double* pointer_varN;
00123   double* pointer_varS;
00124   double* pointer_varE;
00125   double* pointer_varW;
00126   double* pointer_varT;
00127   double* pointer_varD;
00128 
00129   double* pointer_varND;
00130   double* pointer_varWN;
00131   double* pointer_varWT;
00132   double* pointer_varED;
00133   double* pointer_varST;
00134   double* pointer_varES;
00135 
00136   double* pointer_varEST;
00137   double* pointer_varWND;
00138 
00139   Index3D ind;
00140   P_interior *next;
00141 };
00142 
00143 
00144 
00145 // coordinates
00146 inline D3vector P_interior::coordinate(const Grid* gitter) const {
00147   return gitter->transform_coord(ind);
00148 };
00149 inline double P_interior::coordinateX(const Grid* gitter) const {
00150   return gitter->transform_coordX(ind);
00151 };
00152 inline double P_interior::coordinateY(const Grid* gitter) const {
00153   return gitter->transform_coordY(ind);
00154 };
00155 inline double P_interior::coordinateZ(const Grid* gitter) const {
00156   return gitter->transform_coordZ(ind);
00157 };
00158 
00159 
00160 inline void P_interior::initialize(const Grid* gitter, int level) {
00161   pointer_varM = gitter->Give_variable(ind,level);
00162 
00163   pointer_varN = gitter->Give_variable(ind.next_NS(Rd,level),level);
00164   pointer_varS = gitter->Give_variable(ind.next_NS(Ld,level),level);
00165   pointer_varE = gitter->Give_variable(ind.next_EW(Rd,level),level);
00166   pointer_varW = gitter->Give_variable(ind.next_EW(Ld,level),level);
00167   pointer_varT = gitter->Give_variable(ind.next_TD(Rd,level),level);
00168   pointer_varD = gitter->Give_variable(ind.next_TD(Ld,level),level);
00169   pointer_varND = 
00170     gitter->Give_variable(ind.next_NS(Rd,level).next_TD(Ld,level),level);
00171   pointer_varWN = 
00172     gitter->Give_variable(ind.next_NS(Rd,level).next_EW(Ld,level),level);
00173   pointer_varWT = 
00174     gitter->Give_variable(ind.next_TD(Rd,level).next_EW(Ld,level),level);
00175   pointer_varED =
00176     gitter->Give_variable(ind.next_TD(Ld,level).next_EW(Rd,level),level);
00177   pointer_varST =
00178     gitter->Give_variable(ind.next_TD(Rd,level).next_NS(Ld,level),level);
00179   pointer_varES =
00180     gitter->Give_variable(ind.next_EW(Rd,level).next_NS(Ld,level),level);
00181   pointer_varEST =
00182     gitter->Give_variable(
00183           ind.next_EW(Rd,level).next_NS(Ld,level).next_TD(Rd,level),level);
00184   pointer_varWND =
00185     gitter->Give_variable(
00186           ind.next_EW(Ld,level).next_NS(Rd,level).next_TD(Ld,level),level);
00187 };
00188 
00189 // same level
00190 // --------------
00191 // idem:
00192 inline double *P_interior::varM(const Grid* gitter, int level) const {
00193   return pointer_varM;
00194 };
00195 // next:
00196 inline double *P_interior::varN(const Grid* gitter, int level)
00197      const {
00198   return pointer_varN;
00199 };
00200 inline double *P_interior::varS(const Grid* gitter, int level)
00201      const {
00202   return pointer_varS;
00203 };
00204 inline double *P_interior::varE(const Grid* gitter, int level)
00205      const {
00206   return pointer_varE;
00207 };
00208 inline double *P_interior::varW(const Grid* gitter, int level)
00209      const {
00210   return pointer_varW;
00211 };
00212 inline double *P_interior::varT(const Grid* gitter, int level)
00213      const {
00214   return pointer_varT;
00215 };
00216 inline double *P_interior::varD(const Grid* gitter, int level)
00217      const {
00218   return pointer_varD;
00219 };
00220 // double next:
00221 inline double *P_interior::varND(const Grid* gitter, int level)
00222      const {
00223   return pointer_varND;
00224 };
00225 inline double *P_interior::varWN(const Grid* gitter, int level)
00226      const {
00227   return pointer_varWN;
00228 };
00229 inline double *P_interior::varWT(const Grid* gitter, int level)
00230      const {
00231   return pointer_varWT;
00232 };
00233 inline double *P_interior::varED(const Grid* gitter, int level)
00234      const {
00235   return pointer_varED;
00236 };
00237 inline double *P_interior::varST(const Grid* gitter, int level)
00238      const {
00239   return pointer_varST;
00240 };
00241 inline double *P_interior::varES(const Grid* gitter, int level)
00242      const {
00243   return pointer_varES;
00244 };
00245 
00246 // double next special:
00247 inline double *P_interior::varWD(const Grid* gitter, int level)
00248      const {
00249   return gitter->Give_variable(ind.next_WD(level),level);
00250 };
00251 inline double *P_interior::varET(const Grid* gitter, int level)
00252      const {
00253   return gitter->Give_variable(ind.next_ET(level),level);
00254 };
00255 
00256 // third next:
00257 inline double *P_interior::varEST(const Grid* gitter, int level)
00258      const {
00259   return pointer_varEST;
00260 };
00261 inline double *P_interior::varWND(const Grid* gitter, int level)
00262      const {
00263   return pointer_varWND;
00264 };
00265 
00266 // cell variable
00267 inline double *P_interior::cell_varENT(const Grid* gitter,int lev) const {
00268   return gitter->Give_cell_variable(ind.next_ENT(lev+1));
00269 };
00270 inline double *P_interior::cell_varEND(const Grid* gitter,int lev) const {
00271   return gitter->Give_cell_variable(ind.next_END(lev+1));
00272 };
00273 inline double *P_interior::cell_varEST(const Grid* gitter,int lev) const {
00274   return gitter->Give_cell_variable(ind.next_EST(lev+1));
00275 };
00276 inline double *P_interior::cell_varESD(const Grid* gitter,int lev) const {
00277   return gitter->Give_cell_variable(ind.next_ESD(lev+1));
00278 };
00279 inline double *P_interior::cell_varWNT(const Grid* gitter,int lev) const {
00280   return gitter->Give_cell_variable(ind.next_WNT(lev+1));
00281 };
00282 inline double *P_interior::cell_varWND(const Grid* gitter,int lev) const {
00283   return gitter->Give_cell_variable(ind.next_WND(lev+1));
00284 };
00285 inline double *P_interior::cell_varWST(const Grid* gitter,int lev) const {
00286   return gitter->Give_cell_variable(ind.next_WST(lev+1));
00287 };
00288 inline double *P_interior::cell_varWSD(const Grid* gitter,int lev) const {
00289   return gitter->Give_cell_variable(ind.next_WSD(lev+1));
00290 };
00291 
00292 
00293 // finer level
00294 // --------------
00295 // idem:
00296 inline double *P_interior::var_fine_M(const Grid* gitter, int level) const {
00297   return gitter->Give_variable(ind,level+1);
00298 };
00299 // next:
00300 inline double *P_interior::var_fine_N(const Grid* gitter, int level)
00301      const {
00302   return gitter->Give_variable(ind.next_NS(Rd,level+1),level+1);
00303 };
00304 inline double *P_interior::var_fine_S(const Grid* gitter, int level)
00305      const {
00306   return gitter->Give_variable(ind.next_NS(Ld,level+1),level+1);
00307 };
00308 inline double *P_interior::var_fine_E(const Grid* gitter, int level)
00309      const {
00310   return gitter->Give_variable(ind.next_EW(Rd,level+1),level+1);
00311 };
00312 inline double *P_interior::var_fine_W(const Grid* gitter, int level)
00313      const {
00314   return gitter->Give_variable(ind.next_EW(Ld,level+1),level+1);
00315 };
00316 inline double *P_interior::var_fine_T(const Grid* gitter, int level)
00317      const {
00318   return gitter->Give_variable(ind.next_TD(Rd,level+1),level+1);
00319 };
00320 inline double *P_interior::var_fine_D(const Grid* gitter, int level)
00321      const {
00322   return gitter->Give_variable(ind.next_TD(Ld,level+1),level+1);
00323 };
00324 // double next:
00325 inline double *P_interior::var_fine_ND(const Grid* gitter, int level)
00326      const {
00327   return gitter->Give_variable(ind.next_NS(Rd,level+1).next_TD(Ld,level+1),
00328                                level+1);
00329 };
00330 inline double *P_interior::var_fine_WN(const Grid* gitter, int level)
00331      const {
00332   return gitter->Give_variable(ind.next_NS(Rd,level+1).next_EW(Ld,level+1),
00333                                level+1);
00334 };
00335 inline double *P_interior::var_fine_WT(const Grid* gitter, int level)
00336      const {
00337   return gitter->Give_variable(ind.next_TD(Rd,level+1).next_EW(Ld,level+1),
00338                                level+1);
00339 };
00340 inline double *P_interior::var_fine_ED(const Grid* gitter, int level)
00341      const {
00342   return gitter->Give_variable(ind.next_TD(Ld,level+1).next_EW(Rd,level+1),
00343                                level+1);
00344 };
00345 inline double *P_interior::var_fine_ST(const Grid* gitter, int level)
00346      const {
00347   return gitter->Give_variable(ind.next_TD(Rd,level+1).next_NS(Ld,level+1),
00348                                level+1);
00349 };
00350 inline double *P_interior::var_fine_ES(const Grid* gitter, int level)
00351      const {
00352   return gitter->Give_variable(ind.next_EW(Rd,level+1).next_NS(Ld,level+1),
00353                                level+1);
00354 };
00355 // third next:
00356 inline double *P_interior::var_fine_EST(const Grid* gitter, int level)
00357      const {
00358   return gitter->Give_variable(
00359     ind.next_EW(Rd,level+1).next_NS(Ld,level+1).next_TD(Rd,level+1),level+1);
00360 };
00361 inline double *P_interior::var_fine_WND(const Grid* gitter, int level)
00362      const {
00363   return gitter->Give_variable(
00364     ind.next_EW(Ld,level+1).next_NS(Rd,level+1).next_TD(Ld,level+1),level+1);
00365 };
00366 
00367 // Coarse level
00368 // --------------
00369 // idem:
00370 inline double *P_interior::var_coarse_M(const Grid* gitter, int level) const {
00371   return gitter->Give_variable(ind,level-1);
00372 };
00373 // next:
00374 inline double *P_interior::var_coarse_N(const Grid* gitter, int level)
00375      const {
00376   return gitter->Give_variable(ind.next_NS(Rd,level),level-1);
00377 };
00378 inline double *P_interior::var_coarse_S(const Grid* gitter, int level)
00379      const {
00380   return gitter->Give_variable(ind.next_NS(Ld,level),level-1);
00381 };
00382 inline double *P_interior::var_coarse_E(const Grid* gitter, int level)
00383      const {
00384   return gitter->Give_variable(ind.next_EW(Rd,level),level-1);
00385 };
00386 inline double *P_interior::var_coarse_W(const Grid* gitter, int level)
00387      const {
00388   return gitter->Give_variable(ind.next_EW(Ld,level),level-1);
00389 };
00390 inline double *P_interior::var_coarse_T(const Grid* gitter, int level)
00391      const {
00392   return gitter->Give_variable(ind.next_TD(Rd,level),level-1);
00393 };
00394 inline double *P_interior::var_coarse_D(const Grid* gitter, int level)
00395      const {
00396   return gitter->Give_variable(ind.next_TD(Ld,level),level-1);
00397 };
00398 // double next:
00399 inline double *P_interior::var_coarse_ND(const Grid* gitter, int level)
00400      const {
00401   return gitter->Give_variable(ind.next_ND(level),level-1);
00402 };
00403 inline double *P_interior::var_coarse_WN(const Grid* gitter, int level)
00404      const {
00405   return gitter->Give_variable(ind.next_WN(level),level-1);
00406 };
00407 inline double *P_interior::var_coarse_WT(const Grid* gitter, int level)
00408      const {
00409   return gitter->Give_variable(ind.next_WT(level),level-1);
00410 };
00411 inline double *P_interior::var_coarse_ED(const Grid* gitter, int level)
00412      const {
00413   return gitter->Give_variable(ind.next_ED(level),level-1);
00414 };
00415 inline double *P_interior::var_coarse_ST(const Grid* gitter, int level)
00416      const {
00417   return gitter->Give_variable(ind.next_ST(level),level-1);
00418 };
00419 inline double *P_interior::var_coarse_ES(const Grid* gitter, int level)
00420      const {
00421   return gitter->Give_variable(ind.next_ES(level),level-1);
00422 };
00423 // third next:
00424 inline double *P_interior::var_coarse_EST(const Grid* gitter, int level)
00425      const {
00426   return gitter->Give_variable(ind.next_EST(level),level-1);
00427 };
00428 inline double *P_interior::var_coarse_WND(const Grid* gitter, int level)
00429      const {
00430   return gitter->Give_variable(ind.next_WND(level),level-1);
00431 };

Generated on Mon Jan 16 13:23:41 2006 for IPPL by  doxygen 1.4.6