[MOAB-dev] r3250 - in MOAB/trunk: . parallel

Lukasz Kaczmarczyk likask at civil.gla.ac.uk
Mon Nov 2 14:18:47 CST 2009


Hello,

Files
parallel/MBmpi.h
parallel/MBmpi_config.h

are not installed to ${prefix}/include

Cheers,
Lukasz

On 29 Oct 2009, at 18:49, tautges at mcs.anl.gov wrote:

> Author: tautges
> Date: 2009-10-29 13:49:24 -0500 (Thu, 29 Oct 2009)
> New Revision: 3250
>
> Modified:
>   MOAB/trunk/MBCore.cpp
>   MOAB/trunk/parallel/MBParallelComm.cpp
>   MOAB/trunk/parallel/MBParallelComm.hpp
>   MOAB/trunk/parallel/Makefile.am
>   MOAB/trunk/parallel/mbparallelcomm_test.cpp
>   MOAB/trunk/parallel/scdtest.cpp
> Log:
> MBCore: using swap instead of '=' for range copy, for efficiency
> parallel:
> scdtest.cpp: rearranged a bit to make easier to debug
> mbparallelcomm_test.cpp: removed warnings, and delete instance at end
> MBParallelComm.cpp:
> - added DEBUG_MSGS #define to help debug messages
> - removed commented-out #define's
> - increased size passed into CHECK_BUFF_SPACE in pack_entities, was  
> computing
>  that size wrongly before
> - added functionality to print_buffer to print all message types,  
> not just sending
>  entities; added arguments for printing procs and whether send or  
> receive is being
>  done
> - in pack_shared_handles, checked error return of call to  
> get_sharing_data
>
> Also added uber_parallel_test, for testing the various ghosting and  
> non-ghosting options
> for loading, and scdtest, for testing parallel structured mesh  
> representation.
>
> Passes make check (including parallel ones), except for iMeshP tests.
>
>
>
> Modified: MOAB/trunk/MBCore.cpp
> ===================================================================
> --- MOAB/trunk/MBCore.cpp	2009-10-28 21:26:24 UTC (rev 3249)
> +++ MOAB/trunk/MBCore.cpp	2009-10-29 18:49:24 UTC (rev 3250)
> @@ -1228,7 +1228,7 @@
>       std::set_intersection(adj_entities.begin(), adj_entities.end(),
>                             temp_vec.begin(), temp_vec.end(),
>                             mb_range_inserter(temp_range));
> -      adj_entities = temp_range;
> +      adj_entities.swap(temp_range);
>     }
>     else if (operation_type == MBInterface::UNION) {
>       std::copy(temp_vec.begin(), temp_vec.end(), mb_range_inserter 
> (adj_entities));
>
> Modified: MOAB/trunk/parallel/MBParallelComm.cpp
> ===================================================================
> --- MOAB/trunk/parallel/MBParallelComm.cpp	2009-10-28 21:26:24 UTC  
> (rev 3249)
> +++ MOAB/trunk/parallel/MBParallelComm.cpp	2009-10-29 18:49:24 UTC  
> (rev 3250)
> @@ -56,6 +56,7 @@
> #endif
> #undef DEBUG_COMM
> #undef DEBUG_PACKING
> +#undef DEBUG_MSGS
> #ifdef DEBUG_PACKING
> unsigned int __PACK_num = 0, __UNPACK_num = 0, __PACK_count = 0,  
> __UNPACK_count = 0;
> std::string __PACK_string, __UNPACK_string;
> @@ -93,27 +94,22 @@
>   buff += count*sizeof(T);
> }
>
> -//#define PACK_INTS(buff, int_val, num) {memcpy(buff, int_val, (num) 
> *sizeof(int)); buff += (num)*sizeof(int); PC(num, " ints");}
> static inline
> void PACK_INTS( unsigned char*& buff, const int* int_val, size_t num )
>   { PACK( buff, int_val, num ); PC(num, " ints"); }
>
> -//#define PACK_INT(buff, int_val) {int tmp_val = int_val; PACK_INTS 
> (buff, &tmp_val, 1);}
> static inline
> void PACK_INT( unsigned char*& buff, int int_val )
>   { PACK_INTS( buff, &int_val, 1 ); }
>
> -//#define PACK_DBL(buff, dbl_val, num) {memcpy(buff, dbl_val, (num) 
> *sizeof(double)); buff += (num)*sizeof(double); PC(num, " doubles");}
> static inline
> void PACK_DBL( unsigned char*& buff, const double* dbl_val, size_t  
> num )
>   { PACK( buff, dbl_val, num ); PC(num, " doubles"); }
>
> -//#define PACK_EH(buff, eh_val, num) {memcpy(buff, eh_val, (num) 
> *sizeof(MBEntityHandle)); buff += (num)*sizeof(MBEntityHandle); PC 
> (num, " handles");}
> static inline
> void PACK_EH( unsigned char*& buff, const MBEntityHandle* eh_val,  
> size_t num )
>   { PACK( buff, eh_val, num ); PC(num, " handles"); }
>
> -//#define PACK_CHAR_64(buff, char_val) {strcpy((char*)buff,  
> char_val); buff += 64; PC(64, " chars");}
> static inline
> void PACK_CHAR_64( unsigned char*& buff, const char* str )
> {
> @@ -122,7 +118,6 @@
>   PC(64, " chars");
> }
>
> -//#define PACK_VOID(buff, val, num) {memcpy(buff, val, num); buff  
> += num; PC(num, " void");}
> static inline
> void PACK_VOID( unsigned char*& buff, const void* val, size_t num )
> {
> @@ -130,17 +125,10 @@
>   PC(num, " void");
> }
>
> -//#define PACK_BYTES(buff, val, num) PACK_INT(buff, num) PACK_VOID 
> (buff, val, num)
> static inline
> void PACK_BYTES( unsigned char*& buff, const void* val, int num )
>   { PACK_INT(buff, num); PACK_VOID(buff, val, num); }
>
> -/*
> -#define PACK_RANGE(buff, rng) {int num_subs = num_subranges(rng);  
> PACK_INTS(buff, &num_subs, 1); PC(num_subs, "-subranged range"); \
> -          for (MBRange::const_pair_iterator cit =  
> rng.const_pair_begin(); cit != rng.const_pair_end(); cit++) { \
> -            MBEntityHandle eh = (*cit).first; PACK_EH(buff, &eh,  
> 1); \
> -            eh = (*cit).second; PACK_EH(buff, &eh, 1);}; }
> -*/
> static inline
> void PACK_RANGE( unsigned char*& buff, const MBRange& rng )
> {
> @@ -153,27 +141,22 @@
>   PC(rng.psize(), "-subranged range");
> }
>
> -//#define UNPACK_INTS(buff, int_val, num) {memcpy(int_val, buff,  
> (num)*sizeof(int)); buff += (num)*sizeof(int); UPC(num, " ints");}
> static inline
> void UNPACK_INTS( unsigned char*& buff, int* int_val, size_t num )
>   { UNPACK(buff, int_val, num); UPC(num, " ints"); }
>
> -//#define UNPACK_INT(buff, int_val) {UNPACK_INTS(buff, &int_val, 1);}
> static inline
> void UNPACK_INT( unsigned char*& buff, int& int_val )
>   { UNPACK_INTS( buff, &int_val, 1 ); }
>
> -//#define UNPACK_DBL(buff, dbl_val, num) {memcpy(dbl_val, buff,  
> (num)*sizeof(double)); buff += (num)*sizeof(double); UPC(num, "  
> doubles");}
> static inline
> void UNPACK_DBL( unsigned char*& buff, double* dbl_val, size_t num )
>   { UNPACK(buff, dbl_val, num); UPC(num, " doubles"); }
>
> -//#define UNPACK_EH(buff, eh_val, num) {memcpy(eh_val, buff, (num) 
> *sizeof(MBEntityHandle)); buff += (num)*sizeof(MBEntityHandle); UPC 
> (num, " handles");}
> static inline
> void UNPACK_EH( unsigned char*& buff, MBEntityHandle* eh_val, size_t  
> num )
>   { UNPACK(buff, eh_val, num); UPC(num, " handles"); }
>
> -//#define UNPACK_CHAR_64(buff, char_val) {strcpy(char_val, (char*) 
> buff); buff += 64; UPC(64, " chars");}
> static inline
> void UNPACK_CHAR_64( unsigned char*& buff, char* char_val )
> {
> @@ -182,7 +165,6 @@
>   UPC(64, " chars");
> }
>
> -//#define UNPACK_VOID(buff, val, num) {memcpy(val, buff, num); buff  
> += num; UPC(num, " void");}
> static inline
> void UNPACK_VOID( unsigned char*& buff, void* val, size_t num )
> {
> @@ -199,10 +181,6 @@
>   assert(type >= MBVERTEX && type <= MBMAXTYPE);
> }
>
> -/*
> -#define UNPACK_RANGE(buff, rng) {int num_subs; UNPACK_INTS(buff,  
> &num_subs, 1); UPC(num_subs, "-subranged range"); MBEntityHandle _eh 
> [2]; \
> -          for (int i = 0; i < num_subs; i++) { UNPACK_EH(buff, _eh,  
> 2); rng.insert(_eh[0], _eh[1]);}}
> -*/
> static inline
> void UNPACK_RANGE( unsigned char*& buff, MBRange& rng )
> {
> @@ -216,14 +194,6 @@
>   }
> }
>
> -/*
> -#define CHECK_BUFF_SPACE(buff_vec, buff_ptr, addl_space) { \
> -      unsigned int _old_size = buff_ptr - &buff_vec[0],            \
> -          _new_size = _old_size + (addl_space);    \
> -      if (_new_size > buff_vec.size()) {               \
> -        buff_vec.resize(1.5*_new_size);            \
> -        buff_ptr = &buff_vec[_new_size-(addl_space)];} }
> -*/
> template <typename T> static inline
> void CHECK_BUFF_SPACE( std::vector<T>& buff_vec,
>                        T*& buff_ptr,
> @@ -237,11 +207,6 @@
>   }
> }
>
> -/*
> -#define INIT_BUFFER(_buff_vec, _buff_ptr) \
> -    _buff_vec.reserve(INITIAL_BUFF_SIZE); _buff_vec.resize(sizeof 
> (int)); \
> -    _buff_ptr = &_buff_vec[sizeof(int)]
> -*/
> template<typename T> static inline
> void INIT_BUFFER(std::vector<T>& buff_vec, T*& buff_ptr)
> {
> @@ -251,7 +216,6 @@
> }
>
>
> -//#define RANGE_SIZE(rng) (2*sizeof(MBEntityHandle)*num_subranges 
> (rng)+sizeof(int))
> static inline size_t RANGE_SIZE(const MBRange& rng)
>   { return 2*sizeof(MBEntityHandle)*rng.psize()+sizeof(int); }
>
> @@ -898,7 +862,8 @@
>       RRA("Failed to build sharedhps.");
>
>         // now pack them
> -      CHECK_BUFF_SPACE(buff, buff_ptr, (num_ents+1)*sizeof(int) +  
> sizeof(MBEntityHandle));
> +      CHECK_BUFF_SPACE(buff, buff_ptr, (num_ents+1)*sizeof(int) +
> +                       num_ents*sizeof(MBEntityHandle));
>       PACK_INT(buff_ptr, num_ents);
>       PACK_INTS(buff_ptr, tmp_procs, num_ents);
>       PACK_EH(buff_ptr, tmp_handles, num_ents);
> @@ -1036,7 +1001,9 @@
>     num_ents = 1;
>   }
>
> +#ifndef NDEBUG
>   int tmp_ps = num_ents;
> +#endif
>
>     // now add others, with zero handle for now
>   for (std::set<unsigned int>::iterator sit = entprocs.begin();
> @@ -1330,7 +1297,7 @@
>
>     // procs the sending proc is telling me I'll be receiving from
>   std::set<unsigned int> comm_procs;
> -
> +
>     // 1. # entities = E
>   int num_ents;
>   unsigned char *buff_save = buff_ptr;
> @@ -1539,81 +1506,115 @@
>   return MB_SUCCESS;
> }
>
> -MBErrorCode MBParallelComm::print_buffer(unsigned char *buff_ptr)
> +MBErrorCode MBParallelComm::print_buffer(unsigned char *buff_ptr,  
> int mesg_tag,
> +                                         int from_proc, bool sent)
> {
> -  int total_size;
> -  UNPACK_INT(buff_ptr, total_size);
> -  std::cout << total_size << " entities..." << std::endl;
> +  std::cout << procConfig.proc_rank();
> +  if (sent) std::cout << " sent";
> +  else std::cout << " received";
> +  std::cout << " message type " << mesg_tag
> +            << " to/from proc " << from_proc << "; contents:" <<  
> std::endl;
>
> -    // 1. # entities = E
> -  int num_ents;
> -  int i, j, k;
> -  std::vector<int> ps;
> -  std::vector<MBEntityHandle> hs;
> +  if (MB_MESG_ENTS == mesg_tag) {
> +    int total_size;
> +    UNPACK_INT(buff_ptr, total_size);
> +    std::cout << total_size << " entities..." << std::endl;
>
> -  UNPACK_INT(buff_ptr, num_ents);
> -  std::cout << num_ents << " entities..." << std::endl;
> +      // 1. # entities = E
> +    int num_ents;
> +    int i, j, k;
> +    std::vector<int> ps;
> +    std::vector<MBEntityHandle> hs;
>
> -    // save place where remote handle info starts, then scan  
> forward to ents
> -  for (i = 0; i < num_ents; i++) {
> -    UNPACK_INT(buff_ptr, j);
> -    ps.resize(j);
> -    hs.resize(j);
> -    std::cout << "Entity " << i << ": # procs = " << j << std::endl;
> -    UNPACK_INTS(buff_ptr, &ps[0], j);
> -    UNPACK_EH(buff_ptr, &hs[0], j);
> -    std::cout << "   Procs: ";
> -    for (k = 0; k < j; k++) std::cout << ps[k] << " ";
> -    std::cout << std::endl;
> -    std::cout << "   Handles: ";
> -    for (k = 0; k < j; k++) std::cout << hs[k] << " ";
> -    std::cout << std::endl;
> -  }
> +    UNPACK_INT(buff_ptr, num_ents);
> +    std::cout << num_ents << " entities..." << std::endl;
> +
> +      // save place where remote handle info starts, then scan  
> forward to ents
> +    for (i = 0; i < num_ents; i++) {
> +      UNPACK_INT(buff_ptr, j);
> +      ps.resize(j);
> +      hs.resize(j);
> +      std::cout << "Entity " << i << ": # procs = " << j <<  
> std::endl;
> +      UNPACK_INTS(buff_ptr, &ps[0], j);
> +      UNPACK_EH(buff_ptr, &hs[0], j);
> +      std::cout << "   Procs: ";
> +      for (k = 0; k < j; k++) std::cout << ps[k] << " ";
> +      std::cout << std::endl;
> +      std::cout << "   Handles: ";
> +      for (k = 0; k < j; k++) std::cout << hs[k] << " ";
> +      std::cout << std::endl;
> +    }
>
>   while (true) {
>     MBEntityType this_type = MBMAXTYPE;
>     UNPACK_TYPE(buff_ptr, this_type);
>     assert(this_type != MBENTITYSET);
>
> -      // MBMAXTYPE signifies end of entities data
> -    if (MBMAXTYPE == this_type) break;
> +        // MBMAXTYPE signifies end of entities data
> +      if (MBMAXTYPE == this_type) break;
>
> -      // get the number of ents
> -    int num_ents2, verts_per_entity;
> -    UNPACK_INT(buff_ptr, num_ents2);
> +        // get the number of ents
> +      int num_ents2, verts_per_entity;
> +      UNPACK_INT(buff_ptr, num_ents2);
>
> -      // unpack the nodes per entity
> -    if (MBVERTEX != this_type && num_ents2) {
> -      UNPACK_INT(buff_ptr, verts_per_entity);
> -    }
> +        // unpack the nodes per entity
> +      if (MBVERTEX != this_type && num_ents2) {
> +        UNPACK_INT(buff_ptr, verts_per_entity);
> +      }
>
> -    std::cout << "Type: " << MBCN::EntityTypeName(this_type)
> -              << "; num_ents = " << num_ents2;
> -    if (MBVERTEX != this_type) std::cout << "; verts_per_ent = " <<  
> verts_per_entity;
> -    std::cout << std::endl;
> +      std::cout << "Type: " << MBCN::EntityTypeName(this_type)
> +                << "; num_ents = " << num_ents2;
> +      if (MBVERTEX != this_type) std::cout << "; verts_per_ent = "  
> << verts_per_entity;
> +      std::cout << std::endl;
>
> -    for (int e = 0; e < num_ents2; e++) {
> -        // check for existing entity, otherwise make new one
> -      MBEntityHandle *connect;
> -      double *coords;
> +      for (int e = 0; e < num_ents2; e++) {
> +          // check for existing entity, otherwise make new one
> +        MBEntityHandle *connect;
> +        double *coords;
>
> -      if (MBVERTEX == this_type) {
> -        coords = (double*) buff_ptr;
> -        buff_ptr += 3*sizeof(double);
> -        std::cout << "xyz = " << coords[0] << ", " << coords[1] <<  
> ", "
> -                  << coords[2] << std::endl;
> -      }
> -      else {
> -        connect = (MBEntityHandle*) buff_ptr;
> -        buff_ptr += verts_per_entity * sizeof(MBEntityHandle);
> +        if (MBVERTEX == this_type) {
> +          coords = (double*) buff_ptr;
> +          buff_ptr += 3*sizeof(double);
> +          std::cout << "xyz = " << coords[0] << ", " << coords[1]  
> << ", "
> +                    << coords[2] << std::endl;
> +        }
> +        else {
> +          connect = (MBEntityHandle*) buff_ptr;
> +          buff_ptr += verts_per_entity * sizeof(MBEntityHandle);
>
> -          // update connectivity to local handles
> -        std::cout << "Connectivity: ";
> -        for (k = 0; k < verts_per_entity; k++) std::cout << connect 
> [k] << " ";
> -        std::cout << std::endl;
> +            // update connectivity to local handles
> +          std::cout << "Connectivity: ";
> +          for (k = 0; k < verts_per_entity; k++) std::cout <<  
> connect[k] << " ";
> +          std::cout << std::endl;
> +        }
>       }
>     }
>   }
> +
> +  else if (MB_MESG_REMOTE_HANDLES) {
> +    int num_ents;
> +    UNPACK_INT(buff_ptr, num_ents);
> +    std::vector<MBEntityHandle> L1hloc(num_ents), L1hrem(num_ents);
> +    std::vector<int> L1p(num_ents);
> +    UNPACK_INTS(buff_ptr, &L1p[0], num_ents);
> +    UNPACK_EH(buff_ptr, &L1hrem[0], num_ents);
> +    UNPACK_EH(buff_ptr, &L1hloc[0], num_ents);
> +    std::cout << num_ents << " Entity pairs; hremote/hlocal/proc: "  
> << std::endl;
> +    for (int i = 0; i < num_ents; i++) {
> +      MBEntityType etype = TYPE_FROM_HANDLE(L1hloc[i]);
> +      std::cout << MBCN::EntityTypeName(etype) << ID_FROM_HANDLE 
> (L1hrem[i])  << ", "
> +                << MBCN::EntityTypeName(etype) << ID_FROM_HANDLE 
> (L1hloc[i])  << ", "
> +                << L1p[i] << std::endl;
> +    }
> +  }
> +  else if (MB_MESG_TAGS) {
> +    assert(false);
> +    return MB_FAILURE;
> +  }
> +  else {
> +    assert(false);
> +    return MB_FAILURE;
> +  }
>
>   return MB_SUCCESS;
> }
> @@ -1803,8 +1804,8 @@
>
>     // set sharing tags
>   if (num_exist > 2) {
> -    std::fill(tag_ps+num_exist, tag_ps+MAX_SHARING_PROCS-num_exist,  
> -1);
> -    std::fill(tag_hs+num_exist, tag_hs+MAX_SHARING_PROCS-num_exist,  
> 0);
> +    std::fill(tag_ps+num_exist, tag_ps+MAX_SHARING_PROCS, -1);
> +    std::fill(tag_hs+num_exist, tag_hs+MAX_SHARING_PROCS, 0);
>     result = mbImpl->tag_set_data(sharedps_tag(), &new_h, 1, tag_ps);
>     RRA("Couldn't set sharedps tag.");
>     result = mbImpl->tag_set_data(sharedhs_tag(), &new_h, 1, tag_hs);
> @@ -2698,7 +2699,14 @@
>       result = mbImpl->get_dimension(shared_dim);
>       RRA("Couldn't get dimension.");
>     }
> -    else shared_dim = mbImpl->dimension_from_handle(*proc_ents.begin 
> ())-1;
> +    else if (!proc_ents.empty())
> +      shared_dim = mbImpl->dimension_from_handle(*proc_ents.begin 
> ())-1;
> +    else if (resolve_dim == 3)
> +      shared_dim = 2;
> +    else {
> +      assert(false && "Unable to guess shared_dim.");
> +      return MB_FAILURE;
> +    }
>   }
>   assert(shared_dim >= 0 && resolve_dim >= 0);
>
> @@ -2734,7 +2742,7 @@
>     // zero; don't create them if they don't exist already
>   for (int this_dim = skin_dim-1; this_dim >= 0; this_dim--) {
>     result = mbImpl->get_adjacencies(skin_ents[skin_dim], this_dim,
> -                                     false, skin_ents[this_dim],
> +                                     true, skin_ents[this_dim],
>                                      MBInterface::UNION);
>     RRA("Failed getting skin adjacencies.");
>   }
> @@ -3746,6 +3754,10 @@
>                            &entprocs, &allsent);
>     RRA("Packing entities failed.");
>
> +#ifdef DEBUG_MSGS
> +    result = print_buffer(&ownerSBuffs[ind][0], MB_MESG_ENTS,  
> *proc_it, true);
> +#endif
> +
>       // send the buffer (buffer size saved in send_buffer)
>     result = send_buffer(*proc_it, &ownerSBuffs[ind][0],
>                          buff_ptr-&ownerSBuffs[ind][0], MB_MESG_ENTS,
> @@ -3799,10 +3811,17 @@
>
>     if (done) {
>       unsigned char *buff_ptr = &ghostRBuffs[ind][sizeof(int)];
> +#ifdef DEBUG_MSGS
> +      print_buffer(buff_ptr-sizeof(int), MB_MESG_ENTS, buffProcs 
> [ind], false);
> +#endif
>       result = unpack_entities(buff_ptr,
>                                store_remote_handles, ind, is_iface,
>                                L1hloc, L1hrem, L1p, L2hloc, L2hrem,  
> L2p, new_ents);
>       RRA("Failed to unpack entities.");
> +
> +      if (recv_reqs.size() != buffProcs.size()) {
> +        recv_reqs.resize(buffProcs.size(), MPI_REQUEST_NULL);
> +      }
>     }
>     else {
>       num_incoming++;
> @@ -3890,6 +3909,10 @@
>     result = pack_remote_handles(L1hloc[ind], L1hrem[ind], L1p[ind],  
> *proc_it,
>                                  ownerSBuffs[ind], buff_ptr);
>     RRA("Failed to pack remote handles.");
> +
> +#ifdef DEBUG_MSGS
> +    print_buffer(&ownerSBuffs[ind][0], MB_MESG_REMOTE_HANDLES,  
> buffProcs[ind], true);
> +#endif
>     result = send_buffer(buffProcs[ind], &ownerSBuffs[ind][0],
>                          buff_ptr - &ownerSBuffs[ind][0],
>                          MB_MESG_REMOTE_HANDLES,
> @@ -3932,6 +3955,9 @@
>     if (done) {
>         // incoming remote handles
>       buff_ptr = &ghostRBuffs[ind][sizeof(int)];
> +#ifdef DEBUG_MSGS
> +      print_buffer(buff_ptr, MB_MESG_REMOTE_HANDLES, buffProcs 
> [ind], false);
> +#endif
>       result = unpack_remote_handles(buffProcs[ind], buff_ptr,
>                                      L2hloc, L2hrem, L2p);
>       RRA("Failed to unpack remote handles.");
> @@ -5481,6 +5507,8 @@
>
>     unsigned char pstat;
>     rval = get_sharing_data( *i, ent_procs, handles, pstat,  
> num_sharing );
> +    if (MB_SUCCESS != rval)
> +      return rval;
>     for (int j = 0; j < num_sharing; ++j) {
>       if (ent_procs[j] == (int)proc_config().proc_rank())
>         continue;
>
> Modified: MOAB/trunk/parallel/MBParallelComm.hpp
> ===================================================================
> --- MOAB/trunk/parallel/MBParallelComm.hpp	2009-10-28 21:26:24 UTC  
> (rev 3249)
> +++ MOAB/trunk/parallel/MBParallelComm.hpp	2009-10-29 18:49:24 UTC  
> (rev 3250)
> @@ -285,7 +285,7 @@
>                                   int resolve_dim = 3,
>                                   int shared_dim = -1,
>                                   const MBTag* id_tag = 0);
> -
> +
>   static MBErrorCode resolve_shared_ents(MBParallelComm **pc,
>                                          const unsigned int np,
>                                          const int to_dim);
> @@ -704,7 +704,8 @@
>                               std::vector<unsigned char> &buff,
>                               unsigned char *&buff_ptr);
>
> -  MBErrorCode print_buffer(unsigned char *buff_ptr);
> +  MBErrorCode print_buffer(unsigned char *buff_ptr, int mesg_type,  
> int from_proc,
> +                           bool sent);
>
>     //! for all the entities in the received buffer; for each, save
>     //! entities in this instance which match connectivity, or zero  
> if none found
>
> Modified: MOAB/trunk/parallel/Makefile.am
> ===================================================================
> --- MOAB/trunk/parallel/Makefile.am	2009-10-28 21:26:24 UTC (rev 3249)
> +++ MOAB/trunk/parallel/Makefile.am	2009-10-29 18:49:24 UTC (rev 3250)
> @@ -45,7 +45,7 @@
>      ReadParallel.hpp \
>      crystal.h errmem.h types.h
>
> -  MOAB_PARALLEL_TEST += pcomm_unit parallel_unit_tests
> +  MOAB_PARALLEL_TEST += pcomm_unit parallel_unit_tests  
> uber_parallel_test scdtest
>
> if PARALLEL_HDF5
> #  libMOABpar_la_LIBADD = $(top_builddir)/mhdf/libmhdf.la
> @@ -85,8 +85,13 @@
> parallel_unit_tests_LDADD = ../libMOAB.la
> parallel_write_test_SOURCES = parallel_write_test.cc
> parallel_write_test_LDADD = ../libMOAB.la
> +uber_parallel_test_SOURCES = uber_parallel_test.cpp
> +uber_parallel_test_LDADD = ../libMOAB.la
>
> +scdtest_SOURCES = scdtest.cpp
> +scdtest_LDADD = ../libMOAB.la
>
> +
> # Other files to clean up (e.g. output from tests)
> MOSTLYCLEANFILES = mhdf_ll.h5m
>
>
> Modified: MOAB/trunk/parallel/mbparallelcomm_test.cpp
> ===================================================================
> --- MOAB/trunk/parallel/mbparallelcomm_test.cpp	2009-10-28 21:26:24  
> UTC (rev 3249)
> +++ MOAB/trunk/parallel/mbparallelcomm_test.cpp	2009-10-29 18:49:24  
> UTC (rev 3250)
> @@ -36,7 +36,7 @@
> #define RRA(a) if (MB_SUCCESS != result) {\
>       std::string tmp_str; mbImpl->get_last_error(tmp_str);\
>       tmp_str.append("\n"); tmp_str.append(a);\
> -      dynamic_cast<MBCore*>(mbImpl)->get_error_handler()- 
> >set_last_error(tmp_str.c_str()); \
> +      dynamic_cast<MBCore*>(mbImpl)->get_error_handler()- 
> >set_last_error(tmp_str); \
>       return result;}
>
> MBErrorCode create_linear_mesh(MBInterface *mbImpl,
> @@ -69,7 +69,7 @@
>   err = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
>
>     // start time
> -  double stime, rtime, setime, dtime, ltime;
> +  double stime, rtime, dtime, ltime;
>   if (0 == rank) stime = MPI_Wtime();
>
>     // create MOAB instance based on that
> @@ -202,12 +202,12 @@
>   if (0 == rank) std::cout << "Times: "
>                            << dtime-stime << " "
>                            << rtime-stime << " "
> -                           << setime-rtime << " "
> -                           << ltime-setime << " "
>                            << dtime - ltime
> -                           << " (total/read/shared/report/delete)"
> +                           << " (total/read/delete)"
>                            << std::endl;
> -
> +
> +  delete mbImpl;
> +
>   return (MB_SUCCESS == result ? 0 : 1);
> }
>
>
> Modified: MOAB/trunk/parallel/scdtest.cpp
> ===================================================================
> --- MOAB/trunk/parallel/scdtest.cpp	2009-10-28 21:26:24 UTC (rev 3249)
> +++ MOAB/trunk/parallel/scdtest.cpp	2009-10-29 18:49:24 UTC (rev 3250)
> @@ -13,11 +13,11 @@
> using namespace std;
>
> // Number of cells in each direction:
> -const int NC = 4;
> +const int NC = 2;
>
> -const int MNI = 5;
> -const int MNJ = 10;
> -const int MNK = 10;
> +const int NI = 2;
> +const int NJ = 2;
> +const int NK = 1;
>
> // Number of processes:
> const int NPROCS = 4;
> @@ -66,56 +66,52 @@
>
> void set_local_domain_bounds()
> {
> -  switch(rank) {
> -  case 0:
> -
> -    switch (size) {
> +  switch (size) {
>     case 2:
> -      is = 0; ie = NC/2;
> -      js = 0; je = NC;
> -      ks = 0; ke = NC;
> -      break;
> +        switch(rank) {
> +          case 0:
> +              is = 0; ie = NI/2;
> +              js = 0; je = NJ;
> +              ks = 0; ke = NK;
> +              break;
>
> -    case 4:
> -      is = 0; ie = NC/2;
> -      js = 0; je = NC/2;
> -      ks = 0; ke = NC;
> -      break;
> -    }
> -    break;
>
> -  case 1:
> -
> -    switch(size) {
> -    case 2:
> -      is = NC/2; ie = NC;
> -      js = 0; je = NC;
> -      ks = 0; ke = NC;
> -      break;
> -
> +          case 1:
> +              is = NI/2; ie = NI;
> +              js = 0; je = NJ;
> +              ks = 0; ke = NK;
> +              break;
> +        }
> +        break;
> +
>     case 4:
> -      is = NC/2; ie = NC;
> -      js = 0; je = NC/2;
> -      ks = 0; ke = NC;
> -      break;
> -    }
> -    break;
> +        switch(rank) {
> +          case 0:
> +              is = 0; ie = NI/2;
> +              js = 0; je = NJ/2;
> +              ks = 0; ke = NK;
> +              break;
> +          case 1:
> +              is = NI/2; ie = NI;
> +              js = 0; je = NJ/2;
> +              ks = 0; ke = NK;
> +              break;
> +          case 2:
> +              is = 0; ie = NI/2;
> +              js = NJ/2; je = NJ;
> +              ks = 0; ke = NK;
> +              break;
> +          case 3:
> +              is = NI/2; ie = NI;
> +              js = NJ/2; je = NJ;
> +              ks = 0; ke = NK;
> +              break;
> +        }
> +        break;
>
> -  case 2:
> -    is = 0; ie = NC/2;
> -    js = NC/2; je = NC;
> -    ks = 0; ke = NC;
> -    break;
> -
> -  case 3:
> -    is = NC/2; ie = NC;
> -    js = NC/2; je = NC;
> -    ks = 0; ke = NC;
> -    break;
> -
> -  default:
> -    cerr << "Run this with 4 processes\n";
> -    exit(1);
> +    default:
> +        cerr << "Run this with 4 processes\n";
> +        exit(1);
>   }
> }
>
> @@ -124,7 +120,7 @@
> {
>   MBCore *mbcore = dynamic_cast<MBCore*>(mbint);
>   HomCoord coord_min(0,0,0);
> -  HomCoord coord_max(NC/2, NC, NC);
> +  HomCoord coord_max(ie-is, je-js, ke-ks);
>   EntitySequence* vertex_seq = NULL;
>   EntitySequence* cell_seq = NULL;
>   MBEntityHandle vs, cs;
> @@ -133,8 +129,8 @@
>   error(mbcore->create_scd_sequence(coord_min, coord_max, MBHEX, 1,  
> cs, cell_seq));
>
>   HomCoord p1(0,0,0);
> -  HomCoord p2(NC/2,0,0);
> -  HomCoord p3(0,NC/2,0);
> +  HomCoord p2(1,0,0);
> +  HomCoord p3(0,1,0);
>
>   error(mbcore->add_vsequence(vertex_seq, cell_seq, p1, p1, p2, p2,  
> p3, p3));
>
> @@ -147,22 +143,22 @@
>
>   MBErrorCode err;
>
> -  for(i = is; i < ie + 1; i++)
> +  for(k = ks; k < ke + 1; k++)
>     for(j = js; j < je + 1; j++)
> -      for(k = ks; k < ke + 1; k++) {	
> -	gid = k + j*(NC+1) + i*(NC+1)*(NC+1) + 1;
> +      for(i = is; i < ie + 1; i++) {
> +        gid = 1 + i + j*(NI+1) + k*(NI+1)*(NJ+1);
>         err = mbint->tag_set_data(global_id_tag, &handle, 1, &gid);
> -	if(err != MB_SUCCESS) {
> -	  exit(1);
> -	}
> -	handle++;
> +        if(err != MB_SUCCESS) {
> +          exit(1);
> +        }
> +        handle++;
>       }
>
>   handle = cs;
> -  for(i = is; i < ie; i++)
> +  for(k = ks; k < ke; k++)
>     for(j = js; j < je; j++)
> -      for(k = ks; k < ke; k++) {	
> -	gid = k + j*NC + i*NC*NC + 1;
> +      for(i = is; i < ie; i++) {
> +        gid = 1 + i + j*NI + k*NI*NJ;
>         error(mbint->tag_set_data(global_id_tag, &handle, 1, &gid));
> 	handle++;
>       }
> @@ -172,7 +168,6 @@
> void resolve_and_exchange()
> {
>   MBEntityHandle entity_set;
> -  MBErrorCode err;
>
>   // Create the entity set:
>   error(mbint->create_meshset(MESHSET_SET, entity_set));
>
>

Lukasz Kaczmarczyk
Lecturer
Department of Civil Engineering,
University of Glasgow,
GLASGOW, G12 8LT
Tel: +44 141 3305348
email: likask at civil.gla.ac.uk
web: http://www.civil.gla.ac.uk/~kaczmarczyk/
web: http://code.google.com/p/yaffems/



More information about the moab-dev mailing list