LLNL / conduit

Simplified Data Exchange for HPC Simulations
https://software.llnl.gov/conduit/
Other
207 stars 63 forks source link

refactor mesh transform calls that don't use mpi into non mpi lib #945

Open cyrush opened 2 years ago

cyrush commented 2 years ago

Several transform methods in conduit::blueprint::mpi::mesh don't use MPI.

(for example:) conduit::blueprint::mpi::mesh::generate_sides

They provide a multi-domain interface to these transformations. They do take into consideration things like adjsets, which represent MPI context, but they don't need to use MPI to execute the transforms.

These methods should be moved into the non mpi blueprint lib, accessible via something like:

multi_domain::to_zzz

This would also help us implement: https://github.com/LLNL/conduit/issues/932

@agcapps -- a topic we discussed on 3/25.

Some will remain in the MPI lib.

cyrush commented 2 years ago

some expect adjsets, we should be able to have version that don't need them as well.

cyrush commented 1 year ago

mostly complete in #1007

mpi versions remain, but they simply call out to the non mpi versions.

Last step: Allow them to work in the case we pass a single domain mesh, and in the case we do not have an adjset.

cyrush commented 1 year ago

Below is the full set of methods we want.

Current paths always assume adjsets are involved. The non-adjset cases require some internal refactoring to implement, so we tackle in 0.9.0

//-------------------------------------------------------------------------
// without adjset
void CONDUIT_BLUEPRINT_API generate_points(conduit::Node &mesh,
                                           const std::string& src_topo_name,
                                           const std::string& dst_topo_name,
                                           conduit::Node& s2dmap,
                                           conduit::Node& d2smap);

//-------------------------------------------------------------------------
//  with adjset
void CONDUIT_BLUEPRINT_API generate_points(conduit::Node &mesh,
                                           const std::string& src_adjset_name,
                                           const std::string& dst_adjset_name,
                                           const std::string& dst_topo_name,
                                           conduit::Node& s2dmap,
                                           conduit::Node& d2smap);

//-------------------------------------------------------------------------
// without adjset
void CONDUIT_BLUEPRINT_API generate_lines(conduit::Node &mesh,
                                          const std::string& src_topo_name,
                                          const std::string& dst_topo_name,
                                          conduit::Node& s2dmap,
                                          conduit::Node& d2smap);

//-------------------------------------------------------------------------
//  with adjset
void CONDUIT_BLUEPRINT_API generate_lines(conduit::Node &mesh,
                                          const std::string& src_adjset_name,
                                          const std::string& dst_adjset_name,
                                          const std::string& dst_topo_name,
                                          conduit::Node& s2dmap,
                                          conduit::Node& d2smap);

//-------------------------------------------------------------------------
// without adjset
void CONDUIT_BLUEPRINT_API generate_faces(conduit::Node &mesh,
                                          const std::string& src_topo_name,
                                          const std::string& dst_topo_name,
                                          conduit::Node& s2dmap,
                                          conduit::Node& d2smap);

//-------------------------------------------------------------------------
//  with adjset
void CONDUIT_BLUEPRINT_API generate_faces(conduit::Node &mesh,
                                          const std::string& src_adjset_name,
                                          const std::string& dst_adjset_name,
                                          const std::string& dst_topo_name,
                                          conduit::Node& s2dmap,
                                          conduit::Node& d2smap);

//-------------------------------------------------------------------------
// without adjset
void CONDUIT_BLUEPRINT_API generate_centroids(conduit::Node& mesh,
                                              const std::string& src_topo_name,
                                              const std::string& dst_topo_name,
                                              const std::string& dst_cset_name,
                                              conduit::Node& s2dmap,
                                              conduit::Node& d2smap);

//-------------------------------------------------------------------------
//  with adjset
void CONDUIT_BLUEPRINT_API generate_centroids(conduit::Node& mesh,
                                              const std::string& src_adjset_name,
                                              const std::string& dst_adjset_name,
                                              const std::string& dst_topo_name,
                                              const std::string& dst_cset_name,
                                              conduit::Node& s2dmap,
                                              conduit::Node& d2smap);

//-------------------------------------------------------------------------
//  with adjset
void CONDUIT_BLUEPRINT_API generate_sides(conduit::Node& mesh,
                                          const std::string& src_topo_name,
                                          const std::string& dst_topo_name,
                                          const std::string& dst_cset_name,
                                          conduit::Node& s2dmap,
                                          conduit::Node& d2smap);

//-------------------------------------------------------------------------
// without adjset
void CONDUIT_BLUEPRINT_API generate_sides(conduit::Node& mesh,
                                          const std::string& src_adjset_name,
                                          const std::string& dst_adjset_name,
                                          const std::string& dst_topo_name,
                                          const std::string& dst_cset_name,
                                          conduit::Node& s2dmap,
                                          conduit::Node& d2smap);

//-------------------------------------------------------------------------
// without adjset
void CONDUIT_BLUEPRINT_API generate_corners(conduit::Node& mesh,
                                            const std::string& src_topo_name,
                                            const std::string& dst_topo_name,
                                            const std::string& dst_cset_name,
                                            conduit::Node& s2dmap,
                                            conduit::Node& d2smap);

//-------------------------------------------------------------------------
//  with adjset
void CONDUIT_BLUEPRINT_API generate_corners(conduit::Node& mesh,
                                            const std::string& src_adjset_name,
                                            const std::string& dst_adjset_name,
                                            const std::string& dst_topo_name,
                                            const std::string& dst_cset_name,
                                            conduit::Node& s2dmap,
                                            conduit::Node& d2smap);