Peano
Loading...
Searching...
No Matches
particles.cpp
Go to the documentation of this file.
1#include "particles.h"
2
4#include "peano4/peano.h"
5
6
10) {
11 std::bitset<TwoPowerD>
12 adjacentCellWhichHostsParticle = getAdjacentCellsOwningParticle(x, marker);
13
14 return adjacentCellWhichHostsParticle.to_ulong()
15 & marker.areAdjacentCellsLocal().to_ulong();
16}
17
18
25 const std::bitset<Dimensions> periodicBC
26 ) {
28
29 for (int d = 0; d < Dimensions; d++) {
30 if (periodicBC[d] and not(marker.isContainedInAdjacentCellsByDimension(x, d))) {
31 if (tarch::la::equals(marker.x()(d), domainOffset(d))) {
32 result(d) -= domainSize(d);
33 }
34 if (tarch::la::equals(marker.x()(d), domainOffset(d) + domainSize(d))) {
35 result(d) += domainSize(d);
36 }
37 }
38 }
39
40 return result;
41}
42
43
49 const std::bitset<Dimensions> periodicBC
50 ) {
52
53 for (int d = 0; d < Dimensions; d++) {
54 if (periodicBC[d]) {
55 if (tarch::la::smaller(result(d), domainOffset(d))) {
56 result(d) += domainSize(d);
57 }
58 if (tarch::la::greater(result(d), domainOffset(d) + domainSize(d))) {
59 result(d) -= domainSize(d);
60 }
61 }
62 }
63
64 return result;
65}
std::bitset< Dimensions > periodicBC
Definition main.cpp:19
bool equals(const Matrix< Rows, Cols, Scalar > &lhs, const Matrix< Rows, Cols, Scalar > &rhs, const Scalar &tolerance=NUMERICAL_ZERO_DIFFERENCE)
Compares to matrices on equality by means of a numerical accuracy.
tarch::la::Vector< Dimensions, double > mirrorParticleAlongPeriodicDomains(const tarch::la::Vector< Dimensions, double > &x, const peano4::datamanagement::VertexMarker &marker, const tarch::la::Vector< Dimensions, double > domainOffset, const tarch::la::Vector< Dimensions, double > domainSize, const std::bitset< Dimensions > periodicBC)
Mirror a particle along the periodic domain boundaries.
Definition particles.cpp:20
bool particleAssignedToVertexWillBeLocal(const tarch::la::Vector< Dimensions, double > &x, const peano4::datamanagement::VertexMarker &marker)
Definition particles.cpp:7
tarch::la::Vector< Dimensions, double > applyPeriodicBoundaryConditions(const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > domainOffset, const tarch::la::Vector< Dimensions, double > domainSize, const std::bitset< Dimensions > periodicBC)
Applies the periodic boundary condition on particle coordinates x.
Definition particles.cpp:45
std::bitset< TwoPowerD > getAdjacentCellsOwningParticle(const tarch::la::Vector< Dimensions, double > &x, const peano4::datamanagement::VertexMarker &marker)
Find out which adjacent cell will hold a particle.
Vertex marker to provide information about selected vertex.
Simple vector class.
Definition Vector.h:159