51static FUNC_PREFIX void updatevelfrompdfdoubleprecisionavx_updatevelfrompdfdoubleprecisionavx(
double *
RESTRICT const _data_force,
double *
RESTRICT const _data_pdfs,
double *
RESTRICT _data_velocity,
int64_t const _size_force_0,
int64_t const _size_force_1,
int64_t const _size_force_2,
int64_t const _stride_force_1,
int64_t const _stride_force_2,
int64_t const _stride_force_3,
int64_t const _stride_pdfs_1,
int64_t const _stride_pdfs_2,
int64_t const _stride_pdfs_3,
int64_t const _stride_velocity_1,
int64_t const _stride_velocity_2,
int64_t const _stride_velocity_3) {
57#pragma omp for schedule(static)
64 const __m256d momdensity_0 =
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + 3 * _stride_pdfs_3 +
ctr_0 + 1])),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 7 * _stride_pdfs_3 +
ctr_0 + 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 13 * _stride_pdfs_3 +
ctr_0 + 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 9 * _stride_pdfs_3 +
ctr_0 + 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 17 * _stride_pdfs_3 +
ctr_0 + 1]))),
vel0Term);
66 const __m256d momdensity_1 =
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 2 * _stride_pdfs_3 +
ctr_0])),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 9 * _stride_pdfs_3 +
ctr_0 + 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 10 * _stride_pdfs_3 +
ctr_0 - 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 12 * _stride_pdfs_3 +
ctr_0]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 16 * _stride_pdfs_3 +
ctr_0]))),
vel1Term),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 8 * _stride_pdfs_3 +
ctr_0 - 1]));
69 const __m256d momdensity_2 =
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_add_pd(
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 6 * _stride_pdfs_3 +
ctr_0])),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 17 * _stride_pdfs_3 +
ctr_0 + 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 18 * _stride_pdfs_3 +
ctr_0 - 1]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 15 * _stride_pdfs_3 +
ctr_0]))),
_mm256_mul_pd(
_mm256_set_pd(-1.0, -1.0, -1.0, -1.0),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 16 * _stride_pdfs_3 +
ctr_0]))),
vel2Term),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 14 * _stride_pdfs_3 +
ctr_0 - 1])),
_mm256_loadu_pd(&_data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 11 * _stride_pdfs_3 +
ctr_0]));
71 const __m256d u_0 =
_mm256_add_pd(
_mm256_mul_pd(
momdensity_0,
_mm256_div_pd(
_mm256_set_pd(1.0, 1.0, 1.0, 1.0),
rho)),
_mm256_mul_pd(
_mm256_mul_pd(
_mm256_set_pd(0.5, 0.5, 0.5, 0.5),
_mm256_div_pd(
_mm256_set_pd(1.0, 1.0, 1.0, 1.0),
rho)),
_mm256_load_pd(&
_data_force[_stride_force_1 *
ctr_1 + _stride_force_2 *
ctr_2 +
ctr_0])));
72 const __m256d u_1 =
_mm256_add_pd(
_mm256_mul_pd(
momdensity_1,
_mm256_div_pd(
_mm256_set_pd(1.0, 1.0, 1.0, 1.0),
rho)),
_mm256_mul_pd(
_mm256_mul_pd(
_mm256_set_pd(0.5, 0.5, 0.5, 0.5),
_mm256_div_pd(
_mm256_set_pd(1.0, 1.0, 1.0, 1.0),
rho)),
_mm256_loadu_pd(&
_data_force[_stride_force_1 *
ctr_1 + _stride_force_2 *
ctr_2 + _stride_force_3 +
ctr_0])));
73 const __m256d u_2 =
_mm256_add_pd(
_mm256_mul_pd(
momdensity_2,
_mm256_div_pd(
_mm256_set_pd(1.0, 1.0, 1.0, 1.0),
rho)),
_mm256_mul_pd(
_mm256_mul_pd(
_mm256_set_pd(0.5, 0.5, 0.5, 0.5),
_mm256_div_pd(
_mm256_set_pd(1.0, 1.0, 1.0, 1.0),
rho)),
_mm256_loadu_pd(&
_data_force[_stride_force_1 *
ctr_1 + _stride_force_2 *
ctr_2 + 2 * _stride_force_3 +
ctr_0])));
79 const double vel0Term = _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 10 * _stride_pdfs_3 +
ctr_0 - 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + 4 * _stride_pdfs_3 +
ctr_0 - 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 18 * _stride_pdfs_3 +
ctr_0 - 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 14 * _stride_pdfs_3 +
ctr_0 - 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 8 * _stride_pdfs_3 +
ctr_0 - 1];
80 const double momdensity_0 =
vel0Term - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 9 * _stride_pdfs_3 +
ctr_0 + 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + 3 * _stride_pdfs_3 +
ctr_0 + 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 17 * _stride_pdfs_3 +
ctr_0 + 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 13 * _stride_pdfs_3 +
ctr_0 + 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 7 * _stride_pdfs_3 +
ctr_0 + 1];
81 const double vel1Term = _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 7 * _stride_pdfs_3 +
ctr_0 + 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 15 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 11 * _stride_pdfs_3 +
ctr_0];
82 const double momdensity_1 =
vel1Term - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 10 * _stride_pdfs_3 +
ctr_0 - 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 2 * _stride_pdfs_3 +
ctr_0] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 9 * _stride_pdfs_3 +
ctr_0 + 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 16 * _stride_pdfs_3 +
ctr_0] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 12 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 8 * _stride_pdfs_3 +
ctr_0 - 1];
83 const double vel2Term = _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 12 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 13 * _stride_pdfs_3 +
ctr_0 + 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 5 * _stride_pdfs_3 +
ctr_0];
84 const double delta_rho =
vel0Term +
vel1Term +
vel2Term + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 2 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + 9 * _stride_pdfs_3 +
ctr_0 + 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 16 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + 3 * _stride_pdfs_3 +
ctr_0 + 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 17 * _stride_pdfs_3 +
ctr_0 + 1] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 6 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 +
ctr_0];
85 const double momdensity_2 =
vel2Term - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 16 * _stride_pdfs_3 +
ctr_0] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 17 * _stride_pdfs_3 +
ctr_0 + 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 18 * _stride_pdfs_3 +
ctr_0 - 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 6 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 14 * _stride_pdfs_3 +
ctr_0 - 1] - _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 + _stride_pdfs_2 + 15 * _stride_pdfs_3 +
ctr_0] + _data_pdfs[_stride_pdfs_1 *
ctr_1 - _stride_pdfs_1 + _stride_pdfs_2 *
ctr_2 - _stride_pdfs_2 + 11 * _stride_pdfs_3 +
ctr_0];
91 _data_velocity[_stride_velocity_1 *
ctr_1 + _stride_velocity_2 *
ctr_2 + _stride_velocity_3 +
ctr_0] =
u_1;
92 _data_velocity[_stride_velocity_1 *
ctr_1 + _stride_velocity_2 *
ctr_2 + 2 * _stride_velocity_3 +
ctr_0] =
u_2;