Alsvinn  0.5.3
The fast FVM simulator with UQ support
Periodic.hpp
Go to the documentation of this file.
1 /* Copyright (c) 2018 ETH Zurich, Kjetil Olsen Lye
2  * This program is free software: you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program. If not, see <http://www.gnu.org/licenses/>.
14  */
15 
16 #pragma once
17 #include "alsfvm/memory/View.hpp"
18 
19 namespace alsfvm {
20 namespace boundary {
21 
22 class Periodic {
23 public:
25  memoryArea,
26  int x, int y, int z, int boundaryCell, int numberOfGhostCells,
27  bool top, bool xDir, bool yDir, bool zDir) {
28  // NOTE: Here we keep everything as signed int, there is no
29  // way we will reach the signed/unsigned limit anyway,
30  // and here we do some subtraction, therefore
31  // signed would have been dangerous.
32  const int sign = top ? -1 : 1;
33  const int nx = memoryArea.nx - 2 * numberOfGhostCells;
34  const int ny = memoryArea.ny - 2 * numberOfGhostCells;
35  const int nz = memoryArea.nz - 2 * numberOfGhostCells;
36  memoryArea.at(x - sign * boundaryCell * xDir,
37  y - sign * boundaryCell * yDir,
38  z - sign * boundaryCell * zDir)
39  = memoryArea.at( x + sign * (-boundaryCell + nx) * xDir,
40  y + sign * (-boundaryCell + ny) * yDir,
41  z + sign * (-boundaryCell + nz) * zDir);
42  }
43 
44 };
45 }
46 }
const size_t nz
Definition: View.hpp:134
#define __host__
Definition: types.hpp:46
Definition: Periodic.hpp:22
__device__ __host__ T & at(size_t x, size_t y, size_t z)
at returns a reference to the element at the given location
Definition: View.hpp:65
size_t nx
Definition: VolumeFactory.cpp:87
size_t ny
Definition: VolumeFactory.cpp:88
const size_t nx
Definition: View.hpp:132
__device__ __host__ real sign(real a)
Definition: sign.hpp:19
const size_t ny
Definition: View.hpp:133
size_t numberOfGhostCells
Definition: VolumeFactory.cpp:90
#define __device__
Definition: types.hpp:45
Definition: View.hpp:32
size_t nz
Definition: VolumeFactory.cpp:89
Various utility functions to implement the tecno flux.
Definition: types.hpp:30
__device__ static __host__ void applyBoundary(alsfvm::memory::View< real > &memoryArea, int x, int y, int z, int boundaryCell, int numberOfGhostCells, bool top, bool xDir, bool yDir, bool zDir)
Definition: Periodic.hpp:24