AQUAgpusph 5.0.4
|
Type definitions for the OpenCL kernels (2D version). More...
Go to the source code of this file.
Macros | |
#define | vec float2 |
#define | dvec double2 |
#define | ivec int2 |
#define | lvec long2 |
#define | uivec uint2 |
#define | ulvec ulong2 |
#define | svec usize2 |
#define | ssvec ssize2 |
#define | matrix float4 |
#define | VEC_ZERO ((float2)(0.f,0.f)) |
Null vec, i.e. filled with zero components. | |
#define | VEC_ONE ((float2)(1.f, 1.f)) |
Ones vec, i.e. filled with one components. | |
#define | VEC_ALL_ONE VEC_ONE |
VEC_ONE. | |
#define | VEC_INFINITY ((float2)(INFINITY, INFINITY)) |
Infinity vec, i.e. filled with infinity components. | |
#define | VEC_ALL_INFINITY VEC_INFINITY |
VEC_INFINITY. | |
#define | VEC_NEG_INFINITY (-VEC_INFINITY) |
-Infinity vec, i.e. filled with -infinity components. | |
#define | VEC_ALL_NEG_INFINITY (-VEC_ALL_INFINITY) |
VEC_NEG_INFINITY. | |
#define | MAT_ZERO |
Null matrix, i.e. filled with zero components. | |
#define | MAT_ONE |
Ones matrix, i.e. filled with one components. | |
#define | MAT_ALL_ONE MAT_ONE |
MAT_ONE. | |
#define | MAT_EYE |
Eye matrix. | |
#define | MAT_ALL_EYE MAT_EYE |
MAT_EYE. | |
#define | XYZ xy |
Convenient access to the vector components. | |
#define | BEGIN_LOOP_OVER_NEIGHS() |
Loop over the neighs to compute the interactions. | |
#define | END_LOOP_OVER_NEIGHS() |
End of the loop over the neighs to compute the interactions. | |
#define | BEGIN_NEIGHS(CELL, NPARTS, NCELLS, ICELL, IHOC) |
Loop over the neighbours to compute the interactions. | |
#define | END_NEIGHS() |
End of the loop over the neighs to compute the interactions. | |
#define | MATRIX_DOT(_M, _V) |
Multiply a matrix by a vector (inner product) | |
#define | MATRIX_DOT_ALL MATRIX_DOT |
MATRIX_DOT | |
#define | MATRIX_MUL(_M1, _M2) |
Multiply a matrix by a matrix (inner product) | |
#define | MATRIX_MUL_ALL MATRIX_MUL |
MATRIX_MUL | |
#define | TRANSPOSE s0213 |
Transpose a matrix. | |
#define | DIAG s03 |
The matrix diagonal (as vector) | |
#define | MATRIX_FROM_DIAG(_V) |
Build up a matrix from the diagonal information (as vector) | |
#define | MATRIX_TRACE(_M) |
Trace of the matrix. | |
#define | MATRIX_INV(_M) |
Pseudo-inverse of a matrix. | |
#define | vec_xyz vec2 |
Vectors with the minimum number of components. | |
#define | dvec_xyz dvec2 |
#define | ivec_xyz ivec2 |
#define | lvec_xyz lvec2 |
#define | uivec_xyz uivec2 |
#define | ulvec_xyz ulvec2 |
#define | svec_xyz svec2 |
#define | ssvec_xyz ssvec2 |
Functions | |
matrix | outer (const vec v1, const vec v2) |
Perform the outer product of two vectors. | |
float | det (const matrix m) |
Determinant of a matrix. | |
matrix | inv (const matrix m) |
Inverse of a matrix. |
Type definitions for the OpenCL kernels (2D version).
#define BEGIN_LOOP_OVER_NEIGHS | ( | ) |
Loop over the neighs to compute the interactions.
All the code between this macro and END_LOOP_OVER_NEIGHS will be executed for all the neighbours.
To use this macro, the main particle (the one which the interactions are intended to be computed) should be identified by an unsigned integer variable i, while the resulting neighs will be automatically identified by the unsigned integer variable j. To discard a neighbour particle, remember calling
before
The following variables will be declared, and therefore cannot be used elsewhere:
#define BEGIN_NEIGHS | ( | CELL, | |
NPARTS, | |||
NCELLS, | |||
ICELL, | |||
IHOC ) |
Loop over the neighbours to compute the interactions.
All the code between this macro and END_NEIGHS will be executed for all the neighbours.
The resulting neighs will be automatically identified by the unsigned integer variable j. To discard a neighbour particle, remember calling
followed by
The following variables will be declared, and therefore cannot be used within the loop scope:
CELL | Cell of the main particle (usually icell[i]
|
NPARTS | Number of particles (usually N
|
NCELLS | Number of cells at each direction (usually n_cells
|
ICELL | Array of cells for each particle (usually icell
|
IHOC | Array of head of cells (usually ihoc
|
#define DIAG s03 |
The matrix diagonal (as vector)
#define dvec double2 |
#define dvec_xyz dvec2 |
#define END_LOOP_OVER_NEIGHS | ( | ) |
End of the loop over the neighs to compute the interactions.
#define END_NEIGHS | ( | ) |
End of the loop over the neighs to compute the interactions.
#define ivec int2 |
#define ivec_xyz ivec2 |
#define lvec long2 |
#define lvec_xyz lvec2 |
#define MAT_ALL_EYE MAT_EYE |
MAT_EYE.
#define MAT_ALL_ONE MAT_ONE |
MAT_ONE.
#define MAT_EYE |
Eye matrix.
\( m_{ii} = 1; m_{ij} = 1 \leftrightarrow i \neq j \)
#define MAT_ONE |
Ones matrix, i.e. filled with one components.
#define MAT_ZERO |
Null matrix, i.e. filled with zero components.
#define matrix float4 |
#define MATRIX_DOT | ( | _M, | |
_V ) |
Multiply a matrix by a vector (inner product)
#define MATRIX_DOT_ALL MATRIX_DOT |
#define MATRIX_FROM_DIAG | ( | _V | ) |
Build up a matrix from the diagonal information (as vector)
#define MATRIX_INV | ( | _M | ) |
Pseudo-inverse of a matrix.
The SVD Moore-Penrose method is applied:
\[ A^{\dag} = \left( A^T A \right)^{-1} A^T \]
#define MATRIX_MUL | ( | _M1, | |
_M2 ) |
Multiply a matrix by a matrix (inner product)
#define MATRIX_MUL_ALL MATRIX_MUL |
#define MATRIX_TRACE | ( | _M | ) |
Trace of the matrix.
i.e. The sum of the diagonal elements of the matrix.
#define ssvec ssize2 |
#define ssvec_xyz ssvec2 |
#define svec usize2 |
#define svec_xyz svec2 |
#define TRANSPOSE s0213 |
Transpose a matrix.
#define uivec uint2 |
#define uivec_xyz uivec2 |
#define ulvec ulong2 |
#define ulvec_xyz ulvec2 |
#define vec float2 |
#define VEC_ALL_INFINITY VEC_INFINITY |
VEC_INFINITY.
#define VEC_ALL_NEG_INFINITY (-VEC_ALL_INFINITY) |
VEC_NEG_INFINITY.
#define VEC_ALL_ONE VEC_ONE |
VEC_ONE.
Infinity vec, i.e. filled with infinity components.
#define VEC_NEG_INFINITY (-VEC_INFINITY) |
-Infinity vec, i.e. filled with -infinity components.
#define VEC_ONE ((float2)(1.f, 1.f)) |
Ones vec, i.e. filled with one components.
#define vec_xyz vec2 |
Vectors with the minimum number of components.
The number of components depends on weather the 2D version or 3D version is compiled:
This type can be used for the local variables to reduce the VGPRs.
#define VEC_ZERO ((float2)(0.f,0.f)) |
Null vec, i.e. filled with zero components.
#define XYZ xy |
Determinant of a matrix.
m | Matrix to invert |
Inverse of a matrix.
m | Matrix to invert |