Changeset ac6d04 for src/interface/interface.cpp
- Timestamp:
- Apr 10, 2012, 1:55:49 PM (14 years ago)
- Children:
- a40eea
- Parents:
- d24c2f
- File:
-
- 1 edited
-
src/interface/interface.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/interface/interface.cpp
rd24c2f rac6d04 23 23 const int& coarseningSteps, const vmg_float& alpha) 24 24 { 25 Index size_factor_max = 1; 26 int num_cells; 25 int i; 26 Index num_cells = Helper::intpow(2, levelMax); 27 Index size_factor; 27 28 28 29 const Vector box_center = box_offset + 0.5 * box_size; 29 30 30 for (i nt i=levelMax; i>=levelMin; --i) {31 for (i=0; i<coarseningSteps; ++i) { 31 32 32 33 global.push_back(GlobalIndices()); 33 34 extent.push_back(SpatialExtent()); 34 35 35 num_cells = Helper::intpow(2, i); 36 for (int j=0; j<3; ++j) 37 size_factor[j] = (bc[j] == Periodic ? 1 : Helper::intpow(2, static_cast<int>(log(pow(alpha, i+1)) / log(2.0) + 1.0))); 36 38 37 extent.back().SizeFactor() = 1; 38 extent.back().Size() = box_size; 39 extent.back().Begin() = box_offset; 40 extent.back().End() = box_offset + box_size; 41 extent.back().MeshWidth() = box_size / num_cells; 39 extent.back().Size() = box_size * static_cast<Vector>(size_factor); 40 extent.back().Begin() = box_center - 0.5 * extent.back().Size(); 41 extent.back().End() = extent.back().Begin() + extent.back().Size(); 42 extent.back().MeshWidth() = pow(2.0, i-levelMax); 42 43 43 global.back().SizeGlobal() = num_cells + 1; 44 global.back().SizeLocal() = num_cells + 1; 45 global.back().BeginFinest() = 0; 46 global.back().BeginLocal() = 0; 47 global.back().EndLocal() = num_cells + 1; 44 num_cells = Helper::intpow(2,levelMax-i) * size_factor; 48 45 49 if (i == levelMax) { 50 global.back().SizeFinest() = num_cells + 1; 51 global.back().EndFinest() = num_cells + 1; 52 global.back().BoundaryType() = GlobalMax; 46 global.back().GlobalSize() = num_cells + 1; 47 global.back().LocalSize() = num_cells + 1; 48 global.back().LocalBegin() = 0; 49 global.back().LocalEnd() = num_cells + 1; 50 51 global.back().FinestAbsSize() = Helper::intpow(2,i) * num_cells + 1; 52 global.back().FinestAbsBegin() = ((global.back().FinestAbsSize()-1) * (1-size_factor)) / (2*size_factor); 53 global.back().FinestAbsEnd() = global.back().FinestAbsBegin() + global.back().FinestAbsSize(); 54 55 if (i==0) 56 global.back().GlobalFinerBegin() = (num_cells - Helper::intpow(2, levelMax-i))/2; 57 else 58 global.back().GlobalFinerBegin() = (global.back().FinestAbsSize() - (++global.rbegin())->FinestAbsSize()) / Helper::intpow(2,i+1); 59 60 global.back().GlobalFinerEnd() = global.back().GlobalSize() - global.back().GlobalFinerBegin(); 61 global.back().GlobalFinerSize() = global.back().GlobalFinerEnd() - global.back().GlobalFinerBegin(); 62 63 global.back().LocalFinerBegin() = global.back().GlobalFinerBegin(); 64 global.back().LocalFinerEnd() = global.back().GlobalFinerEnd(); 65 global.back().LocalFinerSize() = global.back().GlobalFinerSize(); 66 } 67 68 while (global.size() == 0 || global.back().GlobalSize().Min() > Helper::intpow(2, levelMin)+1) { 69 70 if (global.size() > 0) 71 num_cells /= 2; 72 73 global.push_back(GlobalIndices()); 74 extent.push_back(SpatialExtent()); 75 76 if (global.size() == 1) { 77 extent.back().Size() = box_size; 78 extent.back().Begin() = box_offset; 79 extent.back().End() = box_offset + box_size; 80 extent.back().MeshWidth() = box_size / static_cast<Vector>(num_cells); 53 81 }else { 54 global.back().SizeFinest() = (++global.rbegin())->SizeFinest(); 55 global.back().EndFinest() = (++global.rbegin())->SizeFinest(); 56 global.back().BoundaryType() = GlobalCoarsened; 82 extent.back().Size() = (++extent.rbegin())->Size(); 83 extent.back().Begin() = (++extent.rbegin())->Begin(); 84 extent.back().End() = (++extent.rbegin())->End(); 85 extent.back().MeshWidth() = 2.0 * (++extent.rbegin())->MeshWidth(); 57 86 } 87 88 global.back().GlobalSize() = num_cells + 1; 89 global.back().LocalSize() = num_cells + 1; 90 global.back().LocalBegin() = 0; 91 global.back().LocalEnd() = num_cells + 1; 92 93 if (global.size() == 1) { 94 global.back().FinestAbsBegin() = 0; 95 global.back().FinestAbsEnd() = global.back().GlobalSize(); 96 global.back().FinestAbsSize() = global.back().GlobalSize(); 97 }else { 98 global.back().FinestAbsBegin() = (++global.rbegin())->FinestAbsBegin(); 99 global.back().FinestAbsEnd() = (++global.rbegin())->FinestAbsEnd(); 100 global.back().FinestAbsSize() = (++global.rbegin())->FinestAbsSize(); 101 } 102 103 global.back().GlobalFinerBegin() = 0; 104 global.back().GlobalFinerEnd() = global.back().GlobalSize(); 105 global.back().GlobalFinerSize() = global.back().GlobalSize(); 106 107 global.back().LocalFinerBegin() = global.back().GlobalFinerBegin(); 108 global.back().LocalFinerEnd() = global.back().GlobalFinerEnd(); 109 global.back().LocalFinerSize() = global.back().GlobalFinerSize(); 58 110 59 111 } 60 112 61 for (i nt i=0; i<3; ++i)113 for (i=0; i<3; ++i) 62 114 if (bc[i] == Periodic) 63 115 for (unsigned int j=0; j<global.size(); ++j) { 64 global[j].SizeGlobal()[i] -= 1; 65 global[j].SizeFinest()[i] -= Helper::intpow(2, j); 66 global[j].SizeLocal()[i] -= 1; 67 global[j].EndLocal()[i] -= 1; 68 global[j].EndFinest()[i] -= Helper::intpow(2, j); 116 global[j].GlobalSize()[i] -= 1; 117 global[j].FinestAbsSize()[i] -= Helper::intpow(2, j); 118 global[j].FinestAbsEnd()[i] -= Helper::intpow(2, j); 119 global[j].LocalSize()[i] -= 1; 120 global[j].LocalEnd()[i] -= 1; 121 global[j].GlobalFinerSize()[i] -= 1; 122 global[j].GlobalFinerEnd()[i] -= 1; 123 global[j].LocalFinerSize()[i] -= 1; 124 global[j].LocalFinerEnd()[i] -= 1; 69 125 } 70 126 71 127 levelMin = levelMax - global.size() + 1; 128 129 global.back().BoundaryType() = GlobalCoarsened; 130 131 for (i=global.size()-2; i>=0; --i) { 132 if (global[i].FinestAbsSize().Product() >= global[i+1].FinestAbsSize().Product()) { 133 global[i].BoundaryType() = GlobalCoarsened; 134 }else { 135 global[i].BoundaryType() = LocallyRefined; 136 global[i+1].BoundaryType() = GlobalMax; 137 break; 138 } 139 } 140 141 for (; i>=0; --i) 142 global[i].BoundaryType() = LocallyRefined; 143 144 if (global.front().BoundaryType() != LocallyRefined && 145 global.front().BoundaryType() != GlobalMax) 146 global.front().BoundaryType() = GlobalMax; 147 72 148 }
Note:
See TracChangeset
for help on using the changeset viewer.
