AMROC Main     Blockstructured Adaptive Mesh Refinement in object-oriented C++


Main Page   Class Hierarchy   Compound List   File List  

GridDataBlock.C

Go to the documentation of this file.
00001 
00006 #include "GridDataBlock.h"
00007 
00008 void gdbSetRanks(const int rank, const int align, short* ranks)
00009   {
00010    if (align == DAGH_All || align == DAGHNull) return;
00011    assert(rank < 3);
00012    if (rank == 1) {
00013      switch(align & (DAGH_X|DAGH_Y|DAGH_Z)) {
00014        case DAGH_X:
00015          ranks[0] = DAGH_X;
00016          break;
00017        case DAGH_Y:
00018          ranks[0] = DAGH_Y;
00019          break;
00020        case DAGH_Z:
00021          ranks[0] = DAGH_Z;
00022          break;
00023        default:
00024          assert(0);
00025      }
00026    }
00027    if (rank == 2) {
00028      switch(align & (DAGH_XY|DAGH_XZ|DAGH_YZ)) {
00029        case DAGH_XY:
00030          ranks[0] = DAGH_X;
00031          ranks[1] = DAGH_Y;
00032          break;
00033        case DAGH_XZ:
00034          ranks[0] = DAGH_X;
00035          ranks[1] = DAGH_Z;
00036          break;
00037        case DAGH_YZ:
00038          ranks[0] = DAGH_Y;
00039          ranks[1] = DAGH_Z;
00040          break;
00041        default:
00042          assert(0);
00043      }
00044    }
00045   }
00046 
00047 void gdbAlignBBox(const int rank, BBox& bb, const int align)
00048   {
00049    if (align == DAGH_All || align == DAGHNull) return;
00050    assert(rank < 3);
00051    BBox b;
00052    if (rank == 1) {
00053      b.rank = bb.rank;
00054      (b.lower()).rank = (bb.lower()).rank;
00055      (b.upper()).rank = (bb.upper()).rank;
00056      (b.stepsize()).rank = (bb.stepsize()).rank;
00057      switch(align & (DAGH_X|DAGH_Y|DAGH_Z)) {
00058        case DAGH_X:
00059          b.stepsize(0) = bb.stepsize(0);
00060          if (b.rank == 1) 
00061            if (align & DAGH_Dim1ToTop) {
00062              b.lower(0) = bb.upper(0);
00063              b.upper(0) = bb.upper(0);
00064            }
00065            else {
00066              b.lower(0) = bb.lower(0);
00067              b.upper(0) = bb.lower(0);
00068            }
00069          else {
00070            b.lower(0) = bb.lower(0);
00071            b.upper(0) = bb.upper(0);
00072          }
00073          if (b.rank > 1) {
00074            if (align & DAGH_Dim1ToTop) {
00075              b.lower(1) = bb.upper(1);
00076              b.upper(1) = bb.upper(1);
00077            }
00078            else {
00079              b.lower(1) = bb.lower(1);
00080              b.upper(1) = bb.lower(1);
00081            }
00082            b.stepsize(1) = bb.stepsize(1);
00083          } 
00084          if (b.rank > 2) {
00085            if (align & DAGH_Dim2ToTop) {
00086              b.lower(2) = bb.upper(2);
00087              b.upper(2) = bb.upper(2);
00088            }
00089            else {
00090              b.lower(2) = bb.lower(2);
00091              b.upper(2) = bb.lower(2);
00092            }
00093            b.stepsize(2) = bb.stepsize(2);
00094          }       
00095          break;
00096 
00097        case DAGH_Y:
00098          b.lower(0) = bb.lower(1);
00099          b.upper(0) = bb.upper(1);
00100          b.stepsize(0) = bb.stepsize(1);
00101          if (b.rank > 1) {
00102            if (align & DAGH_Dim1ToTop) {
00103              b.lower(1) = bb.upper(0);
00104              b.upper(1) = bb.upper(0);
00105            }
00106            else {
00107              b.lower(1) = bb.lower(0);
00108              b.upper(1) = bb.lower(0);
00109            }
00110            b.stepsize(1) = bb.stepsize(0);
00111          } 
00112          if (b.rank > 2) {
00113            if (align & DAGH_Dim2ToTop) {
00114              b.lower(2) = bb.upper(2);
00115              b.upper(2) = bb.upper(2);
00116            }
00117            else {
00118              b.lower(2) = bb.lower(2);
00119              b.upper(2) = bb.lower(2);
00120            }
00121            b.stepsize(2) = bb.stepsize(2);
00122          }       
00123          break;
00124 
00125        case DAGH_Z:
00126          b.lower(0) = bb.lower(2);
00127          b.upper(0) = bb.upper(2);
00128          b.stepsize(0) = bb.stepsize(2);
00129          if (b.rank > 1) {
00130            if (align & DAGH_Dim1ToTop) {
00131              b.lower(1) = bb.upper(0);
00132              b.upper(1) = bb.upper(0);
00133            }
00134            else {
00135              b.lower(1) = bb.lower(0);
00136              b.upper(1) = bb.lower(0);
00137            }
00138            b.stepsize(1) = bb.stepsize(0);
00139          } 
00140          if (b.rank > 2) {
00141            if (align & DAGH_Dim2ToTop) {
00142              b.lower(2) = bb.upper(1);
00143              b.upper(2) = bb.upper(1);
00144            }
00145            else {
00146              b.lower(2) = bb.lower(1);
00147              b.upper(2) = bb.lower(1);
00148            }
00149            b.stepsize(2) = bb.stepsize(1);
00150          }       
00151          break;
00152 
00153        default:
00154          assert(0);
00155      }
00156    }
00157    if (rank == 2) {
00158      b.rank = bb.rank;
00159      (b.lower()).rank = (bb.lower()).rank;
00160      (b.upper()).rank = (bb.upper()).rank;
00161      (b.stepsize()).rank = (bb.stepsize()).rank;
00162      switch(align & (DAGH_XY|DAGH_XZ|DAGH_YZ)) {
00163        case DAGH_XY:
00164          b.lower(0) = bb.lower(0);
00165          b.upper(0) = bb.upper(0);
00166          b.stepsize(0) = bb.stepsize(0);
00167          b.lower(1) = bb.lower(1);
00168          b.upper(1) = bb.upper(1);
00169          b.stepsize(1) = bb.stepsize(1);
00170          if (b.rank > 2) {
00171            if (align & DAGH_Dim1ToTop) {
00172              b.lower(2) = bb.upper(2);
00173              b.upper(2) = bb.upper(2);
00174            }
00175            else {
00176              b.lower(2) = bb.lower(2);
00177              b.upper(2) = bb.lower(2);
00178            }
00179            b.stepsize(2) = bb.stepsize(2);
00180          }       
00181          break;
00182 
00183        case DAGH_XZ:
00184          b.lower(0) = bb.lower(0);
00185          b.upper(0) = bb.upper(0);
00186          b.stepsize(0) = bb.stepsize(0);
00187          b.lower(1) = bb.lower(2);
00188          b.upper(1) = bb.upper(2);
00189          b.stepsize(1) = bb.stepsize(2);
00190          if (b.rank > 2) {
00191            if (align & DAGH_Dim1ToTop) {
00192              b.lower(2) = bb.upper(1);
00193              b.upper(2) = bb.upper(1);
00194            }
00195            else {
00196              b.lower(2) = bb.lower(1);
00197              b.upper(2) = bb.lower(1);
00198            }
00199            b.stepsize(2) = bb.stepsize(1);
00200          }       
00201          break;
00202 
00203        case DAGH_YZ:
00204          b.lower(0) = bb.lower(1);
00205          b.upper(0) = bb.upper(1);
00206          b.stepsize(0) = bb.stepsize(1);
00207          b.lower(1) = bb.lower(2);
00208          b.upper(1) = bb.upper(2);
00209          b.stepsize(1) = bb.stepsize(2);
00210          if (b.rank > 2) {
00211            if (align & DAGH_Dim1ToTop) {
00212              b.lower(2) = bb.upper(0);
00213              b.upper(2) = bb.upper(0);
00214            }
00215            else {
00216              b.lower(2) = bb.lower(0);
00217              b.upper(2) = bb.lower(0);
00218            }
00219            b.stepsize(2) = bb.stepsize(0);
00220          }       
00221          break;
00222 
00223        default:
00224          assert(0);
00225      }
00226    }
00227    bb = b;
00228   }
00229 
00230 ostream& operator<<(ostream& os, const GDB_Interaction& gdbi)
00231   {
00232     if (&gdbi == (GDB_Interaction *) NULL) return os;
00233 
00234     os << "GDB_Interaction[" << gdbi.idx << ": " << gdbi.bbox << "]";
00235     return os;
00236   }


Quickstart     Users Guide     Programmers Reference     Installation      Examples     Download



AMROC Main      Home      Contact
last update: 06/01/04