Fixed bugs with hippo/gpu for single- and mixed- precisions
This commit is contained in:
@ -849,7 +849,8 @@ void PairHippoGPU::udirect2b(double **field, double **fieldp)
|
|||||||
// field and fieldp may already have some nonzero values from kspace (udirect1)
|
// field and fieldp may already have some nonzero values from kspace (udirect1)
|
||||||
|
|
||||||
int nlocal = atom->nlocal;
|
int nlocal = atom->nlocal;
|
||||||
double *field_ptr = (double *)fieldp_pinned;
|
if (tq_single) {
|
||||||
|
auto field_ptr = (float *)fieldp_pinned;
|
||||||
|
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
int idx = 4*i;
|
int idx = 4*i;
|
||||||
@ -858,7 +859,7 @@ void PairHippoGPU::udirect2b(double **field, double **fieldp)
|
|||||||
field[i][2] += field_ptr[idx+2];
|
field[i][2] += field_ptr[idx+2];
|
||||||
}
|
}
|
||||||
|
|
||||||
double* fieldp_ptr = (double *)fieldp_pinned;
|
auto fieldp_ptr = (float *)fieldp_pinned;
|
||||||
fieldp_ptr += 4*inum;
|
fieldp_ptr += 4*inum;
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
int idx = 4*i;
|
int idx = 4*i;
|
||||||
@ -867,6 +868,25 @@ void PairHippoGPU::udirect2b(double **field, double **fieldp)
|
|||||||
fieldp[i][2] += fieldp_ptr[idx+2];
|
fieldp[i][2] += fieldp_ptr[idx+2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
auto field_ptr = (double *)fieldp_pinned;
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
int idx = 4*i;
|
||||||
|
field[i][0] += field_ptr[idx];
|
||||||
|
field[i][1] += field_ptr[idx+1];
|
||||||
|
field[i][2] += field_ptr[idx+2];
|
||||||
|
}
|
||||||
|
|
||||||
|
auto fieldp_ptr = (double *)fieldp_pinned;
|
||||||
|
fieldp_ptr += 4*inum;
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
int idx = 4*i;
|
||||||
|
fieldp[i][0] += fieldp_ptr[idx];
|
||||||
|
fieldp[i][1] += fieldp_ptr[idx+1];
|
||||||
|
fieldp[i][2] += fieldp_ptr[idx+2];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -1246,7 +1266,8 @@ void PairHippoGPU::fphi_uind(FFT_SCALAR ****grid, double **fdip_phi1,
|
|||||||
&fdip_sum_phi_pinned);
|
&fdip_sum_phi_pinned);
|
||||||
|
|
||||||
int nlocal = atom->nlocal;
|
int nlocal = atom->nlocal;
|
||||||
double *_fdip_phi1_ptr = (double *)fdip_phi1_pinned;
|
if (tq_single) {
|
||||||
|
auto _fdip_phi1_ptr = (float *)fdip_phi1_pinned;
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
int n = i;
|
int n = i;
|
||||||
for (int m = 0; m < 10; m++) {
|
for (int m = 0; m < 10; m++) {
|
||||||
@ -1255,7 +1276,7 @@ void PairHippoGPU::fphi_uind(FFT_SCALAR ****grid, double **fdip_phi1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double *_fdip_phi2_ptr = (double *)fdip_phi2_pinned;
|
auto _fdip_phi2_ptr = (float *)fdip_phi2_pinned;
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
int n = i;
|
int n = i;
|
||||||
for (int m = 0; m < 10; m++) {
|
for (int m = 0; m < 10; m++) {
|
||||||
@ -1264,7 +1285,7 @@ void PairHippoGPU::fphi_uind(FFT_SCALAR ****grid, double **fdip_phi1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double *_fdip_sum_phi_ptr = (double *)fdip_sum_phi_pinned;
|
auto _fdip_sum_phi_ptr = (float *)fdip_sum_phi_pinned;
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
int n = i;
|
int n = i;
|
||||||
for (int m = 0; m < 20; m++) {
|
for (int m = 0; m < 20; m++) {
|
||||||
@ -1272,6 +1293,36 @@ void PairHippoGPU::fphi_uind(FFT_SCALAR ****grid, double **fdip_phi1,
|
|||||||
n += nlocal;
|
n += nlocal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
auto _fdip_phi1_ptr = (double *)fdip_phi1_pinned;
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
int n = i;
|
||||||
|
for (int m = 0; m < 10; m++) {
|
||||||
|
fdip_phi1[i][m] = _fdip_phi1_ptr[n];
|
||||||
|
n += nlocal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto _fdip_phi2_ptr = (double *)fdip_phi2_pinned;
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
int n = i;
|
||||||
|
for (int m = 0; m < 10; m++) {
|
||||||
|
fdip_phi2[i][m] = _fdip_phi2_ptr[n];
|
||||||
|
n += nlocal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto _fdip_sum_phi_ptr = (double *)fdip_sum_phi_pinned;
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
int n = i;
|
||||||
|
for (int m = 0; m < 20; m++) {
|
||||||
|
fdip_sum_phi[i][m] = _fdip_sum_phi_ptr[n];
|
||||||
|
n += nlocal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user