本文整理汇总了C++中ParallelComm::size方法的典型用法代码示例。如果您正苦于以下问题:C++ ParallelComm::size方法的具体用法?C++ ParallelComm::size怎么用?C++ ParallelComm::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ParallelComm
的用法示例。
在下文中一共展示了ParallelComm::size方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: read_file
ErrorCode DeformMeshRemap::read_file(int m_or_s, string &fname, EntityHandle &seth)
{
// Create meshset
ErrorCode rval = mbImpl->create_meshset(0, seth);MB_CHK_SET_ERR(rval, "Couldn't create master/slave set");
ostringstream options;
#ifdef USE_MPI
ParallelComm *pc = (m_or_s == MASTER ? pcMaster : pcSlave);
if (pc && pc->size() > 1) {
if (debug) options << "DEBUG_IO=1;CPUTIME;";
options << "PARALLEL=READ_PART;PARTITION=PARALLEL_PARTITION;PARALLEL_RESOLVE_SHARED_ENTS;"
<< "PARALLEL_GHOSTS=2.0.1;PARALLEL_COMM=" << pc->get_id();
}
#endif
rval = mbImpl->load_file(fname.c_str(), &seth, options.str().c_str());MB_CHK_SET_ERR(rval, "Couldn't load master/slave mesh");
if (*solidSetNos[m_or_s].begin() == -1 || *fluidSetNos[m_or_s].begin() == -1) return MB_SUCCESS;
// Get material sets for solid/fluid
Tag tagh;
rval = mbImpl->tag_get_handle(MATERIAL_SET_TAG_NAME, tagh);MB_CHK_SET_ERR(rval, "Couldn't get material set tag name");
for (set<int>::iterator sit = solidSetNos[m_or_s].begin(); sit != solidSetNos[m_or_s].end(); ++sit) {
Range sets;
int set_no = *sit;
const void *setno_ptr = &set_no;
rval = mbImpl->get_entities_by_type_and_tag(seth, MBENTITYSET, &tagh, &setno_ptr, 1, sets);
if (MB_SUCCESS != rval || sets.empty()) {
MB_SET_ERR(MB_FAILURE, "Couldn't find solid set #" << *sit);
}
else
solidSets[m_or_s].merge(sets);
}
// Get solid entities, and dimension
Range tmp_range;
for (Range::iterator rit = solidSets[m_or_s].begin(); rit != solidSets[m_or_s].end(); ++rit) {
rval = mbImpl->get_entities_by_handle(*rit, tmp_range, true);MB_CHK_SET_ERR(rval, "Failed to get entities in solid");
}
if (!tmp_range.empty()) {
int dim = mbImpl->dimension_from_handle(*tmp_range.rbegin());
assert(dim > 0 && dim < 4);
solidElems[m_or_s] = tmp_range.subset_by_dimension(dim);
}
if (debug)
cout << "Read " << solidElems[m_or_s].size() << " solid elements from " << solidSets[m_or_s].size() <<
" sets in " << (m_or_s == MASTER ? "master" : "slave") << " mesh." << endl;
for (set<int>::iterator sit = fluidSetNos[m_or_s].begin(); sit != fluidSetNos[m_or_s].end(); ++sit) {
Range sets;
int set_no = *sit;
const void *setno_ptr = &set_no;
rval = mbImpl->get_entities_by_type_and_tag(seth, MBENTITYSET, &tagh, &setno_ptr, 1, sets);
if (MB_SUCCESS != rval || sets.empty()) {
MB_SET_ERR(MB_FAILURE, "Couldn't find fluid set #" << *sit);
}
else
fluidSets[m_or_s].merge(sets);
}
// Get fluid entities, and dimension
tmp_range.clear();
for (Range::iterator rit = fluidSets[m_or_s].begin(); rit != fluidSets[m_or_s].end(); ++rit) {
rval = mbImpl->get_entities_by_handle(*rit, tmp_range, true);MB_CHK_SET_ERR(rval, "Failed to get entities in fluid");
}
if (!tmp_range.empty()) {
int dim = mbImpl->dimension_from_handle(*tmp_range.rbegin());
assert(dim > 0 && dim < 4);
fluidElems[m_or_s] = tmp_range.subset_by_dimension(dim);
}
if (debug)
cout << "Read " << fluidElems[m_or_s].size() << " fluid elements from " << fluidSets[m_or_s].size() <<
" sets in " << (m_or_s == MASTER ? "master" : "slave") << " mesh." << endl;
return rval;
}
示例2: execute
ErrorCode DeformMeshRemap::execute()
{
// Read master/slave files and get fluid/solid material sets
ErrorCode rval = read_file(MASTER, masterFileName, masterSet);MB_CHK_ERR(rval);
if (solidSetNos[MASTER].empty() || fluidSetNos[MASTER].empty()) {
rval = find_other_sets(MASTER, masterSet);MB_CHK_SET_ERR(rval, "Failed to find other sets in master mesh");
}
bool have_slave = !(slaveFileName == "none");
if (have_slave) {
rval = read_file(SLAVE, slaveFileName, slaveSet);MB_CHK_ERR(rval);
if (solidSetNos[SLAVE].empty() || fluidSetNos[SLAVE].empty()) {
rval = find_other_sets(SLAVE, slaveSet);MB_CHK_SET_ERR(rval, "Failed to find other sets in slave mesh");
}
}
if (debug) cout << "Constructing data coupler/search tree on master mesh..." << endl;
Range src_elems = solidElems[MASTER];
src_elems.merge(fluidElems[MASTER]);
// Initialize data coupler on source elements
DataCoupler dc_master(mbImpl, src_elems, 0, NULL);
Range tgt_verts;
if (have_slave) {
// Locate slave vertices in master, orig coords; do this with a data coupler, so you can
// later interpolate
Range tmp_range = solidElems[SLAVE];
tmp_range.merge(fluidElems[SLAVE]);
rval = mbImpl->get_adjacencies(tmp_range, 0, false, tgt_verts, Interface::UNION);MB_CHK_SET_ERR(rval, "Failed to get target verts");
// Locate slave vertices, caching results in dc
if (debug) cout << "Locating slave vertices in master mesh..." << endl;
rval = dc_master.locate_points(tgt_verts);MB_CHK_SET_ERR(rval, "Point location of tgt verts failed");
int num_located = dc_master.spatial_locator()->local_num_located();
if (num_located != (int)tgt_verts.size()) {
rval = MB_FAILURE;
cout << "Only " << num_located << " out of " << tgt_verts.size() << " target points successfully located." << endl;
return rval;
}
}
// Deform the master's solid mesh, put results in a new tag
if (debug) cout << "Deforming fluid elements in master mesh..." << endl;
rval = deform_master(fluidElems[MASTER], solidElems[MASTER], "xnew");MB_CHK_ERR(rval);
{ // To isolate the lloyd smoother & delete when done
if (debug) {
// Output the skin of smoothed elems, as a check
// Get the skin; get facets, because we might need to filter on shared entities
Skinner skinner(mbImpl);
Range skin;
rval = skinner.find_skin(0, fluidElems[MASTER], false, skin);MB_CHK_SET_ERR(rval, "Unable to find skin");
EntityHandle skin_set;
cout << "Writing skin_mesh.g and fluid_mesh.g." << endl;
rval = mbImpl->create_meshset(MESHSET_SET, skin_set);MB_CHK_SET_ERR(rval, "Failed to create skin set");
rval = mbImpl->add_entities(skin_set, skin);MB_CHK_SET_ERR(rval, "Failed to add skin entities to set");
rval = mbImpl->write_file("skin_mesh.vtk", NULL, NULL, &skin_set, 1);MB_CHK_SET_ERR(rval, "Failure to write skin set");
rval = mbImpl->remove_entities(skin_set, skin);MB_CHK_SET_ERR(rval, "Failed to remove skin entities from set");
rval = mbImpl->add_entities(skin_set, fluidElems[MASTER]);MB_CHK_SET_ERR(rval, "Failed to add fluid entities to set");
rval = mbImpl->write_file("fluid_mesh.vtk", NULL, NULL, &skin_set, 1);MB_CHK_SET_ERR(rval, "Failure to write fluid set");
rval = mbImpl->delete_entities(&skin_set, 1);MB_CHK_SET_ERR(rval, "Failed to delete skin set");
}
// Smooth the master mesh
if (debug) cout << "Smoothing fluid elements in master mesh..." << endl;
LloydSmoother ll(mbImpl, NULL, fluidElems[MASTER], xNew);
rval = ll.perform_smooth();MB_CHK_SET_ERR(rval, "Failed in lloyd smoothing");
cout << "Lloyd smoothing required " << ll.num_its() << " iterations." << endl;
}
// Transfer xNew to coords, for master
if (debug) cout << "Transferring coords tag to vertex coordinates in master mesh..." << endl;
rval = write_to_coords(solidElems[MASTER], xNew);MB_CHK_SET_ERR(rval, "Failed writing tag to master fluid verts");
rval = write_to_coords(fluidElems[MASTER], xNew);MB_CHK_SET_ERR(rval, "Failed writing tag to master fluid verts");
if (have_slave) {
// Map new locations to slave
// Interpolate xNew to slave points
if (debug) cout << "Interpolating new coordinates to slave vertices..." << endl;
rval = dc_master.interpolate((int)DataCoupler::VOLUME, "xnew");MB_CHK_SET_ERR(rval, "Failed to interpolate target solution");
// Transfer xNew to coords, for slave
if (debug) cout << "Transferring coords tag to vertex coordinates in slave mesh..." << endl;
rval = write_to_coords(tgt_verts, xNew);MB_CHK_SET_ERR(rval, "Failed writing tag to slave verts");
}
if (debug) {
string str;
#ifdef USE_MPI
if (pcMaster && pcMaster->size() > 1)
str = "PARALLEL=WRITE_PART";
#endif
if (debug) cout << "Writing smoothed_master.h5m..." << endl;
rval = mbImpl->write_file("smoothed_master.h5m", NULL, str.c_str(), &masterSet, 1);
if (have_slave) {
#ifdef USE_MPI
//.........这里部分代码省略.........