From: Mark Abraham Date: Mon, 7 Jun 2021 13:35:19 +0000 (+0200) Subject: Unite the post-DD-partition update of the local topology X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=e31b309a51c00e3bbe0bcd678cd8e1dc33b16eb9;p=alexxy%2Fgromacs.git Unite the post-DD-partition update of the local topology Also simplify and clarify the implementation of doSorting Removed ilsortFE_UNSORTED now that it is unused Refs #4004 --- diff --git a/src/gromacs/domdec/localtopology.cpp b/src/gromacs/domdec/localtopology.cpp index dfe8f85703..0b8c76f659 100644 --- a/src/gromacs/domdec/localtopology.cpp +++ b/src/gromacs/domdec/localtopology.cpp @@ -921,16 +921,17 @@ static int make_local_bondeds_excls(gmx_domdec_t* dd, return numBondedInteractions; } -int dd_make_local_top(gmx_domdec_t* dd, - gmx_domdec_zones_t* zones, - int npbcdim, - matrix box, - rvec cellsize_min, - const ivec npulse, - t_forcerec* fr, - ArrayRef coordinates, - const gmx_mtop_t& mtop, - gmx_localtop_t* ltop) +int dd_make_local_top(gmx_domdec_t* dd, + gmx_domdec_zones_t* zones, + int npbcdim, + matrix box, + rvec cellsize_min, + const ivec npulse, + t_forcerec* fr, + ArrayRef coordinates, + const gmx_mtop_t& mtop, + gmx::ArrayRef atomInfo, + gmx_localtop_t* ltop) { real rc = -1; ivec rcheck; @@ -1011,17 +1012,7 @@ int dd_make_local_top(gmx_domdec_t* dd, <op->idef, <op->excls); - /* The ilist is not sorted yet, - * we can only do this when we have the charge arrays. - */ - ltop->idef.ilsort = ilsortUNKNOWN; - - return numBondedInteractionsToReduce; -} - -void dd_sort_local_top(const gmx_domdec_t& dd, gmx::ArrayRef atomInfo, gmx_localtop_t* ltop) -{ - if (dd.reverse_top->doSorting()) + if (dd->reverse_top->doListedForcesSorting()) { gmx_sort_ilist_fe(<op->idef, atomInfo); } @@ -1029,4 +1020,6 @@ void dd_sort_local_top(const gmx_domdec_t& dd, gmx::ArrayRef atom { ltop->idef.ilsort = ilsortNO_FE; } + + return numBondedInteractionsToReduce; } diff --git a/src/gromacs/domdec/localtopology.h b/src/gromacs/domdec/localtopology.h index 8a66ea43ed..14ca253442 100644 --- a/src/gromacs/domdec/localtopology.h +++ b/src/gromacs/domdec/localtopology.h @@ -71,9 +71,7 @@ int dd_make_local_top(struct gmx_domdec_t* dd, t_forcerec* fr, gmx::ArrayRef coordinates, const gmx_mtop_t& top, + gmx::ArrayRef atomInfo, gmx_localtop_t* ltop); -/*! \brief Sort ltop->ilist when we are doing free energy. */ -void dd_sort_local_top(const gmx_domdec_t& dd, gmx::ArrayRef atomInfo, gmx_localtop_t* ltop); - #endif diff --git a/src/gromacs/domdec/mdsetup.cpp b/src/gromacs/domdec/mdsetup.cpp index 1176ddb4e1..7ff47990f7 100644 --- a/src/gromacs/domdec/mdsetup.cpp +++ b/src/gromacs/domdec/mdsetup.cpp @@ -108,11 +108,7 @@ void mdAlgorithmsSetupAtomData(const t_commrec* cr, mdAtoms); t_mdatoms* mdatoms = mdAtoms->mdatoms(); - if (usingDomDec) - { - dd_sort_local_top(*cr->dd, fr->atomInfo, top); - } - else + if (!usingDomDec) { gmx_mtop_generate_local_top(top_global, top, inputrec.efep != FreeEnergyPerturbationType::No); } diff --git a/src/gromacs/domdec/partition.cpp b/src/gromacs/domdec/partition.cpp index 7dca75dc80..4ec9098b93 100644 --- a/src/gromacs/domdec/partition.cpp +++ b/src/gromacs/domdec/partition.cpp @@ -3207,6 +3207,7 @@ void dd_partition_system(FILE* fplog, fr, state_local->x, top_global, + fr->atomInfo, top_local); dd->localTopologyChecker->scheduleCheckOfLocalTopology(numBondedInteractionsToReduce); diff --git a/src/gromacs/domdec/reversetopology.cpp b/src/gromacs/domdec/reversetopology.cpp index f733d6ad53..30ca66aa2d 100644 --- a/src/gromacs/domdec/reversetopology.cpp +++ b/src/gromacs/domdec/reversetopology.cpp @@ -87,8 +87,8 @@ struct gmx_reverse_top_t::Impl std::vector ril_mt; //! \brief The size of ril_mt[?].index summed over all entries int ril_mt_tot_size = 0; - //! \brief The sorting state of bondeds for free energy - int ilsort = ilsortUNKNOWN; + //! \brief Whether listed-force interaction lists should be sorted for free energy + bool doListedForcesSorting; //! \brief molblock to global atom index for quick lookup of molblocks on atom index std::vector mbi; @@ -326,9 +326,9 @@ ArrayRef gmx_reverse_top_t::threadWorkObjects() const return impl_->th_work; } -bool gmx_reverse_top_t::doSorting() const +bool gmx_reverse_top_t::doListedForcesSorting() const { - return impl_->ilsort != ilsortNO_FE; + return impl_->doListedForcesSorting; } /*! \brief Generate the reverse topology */ @@ -376,14 +376,7 @@ gmx_reverse_top_t::Impl::Impl(const gmx_mtop_t& mtop, *mtop.intermolecular_ilist, &atoms_global, options, AtomLinkRule::FirstAtom, &ril_intermol); } - if (useFreeEnergy && gmx_mtop_bondeds_free_energy(&mtop)) - { - ilsort = ilsortFE_UNSORTED; - } - else - { - ilsort = ilsortNO_FE; - } + doListedForcesSorting = useFreeEnergy && gmx_mtop_bondeds_free_energy(&mtop); /* Make a molblock index for fast searching */ int i = 0; diff --git a/src/gromacs/domdec/reversetopology.h b/src/gromacs/domdec/reversetopology.h index 278a69f77a..9cb998b259 100644 --- a/src/gromacs/domdec/reversetopology.h +++ b/src/gromacs/domdec/reversetopology.h @@ -152,8 +152,8 @@ public: bool hasPositionRestraints() const; //! Returns the per-thread working structures for making the local topology gmx::ArrayRef threadWorkObjects() const; - //! Returns whether the local topology interactions should be sorted - bool doSorting() const; + //! Returns whether the local topology listed-forces interactions should be sorted + bool doListedForcesSorting() const; //! Private implementation definition struct Impl; diff --git a/src/gromacs/topology/idef.h b/src/gromacs/topology/idef.h index 84ba6e8a58..7c68e2c606 100644 --- a/src/gromacs/topology/idef.h +++ b/src/gromacs/topology/idef.h @@ -360,7 +360,6 @@ enum { ilsortUNKNOWN, ilsortNO_FE, - ilsortFE_UNSORTED, ilsortFE_SORTED };