[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