OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
Interpolator3dGridTo3d.cpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012, Chris Rogers
3 * All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 * 1. Redistributions of source code must retain the above copyright notice,
7 * this list of conditions and the following disclaimer.
8 * 2. Redistributions in binary form must reproduce the above copyright notice,
9 * this list of conditions and the following disclaimer in the documentation
10 * and/or other materials provided with the distribution.
11 * 3. Neither the name of STFC nor the names of its contributors may be used to
12 * endorse or promote products derived from this software without specific
13 * prior written permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
30
31namespace interpolation {
32
34 (const Interpolator3dGridTo3d& rhs) {
36 for (int i = 0; i < 3; i++)
37 interpolator_m[i] = rhs.interpolator_m[i]->clone();
38}
39
41 (const double Point[3], double Value[3]) const {
42 if (Point[0] > coordinates_m->maxX() || Point[0] < coordinates_m->minX() ||
43 Point[1] > coordinates_m->maxY() || Point[1] < coordinates_m->minY() ||
44 Point[2] > coordinates_m->maxZ() || Point[2] < coordinates_m->minZ() ) {
45 Value[0] = 0;
46 Value[1] = 0;
47 Value[2] = 0;
48 return;
49 }
50
54}
55
57 double *** Bx, double *** By, double *** Bz,
59 if (coordinates_m != nullptr)
60 coordinates_m->remove(this);
61 grid->add(this);
62 coordinates_m = grid;
63
64 for (int i = 0; i < 3; i++)
65 if (interpolator_m[i] != nullptr)
66 delete interpolator_m[i];
67
68 switch (algo) {
69 case TRILINEAR:
70 interpolator_m[0] = new TriLinearInterpolator(grid, Bx);
71 interpolator_m[1] = new TriLinearInterpolator(grid, By);
72 interpolator_m[2] = new TriLinearInterpolator(grid, Bz);
73 break;
74 default:
75 throw(LogicalError(
76 "Interpolator3dGridTo3d::setAll",
77 "Did not recognise interpolation algorithm"
78 )
79 );
80 }
81}
82}
Definition: Value.h:24
virtual void function(const Mesh::Iterator &point, double *value) const
Call function at a particular point in the mesh.
virtual Interpolator3dGridTo1d * clone() const =0
Copy constructor.
Interpolator3dGridTo3d interpolates from 3d grid to a 3d vector.
interpolationAlgorithm
Enumerator encoding possible interpolation routines.
Interpolator3dGridTo1d * interpolator_m[3]
void function(const double Point[3], double Value[3]) const
Return the interpolated data.
void setAll(ThreeDGrid *grid, double ***Bx, double ***By, double ***Bz, interpolationAlgorithm algo=TRILINEAR)
Set function and mesh data.
Interpolator3dGridTo3d(ThreeDGrid *grid, double ***Bx, double ***By, double ***Bz, interpolationAlgorithm algo=TRILINEAR)
Constructor for grids with constant spacing.
ThreeDGrid holds grid information for a rectangular grid used in e.g.
Definition: ThreeDGrid.h:57
double maxZ() const
Return the largest value of z in the grid.
Definition: ThreeDGrid.h:442
double maxX() const
Return the largest value of x in the grid.
Definition: ThreeDGrid.h:426
void remove(VectorMap *map)
Remove *map from the maps_m list if it has not already been removed.
Definition: ThreeDGrid.cpp:245
double maxY() const
Return the largest value of y in the grid.
Definition: ThreeDGrid.h:434
double minY() const
Return the smallest value of y in the grid.
Definition: ThreeDGrid.h:430
void add(VectorMap *map)
Add *map to the maps_m list if it has not already been added.
Definition: ThreeDGrid.cpp:257
double minX() const
Return the smallest value of x in the grid.
Definition: ThreeDGrid.h:422
double minZ() const
Return the smallest value of z in the grid.
Definition: ThreeDGrid.h:438
TriLinearInterpolator performs a linear interpolation in x then y then z.
Logical error exception.
Definition: LogicalError.h:33