[MOAB-dev] commit/MOAB: danwu: Updated parallel unit test mpastrvpart for testing gather set.
Tim Tautges
tautges at mcs.anl.gov
Thu Aug 29 10:24:28 CDT 2013
Danqing, excellent work, everyone should be vigilant about generating unit tests when we fix a bug or add a new capability.
- tim
On 08/29/2013 10:19 AM, commits-noreply at bitbucket.org wrote:
> 1 new commit in MOAB:
>
> https://bitbucket.org/fathomteam/moab/commits/ceaaadd761a5/
> Changeset: ceaaadd761a5
> Branch: master
> User: danwu
> Date: 2013-08-29 17:18:57
> Summary: Updated parallel unit test mpastrvpart for testing gather set.
>
> Affected #: 1 file
>
> diff --git a/test/parallel/mpastrvpart.cpp b/test/parallel/mpastrvpart.cpp
> index 0999aa0..5cacd2c 100644
> --- a/test/parallel/mpastrvpart.cpp
> +++ b/test/parallel/mpastrvpart.cpp
> @@ -3,7 +3,7 @@
> #include "moab/ParallelComm.hpp"
> #include "moab/ProgOptions.hpp"
> #include "MBParallelConventions.h"
> -#include "moab/Util.hpp"
> +#include "moab/ReadUtilIface.hpp"
>
> using namespace moab;
>
> @@ -33,7 +33,6 @@ int main(int argc, char* argv[])
> void test_read_parallel_mpas_trivial()
> {
> partition_method = std::string(";PARTITION_METHOD=TRIVIAL;PARALLEL_RESOLVE_SHARED_ENTS");
> -
> test_read_parallel(1280, true, 1920, true);
> }
>
> @@ -46,12 +45,15 @@ void test_read_parallel(int num_verts, bool test_nb_nodes, int num_edges, bool t
> rval = mb.create_meshset(MESHSET_SET, file_set);
> CHECK_ERR(rval);
>
> - std::string opt = std::string("PARALLEL=READ_PART") +
> - partition_method;
> + std::string opt = std::string("PARALLEL=READ_PART") + partition_method;
> + // Create gather set in processor 0
> + opt += std::string(";GATHER_SET=0");
> rval = mb.load_file(example, &file_set, opt.c_str());
> CHECK_ERR(rval);
>
> ParallelComm* pcomm = ParallelComm::get_pcomm(&mb, 0);
> + int procs = pcomm->proc_config().proc_size();
> + int rank = pcomm->proc_config().proc_rank();
>
> rval = pcomm->check_all_shared_handles();
> CHECK_ERR(rval);
> @@ -60,14 +62,57 @@ void test_read_parallel(int num_verts, bool test_nb_nodes, int num_edges, bool t
> Range verts;
> rval = mb.get_entities_by_type(0, MBVERTEX, verts);
> CHECK_ERR(rval);
> +
> + int my_verts_num = verts.size();
> + if (test_nb_nodes && 2 == procs) {
> + if (0 == rank)
> + CHECK_EQUAL(2400, my_verts_num); // Gather set vertices included
> + else if (1 == rank)
> + CHECK_EQUAL(1122, my_verts_num); // Not owned vertices included
> + }
> +
> rval = pcomm->filter_pstatus(verts, PSTATUS_NOT_OWNED, PSTATUS_NOT);
> CHECK_ERR(rval);
>
> - int my_verts_num = verts.size(), total_verts;
> - std::cout << "proc: " << pcomm->proc_config().proc_rank() << " verts:" << my_verts_num << "\n";
> - MPI_Reduce(&my_verts_num, &total_verts, 1, MPI_INTEGER, MPI_SUM, 0, pcomm->proc_config().proc_comm());
> + my_verts_num = verts.size();
> + if (test_nb_nodes && 2 == procs) {
> + if (0 == rank)
> + CHECK_EQUAL(2400, my_verts_num); // Gather set vertices included
> + else if (1 == rank)
> + CHECK_EQUAL(160, my_verts_num); // Not owned vertices excluded
> + }
>
> - if (0 == pcomm->proc_config().proc_rank())
> + if (0 == rank) {
> + // Get gather set
> + EntityHandle gather_set;
> + ReadUtilIface* readUtilIface;
> + rval = mb.query_interface(readUtilIface);
> + CHECK_ERR(rval);
> + rval = readUtilIface->get_gather_set(gather_set);
> + CHECK_ERR(rval);
> +
> + // Get gather set entities
> + Range gather_ents;
> + rval = mb.get_entities_by_handle(gather_set, gather_ents);
> + CHECK_ERR(rval);
> +
> + // Remove gather set vertices in processor 0
> + verts = subtract(verts, gather_ents);
> + }
> +
> + my_verts_num = verts.size();
> + if (test_nb_nodes && 2 == procs) {
> + if (0 == rank)
> + CHECK_EQUAL(1120, my_verts_num); // Gather set vertices excluded
> + else if (1 == rank)
> + CHECK_EQUAL(160, my_verts_num); // Not owned vertices excluded
> + }
> +
> + std::cout << "proc: " << rank << " verts:" << my_verts_num << "\n";
> +
> + int total_verts;
> + MPI_Reduce(&my_verts_num, &total_verts, 1, MPI_INTEGER, MPI_SUM, 0, pcomm->proc_config().proc_comm());
> + if (0 == rank)
> {
> std::cout << "total vertices: " << total_verts << "\n";
> if (test_nb_nodes)
> @@ -78,14 +123,57 @@ void test_read_parallel(int num_verts, bool test_nb_nodes, int num_edges, bool t
> Range edges;
> rval = mb.get_entities_by_type(0, MBEDGE, edges);
> CHECK_ERR(rval);
> +
> + int my_edges_num = edges.size();
> + if (test_nb_edges && 2 == procs) {
> + if (0 == rank)
> + CHECK_EQUAL(3358, my_edges_num); // Gather set edges included
> + else if (1 == rank)
> + CHECK_EQUAL(1444, my_edges_num); // Not owned edges included
> + }
> +
> rval = pcomm->filter_pstatus(edges, PSTATUS_NOT_OWNED, PSTATUS_NOT);
> CHECK_ERR(rval);
>
> - int my_edges_num = edges.size(), total_edges;
> - std::cout << "proc: " << pcomm->proc_config().proc_rank() << " edges:" << my_edges_num << "\n";
> - MPI_Reduce(&my_edges_num, &total_edges, 1, MPI_INTEGER, MPI_SUM, 0, pcomm->proc_config().proc_comm());
> + my_edges_num = edges.size();
> + if (test_nb_edges && 2 == procs) {
> + if (0 == rank)
> + CHECK_EQUAL(3358, my_edges_num); // Gather set edges included
> + else if (1 == rank)
> + CHECK_EQUAL(482, my_edges_num); // Not owned edges excluded
> + }
>
> - if (0 == pcomm->proc_config().proc_rank())
> + if (0 == rank) {
> + // Get gather set
> + EntityHandle gather_set;
> + ReadUtilIface* readUtilIface;
> + rval = mb.query_interface(readUtilIface);
> + CHECK_ERR(rval);
> + rval = readUtilIface->get_gather_set(gather_set);
> + CHECK_ERR(rval);
> +
> + // Get gather set entities
> + Range gather_ents;
> + rval = mb.get_entities_by_handle(gather_set, gather_ents);
> + CHECK_ERR(rval);
> +
> + // Remove gather set edges in processor 0
> + edges = subtract(edges, gather_ents);
> + }
> +
> + my_edges_num = edges.size();
> + if (test_nb_edges && 2 == procs) {
> + if (0 == rank)
> + CHECK_EQUAL(1438, my_edges_num); // Gather set edges excluded
> + else if (1 == rank)
> + CHECK_EQUAL(482, my_edges_num); // Not owned edges excluded
> + }
> +
> + std::cout << "proc: " << rank << " edges:" << my_edges_num << "\n";
> +
> + int total_edges;
> + MPI_Reduce(&my_edges_num, &total_edges, 1, MPI_INTEGER, MPI_SUM, 0, pcomm->proc_config().proc_comm());
> + if (0 == rank)
> {
> std::cout << "total edges: " << total_edges << "\n";
> if (test_nb_edges)
> @@ -112,6 +200,8 @@ void test_multiple_loads_of_same_file()
>
> // Create mesh, no variable
> opts="PARALLEL=READ_PART;PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;PARTITION_METHOD=TRIVIAL;VARIABLE=";
> + // Create gather set in processor 1
> + opts += std::string(";GATHER_SET=1");
> rval = mb.load_file(example, &file_set, opts.c_str());
> CHECK_ERR(rval);
>
> @@ -119,4 +209,45 @@ void test_multiple_loads_of_same_file()
> opts = "PARALLEL=READ_PART;PARTITION;PARTITION_METHOD=TRIVIAL;NOMESH;VARIABLE=ke;TIMESTEP=0";
> rval = mb.load_file(example, &file_set, opts.c_str());
> CHECK_ERR(rval);
> +
> + ParallelComm* pcomm = ParallelComm::get_pcomm(&mb, 0);
> + int procs = pcomm->proc_config().proc_size();
> + int rank = pcomm->proc_config().proc_rank();
> +
> + // Make check runs this test in two processors
> + if (2 == procs) {
> + Range verts;
> + rval = mb.get_entities_by_type(0, MBVERTEX, verts);
> + CHECK_ERR(rval);
> +
> + int my_verts_num = verts.size();
> + if (0 == rank)
> + CHECK_EQUAL(1120, my_verts_num);
> + else if (1 == rank)
> + CHECK_EQUAL(2402, my_verts_num); // Gather set vertices included; Not owned vertices included
> +
> + if (1 == rank) {
> + // Get gather set
> + EntityHandle gather_set;
> + ReadUtilIface* readUtilIface;
> + rval = mb.query_interface(readUtilIface);
> + CHECK_ERR(rval);
> + rval = readUtilIface->get_gather_set(gather_set);
> + CHECK_ERR(rval);
> +
> + // Get gather set entities
> + Range gather_ents;
> + rval = mb.get_entities_by_handle(gather_set, gather_ents);
> + CHECK_ERR(rval);
> +
> + // Remove gather set vertices in processor 1
> + verts = subtract(verts, gather_ents);
> + }
> +
> + my_verts_num = verts.size();
> + if (0 == rank)
> + CHECK_EQUAL(1120, my_verts_num);
> + else if (1 == rank)
> + CHECK_EQUAL(1122, my_verts_num); // Gather set vertices excluded; Not owned vertices included
> + }
> }
>
> Repository URL: https://bitbucket.org/fathomteam/moab/
>
> --
>
> This is a commit notification from bitbucket.org. You are receiving
> this because you have the service enabled, addressing the recipient of
> this email.
>
--
================================================================
"You will keep in perfect peace him whose mind is
steadfast, because he trusts in you." Isaiah 26:3
Tim Tautges Argonne National Laboratory
(tautges at mcs.anl.gov) (telecommuting from UW-Madison)
phone (gvoice): (608) 354-1459 1500 Engineering Dr.
fax: (608) 263-4499 Madison, WI 53706
More information about the moab-dev
mailing list