9#include "../sgrid/sparseGrid.h"
10#include "../MatrixVectorMultiplication/MatrixVectorHomogen.h"
11#include "../MatrixVectorMultiplication/RHS.h"
12#include "../stencils/Stencil.h"
16class PDE_Poisson_InHomRHS{
19 void SetUp(VectorSparseG& f_neumann, VectorSparseG& g_neumann);
21 VectorSparseG& getRHS(){
27 VectorSparseG f_dirichlet;
30 VectorSparseG dirichlet;
48class PDE_Helmholtz_VariableCoeff{
65 void SetUp(VectorSparseG& f_neumann, VectorSparseG& g_neumann) {
67 CalcHierarchicalBasis(f_neumann);
70 for (
unsigned long i = 0; i < neumann_grid.getMaximalOccupiedSecondTable(); i++) {
71 if (neumann_grid.getActiveTable()[i]) {
72 IndexDimension I = neumann_grid.getIndexOfTable(i);
75 f_dirichlet.setValue(I,f_neumann.getValue(i));
76 f_neumann.setValue(i, 0.0);
84 CalcNodalBasis(f_dirichlet);
85 calcPrewByNodal(prew,f_dirichlet);
87 HelmHoltz stencil1(*f_dirichlet.getSparseGrid());
90 matrix.multiplication(prew,f_dirichlet,stencil1);
93 InHomoBoundaryRHSHierarchical test_hier(dirichlet_grid);
94 test_hier.multiply_mass(f_neumann, dirichlet);
96 f_dirichlet=f_dirichlet+dirichlet;
98 CalcHierarchicalBasisForRHS(g_neumann);
100 test_hier.multiply(g_neumann,dirichlet);
102 f_dirichlet=f_dirichlet-dirichlet;
106 test_hier.multiply_mass_coeff(g_neumann,dirichlet);
111 f_dirichlet = f_dirichlet-dirichlet;
118 VectorSparseG& getRHS(){
124 VectorSparseG f_dirichlet;
127 VectorSparseG dirichlet;
132class PDE_Helmholtz_VariableCoeff_interface{
150 void SetUp(VectorSparseG& f_neumann, VectorSparseG& g_neumann,
const F& f) {
152 CalcHierarchicalBasis(f_neumann);
155 for (
unsigned long i = 0; i < neumann_grid.getMaximalOccupiedSecondTable(); i++) {
156 if (neumann_grid.getActiveTable()[i]) {
157 IndexDimension I = neumann_grid.getIndexOfTable(i);
160 f_dirichlet.setValue(I,f_neumann.getValue(i));
161 f_neumann.setValue(i, 0.0);
169 CalcNodalBasis(f_dirichlet);
170 calcPrewByNodal(prew,f_dirichlet);
172 HelmHoltz stencil1(f_dirichlet.getSparseGrid());
176 matrix.multiplication(prew,f_dirichlet,stencil1);
179 InHomoBoundaryRHSHierarchical test_hier(dirichlet_grid);
180 test_hier.multiply_mass(f_neumann, dirichlet);
182 f_dirichlet=f_dirichlet+dirichlet;
184 CalcHierarchicalBasisForRHS(g_neumann);
186 test_hier.multiply(g_neumann,dirichlet);
188 f_dirichlet=f_dirichlet-dirichlet;
193 test_hier.multiply_mass_coeff_interface(g_neumann,dirichlet,f);
197 f_dirichlet = f_dirichlet-dirichlet;
203 VectorSparseG& getRHS(){
209 VectorSparseG f_dirichlet;
212 VectorSparseG dirichlet;
Definition sparseGrid.h:277
Definition MatrixVectorHomogen.h:32