Peano
Loading...
Searching...
No Matches
CGMultigrid.cpph
Go to the documentation of this file.
1#include "CGMultigrid.h"
2#include "peano4/utils/Loop.h"
3
4
5template<class CGSolver>
8 auto& coarseGridVertices,
9 auto& fineGridVertex,
10 const auto& vertexMarker
11) {
12 logTraceInWith3Arguments("restrict", fineGridVertex.getLevel(), fineGridVertex.getResidual(), restrictionMatrix);
13
14 int col = peano4::utils::dLinearised( vertexMarker.getRelativePositionWithinFatherCell(), TwoPowerD );
15
16 for (int v=0; v<TwoPowerD; v++) {
17 for (int unknown=0; unknown<CGSolver::VertexUnknowns; unknown++) {
18 logTraceInWith1Argument("restrictLoop", coarseGridVertices(v).getRhs());
19 coarseGridVertices(v).setRhs(
20 unknown,
21 coarseGridVertices(v).getRhs(unknown) + restrictionMatrix(v,col) * fineGridVertex.getResidual(unknown)
22 );
23 logTraceOutWith1Argument("restrictLoop", coarseGridVertices(v).toString());
24 }
25 }
26 logTraceOut("restrict");
27}
28
29template<class CGSolver>
32 auto& coarseGridVertices,
33 auto& fineGridVertex,
34 const auto& vertexMarker
35) {
36 logTraceInWith3Arguments("prolongate", fineGridVertex.getLevel(), fineGridVertex.getU(), coarseGridVertices(0).getLevel());
37 int row = peano4::utils::dLinearised( vertexMarker.getRelativePositionWithinFatherCell(), TwoPowerD );
38
39 for (int unknown=0; unknown<CGSolver::VertexUnknowns; unknown++) {
40 double delta = 0;
41 for (int v=0; v<TwoPowerD; v++) {
42 logTraceInWith3Arguments("getDelta", delta, coarseGridVertices(v).getDelta(unknown), prolongationMatrix(row,v));
43 delta += prolongationMatrix(row,v) * coarseGridVertices(v).getDelta(unknown);
44 logTraceOutWith1Argument("getDelta", delta);
45 }
46 fineGridVertex.setU(
47 unknown,
48 fineGridVertex.getU(unknown) + delta
49 );
50 }
51 logTraceOutWith1Argument("prolongate", fineGridVertex.getU());
52}
#define TwoPowerD
Definition Globals.h:19
#define logTraceOutWith1Argument(methodName, argument0)
Definition Log.h:380
#define logTraceOut(methodName)
Definition Log.h:379
#define logTraceInWith3Arguments(methodName, argument0, argument1, argument2)
Definition Log.h:372
#define logTraceInWith1Argument(methodName, argument0)
Definition Log.h:370
Static (i.e.
Definition Matrix.h:31
std::string toString(Filter filter)
Definition convert.cpp:170
void restrictToNextLevel(const tarch::la::Matrix< TwoPowerD, FourPowerD, double > &restrictionMatrix, auto &coarseGridVertices, auto &fineGridVertex, const auto &vertexMarker)
Restrict data from fine grid vertices onto the coarse level.
void prolongate(const tarch::la::Matrix< FourPowerD, TwoPowerD, double > &prolongationMatrix, auto &coarseGridVertices, auto &fineGridVertex, const auto &vertexMarker)
Prolongate data from coarse vertices down onto fine vertices.
CPUGPUMethod int dLinearised(const tarch::la::Vector< Dimensions, int > &counter, int max)
Map d-dimensional vector onto integer index.
Definition Loop.cpp:106