1 #include "CreateGrid.h"
3 #include "peano4/utils/Loop.h"
9 examples::finitevolumes::actions::CreateGrid::CreateGrid(
int treeNumber) {
14 examples::finitevolumes::actions::CreateGrid::~CreateGrid() {
19 std::vector< peano4::grid::GridControlEvent > examples::finitevolumes::actions::CreateGrid::getGridControlEvents() {
20 std::vector< peano4::grid::GridControlEvent > result;
22 result.push_back(peano4::grid::GridControlEvent(
23 peano4::grid::GridControlEvent::RefinementControl::Refine,
24 tarch::la::Vector<DIMENSIONS,double>(0.0),
25 tarch::la::Vector<DIMENSIONS,double>(1.0),
26 tarch::la::Vector<DIMENSIONS,double>(0.3)
34 void examples::finitevolumes::actions::CreateGrid::beginTraversal(
45 void examples::finitevolumes::actions::CreateGrid::endTraversal(
56 void examples::finitevolumes::actions::CreateGrid::createPersistentFace(
57 const peano4::datamanagement::FaceMarker&
marker,
58 examples::finitevolumes::facedata::Q& fineGridFaceQ,
59 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
60 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
62 int NumberOfEntries = PatchSize * 2;
64 int NumberOfEntries = PatchSize * PatchSize * 2;
66 for (
int i=0; i<NumberOfEntries; i++) {
68 fineGridFaceQ.value[i*NumberOfUnknownsPerCell+
unknowns] = 0.0;
74 void examples::finitevolumes::actions::CreateGrid::destroyPersistentFace(
75 const peano4::datamanagement::FaceMarker&
marker,
76 examples::finitevolumes::facedata::Q& fineGridFaceQ,
77 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
78 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
88 void examples::finitevolumes::actions::CreateGrid::createHangingFace(
89 const peano4::datamanagement::FaceMarker&
marker,
90 examples::finitevolumes::facedata::Q& fineGridFaceQ,
91 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
92 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
102 void examples::finitevolumes::actions::CreateGrid::destroyHangingFace(
103 const peano4::datamanagement::FaceMarker&
marker,
104 examples::finitevolumes::facedata::Q& fineGridFaceQ,
105 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
106 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
116 void examples::finitevolumes::actions::CreateGrid::touchFaceFirstTime(
117 const peano4::datamanagement::FaceMarker&
marker,
118 examples::finitevolumes::facedata::Q& fineGridFaceQ,
119 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
120 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
130 void examples::finitevolumes::actions::CreateGrid::touchFaceLastTime(
131 const peano4::datamanagement::FaceMarker&
marker,
132 examples::finitevolumes::facedata::Q& fineGridFaceQ,
133 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
134 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
144 void examples::finitevolumes::actions::CreateGrid::createCell(
145 const peano4::datamanagement::CellMarker&
marker,
146 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> fineGridFacesQ,
147 examples::finitevolumes::celldata::Q& fineGridCellQ,
148 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
149 examples::finitevolumes::celldata::Q& coarseGridCellQ
151 const double cellWidth =
marker.h()(0);
152 const double subcellWidth = cellWidth / PatchSize;
154 const tarch::la::Vector<DIMENSIONS,double> subcellCentre =
155 marker.x() - 0.5*cellWidth + k.convertScalar<
double>() * subcellWidth + 0.5 * subcellWidth;
156 int dofIndex = peano4::utils::dLinearised(k,PatchSize) * NumberOfUnknownsPerCell;
158 fineGridCellQ.value[dofIndex+0] = 1.0;
159 fineGridCellQ.value[dofIndex+1] = 0;
160 fineGridCellQ.value[dofIndex+2] = 0;
161 fineGridCellQ.value[dofIndex+3] = 0;
164 tarch::la::norm2( subcellCentre-tarch::la::Vector<DIMENSIONS,double>(0.5) ) < 0.03
166 fineGridCellQ.value[dofIndex+4] = 1.0;
169 fineGridCellQ.value[dofIndex+4] = 0.0;
175 void examples::finitevolumes::actions::CreateGrid::destroyCell(
176 const peano4::datamanagement::CellMarker&
marker,
177 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> fineGridFacesQ,
178 examples::finitevolumes::celldata::Q& fineGridCellQ,
179 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
180 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
190 void examples::finitevolumes::actions::CreateGrid::touchCellFirstTime(
191 const peano4::datamanagement::CellMarker&
marker,
192 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> fineGridFacesQ,
193 examples::finitevolumes::celldata::Q& fineGridCellQ,
194 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
195 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
205 void examples::finitevolumes::actions::CreateGrid::touchCellLastTime(
206 const peano4::datamanagement::CellMarker&
marker,
207 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> fineGridFacesQ,
208 examples::finitevolumes::celldata::Q& fineGridCellQ,
209 peano4::datamanagement::FaceEnumerator<examples::finitevolumes::facedata::Q> coarseGridFacesQ,
210 examples::finitevolumes::celldata::Q& coarseGridCellQ) {
double norm2(double *v, int n)
tarch::logging::Log _log
This is variant 1 of the fused kernels.