src/expde/grid/listint/listint2.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 // listint2.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   // finer level
00055   // --------------
00056   // idem:
00057   double *var_fine_M(const Grid* gitter, int level) const;
00058   // next:
00059   double *var_fine_N(const Grid* gitter, int level) const;
00060   double *var_fine_S(const Grid* gitter, int level) const;
00061   double *var_fine_W(const Grid* gitter, int level) const;
00062   double *var_fine_E(const Grid* gitter, int level) const;
00063   double *var_fine_T(const Grid* gitter, int level) const;
00064   double *var_fine_D(const Grid* gitter, int level) const;
00065   // double next:
00066   double *var_fine_ND(const Grid* gitter, int level) const;
00067   double *var_fine_WN(const Grid* gitter, int level) const;
00068   double *var_fine_WT(const Grid* gitter, int level) const;
00069   double *var_fine_ED(const Grid* gitter, int level) const;
00070   double *var_fine_ST(const Grid* gitter, int level) const;
00071   double *var_fine_ES(const Grid* gitter, int level) const;
00072   // third next:
00073   double *var_fine_EST(const Grid* gitter, int level) const;
00074   double *var_fine_WND(const Grid* gitter, int level) const;
00075 
00076   // coarse level
00077   // --------------
00078   // idem:
00079   double *var_coarse_M(const Grid* gitter, int level) const;
00080   // next:
00081   double *var_coarse_N(const Grid* gitter, int level) const;
00082   double *var_coarse_S(const Grid* gitter, int level) const;
00083   double *var_coarse_W(const Grid* gitter, int level) const;
00084   double *var_coarse_E(const Grid* gitter, int level) const;
00085   double *var_coarse_T(const Grid* gitter, int level) const;
00086   double *var_coarse_D(const Grid* gitter, int level) const;
00087   // double next:
00088   double *var_coarse_ND(const Grid* gitter, int level) const;
00089   double *var_coarse_WN(const Grid* gitter, int level) const;
00090   double *var_coarse_WT(const Grid* gitter, int level) const;
00091   double *var_coarse_ED(const Grid* gitter, int level) const;
00092   double *var_coarse_ST(const Grid* gitter, int level) const;
00093   double *var_coarse_ES(const Grid* gitter, int level) const;
00094   // third next:
00095   double *var_coarse_EST(const Grid* gitter, int level) const;
00096   double *var_coarse_WND(const Grid* gitter, int level) const;
00097 
00098   // physical coordinates of the point
00099   D3vector coordinate(const Grid* gitter) const;
00100   double coordinateX(const Grid* gitter) const;
00101   double coordinateY(const Grid* gitter) const;
00102   double coordinateZ(const Grid* gitter) const;
00103 
00104   // for iteration:
00105   P_interior* Next() { return next; };
00106 
00107   // index of the point
00108   Index3D Ind() const { return ind; };
00109  private:
00110   double* pointer_varM;
00111   Index3D ind;
00112   P_interior *next;
00113 };
00114 
00115 
00116 
00117 // coordinates
00118 inline D3vector P_interior::coordinate(const Grid* gitter) const {
00119   return gitter->transform_coord(ind);
00120 };
00121 inline double P_interior::coordinateX(const Grid* gitter) const {
00122   return gitter->transform_coordX(ind);
00123 };
00124 inline double P_interior::coordinateY(const Grid* gitter) const {
00125   return gitter->transform_coordY(ind);
00126 };
00127 inline double P_interior::coordinateZ(const Grid* gitter) const {
00128   return gitter->transform_coordZ(ind);
00129 };
00130 
00131 
00132 inline void P_interior::initialize(const Grid* gitter, int var_ebene) {
00133   pointer_varM = gitter->Give_variable(ind,var_ebene);
00134 };
00135 
00136 // same level
00137 // --------------
00138 // idem:
00139 inline double *P_interior::varM(const Grid* gitter, int level) const {
00140   return pointer_varM;
00141 };
00142 // next:
00143 inline double *P_interior::varN(const Grid* gitter, int level)
00144      const {
00145   return gitter->Give_variable(ind.next_NS(Rd,level),level);
00146 };
00147 inline double *P_interior::varS(const Grid* gitter, int level)
00148      const {
00149   return gitter->Give_variable(ind.next_NS(Ld,level),level);
00150 };
00151 inline double *P_interior::varE(const Grid* gitter, int level)
00152      const {
00153   return gitter->Give_variable(ind.next_EW(Rd,level),level);
00154 };
00155 inline double *P_interior::varW(const Grid* gitter, int level)
00156      const {
00157   return gitter->Give_variable(ind.next_EW(Ld,level),level);
00158 };
00159 inline double *P_interior::varT(const Grid* gitter, int level)
00160      const {
00161   return gitter->Give_variable(ind.next_TD(Rd,level),level);
00162 };
00163 inline double *P_interior::varD(const Grid* gitter, int level)
00164      const {
00165   return gitter->Give_variable(ind.next_TD(Ld,level),level);
00166 };
00167 // double next:
00168 inline double *P_interior::varND(const Grid* gitter, int level)
00169      const {
00170   return gitter->Give_variable(ind.next_NS(Rd,level).next_TD(Ld,level),
00171                                level);
00172 };
00173 inline double *P_interior::varWN(const Grid* gitter, int level)
00174      const {
00175   return gitter->Give_variable(ind.next_NS(Rd,level).next_EW(Ld,level),
00176                                level);
00177 };
00178 inline double *P_interior::varWT(const Grid* gitter, int level)
00179      const {
00180   return gitter->Give_variable(ind.next_TD(Rd,level).next_EW(Ld,level),
00181                                level);
00182 };
00183 inline double *P_interior::varED(const Grid* gitter, int level)
00184      const {
00185   return gitter->Give_variable(ind.next_TD(Ld,level).next_EW(Rd,level),
00186                                level);
00187 };
00188 inline double *P_interior::varST(const Grid* gitter, int level)
00189      const {
00190   return gitter->Give_variable(ind.next_TD(Rd,level).next_NS(Ld,level),
00191                                level);
00192 };
00193 inline double *P_interior::varES(const Grid* gitter, int level)
00194      const {
00195   return gitter->Give_variable(ind.next_EW(Rd,level).next_NS(Ld,level),
00196                                level);
00197 };
00198 // double next special:
00199 inline double *P_interior::varWD(const Grid* gitter, int level)
00200      const {
00201   return gitter->Give_variable(ind.next_WD(level),level);
00202 };
00203 inline double *P_interior::varET(const Grid* gitter, int level)
00204      const {
00205   return gitter->Give_variable(ind.next_ET(level),level);
00206 };
00207 
00208 // third next:
00209 inline double *P_interior::varEST(const Grid* gitter, int level)
00210      const {
00211   return gitter->Give_variable(
00212     ind.next_EW(Rd,level).next_NS(Ld,level).next_TD(Rd,level),level);
00213 };
00214 inline double *P_interior::varWND(const Grid* gitter, int level)
00215      const {
00216   return gitter->Give_variable(
00217     ind.next_EW(Ld,level).next_NS(Rd,level).next_TD(Ld,level),level);
00218 };
00219 
00220 
00221 
00222 // finer level
00223 // --------------
00224 // idem:
00225 inline double *P_interior::var_fine_M(const Grid* gitter, int level) const {
00226   return gitter->Give_variable(ind,level+1);
00227 };
00228 // next:
00229 inline double *P_interior::var_fine_N(const Grid* gitter, int level)
00230      const {
00231   return gitter->Give_variable(ind.next_NS(Rd,level+1),level+1);
00232 };
00233 inline double *P_interior::var_fine_S(const Grid* gitter, int level)
00234      const {
00235   return gitter->Give_variable(ind.next_NS(Ld,level+1),level+1);
00236 };
00237 inline double *P_interior::var_fine_E(const Grid* gitter, int level)
00238      const {
00239   return gitter->Give_variable(ind.next_EW(Rd,level+1),level+1);
00240 };
00241 inline double *P_interior::var_fine_W(const Grid* gitter, int level)
00242      const {
00243   return gitter->Give_variable(ind.next_EW(Ld,level+1),level+1);
00244 };
00245 inline double *P_interior::var_fine_T(const Grid* gitter, int level)
00246      const {
00247   return gitter->Give_variable(ind.next_TD(Rd,level+1),level+1);
00248 };
00249 inline double *P_interior::var_fine_D(const Grid* gitter, int level)
00250      const {
00251   return gitter->Give_variable(ind.next_TD(Ld,level+1),level+1);
00252 };
00253 // double next:
00254 inline double *P_interior::var_fine_ND(const Grid* gitter, int level)
00255      const {
00256   return gitter->Give_variable(ind.next_NS(Rd,level+1).next_TD(Ld,level+1),
00257                                level+1);
00258 };
00259 inline double *P_interior::var_fine_WN(const Grid* gitter, int level)
00260      const {
00261   return gitter->Give_variable(ind.next_NS(Rd,level+1).next_EW(Ld,level+1),
00262                                level+1);
00263 };
00264 inline double *P_interior::var_fine_WT(const Grid* gitter, int level)
00265      const {
00266   return gitter->Give_variable(ind.next_TD(Rd,level+1).next_EW(Ld,level+1),
00267                                level+1);
00268 };
00269 inline double *P_interior::var_fine_ED(const Grid* gitter, int level)
00270      const {
00271   return gitter->Give_variable(ind.next_TD(Ld,level+1).next_EW(Rd,level+1),
00272                                level+1);
00273 };
00274 inline double *P_interior::var_fine_ST(const Grid* gitter, int level)
00275      const {
00276   return gitter->Give_variable(ind.next_TD(Rd,level+1).next_NS(Ld,level+1),
00277                                level+1);
00278 };
00279 inline double *P_interior::var_fine_ES(const Grid* gitter, int level)
00280      const {
00281   return gitter->Give_variable(ind.next_EW(Rd,level+1).next_NS(Ld,level+1),
00282                                level+1);
00283 };
00284 // third next:
00285 inline double *P_interior::var_fine_EST(const Grid* gitter, int level)
00286      const {
00287   return gitter->Give_variable(
00288     ind.next_EW(Rd,level+1).next_NS(Ld,level+1).next_TD(Rd,level+1),level+1);
00289 };
00290 inline double *P_interior::var_fine_WND(const Grid* gitter, int level)
00291      const {
00292   return gitter->Give_variable(
00293     ind.next_EW(Ld,level+1).next_NS(Rd,level+1).next_TD(Ld,level+1),level+1);
00294 };
00295 
00296 // Coarse level
00297 // --------------
00298 // idem:
00299 inline double *P_interior::var_coarse_M(const Grid* gitter, int level) const {
00300   return gitter->Give_variable(ind,level-1);
00301 };
00302 // next:
00303 inline double *P_interior::var_coarse_N(const Grid* gitter, int level)
00304      const {
00305   return gitter->Give_variable(ind.next_NS(Rd,level),level-1);
00306 };
00307 inline double *P_interior::var_coarse_S(const Grid* gitter, int level)
00308      const {
00309   return gitter->Give_variable(ind.next_NS(Ld,level),level-1);
00310 };
00311 inline double *P_interior::var_coarse_E(const Grid* gitter, int level)
00312      const {
00313   return gitter->Give_variable(ind.next_EW(Rd,level),level-1);
00314 };
00315 inline double *P_interior::var_coarse_W(const Grid* gitter, int level)
00316      const {
00317   return gitter->Give_variable(ind.next_EW(Ld,level),level-1);
00318 };
00319 inline double *P_interior::var_coarse_T(const Grid* gitter, int level)
00320      const {
00321   return gitter->Give_variable(ind.next_TD(Rd,level),level-1);
00322 };
00323 inline double *P_interior::var_coarse_D(const Grid* gitter, int level)
00324      const {
00325   return gitter->Give_variable(ind.next_TD(Ld,level),level-1);
00326 };
00327 // double next:
00328 inline double *P_interior::var_coarse_ND(const Grid* gitter, int level)
00329      const {
00330   return gitter->Give_variable(ind.next_ND(level),level-1);
00331 };
00332 inline double *P_interior::var_coarse_WN(const Grid* gitter, int level)
00333      const {
00334   return gitter->Give_variable(ind.next_WN(level),level-1);
00335 };
00336 inline double *P_interior::var_coarse_WT(const Grid* gitter, int level)
00337      const {
00338   return gitter->Give_variable(ind.next_WT(level),level-1);
00339 };
00340 inline double *P_interior::var_coarse_ED(const Grid* gitter, int level)
00341      const {
00342   return gitter->Give_variable(ind.next_ED(level),level-1);
00343 };
00344 inline double *P_interior::var_coarse_ST(const Grid* gitter, int level)
00345      const {
00346   return gitter->Give_variable(ind.next_ST(level),level-1);
00347 };
00348 inline double *P_interior::var_coarse_ES(const Grid* gitter, int level)
00349      const {
00350   return gitter->Give_variable(ind.next_ES(level),level-1);
00351 };
00352 
00353 // third next:
00354 inline double *P_interior::var_coarse_EST(const Grid* gitter, int level)
00355      const {
00356   return gitter->Give_variable(ind.next_EST(level),level-1);
00357 };
00358 inline double *P_interior::var_coarse_WND(const Grid* gitter, int level)
00359      const {
00360   return gitter->Give_variable(ind.next_WND(level),level-1);
00361 };

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