From: Joe Jordan Date: Mon, 3 May 2021 13:04:50 +0000 (+0000) Subject: ArrayRef in pme X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=fdac5efa5ed51dd9b8486ca35227708b62fb08ef;p=alexxy%2Fgromacs.git ArrayRef in pme --- diff --git a/src/gromacs/domdec/mdsetup.cpp b/src/gromacs/domdec/mdsetup.cpp index 0baae937e7..b899038106 100644 --- a/src/gromacs/domdec/mdsetup.cpp +++ b/src/gromacs/domdec/mdsetup.cpp @@ -143,7 +143,10 @@ void mdAlgorithmsSetupAtomData(const t_commrec* cr, * For PME-only ranks, gmx_pmeonly() has its own call to gmx_pme_reinit_atoms(). */ const int numPmeAtoms = numHomeAtoms - fr->n_tpi; - gmx_pme_reinit_atoms(fr->pmedata, numPmeAtoms, mdatoms->chargeA, mdatoms->chargeB); + gmx_pme_reinit_atoms(fr->pmedata, + numPmeAtoms, + gmx::arrayRefFromArray(mdatoms->chargeA, mdatoms->nr), + gmx::arrayRefFromArray(mdatoms->chargeB, mdatoms->nr)); } if (constr) diff --git a/src/gromacs/ewald/pme.cpp b/src/gromacs/ewald/pme.cpp index 5f9ffb42d9..c9272e056a 100644 --- a/src/gromacs/ewald/pme.cpp +++ b/src/gromacs/ewald/pme.cpp @@ -989,7 +989,10 @@ void gmx_pme_reinit(struct gmx_pme_t** pmedata, */ if (!pme_src->gpu && pme_src->nnodes == 1) { - gmx_pme_reinit_atoms(*pmedata, pme_src->atc[0].numAtoms(), nullptr, nullptr); + gmx_pme_reinit_atoms(*pmedata, + pme_src->atc[0].numAtoms(), + {}, + {}); } // TODO this is mostly passing around current values } @@ -1000,7 +1003,7 @@ void gmx_pme_reinit(struct gmx_pme_t** pmedata, /* We would like to reuse the fft grids, but that's harder */ } -void gmx_pme_calc_energy(gmx_pme_t* pme, gmx::ArrayRef x, gmx::ArrayRef q, real* V) +real gmx_pme_calc_energy(gmx_pme_t* pme, gmx::ArrayRef x, gmx::ArrayRef q) { pmegrids_t* grid; @@ -1028,7 +1031,7 @@ void gmx_pme_calc_energy(gmx_pme_t* pme, gmx::ArrayRef x, gmx:: /* Only calculate the spline coefficients, don't actually spread */ spread_on_grid(pme, atc, nullptr, TRUE, FALSE, pme->fftgrid[PME_GRID_QA], FALSE, PME_GRID_QA); - *V = gather_energy_bsplines(pme, grid->grid.grid, atc); + return gather_energy_bsplines(pme, grid->grid.grid, atc); } /*! \brief Calculate initial Lorentz-Berthelot coefficients for LJ-PME */ @@ -1778,13 +1781,16 @@ void gmx_pme_destroy(gmx_pme_t* pme) delete pme; } -void gmx_pme_reinit_atoms(gmx_pme_t* pme, const int numAtoms, const real* chargesA, const real* chargesB) +void gmx_pme_reinit_atoms(gmx_pme_t* pme, + const int numAtoms, + gmx::ArrayRef chargesA, + gmx::ArrayRef chargesB) { if (pme->gpu != nullptr) { - GMX_ASSERT(!(pme->bFEP_q && chargesB == nullptr), + GMX_ASSERT(!(pme->bFEP_q && !chargesB.empty()), "B state charges must be specified if running Coulomb FEP on the GPU"); - pme_gpu_reinit_atoms(pme->gpu, numAtoms, chargesA, pme->bFEP_q ? chargesB : nullptr); + pme_gpu_reinit_atoms(pme->gpu, numAtoms, chargesA.data(), pme->bFEP_q ? chargesB.data() : nullptr); } else { diff --git a/src/gromacs/ewald/pme.h b/src/gromacs/ewald/pme.h index 9ff1b108f2..1e32caf265 100644 --- a/src/gromacs/ewald/pme.h +++ b/src/gromacs/ewald/pme.h @@ -233,7 +233,7 @@ int gmx_pme_do(struct gmx_pme_t* pme, * pme struct. Currently does not work in parallel or with free * energy. */ -void gmx_pme_calc_energy(gmx_pme_t* pme, gmx::ArrayRef x, gmx::ArrayRef q, real* V); +real gmx_pme_calc_energy(gmx_pme_t* pme, gmx::ArrayRef x, gmx::ArrayRef q); /*! \brief * This function updates the local atom data on GPU after DD (charges, coordinates, etc.). @@ -247,7 +247,10 @@ void gmx_pme_calc_energy(gmx_pme_t* pme, gmx::ArrayRef x, gmx:: * \param[in] chargesB The pointer to the array of particle charges in state B. Only used if * charges are perturbed and can otherwise be nullptr. */ -void gmx_pme_reinit_atoms(gmx_pme_t* pme, int numAtoms, const real* chargesA, const real* chargesB); +void gmx_pme_reinit_atoms(gmx_pme_t* pme, + int numAtoms, + gmx::ArrayRef chargesA, + gmx::ArrayRef chargesB); /* A block of PME GPU functions */ diff --git a/src/gromacs/ewald/pme_only.cpp b/src/gromacs/ewald/pme_only.cpp index 64f685ab44..82d6574866 100644 --- a/src/gromacs/ewald/pme_only.cpp +++ b/src/gromacs/ewald/pme_only.cpp @@ -426,7 +426,7 @@ static int gmx_pme_recv_coeffs_coords(struct gmx_pme_t* pme, { if (atomSetChanged) { - gmx_pme_reinit_atoms(pme, nat, pme_pp->chargeA.data(), pme_pp->chargeB.data()); + gmx_pme_reinit_atoms(pme, nat, pme_pp->chargeA, pme_pp->chargeB); if (useGpuForPme) { stateGpu->reinit(nat, nat); diff --git a/src/gromacs/ewald/tests/pmetestcommon.cpp b/src/gromacs/ewald/tests/pmetestcommon.cpp index d226752165..c8e8530ee7 100644 --- a/src/gromacs/ewald/tests/pmetestcommon.cpp +++ b/src/gromacs/ewald/tests/pmetestcommon.cpp @@ -199,7 +199,7 @@ void pmeInitAtoms(gmx_pme_t* pme, atc = &(pme->atc[0]); atc->x = coordinates; atc->coefficient = charges; - gmx_pme_reinit_atoms(pme, atomCount, charges.data(), nullptr); + gmx_pme_reinit_atoms(pme, atomCount, charges, {}); /* With decomposition there would be more boilerplate atc code here, e.g. do_redist_pos_coeffs */ break; @@ -208,7 +208,7 @@ void pmeInitAtoms(gmx_pme_t* pme, atc = &(pme->atc[0]); // We need to set atc->n for passing the size in the tests atc->setNumAtoms(atomCount); - gmx_pme_reinit_atoms(pme, atomCount, charges.data(), nullptr); + gmx_pme_reinit_atoms(pme, atomCount, charges, {}); stateGpu->reinit(atomCount, atomCount); stateGpu->copyCoordinatesToGpu(arrayRefFromArray(coordinates.data(), coordinates.size()), diff --git a/src/gromacs/mdlib/force.cpp b/src/gromacs/mdlib/force.cpp index ad08c862fb..bfb1ca7b1d 100644 --- a/src/gromacs/mdlib/force.cpp +++ b/src/gromacs/mdlib/force.cpp @@ -257,11 +257,10 @@ void calculateLongRangeNonbondeds(t_forcerec* fr, /* Determine the PME grid energy of the test molecule * with the PME grid potential of the other charges. */ - gmx_pme_calc_energy( + Vlr_q = gmx_pme_calc_energy( fr->pmedata, coordinates.subArray(md->homenr - fr->n_tpi, fr->n_tpi), - gmx::arrayRefFromArray(md->chargeA + md->homenr - fr->n_tpi, fr->n_tpi), - &Vlr_q); + gmx::arrayRefFromArray(md->chargeA + md->homenr - fr->n_tpi, fr->n_tpi)); } } } diff --git a/src/gromacs/mdrun/tpi.cpp b/src/gromacs/mdrun/tpi.cpp index 687908ebe5..3b83b4b89e 100644 --- a/src/gromacs/mdrun/tpi.cpp +++ b/src/gromacs/mdrun/tpi.cpp @@ -322,7 +322,7 @@ void LegacySimulator::do_tpi() if (EEL_PME(fr->ic->eeltype)) { - gmx_pme_reinit_atoms(fr->pmedata, a_tp0, nullptr, nullptr); + gmx_pme_reinit_atoms(fr->pmedata, a_tp0, {}, {}); } /* With reacion-field we have distance dependent potentials