5#ifndef SGRUN_POISSONSTENCIL_H
6#define SGRUN_POISSONSTENCIL_H
8#include "../extemp/vector.h"
9#include "../myMath/myMath.h"
10#include "../cells/celldimension.h"
11enum TypeMatrixVectorMultiplication { StencilOnTheFly, StoreLocalStiffnessMatrix};
16 virtual inline void applyStencilOnCell_MPI_OMP(CellDimension& cell,VectorSparseG& input, VectorSparseG& output) {
17 cout <<
" PoissonStencil::applyStencilOnCell_MPI_OMP NOT IMPLEMENTED YET!" << endl;
20 virtual inline void applyStencilOnCell_MPI_OMP_nosymmetry(CellDimension& cell,VectorSparseG& input, VectorSparseG& output) {
21 cout <<
" PoissonStencil::applyStencilOnCell_MPI_OMP_nosymmetry NOT IMPLEMENTED YET!" << endl;
24 virtual inline void applyStencilOnCell(CellDimension& cell,VectorSparseG& input, VectorSparseG& output){
25 cout <<
" PoissonStencil::applyStencilOnCell NOT IMPLEMENTED YET!" << endl;
28 virtual inline void applyStencilOnCell_BinaryIterator(CellDimension& cell,VectorSparseG& input, VectorSparseG& output){
29 cout <<
" PoissonStencil::applyStencilOnCell_BinaryIterator NOT IMPLEMENTED YET!" << endl;
32 void initialize(Depth &T_);
33 inline double returnValue(
const IndexDimension &Index,
const MultiDimCompass &mc)
const {
35 double factors[DimensionSparseGrid];
36 for (
int j = 0; j < DimensionSparseGrid; ++j) {
37 double h = meshwidth[j];
38 Richtung r = mc.getRichtung(j);
39 factors[j] = (1.0 / 6.0) * h;
41 if((!Index.isAtLeftBoundary(j)) && (!Index.isAtRightBoundary(j)))factors[j] *= 4.0;
42 else factors[j] *= 2.0;
48 for (
int i = 0; i < DimensionSparseGrid; i++) {
51 for (
int j = 0; j < DimensionSparseGrid; ++j) {
54 double h = meshwidth[j];
55 Richtung r = mc.getRichtung(j);
60 }
else if((!Index.isAtLeftBoundary(j)) && (!Index.isAtRightBoundary(j))){
73 TypeMatrixVectorMultiplication getTypeMatrixVectorMultiplication(){
return typeMatrixVectorMultiplication;};
77 double meshwidth[DimensionSparseGrid];
79 TypeMatrixVectorMultiplication typeMatrixVectorMultiplication = StencilOnTheFly;