From 34744fe7e45055575299e00ec78b8dfdee89b9a6 Mon Sep 17 00:00:00 2001 From: Matthias Frey <matthias.frey@psi.ch> Date: Fri, 17 Jul 2020 17:04:53 +0200 Subject: [PATCH] BoxCornerDomain: inherits from RegularDomain --- src/Solvers/BoxCornerDomain.cpp | 69 +++------------------------------ src/Solvers/BoxCornerDomain.h | 9 +---- 2 files changed, 7 insertions(+), 71 deletions(-) diff --git a/src/Solvers/BoxCornerDomain.cpp b/src/Solvers/BoxCornerDomain.cpp index 990c5360e..0980a52a9 100644 --- a/src/Solvers/BoxCornerDomain.cpp +++ b/src/Solvers/BoxCornerDomain.cpp @@ -24,6 +24,7 @@ // along with OPAL. If not, see <https://www.gnu.org/licenses/>. // #include "Solvers/BoxCornerDomain.h" +#include "Utilities/OpalException.h" #include <map> #include <string> @@ -33,17 +34,18 @@ //FIXME: ORDER HOW TO TRAVERSE NODES IS FIXED, THIS SHOULD BE MORE GENERIC! (PLACES MARKED) -extern Inform *gmsg; - BoxCornerDomain::BoxCornerDomain(double A, double B, double C, double length, double L1, double L2, IntVector_t nr, Vector_t hr, std::string interpl) - : IrregularDomain(nr, hr, interpl) + : RegularDomain(nr, hr, interpl) { setRangeMin(Vector_t(-A, -B, L1)); setRangeMax(Vector_t( A, B, L1 + L2)); C_m = C; length_m = length; + + throw OpalException("BoxCornerDomain::BoxCornerDomain()", + "This domain is currently not supported!"); } BoxCornerDomain::~BoxCornerDomain() { @@ -128,67 +130,6 @@ void BoxCornerDomain::compute(Vector_t hr, NDIndex<3> /*localId*/){ */ } -void BoxCornerDomain::constantInterpolation(int x, int y, int z, StencilValue_t& value, - double &scaleFactor) const -{ - scaleFactor = 1.0; - - value.west = -1 / hr_m[0] * 1 / hr_m[0]; - value.east = -1 / hr_m[0] * 1 / hr_m[0]; - value.north = -1 / hr_m[1] * 1 / hr_m[1]; - value.south = -1 / hr_m[1] * 1 / hr_m[1]; - value.front = -1 / hr_m[2] * 1 / hr_m[2]; - value.back = -1 / hr_m[2] * 1 / hr_m[2]; - value.center = 2 / hr_m[0] * 1 / hr_m[0] + 2 / hr_m[1] * 1 / hr_m[1] + 2 / hr_m[2] * 1 / hr_m[2]; - - // we are a right boundary point - if(!isInside(x + 1, y, z)) - value.east = 0.0; - - // we are a left boundary point - if(!isInside(x - 1, y, z)) - value.west = 0.0; - - // we are a upper boundary point - if(!isInside(x, y + 1, z)) - value.north = 0.0; - - // we are a lower boundary point - if(!isInside(x, y - 1, z)) - value.south = 0.0; - - if(z == 1 || z == nr_m[2] - 2) { - - // case where we are on the Robin BC in Z-direction - // where we distinguish two cases - // IFF: this values should not matter because they - // never make it into the discretization matrix - if(z == 1) - value.front = 0.0; - else - value.back = 0.0; - - // add contribution of Robin discretization to center point - // d the distance between the center of the bunch and the boundary - //double cx = (x-(nr_m[0]-1)/2)*hr_m[0]; - //double cy = (y-(nr_m[1]-1)/2)*hr_m[1]; - //double cz = hr_m[2]*(nr_m[2]-1); - //double d = sqrt(cx*cx+cy*cy+cz*cz); - double d = hr_m[2] * (nr_m[2] - 1) / 2; - value.center += 2 / (d * hr_m[2]); - //value.center += 2/((hr_m[2]*(nr_m[2]-1)/2.0) * hr_m[2]); - - // scale all stencil-points in z-plane with 0.5 (Robin discretization) - value.west /= 2.0; - value.east /= 2.0; - value.north /= 2.0; - value.south /= 2.0; - value.center /= 2.0; - scaleFactor *= 0.5; - } - -} - void BoxCornerDomain::linearInterpolation(int x, int y, int z, StencilValue_t& value, double &scaleFactor) const { diff --git a/src/Solvers/BoxCornerDomain.h b/src/Solvers/BoxCornerDomain.h index 3719c39b4..1bc097033 100644 --- a/src/Solvers/BoxCornerDomain.h +++ b/src/Solvers/BoxCornerDomain.h @@ -29,9 +29,7 @@ #include <map> #include <string> #include <cmath> -#include <iostream> // Neeeded for stream I/O -#include <fstream> // Needed for file I/O -#include "IrregularDomain.h" +#include "Solvers/RegularDomain.h" /* @@ -71,7 +69,7 @@ L1 = getZRangeMin() L2 = getZRangeMax() - getZRangeMin */ -class BoxCornerDomain : public IrregularDomain { +class BoxCornerDomain : public RegularDomain { public: /** @@ -156,9 +154,6 @@ private: } /// different interpolation methods for boundary points - void constantInterpolation(int x, int y, int z, StencilValue_t& value, - double &scaleFactor) const override; - void linearInterpolation(int x, int y, int z, StencilValue_t& value, double &scaleFactor) const override; -- GitLab