diff --git a/src/OpenFOAM/parallel/globalIndex/globalIndex.H b/src/OpenFOAM/parallel/globalIndex/globalIndex.H index 213482ee99..4f84920416 100644 --- a/src/OpenFOAM/parallel/globalIndex/globalIndex.H +++ b/src/OpenFOAM/parallel/globalIndex/globalIndex.H @@ -421,7 +421,7 @@ public: const Type& localValue, List& allValues, //! output field (master only) const int tag = UPstream::msgType(), - const UPstream::commsTypes = UPstream::commsTypes::scheduled + const UPstream::commsTypes = UPstream::commsTypes::nonBlocking ); //- Collect data in processor order on master (== procIDs[0]). @@ -449,7 +449,7 @@ public: const IndirectListBase& fld, List& allFld, //! output field (master only) const int tag = UPstream::msgType(), - const UPstream::commsTypes = UPstream::commsTypes::scheduled + const UPstream::commsTypes = UPstream::commsTypes::nonBlocking ); diff --git a/src/OpenFOAM/parallel/globalIndex/globalIndexTemplates.C b/src/OpenFOAM/parallel/globalIndex/globalIndexTemplates.C index e26a77265a..2029ea4f07 100644 --- a/src/OpenFOAM/parallel/globalIndex/globalIndexTemplates.C +++ b/src/OpenFOAM/parallel/globalIndex/globalIndexTemplates.C @@ -262,6 +262,24 @@ void Foam::globalIndex::gather { // low-level: no parRun guard + if (is_contiguous::value) + { + // Flatten list (locally) so that we can benefit from using direct + // read/write of contiguous data + + gather + ( + off, + comm, + procIDs, + List(fld), + allFld, + tag, + preferredCommsType + ); + return; + } + // Automatically change from nonBlocking to scheduled for // non-contiguous data. const UPstream::commsTypes commsType =