}
/* Returns the j-zone range for pairlist construction for the give locality and i-zone */
-static Range<int> getJZoneRange(const gmx_domdec_zones_t& ddZones,
+static Range<int> getJZoneRange(const gmx_domdec_zones_t* ddZones,
const InteractionLocality locality,
const int iZone)
{
else if (iZone == 0)
{
/* Non-local: we need to avoid the local (zone 0 vs 0) interactions */
- return { 1, *ddZones.iZones[iZone].jZoneRange.end() };
+ return { 1, *ddZones->iZones[iZone].jZoneRange.end() };
}
else
{
/* Non-local with non-local i-zone: use all j-zones */
- return ddZones.iZones[iZone].jZoneRange;
+ return ddZones->iZones[iZone].jZoneRange;
}
}
}
}
- const gmx_domdec_zones_t& ddZones = *gridSet.domainSetup().zones;
+ const gmx_domdec_zones_t* ddZones = gridSet.domainSetup().zones;
+ GMX_ASSERT(locality_ == InteractionLocality::Local || ddZones != nullptr,
+ "Nonlocal interaction locality with null ddZones.");
const auto iZoneRange = getIZoneRange(gridSet.domainSetup(), locality_);
/* With GPU: generate progressively smaller lists for
* load balancing for local only or non-local with 2 zones.
*/
- progBal = (locality_ == InteractionLocality::Local || ddZones.n <= 2);
+ progBal = (locality_ == InteractionLocality::Local || ddZones->n <= 2);
#pragma omp parallel for num_threads(numLists) schedule(static)
for (int th = 0; th < numLists; th++)