Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
ea8d2901
Commit
ea8d2901
authored
Feb 04, 2013
by
mattijs
Browse files
ENH: communicators: initial version - extended Pstream API
parent
e676f947
Changes
56
Hide whitespace changes
Inline
Side-by-side
applications/test/parallel-communicators/Test-parallel-communicators.C
View file @
ea8d2901
...
...
@@ -150,46 +150,49 @@ int main(int argc, char *argv[])
top
.
append
(
i
);
}
Pout
<<
"bottom:"
<<
bottom
<<
endl
;
Pout
<<
"top:"
<<
top
<<
endl
;
//
Pout<< "bottom:" << bottom << endl;
Pout
<<
"top
:"
<<
top
<<
endl
;
scalar
localValue
=
111
*
UPstream
::
myProcNo
(
UPstream
::
worldComm
);
Pout
<<
"localValue:"
<<
localValue
<<
endl
;
Pout
<<
"localValue
:"
<<
localValue
<<
endl
;
if
(
Pstream
::
myProcNo
(
UPstream
::
worldComm
)
<
n
/
2
)
{
label
comm
=
Pstream
::
allocateCommunicator
(
UPstream
::
worldComm
,
bottom
);
Pout
<<
"allocated bottom comm:"
<<
comm
<<
endl
;
Pout
<<
"comm myproc :"
<<
Pstream
::
myProcNo
(
comm
)
<<
endl
;
scalar
sum
=
sumReduce
(
comm
,
localValue
);
Pout
<<
"sum :"
<<
sum
<<
endl
;
label
comm
=
Pstream
::
allocateCommunicator
(
UPstream
::
worldComm
,
top
)
;
Pstream
::
freeCommunicator
(
comm
);
}
else
Pout
<<
"allocated comm :"
<<
comm
<<
endl
;
Pout
<<
"comm myproc :"
<<
Pstream
::
myProcNo
(
comm
)
<<
endl
;
if
(
Pstream
::
myProcNo
(
comm
)
!=
-
1
)
{
label
comm
=
Pstream
::
allocateCommunicator
//scalar sum = sumReduce(comm, localValue);
//scalar sum = localValue;
//reduce
//(
// UPstream::treeCommunication(comm),
// sum,
// sumOp<scalar>(),
// Pstream::msgType(),
// comm
//);
scalar
sum
=
returnReduce
(
UPstream
::
worldComm
,
top
localValue
,
sumOp
<
scalar
>
(),
Pstream
::
msgType
(),
comm
);
Pout
<<
"allocated top comm:"
<<
comm
<<
endl
;
Pout
<<
"comm myproc :"
<<
Pstream
::
myProcNo
(
comm
)
<<
endl
;
scalar
sum
=
sumReduce
(
comm
,
localValue
);
Pout
<<
"sum :"
<<
sum
<<
endl
;
Pstream
::
freeCommunicator
(
comm
);
Pout
<<
"sum :"
<<
sum
<<
endl
;
}
Pstream
::
freeCommunicator
(
comm
);
Pout
<<
"End
\n
"
<<
endl
;
...
...
applications/utilities/mesh/generation/extrude/extrudeMesh/extrudeMesh.C
View file @
ea8d2901
...
...
@@ -496,6 +496,7 @@ int main(int argc, char *argv[])
mesh
.
nFaces
(),
// start
patchI
,
// index
mesh
.
boundaryMesh
(),
// polyBoundaryMesh
Pstream
::
worldComm
,
// communicator
Pstream
::
myProcNo
(),
// myProcNo
nbrProcI
// neighbProcNo
)
...
...
applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
View file @
ea8d2901
...
...
@@ -448,6 +448,7 @@ bool Foam::domainDecomposition::writeDecomposition()
curStart
,
nPatches
,
procMesh
.
boundaryMesh
(),
Pstream
::
worldComm
,
procI
,
curNeighbourProcessors
[
procPatchI
]
);
...
...
@@ -475,6 +476,7 @@ bool Foam::domainDecomposition::writeDecomposition()
curStart
,
nPatches
,
procMesh
.
boundaryMesh
(),
Pstream
::
worldComm
,
procI
,
curNeighbourProcessors
[
procPatchI
],
referPatch
,
...
...
etc/bashrc
View file @
ea8d2901
...
...
@@ -32,7 +32,7 @@
#------------------------------------------------------------------------------
export
WM_PROJECT
=
OpenFOAM
export
WM_PROJECT_VERSION
=
dev
export
WM_PROJECT_VERSION
=
dev
.procAgglom
################################################################################
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
...
...
etc/cshrc
View file @
ea8d2901
...
...
@@ -31,7 +31,7 @@
#------------------------------------------------------------------------------
setenv WM_PROJECT OpenFOAM
setenv WM_PROJECT_VERSION dev
setenv WM_PROJECT_VERSION dev
.procAgglom
################################################################################
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
...
...
src/OpenFOAM/db/IOobjects/IOdictionary/IOdictionaryIO.C
View file @
ea8d2901
...
...
@@ -78,9 +78,10 @@ void Foam::IOdictionary::readFile(const bool masterOnly)
(
comms
,
const_cast
<
word
&>
(
headerClassName
()),
Pstream
::
msgType
()
Pstream
::
msgType
(),
Pstream
::
worldComm
);
Pstream
::
scatter
(
comms
,
note
(),
Pstream
::
msgType
());
Pstream
::
scatter
(
comms
,
note
(),
Pstream
::
msgType
()
,
Pstream
::
worldComm
);
// Get my communication order
const
Pstream
::
commsStruct
&
myComm
=
comms
[
Pstream
::
myProcNo
()];
...
...
src/OpenFOAM/db/IOstreams/Pstreams/IPstream.C
View file @
ea8d2901
...
...
@@ -33,6 +33,7 @@ Foam::IPstream::IPstream
const
int
fromProcNo
,
const
label
bufSize
,
const
int
tag
,
const
label
comm
,
streamFormat
format
,
versionNumber
version
)
...
...
@@ -45,6 +46,7 @@ Foam::IPstream::IPstream
buf_
,
externalBufPosition_
,
tag
,
// tag
comm
,
false
,
// do not clear buf_ if at end
format
,
version
...
...
src/OpenFOAM/db/IOstreams/Pstreams/IPstream.H
View file @
ea8d2901
...
...
@@ -69,6 +69,7 @@ public:
const
int
fromProcNo
,
const
label
bufSize
=
0
,
const
int
tag
=
UPstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
,
streamFormat
format
=
BINARY
,
versionNumber
version
=
currentVersion
);
...
...
src/OpenFOAM/db/IOstreams/Pstreams/OPstream.C
View file @
ea8d2901
...
...
@@ -33,12 +33,13 @@ Foam::OPstream::OPstream
const
int
toProcNo
,
const
label
bufSize
,
const
int
tag
,
const
label
comm
,
streamFormat
format
,
versionNumber
version
)
:
Pstream
(
commsType
,
bufSize
),
UOPstream
(
commsType
,
toProcNo
,
buf_
,
tag
,
true
,
format
,
version
)
UOPstream
(
commsType
,
toProcNo
,
buf_
,
tag
,
comm
,
true
,
format
,
version
)
{}
...
...
src/OpenFOAM/db/IOstreams/Pstreams/OPstream.H
View file @
ea8d2901
...
...
@@ -66,6 +66,7 @@ public:
const
int
toProcNo
,
const
label
bufSize
=
0
,
const
int
tag
=
UPstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
,
streamFormat
format
=
BINARY
,
versionNumber
version
=
currentVersion
);
...
...
src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H
View file @
ea8d2901
...
...
@@ -98,7 +98,8 @@ public:
const
List
<
commsStruct
>&
comms
,
T
&
Value
,
const
BinaryOp
&
bop
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -107,7 +108,8 @@ public:
(
T
&
Value
,
const
BinaryOp
&
bop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
);
//- Scatter data. Distribute without modification. Reverse of gather
...
...
@@ -116,12 +118,18 @@ public:
(
const
List
<
commsStruct
>&
comms
,
T
&
Value
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
template
<
class
T
>
static
void
scatter
(
T
&
Value
,
const
int
tag
=
Pstream
::
msgType
());
static
void
scatter
(
T
&
Value
,
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
);
// Combine variants. Inplace combine values from processors.
...
...
@@ -133,7 +141,8 @@ public:
const
List
<
commsStruct
>&
comms
,
T
&
Value
,
const
CombineOp
&
cop
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -142,7 +151,8 @@ public:
(
T
&
Value
,
const
CombineOp
&
cop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
);
//- Scatter data. Reverse of combineGather
...
...
@@ -151,7 +161,8 @@ public:
(
const
List
<
commsStruct
>&
comms
,
T
&
Value
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -159,7 +170,8 @@ public:
static
void
combineScatter
(
T
&
Value
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
);
// Combine variants working on whole List at a time.
...
...
@@ -170,7 +182,8 @@ public:
const
List
<
commsStruct
>&
comms
,
List
<
T
>&
Value
,
const
CombineOp
&
cop
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -179,7 +192,8 @@ public:
(
List
<
T
>&
Value
,
const
CombineOp
&
cop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
);
//- Scatter data. Reverse of combineGather
...
...
@@ -188,7 +202,8 @@ public:
(
const
List
<
commsStruct
>&
comms
,
List
<
T
>&
Value
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -196,7 +211,8 @@ public:
static
void
listCombineScatter
(
List
<
T
>&
Value
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
);
// Combine variants working on whole map at a time. Container needs to
...
...
@@ -208,7 +224,8 @@ public:
const
List
<
commsStruct
>&
comms
,
Container
&
Values
,
const
CombineOp
&
cop
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -217,7 +234,8 @@ public:
(
Container
&
Values
,
const
CombineOp
&
cop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
);
//- Scatter data. Reverse of combineGather
...
...
@@ -226,7 +244,8 @@ public:
(
const
List
<
commsStruct
>&
comms
,
Container
&
Values
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -234,7 +253,8 @@ public:
static
void
mapCombineScatter
(
Container
&
Values
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
);
...
...
@@ -249,7 +269,8 @@ public:
(
const
List
<
commsStruct
>&
comms
,
List
<
T
>&
Values
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -257,7 +278,8 @@ public:
static
void
gatherList
(
List
<
T
>&
Values
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
);
//- Scatter data. Reverse of gatherList
...
...
@@ -266,7 +288,8 @@ public:
(
const
List
<
commsStruct
>&
comms
,
List
<
T
>&
Values
,
const
int
tag
const
int
tag
,
const
label
comm
);
//- Like above but switches between linear/tree communication
...
...
@@ -274,7 +297,8 @@ public:
static
void
scatterList
(
List
<
T
>&
Values
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
);
...
...
@@ -291,6 +315,7 @@ public:
List
<
Container
>&
,
labelListList
&
sizes
,
const
int
tag
=
UPstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
,
const
bool
block
=
true
);
...
...
src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C
View file @
ea8d2901
...
...
@@ -40,17 +40,19 @@ Foam::PstreamBuffers::PstreamBuffers
(
const
UPstream
::
commsTypes
commsType
,
const
int
tag
,
const
label
comm
,
IOstream
::
streamFormat
format
,
IOstream
::
versionNumber
version
)
:
commsType_
(
commsType
),
tag_
(
tag
),
comm_
(
comm
),
format_
(
format
),
version_
(
version
),
sendBuf_
(
UPstream
::
nProcs
()),
recvBuf_
(
UPstream
::
nProcs
()),
recvBufPos_
(
UPstream
::
nProcs
(),
0
),
sendBuf_
(
UPstream
::
nProcs
(
comm
)),
recvBuf_
(
UPstream
::
nProcs
(
comm
)),
recvBufPos_
(
UPstream
::
nProcs
(
comm
),
0
),
finishedSendsCalled_
(
false
)
{}
...
...
@@ -90,6 +92,7 @@ void Foam::PstreamBuffers::finishedSends(const bool block)
recvBuf_
,
sizes
,
tag_
,
comm_
,
block
);
}
...
...
@@ -108,6 +111,7 @@ void Foam::PstreamBuffers::finishedSends(labelListList& sizes, const bool block)
recvBuf_
,
sizes
,
tag_
,
comm_
,
block
);
}
...
...
@@ -123,9 +127,9 @@ void Foam::PstreamBuffers::finishedSends(labelListList& sizes, const bool block)
// Note: possible only if using different tag from write started
// by ~UOPstream. Needs some work.
//sizes.setSize(UPstream::nProcs());
//labelList& nsTransPs = sizes[UPstream::myProcNo()];
//nsTransPs.setSize(UPstream::nProcs());
//sizes.setSize(UPstream::nProcs(
comm
));
//labelList& nsTransPs = sizes[UPstream::myProcNo(
comm
)];
//nsTransPs.setSize(UPstream::nProcs(
comm
));
//
//forAll(sendBuf_, procI)
//{
...
...
src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H
View file @
ea8d2901
...
...
@@ -95,6 +95,8 @@ class PstreamBuffers
const
int
tag_
;
const
label
comm_
;
const
IOstream
::
streamFormat
format_
;
const
IOstream
::
versionNumber
version_
;
...
...
@@ -127,6 +129,7 @@ public:
(
const
UPstream
::
commsTypes
commsType
,
const
int
tag
=
UPstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
,
IOstream
::
streamFormat
format
=
IOstream
::
BINARY
,
IOstream
::
versionNumber
version
=
IOstream
::
currentVersion
);
...
...
src/OpenFOAM/db/IOstreams/Pstreams/PstreamCombineReduceOps.H
View file @
ea8d2901
...
...
@@ -53,11 +53,12 @@ void combineReduce
const
List
<
UPstream
::
commsStruct
>&
comms
,
T
&
Value
,
const
CombineOp
&
cop
,
const
int
tag
const
int
tag
,
const
label
comm
)
{
Pstream
::
combineGather
(
comms
,
Value
,
cop
,
tag
);
Pstream
::
combineScatter
(
comms
,
Value
,
tag
);
Pstream
::
combineGather
(
comms
,
Value
,
cop
,
tag
,
comm
);
Pstream
::
combineScatter
(
comms
,
Value
,
tag
,
comm
);
}
...
...
@@ -66,24 +67,45 @@ void combineReduce
(
T
&
Value
,
const
CombineOp
&
cop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
Pstream
::
worldComm
)
{
if
(
UPstream
::
nProcs
()
<
UPstream
::
nProcsSimpleSum
)
if
(
UPstream
::
nProcs
(
comm
)
<
UPstream
::
nProcsSimpleSum
)
{
Pstream
::
combineGather
(
UPstream
::
linearCommunication
(),
UPstream
::
linearCommunication
(
comm
),
Value
,
cop
,
tag
tag
,
comm
);
Pstream
::
combineScatter
(
UPstream
::
linearCommunication
(
comm
),
Value
,
tag
,
comm
);
Pstream
::
combineScatter
(
UPstream
::
linearCommunication
(),
Value
,
tag
);
}
else
{
Pstream
::
combineGather
(
UPstream
::
treeCommunication
(),
Value
,
cop
,
tag
);
Pstream
::
combineScatter
(
UPstream
::
treeCommunication
(),
Value
,
tag
);
Pstream
::
combineGather
(
UPstream
::
treeCommunication
(
comm
),
Value
,
cop
,
tag
,
comm
);
Pstream
::
combineScatter
(
UPstream
::
treeCommunication
(
comm
),
Value
,
tag
,
comm
);
}
}
...
...
src/OpenFOAM/db/IOstreams/Pstreams/PstreamReduceOps.H
View file @
ea8d2901
...
...
@@ -44,11 +44,12 @@ void reduce
const
List
<
UPstream
::
commsStruct
>&
comms
,
T
&
Value
,
const
BinaryOp
&
bop
,
const
int
tag
const
int
tag
,
const
label
comm
)
{
Pstream
::
gather
(
comms
,
Value
,
bop
,
tag
);
Pstream
::
scatter
(
comms
,
Value
,
tag
);
Pstream
::
gather
(
comms
,
Value
,
bop
,
tag
,
comm
);
Pstream
::
scatter
(
comms
,
Value
,
tag
,
comm
);
}
...
...
@@ -58,16 +59,17 @@ void reduce
(
T
&
Value
,
const
BinaryOp
&
bop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
)
{
if
(
UPstream
::
nProcs
()
<
UPstream
::
nProcsSimpleSum
)
if
(
UPstream
::
nProcs
(
comm
)
<
UPstream
::
nProcsSimpleSum
)
{
reduce
(
UPstream
::
linearCommunication
(),
Value
,
bop
,
tag
);
reduce
(
UPstream
::
linearCommunication
(
comm
),
Value
,
bop
,
tag
,
comm
);
}
else
{
reduce
(
UPstream
::
treeCommunication
(),
Value
,
bop
,
tag
);
reduce
(
UPstream
::
treeCommunication
(
comm
),
Value
,
bop
,
tag
,
comm
);
}
}
...
...
@@ -78,18 +80,33 @@ T returnReduce
(
const
T
&
Value
,
const
BinaryOp
&
bop
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm
)
{
T
WorkValue
(
Value
);
if
(
UPstream
::
nProcs
()
<
UPstream
::
nProcsSimpleSum
)
if
(
UPstream
::
nProcs
(
comm
)
<
UPstream
::
nProcsSimpleSum
)
{
reduce
(
UPstream
::
linearCommunication
(),
WorkValue
,
bop
,
tag
);
reduce
(
UPstream
::
linearCommunication
(
comm
),
WorkValue
,
bop
,
tag
,
comm
);
}
else
{
reduce
(
UPstream
::
treeCommunication
(),
WorkValue
,
bop
,
tag
);
reduce
(
UPstream
::
treeCommunication
(
comm
),
WorkValue
,
bop
,
tag
,
comm
);
}
return
WorkValue
;
...
...
@@ -102,11 +119,12 @@ void sumReduce
(
T
&
Value
,
label
&
Count
,
const
int
tag
=
Pstream
::
msgType
()
const
int
tag
=
Pstream
::
msgType
(),
const
label
comm
=
UPstream
::
worldComm