| 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}; |