version 1.21 | version 1.22 |
---|
| |
partialVirial[5] = 0.5*v5; | partialVirial[5] = 0.5*v5; |
} | } |
static inline void compute_energy_orthogonal_ckloop(int first, int last, void *result, int paraNum, void *param){ | static inline void compute_energy_orthogonal_ckloop(int first, int last, void *result, int paraNum, void *param){ |
CmiAssert(first==last); | for ( int i = first; i <= last; ++i ) { |
void **params = (void **)param; | void **params = (void **)param; |
PmeKSpace *kspace = (PmeKSpace *)params[0]; | PmeKSpace *kspace = (PmeKSpace *)params[0]; |
float *q_arr = (float *)params[1]; | float *q_arr = (float *)params[1]; |
| |
double *partialVirial = (double *)params[4]; | double *partialVirial = (double *)params[4]; |
int *unitDist = (int *)params[5]; | int *unitDist = (int *)params[5]; |
| |
int i = first; | |
int unit = unitDist[0]; | int unit = unitDist[0]; |
int remains = unitDist[1]; | int remains = unitDist[1]; |
int k1from, k1to; | int k1from, k1to; |
| |
double *pVirial = partialVirial+i*6; | double *pVirial = partialVirial+i*6; |
kspace->compute_energy_orthogonal_subset(q_arr, recips, pVirial, pEnergy, k1from, k1to); | kspace->compute_energy_orthogonal_subset(q_arr, recips, pVirial, pEnergy, k1from, k1to); |
} | } |
| } |
| |
double PmeKSpace::compute_energy_orthogonal_helper(float *q_arr, const Lattice &lattice, double ewald, double *virial) { | double PmeKSpace::compute_energy_orthogonal_helper(float *q_arr, const Lattice &lattice, double ewald, double *virial) { |
double energy = 0.0; | double energy = 0.0; |
| |
init_exp(exp3, K3, k3_start, k3_end, recipz); | init_exp(exp3, K3, k3_start, k3_end, recipz); |
| |
double recips[] = {recipx, recipy, recipz}; | double recips[] = {recipx, recipy, recipz}; |
const int NPARTS=CmiMyNodeSize(); //this controls the granularity of loop parallelism | int NPARTS=CmiMyNodeSize(); //this controls the granularity of loop parallelism |
| if ( NPARTS > K1 ) NPARTS = K1; |
ALLOCA(double, partialEnergy, NPARTS); | ALLOCA(double, partialEnergy, NPARTS); |
ALLOCA(double, partialVirial, 6*NPARTS); | ALLOCA(double, partialVirial, 6*NPARTS); |
int unitDist[] = {K1/NPARTS, K1%NPARTS}; | int unitDist[] = {K1/NPARTS, K1%NPARTS}; |