Blockstructured Adaptive Mesh Refinement in object-oriented C++
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 Contactlast update: 06/01/04