RealType Solver::computeResidual(GridFunction& sourcegridfunction, GridFunctionType& rhs, const PointType& h){ //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // The pre-value to be returned (return sqrt(doubleSum)): RealType doubleSum = 0.0; /* We need to compute the derivatives p_xx and p_yy, therefore the stencil has to be applied. */ MultiIndexType dim = sourcegridfunction.GetGridDimension(); MultiIndexType bread (0,0); MultiIndexType eread (dim[0]-1,dim[1]-1); MultiIndexType bwrite (1,1); MultiIndexType ewrite (dim[0]-2,dim[1]-2); //Compute the needed derivations for the whole (inner?) area Stencil stencil(3,h); // bzw. Kann man einfach const weitergeben? /Wie? //Get the values for derivative in x-direction: GridFunction Fxx(dim); stencil.ApplyFxxStencilOperator(bread, eread, bwrite, ewrite, sourcegridfunction.GetGridFunction(), Fxx); //Get the values for derivative in y-direction: GridFunction Fyy(dim); stencil.ApplyFyyStencilOperator(bread, eread, bwrite, ewrite, sourcegridfunction.GetGridFunction(), Fyy); // Compute the residual: res = sqrt(Sum_i^I(Sum_j^J((p_xx+p_yy-rightHandSide)²/(I*J)))) RealType derivator; for (IndexType i = 1; i <= dim[0]-2; i++) { for (IndexType j = 1; j <= dim[1]-2; j++) { derivator = Fxx.GetGridFunction()[i][j]+ Fyy.GetGridFunction()[i][j] - rhs[i][j]; doubleSum += derivator*derivator / (dim[0]-2) / (dim[1]-2); } } //std::cout<<doubleSum<<std::endl; return sqrt(doubleSum); }