54 lines
2.1 KiB
C++
54 lines
2.1 KiB
C++
// GPU Functions for D3Q7 Lattice Boltzmann Methods
|
|
|
|
inline void PackValues(int *list, int count, double *sendbuf, double *Data, int N){
|
|
//....................................................................................
|
|
// Pack distribution q into the send buffer for the listed lattice sites
|
|
// dist may be even or odd distributions stored by stream layout
|
|
//....................................................................................
|
|
int idx,n;
|
|
for (idx=0; idx<count; idx++){
|
|
n = list[idx];
|
|
sendbuf[idx] = Data[n];
|
|
}
|
|
}
|
|
inline void UnpackValues(int *list, int count, double *recvbuf, double *Data, int N){
|
|
//....................................................................................
|
|
// Pack distribution q into the send buffer for the listed lattice sites
|
|
// dist may be even or odd distributions stored by stream layout
|
|
//....................................................................................
|
|
int idx,n;
|
|
for (idx=0; idx<count; idx++){
|
|
n = list[idx];
|
|
Data[n] = recvbuf[idx];
|
|
}
|
|
}
|
|
|
|
inline void PackDenD3Q7(int *list, int count, double *sendbuf, int number, double *Data, int N){
|
|
//....................................................................................
|
|
// Pack distribution into the send buffer for the listed lattice sites
|
|
//....................................................................................
|
|
int idx,n,component;
|
|
for (idx=0; idx<count; idx++){
|
|
for (component=0; component<number; component++){
|
|
n = list[idx];
|
|
sendbuf[idx*number+component] = Data[number*n+component];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
inline void UnpackDenD3Q7(int *list, int count, double *recvbuf, int number, double *Data, int N){
|
|
//....................................................................................
|
|
// Unack distribution from the recv buffer
|
|
// Sum to the existing density value
|
|
//....................................................................................
|
|
int idx,n,component;
|
|
for (idx=0; idx<count; idx++){
|
|
for (component=0; component<number; component++){
|
|
n = list[idx];
|
|
Data[number*n+component] += recvbuf[idx*number+component];
|
|
}
|
|
}
|
|
}
|
|
|