3#include "peano4/utils/Loop.h"
6tarch::logging::Log examples::finitevolumes::actions::CreateGrid::_log(
"examples::finitevolumes::actions::CreateGrid");
9examples::finitevolumes::actions::CreateGrid::CreateGrid(
int treeNumber) {
14examples::finitevolumes::actions::CreateGrid::~CreateGrid() {
19std::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)
34void examples::finitevolumes::actions::CreateGrid::beginTraversal(
45void examples::finitevolumes::actions::CreateGrid::endTraversal(
56void 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;
74void 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) {
88void 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) {
102void 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) {
116void 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) {
130void 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) {
144void 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;
175void 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) {
190void 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) {
205void 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) {