static void free_work(struct pme_solve_work_t *work)
{
- sfree(work->mhx);
- sfree(work->mhy);
- sfree(work->mhz);
- sfree(work->m2);
- sfree_aligned(work->denom);
- sfree_aligned(work->tmp1);
- sfree_aligned(work->tmp2);
- sfree_aligned(work->eterm);
- sfree(work->m2inv);
+ if (work)
+ {
+ sfree(work->mhx);
+ sfree(work->mhy);
+ sfree(work->mhz);
+ sfree(work->m2);
+ sfree_aligned(work->denom);
+ sfree_aligned(work->tmp1);
+ sfree_aligned(work->tmp2);
+ sfree_aligned(work->eterm);
+ sfree(work->m2inv);
+ }
}
void pme_free_all_work(struct pme_solve_work_t **work, int nthread)
{
- int thread;
-
- for (thread = 0; thread < nthread; thread++)
+ if (*work)
{
- free_work(&(*work)[thread]);
+ for (int thread = 0; thread < nthread; thread++)
+ {
+ free_work(&(*work)[thread]);
+ }
}
- sfree(work);
- *work = NULL;
+ sfree(*work);
+ *work = nullptr;
}
void get_pme_ener_vir_q(struct pme_solve_work_t *work, int nthread,
}
#endif
-int solve_pme_yzx(struct gmx_pme_t *pme, t_complex *grid,
- real ewaldcoeff, real vol,
+int solve_pme_yzx(const gmx_pme_t *pme, t_complex *grid, real vol,
gmx_bool bEnerVir,
int nthread, int thread)
{
int kx, ky, kz, maxkx, maxky;
int nx, ny, nz, iyz0, iyz1, iyz, iy, iz, kxstart, kxend;
real mx, my, mz;
- real factor = M_PI*M_PI/(ewaldcoeff*ewaldcoeff);
+ real ewaldcoeff = pme->ewaldcoeff_q;
+ real factor = M_PI*M_PI/(ewaldcoeff*ewaldcoeff);
real ets2, struct2, vfactor, ets2vf;
real d1, d2, energy = 0;
real by, bz;
return local_ndata[YY]*local_ndata[XX];
}
-int solve_pme_lj_yzx(struct gmx_pme_t *pme, t_complex **grid, gmx_bool bLB,
- real ewaldcoeff, real vol,
+int solve_pme_lj_yzx(const gmx_pme_t *pme, t_complex **grid, gmx_bool bLB, real vol,
gmx_bool bEnerVir, int nthread, int thread)
{
/* do recip sum over local cells in grid */
int kx, ky, kz, maxkx, maxky;
int nx, ny, nz, iy, iyz0, iyz1, iyz, iz, kxstart, kxend;
real mx, my, mz;
- real factor = M_PI*M_PI/(ewaldcoeff*ewaldcoeff);
+ real ewaldcoeff = pme->ewaldcoeff_lj;
+ real factor = M_PI*M_PI/(ewaldcoeff*ewaldcoeff);
real ets2, ets2vf;
real eterm, vterm, d1, d2, energy = 0;
real by, bz;