Skip to content
Snippets Groups Projects
Commit 317c39af authored by Elias Pipping's avatar Elias Pipping
Browse files

[Cleanup] Do everything on the leaf grid

parent af00ac8c
No related branches found
No related tags found
No related merge requests found
...@@ -111,10 +111,10 @@ int main(int argc, char *argv[]) { ...@@ -111,10 +111,10 @@ int main(int argc, char *argv[]) {
auto const refinements = parset.get<size_t>("grid.refinements"); auto const refinements = parset.get<size_t>("grid.refinements");
grid->globalRefine(refinements); grid->globalRefine(refinements);
size_t const fineVertexCount = grid->size(grid->maxLevel(), dims);
using GridView = Grid::LeafGridView; using GridView = Grid::LeafGridView;
GridView const leafView = grid->leafView(); GridView const leafView = grid->leafView();
size_t const leafVertexCount = leafView.size(dims);
auto myFaces = gridConstructor.constructFaces(leafView); auto myFaces = gridConstructor.constructFaces(leafView);
...@@ -123,18 +123,18 @@ int main(int argc, char *argv[]) { ...@@ -123,18 +123,18 @@ int main(int argc, char *argv[]) {
// Frictional Boundary // Frictional Boundary
BoundaryPatch<GridView> const &frictionalBoundary = myFaces.lower; BoundaryPatch<GridView> const &frictionalBoundary = myFaces.lower;
Dune::BitSetVector<1> frictionalNodes(fineVertexCount); Dune::BitSetVector<1> frictionalNodes(leafVertexCount);
frictionalBoundary.getVertices(frictionalNodes); frictionalBoundary.getVertices(frictionalNodes);
// Surface // Surface
BoundaryPatch<GridView> const &surface = myFaces.upper; BoundaryPatch<GridView> const &surface = myFaces.upper;
Dune::BitSetVector<1> surfaceNodes(fineVertexCount); Dune::BitSetVector<1> surfaceNodes(leafVertexCount);
surface.getVertices(surfaceNodes); surface.getVertices(surfaceNodes);
// Dirichlet Boundary // Dirichlet Boundary
Dune::BitSetVector<dims> noNodes(fineVertexCount); Dune::BitSetVector<dims> noNodes(leafVertexCount);
Dune::BitSetVector<dims> dirichletNodes(fineVertexCount); Dune::BitSetVector<dims> dirichletNodes(leafVertexCount);
for (size_t i = 0; i < fineVertexCount; ++i) { for (size_t i = 0; i < leafVertexCount; ++i) {
if (myFaces.right.containsVertex(i)) if (myFaces.right.containsVertex(i))
dirichletNodes[i][0] = true; dirichletNodes[i][0] = true;
...@@ -200,7 +200,7 @@ int main(int argc, char *argv[]) { ...@@ -200,7 +200,7 @@ int main(int argc, char *argv[]) {
_relativeTime); _relativeTime);
_ell += gravityFunctional; _ell += gravityFunctional;
}; };
Vector ell(fineVertexCount); Vector ell(leafVertexCount);
computeExternalForces(0.0, ell); computeExternalForces(0.0, ell);
// {{{ Initial conditions // {{{ Initial conditions
...@@ -235,16 +235,16 @@ int main(int argc, char *argv[]) { ...@@ -235,16 +235,16 @@ int main(int argc, char *argv[]) {
}; };
// Solve the stationary problem // Solve the stationary problem
Vector u_initial(fineVertexCount); Vector u_initial(leafVertexCount);
u_initial = 0.0; u_initial = 0.0;
solveLinearProblem(dirichletNodes, A, ell, u_initial, ANorm, solveLinearProblem(dirichletNodes, A, ell, u_initial, ANorm,
parset.sub("u0.solver")); parset.sub("u0.solver"));
Vector ur_initial(fineVertexCount); Vector ur_initial(leafVertexCount);
ur_initial = 0.0; ur_initial = 0.0;
ScalarVector alpha_initial(fineVertexCount); ScalarVector alpha_initial(leafVertexCount);
alpha_initial = parset.get<double>("boundary.friction.initialAlpha"); alpha_initial = parset.get<double>("boundary.friction.initialAlpha");
ScalarVector normalStress(fineVertexCount); ScalarVector normalStress(leafVertexCount);
myAssembler.assembleNormalStress(frictionalBoundary, normalStress, myAssembler.assembleNormalStress(frictionalBoundary, normalStress,
body.getYoungModulus(), body.getYoungModulus(),
body.getPoissonRatio(), u_initial); body.getPoissonRatio(), u_initial);
...@@ -254,21 +254,21 @@ int main(int argc, char *argv[]) { ...@@ -254,21 +254,21 @@ int main(int argc, char *argv[]) {
frictionalBoundary, frictionInfo, normalStress); frictionalBoundary, frictionInfo, normalStress);
myGlobalFriction->updateAlpha(alpha_initial); myGlobalFriction->updateAlpha(alpha_initial);
Vector v_initial(fineVertexCount); Vector v_initial(leafVertexCount);
v_initial = 0.0; v_initial = 0.0;
{ {
double v_initial_const; double v_initial_const;
velocityDirichletFunction.evaluate(0.0, v_initial_const); velocityDirichletFunction.evaluate(0.0, v_initial_const);
assert(std::abs(v_initial_const) < 1e-14); assert(std::abs(v_initial_const) < 1e-14);
} }
Vector vr_initial(fineVertexCount); Vector vr_initial(leafVertexCount);
vr_initial = 0.0; vr_initial = 0.0;
Vector a_initial(fineVertexCount); Vector a_initial(leafVertexCount);
a_initial = 0.0; a_initial = 0.0;
{ {
// We solve Ma = ell - [Au + Cv + Psi(v)] // We solve Ma = ell - [Au + Cv + Psi(v)]
Vector accelerationRHS(fineVertexCount); Vector accelerationRHS(leafVertexCount);
{ {
accelerationRHS = 0.0; accelerationRHS = 0.0;
Arithmetic::addProduct(accelerationRHS, A, u_initial); Arithmetic::addProduct(accelerationRHS, A, u_initial);
...@@ -283,7 +283,7 @@ int main(int argc, char *argv[]) { ...@@ -283,7 +283,7 @@ int main(int argc, char *argv[]) {
} }
// }}} // }}}
Vector vertexCoordinates(fineVertexCount); Vector vertexCoordinates(leafVertexCount);
{ {
Dune::MultipleCodimMultipleGeomTypeMapper< Dune::MultipleCodimMultipleGeomTypeMapper<
GridView, Dune::MCMGVertexLayout> const vertexMapper(leafView); GridView, Dune::MCMGVertexLayout> const vertexMapper(leafView);
...@@ -354,8 +354,8 @@ int main(int argc, char *argv[]) { ...@@ -354,8 +354,8 @@ int main(int argc, char *argv[]) {
parset.get<double>("boundary.friction.V0")); parset.get<double>("boundary.friction.V0"));
Vector v = v_initial; Vector v = v_initial;
Vector v_m(fineVertexCount); Vector v_m(leafVertexCount);
ScalarVector alpha(fineVertexCount); ScalarVector alpha(leafVertexCount);
auto const timeSteps = parset.get<size_t>("timeSteps.number"), auto const timeSteps = parset.get<size_t>("timeSteps.number"),
maximumStateFPI = parset.get<size_t>("v.fpi.maximumIterations"), maximumStateFPI = parset.get<size_t>("v.fpi.maximumIterations"),
...@@ -379,8 +379,8 @@ int main(int argc, char *argv[]) { ...@@ -379,8 +379,8 @@ int main(int argc, char *argv[]) {
computeExternalForces(relativeTime, ell); computeExternalForces(relativeTime, ell);
Matrix velocityMatrix; Matrix velocityMatrix;
Vector velocityRHS(fineVertexCount); Vector velocityRHS(leafVertexCount);
Vector velocityIterate(fineVertexCount); Vector velocityIterate(leafVertexCount);
stateUpdater->setup(tau); stateUpdater->setup(tau);
timeSteppingScheme->setup(ell, tau, relativeTime, velocityRHS, timeSteppingScheme->setup(ell, tau, relativeTime, velocityRHS,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment