[Dune] How to implement gridview.communicate() ?

Aleksejs Fomins aleksejs.fomins at lspr.ch
Tue Jan 6 14:57:28 CET 2015


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dear Dune,

I am currently implementing the Data Handle interface for the
CurvilinearGrid. I suppose that the communication paradigm is as follows:

1) User creates DataHandle, where they put in data using .gather() and
receive data using .scatter() procedures.
2) User calls gridview.communicate(DataHandle, InterfaceType,
CommunicationDirection)
2.1) grid loops over provided send-interface, calls gather
2.2) internal MessageBuffers are synchronized over all processes
2.3) grid loops over provided receive-interface, calls scatter


Questions:

- --------------------------------------------------------------------

2.1) I do not understand the the exact meaning of the InterfaceType.

"InteriorBorder_InteriorBorder_Interface - send/receive interior and
border entities"

Do I understand correctly that here each process boundary communicates
to itself on the neighbouring process, and each InteriorBorder element
communicates to a ghost element(s) on the neighbouring process(es)?

"All_All_Interface - send all and receive all entities"

What is the meaning of this Interface? Does it mean that for each
entity on the process some data is communicated? Then how are the
destination processes determined, or is the data sent to all
processes? And finally, how is such data received on the other
processes. In order to request data from the DataHandle, an entity
reference must be provided, but each process normally only has
references to its own entities?

- -----------------------------------------------------------------------

2.2) If I understand the synchronization step correctly, then each
process sends specific data to each other process, for example,
communicating between neighbouring process boundary faces. If I am not
mistaken, in MPI this operation is called MPI_alltoallv(), however,
this operation can not send arbitrary data, only fixed data types like
Int and Double. When I look at Dune::CollectiveCommunication, I only
see methods to communicate 1-to-all or all-to-1 or all-to-all, but not
each-to-each.

What is the best way of performing such communication in Dune?

Regards,
Aleksejs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBAgAGBQJUq+nHAAoJEDkNM7UOEwMZcYoQAOB52oM40KcwcSZeZ7Gzo5cd
Ju37+YiefbrxyfXurDh9XLd9ugVZ7B/KBve3HMrJ8fxJpeYfKwPeC2xqEmB6bdop
YDGrW1kJrZLUvf7S8Gj6eRTAq52wUXYrejZIZTBkz31ElVLTjbvZMct7aZBSgoWg
quDrC5CbnZRONle6o10Xyle4CSj7JQ9xD6gag127WqTcUa0hx8+e8n/PHU5jhp3j
lBwFal/os9T9eUw88DouhGPG0+Bzl2sOMWNQENn/GukyutQ06vMh0bR0Sh16lPfN
LlNtXapk2mJD2isGe4ISEITAVsxHjHwjrDtUu348jYTsBUCQdwzPeLsnzETR4wuc
itsOcZiW2u1Xxgt9MV4xc74qifG86fzl2yunKk8m/Co7Swe1q5ep2AyYIXtgzlW6
vu7VE+oe6QnRDN0mlNev4glb6yTW5mXfHY6aXi6d7eHxP+JBuulIVXSySOv17aHD
qvb7wL+gOifFUlRvZRFUxC/eEtsz9J8MlqnjDoipRBNXy62TE3t8n0joJuKVd0bN
1vDnU9sMTATjgAiS7EZu12r+2KE3Q9bX69lYQB3S1Pq9MC8Y+UbL7DNlA1iKfmxX
/4DYUGsaF4RUjauWIokWTKfbN9oybUzTBVhnCdpwTFM48z47DBr7wOdwqvGQBDMu
tb68babEVgxxLNXDyfsV
=4ESo
-----END PGP SIGNATURE-----




More information about the Dune mailing list