Replies: 11 comments 4 replies
-
Maybe this will help while we update the docs: https://ascent--1412.org.readthedocs.build/en/1412/Actions/Pipelines.html#partitioning |
Beta Was this translation helpful? Give feedback.
-
Thank you!
Then is this how I would aggregate a single scalar field on process 0?
I'm also not sure about the syntax for lists. The documentation shows:
But that does not seem like valid C++. Would The following work?
|
Beta Was this translation helpful? Give feedback.
-
@tmarrinan I'm currently working on a bug impacting the partition filter. Currently the filter only accepts a target value. A target=1 should default to the root process. Once I fix this bug there will be a destination_ranks that can be set. For gathering all domains of a single field on one process I would (eventually) do it like so:
I'm guessing there probably is a way of doing a mesh selection of an individual field, but I'm not entirely sure. All of these parameters are optional so how they combine can be confusing. All of this uses and is based off of Conduit Blueprint's partition, which has more sufficient docs with fewer errors: https://llnl-conduit.readthedocs.io/en/latest/blueprint_mesh_partition.html#partitioning |
Beta Was this translation helpful? Give feedback.
-
You can just use Conduit directly to re-partition for now instead of asking Ascent to call Conduit. |
Beta Was this translation helpful? Give feedback.
-
Thanks for all the information.
But I see a message saying "Unable to combine domains as uniform, using unstructured." |
Beta Was this translation helpful? Give feedback.
-
OK - after a bit more reading and testing - I think I have it working! There were 2 key things I needed to change (one with the mesh and one with the partition options):
Final solution:
This resulted in the following output (12 processes, each responsible for a 4x4 subregion in an overall 16x12 grid; each process filled its local region with floating point values equal to its process id):
|
Beta Was this translation helpful? Give feedback.
-
So I have it working using Conduit directly, but now trying to make it an Ascent action. I am trying something like the following:
However, I get an error from Ascent:
I notice from the earlier conversation, that selections seemed to be a single object rather than a list. Is that the issue? If so, how would I remedy that? |
Beta Was this translation helpful? Give feedback.
-
Hi @tmarrinan that is not the issue, unfortunately the issue is the selection functionality is not currently working. I have a branch: task/2024_parition_docs that should allow for selection. I'm still in the process of testing unit cases. If you do test out this branch, I think you'd want to change your selection to something like the following:
|
Beta Was this translation helpful? Give feedback.
-
Thanks! |
Beta Was this translation helpful? Give feedback.
-
Hmm @tmarrinan great question! A list of selections seems like the way to do it. I'll have to check if the functionality exists in conduit for that option! |
Beta Was this translation helpful? Give feedback.
-
Fortunately it does! Here's how I create the partitioning programmatically:
The resulting options yaml for a 200x80 grid split between 4 processes looks like the following:
|
Beta Was this translation helpful? Give feedback.
-
Hello.
I am trying to repartition data published to Ascent. My use case is for only a subset (possibly only a single) of MPI processes to perform some form of data analysis on the simulation data. I therefore want to gather data from all MPI processes on just one or a few target processes.
The partition pipeline seems like it may be well-suited for this, but it's hard to tell from the documentation just how to specify the desired data layout. Can this be done, or is the partition pipeline more just used for automatic repartitioning of data for better load balancing?
I'll also provide two example (simplified) uses in case my description above isn't fully clear.
Case 1:
2D uniform grid of scalar values split amongst 4 MPI processes:
I need all data gathered on rank 0:
Case 2:
3D triangular mesh with subregions owned amongst 8 MPI processes.
I need data gathered on 2 processes so that each of those 2 processes own their original subregion along with 3 other subregions (i.e. each of the 2 processes now own half of the triangular mesh).
Beta Was this translation helpful? Give feedback.
All reactions