OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
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
virtual Interpolator3dGridTo1d * clone() const =0
Interpolator3dGridTo1d * interpolator_m[3]
void function(const double Point[3], double Value[3]) const
void setAll(ThreeDGrid *grid, double ***Bx, double ***By, double ***Bz, interpolationAlgorithm algo=TRILINEAR)
Interpolator3dGridTo3d(ThreeDGrid *grid, double ***Bx, double ***By, double ***Bz, interpolationAlgorithm algo=TRILINEAR)
void remove(VectorMap *map)
Definition: ThreeDGrid.cpp:245
void add(VectorMap *map)
Definition: ThreeDGrid.cpp:257
Logical error exception.
Definition: LogicalError.h:33