diff --git a/dune/mmdg/dg.hh b/dune/mmdg/dg.hh
index 3ed8832755acdddc5f896845e8184eda3e8dc103..73835628eec65a9616fc96423d9c4b57f6b56b9e 100644
--- a/dune/mmdg/dg.hh
+++ b/dune/mmdg/dg.hh
@@ -26,13 +26,13 @@ public:
const void operator() (const Scalar K, const Scalar mu) const
{
- //NOTE: what is an appropriate sparse matrix type?
+ //NOTE: what is an appropriate sparse matrix type? -> BCRS
const int dof = (1 + dim)*gridView_.size(0); //degrees of freedom
using Matrix = Dune::DynamicMatrix<Scalar>;
using Vector = Dune::DynamicVector<Scalar>;
Matrix A(dof, dof, 0.0); //stiffness matrix
Vector b(dof, 0.0); //load vector
- Vector d;
+ Vector d(dof, 0.0);
//NOTE:
// const int order = 3; //order of the quadrature rule
@@ -311,6 +311,8 @@ public:
}
}
+ std::cout << A << std::endl;
+
//NOTE: what would be an appropiate solver here?
A.solve(d, b);
@@ -348,11 +350,28 @@ public:
}
}
+ Dune::DynamicVector<Scalar>
+ pressureTEST(gridView_.size(0), 0.0);
+
+ for (const auto& elem : elements(gridView_))
+ {
+ const int elemIdx = mapper_.index(elem);
+ const int elemIdxSLE = (dim + 1)*elemIdx;
+ const auto& center = elem.geometry().center();
+ pressureTEST[elemIdx] = d[elemIdxSLE];
+
+ for (int i = 0; i < dim; i++)
+ {
+ pressureTEST[elemIdx] += d[elemIdxSLE + i + 1] * center[i];
+ }
+ }
+
+
//NOTE: dim = 1
- auto exactSolution = [](const auto& pos) {return 0.5*pos[0]*(pos[0] - 1);};
+// auto exactSolution = [](const auto& pos) {return 0.5*pos[0]*(pos[0] - 1);};
//NOTE: dim = 2
-/* auto exactSolution = [](const auto& pos)
+ auto exactSolution = [](const auto& pos)
{
double solution = 0.0;
for (int m = 1; m <= 21; m = m + 2)
@@ -366,7 +385,7 @@ public:
solution *= -16 / pow(M_PI, 4);
return solution;
};
-*/
+
Dune::DynamicVector<double> exactPressure(gridView_.size(0));
for (const auto& elem : elements(gridView_))
@@ -379,10 +398,10 @@ public:
//create output directory if necessary
mkdir("data", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
- auto vtkWriter =
- std::make_shared<Dune::VTKWriter<GridView>>(gridView_);
- Dune::VTKSequenceWriter<GridView>
- vtkSqWriter(vtkWriter, "pressure", "data", "data");
+ Dune::VTKWriter<GridView> vtkWriter(gridView_, Dune::VTK::nonconforming);
+ // std::make_shared<Dune::VTKWriter<GridView>>(gridView_);
+// Dune::VTKSequenceWriter<GridView>
+// vtkSqWriter(vtkWriter, "pressure", "data", "data");
using VTKFunction = Dune::VTKFunction<GridView>;
using P1Function = Dune::NonconformingP1VTKFunction<GridView,
@@ -391,10 +410,11 @@ public:
new P1Function(gridView_, pressure, "pressure");
//NOTE: why does this only work with a sequence writer?
- vtkSqWriter.addVertexData(
+ vtkWriter.addVertexData(
std::shared_ptr<const VTKFunction>(vtkOperator) );
- vtkSqWriter.addCellData(exactPressure, "exactPressure");
- vtkSqWriter.write(0.0);
+ vtkWriter.addCellData(exactPressure, "exactPressure");
+ vtkWriter.addCellData(pressureTEST, "pressureTEST");
+ vtkWriter.write("linearpressure");
}
const GridView& gridView_;