* Copyright (c) 2005,2006,2007,2008,2009 by the GROMACS development team.
* Copyright (c) 2010,2011,2012,2013,2014 by the GROMACS development team.
* Copyright (c) 2015,2016,2017,2018,2019 by the GROMACS development team.
- * Copyright (c) 2020, by the GROMACS development team, led by
+ * Copyright (c) 2020,2021, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
}
else
{
- if (cr->dd->comm->ddRankSetup.usePmeOnlyRanks)
+ const DDRankSetup& rankSetup = cr->dd->comm->ddRankSetup;
+ if (rankSetup.rankOrder != DdRankOrder::pp_pme && rankSetup.usePmeOnlyRanks)
{
nodeid = ddindex + gmx_ddcoord2pmeindex(cr, x, y, z);
}
static CartesianRankSetup split_communicator(const gmx::MDLogger& mdlog,
t_commrec* cr,
- const DdRankOrder ddRankOrder,
bool gmx_unused reorder,
const DDRankSetup& ddRankSetup,
ivec ddCellIndex,
{
CartesianRankSetup cartSetup;
+ const DdRankOrder ddRankOrder = ddRankSetup.rankOrder;
+
cartSetup.bCartesianPP = (ddRankOrder == DdRankOrder::cartesian);
cartSetup.bCartesianPP_PME = false;
*/
static CartesianRankSetup makeGroupCommunicators(const gmx::MDLogger& mdlog,
const DDSettings& ddSettings,
- const DdRankOrder ddRankOrder,
const DDRankSetup& ddRankSetup,
t_commrec* cr,
ivec ddCellIndex,
if (ddRankSetup.usePmeOnlyRanks)
{
/* Split the communicator into a PP and PME part */
- cartSetup = split_communicator(mdlog, cr, ddRankOrder, ddSettings.useCartesianReorder,
- ddRankSetup, ddCellIndex, pmeRanks);
+ cartSetup = split_communicator(mdlog, cr, ddSettings.useCartesianReorder, ddRankSetup,
+ ddCellIndex, pmeRanks);
}
else
{
/*! \brief Set the cell size and interaction limits, as well as the DD grid */
static DDRankSetup getDDRankSetup(const gmx::MDLogger& mdlog,
int numNodes,
+ const DdRankOrder rankOrder,
const DDGridSetup& ddGridSetup,
const t_inputrec& ir)
{
DDRankSetup ddRankSetup;
+ ddRankSetup.rankOrder = rankOrder;
+
ddRankSetup.numPPRanks = numNodes - ddGridSetup.numPmeOnlyRanks;
copy_ivec(ddGridSetup.numDomains, ddRankSetup.numPPCells);
cr_->npmenodes = ddGridSetup_.numPmeOnlyRanks;
- ddRankSetup_ = getDDRankSetup(mdlog_, cr_->sizeOfDefaultCommunicator, ddGridSetup_, ir_);
+ ddRankSetup_ = getDDRankSetup(mdlog_, cr_->sizeOfDefaultCommunicator, options_.rankOrder,
+ ddGridSetup_, ir_);
/* Generate the group communicator, also decides the duty of each rank */
- cartSetup_ = makeGroupCommunicators(mdlog_, ddSettings_, options_.rankOrder, ddRankSetup_, cr_,
- ddCellIndex_, &pmeRanks_);
+ cartSetup_ = makeGroupCommunicators(mdlog_, ddSettings_, ddRankSetup_, cr_, ddCellIndex_, &pmeRanks_);
}
gmx_domdec_t* DomainDecompositionBuilder::Impl::build(LocalAtomSetManager* atomSets)
* This file is part of the GROMACS molecular simulation package.
*
* Copyright (c) 2014,2015,2016,2017,2018 by the GROMACS development team.
- * Copyright (c) 2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2019,2020,2021, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
struct BalanceRegion;
+namespace gmx
+{
+enum class DdRankOrder : int;
+}
+// namespace
+
+
//! Indices to communicate in a dimension
struct gmx_domdec_ind_t
{
/*! \brief Information on how the DD ranks are set up */
struct DDRankSetup
{
+ /**< The rank ordering */
+ gmx::DdRankOrder rankOrder;
+
/**< The number of particle-particle (non PME-only) ranks */
int numPPRanks = 0;
/**< The DD PP grid */