本文整理汇总了C++中meshtools::BoundingBox::min方法的典型用法代码示例。如果您正苦于以下问题:C++ BoundingBox::min方法的具体用法?C++ BoundingBox::min怎么用?C++ BoundingBox::min使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类meshtools::BoundingBox
的用法示例。
在下文中一共展示了BoundingBox::min方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rcp
Teuchos::RCP<DataTransferKit::GeometryManager<DataTransferKit::Box,long unsigned int> >
MultiAppDTKUserObjectEvaluator::createSourceGeometry( const Teuchos::RCP<const Teuchos::Comm<int> >& comm )
{
_boxes.resize(_multi_app.numLocalApps());
_box_ids.resize(_multi_app.numLocalApps());
// How much to inflate each bounding box by (helps with non-matching surfaces)
unsigned int inflation = 0.01;
comm->barrier();
for(unsigned int app=0; app<_multi_app.numLocalApps(); app++)
{
unsigned int global_app = _multi_app.firstLocalApp() + app;
MeshTools::BoundingBox bbox = _multi_app.getBoundingBox(global_app);
_boxes[app] = DataTransferKit::Box(bbox.min()(0), bbox.min()(1), bbox.min()(2),
bbox.max()(0), bbox.max()(1), bbox.max()(2));
_box_ids[app] = global_app;
}
return Teuchos::rcp( new DataTransferKit::GeometryManager<DataTransferKit::Box,GlobalOrdinal>(_boxes, _box_ids, comm, 3));
}
示例2:
void
FeatureFloodCount::FeatureData::updateBBoxExtremes(MeshTools::BoundingBox & bbox, const MeshTools::BoundingBox & rhs_bbox)
{
for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
{
bbox.min()(i) = std::min(bbox.min()(i), rhs_bbox.min()(i));
bbox.max()(i) = std::max(bbox.max()(i), rhs_bbox.max()(i));
}
}
示例3: BoundingBox
MeshTools::BoundingBox
MultiApp::getBoundingBox(unsigned int app)
{
if (!_has_an_app)
mooseError("No app for " << name() << " on processor " << _orig_rank);
FEProblem * problem = appProblem(app);
MPI_Comm swapped = Moose::swapLibMeshComm(_my_comm);
MooseMesh & mesh = problem->mesh();
MeshTools::BoundingBox bbox = MeshTools::bounding_box(mesh);
Moose::swapLibMeshComm(swapped);
Point min = bbox.min();
Point max = bbox.max();
Point inflation_amount = (max-min)*_inflation;
Point inflated_min = min - inflation_amount;
Point inflated_max = max + inflation_amount;
// This is where the app is located. We need to shift by this amount.
Point p = position(app);
Point shifted_min = inflated_min;
Point shifted_max = inflated_max;
// If the problem is RZ then we're going to invent a box that would cover the whole "3D" app
// FIXME: Assuming all subdomains are the same coordinate system type!
if (problem->getCoordSystem(*(problem->mesh().meshSubdomains().begin())) == Moose::COORD_RZ)
{
shifted_min(0) = -inflated_max(0);
shifted_min(1) = inflated_min(1);
shifted_min(2) = -inflated_max(0);
shifted_max(0) = inflated_max(0);
shifted_max(1) = inflated_max(1);
shifted_max(2) = inflated_max(0);
}
// Shift them to the position they're supposed to be
shifted_min += p;
shifted_max += p;
return MeshTools::BoundingBox(shifted_min, shifted_max);
}
示例4: if
void
ImageSampler::setupImageSampler(MooseMesh & mesh)
{
#ifdef LIBMESH_HAVE_VTK
// Get access to the Mesh object
MeshTools::BoundingBox bbox = MeshTools::bounding_box(mesh.getMesh());
// Set the dimensions from the Mesh if not set by the User
if (_is_pars.isParamValid("dimensions"))
_physical_dims = _is_pars.get<Point>("dimensions");
else
{
_physical_dims(0) = bbox.max()(0) - bbox.min()(0);
#if LIBMESH_DIM > 1
_physical_dims(1) = bbox.max()(1) - bbox.min()(1);
#endif
#if LIBMESH_DIM > 2
_physical_dims(2) = bbox.max()(2) - bbox.min()(2);
#endif
}
// Set the origin from the Mesh if not set in the input file
if (_is_pars.isParamValid("origin"))
_origin = _is_pars.get<Point>("origin");
else
{
_origin(0) = bbox.min()(0);
#if LIBMESH_DIM > 1
_origin(1) = bbox.min()(1);
#endif
#if LIBMESH_DIM > 2
_origin(2) = bbox.min()(2);
#endif
}
// An array of filenames, to be filled in
std::vector<std::string> filenames;
// The file suffix, to be determined
std::string file_suffix;
// Try to parse our own file range parameters. If that fails, then
// see if the associated Mesh is an ImageMesh and use its. If that
// also fails, then we have to throw an error...
//
// The parseFileRange method sets parameters, thus a writable reference to the InputParameters
// object must be obtained from the warehouse. Generally, this should be avoided, but
// this is a special case.
if (_status != 0)
{
// We don't have parameters, so see if we can get them from ImageMesh
ImageMesh * image_mesh = dynamic_cast<ImageMesh*>(&mesh);
if (!image_mesh)
mooseError("No file range parameters were provided and the Mesh is not an ImageMesh.");
// Get the ImageMesh's parameters. This should work, otherwise
// errors would already have been thrown...
filenames = image_mesh->filenames();
file_suffix = image_mesh->fileSuffix();
}
else
{
// Use our own parameters (using 'this' b/c of conflicts with filenames the local variable)
filenames = this->filenames();
file_suffix = fileSuffix();
}
// Storage for the file names
_files = vtkSmartPointer<vtkStringArray>::New();
for (unsigned i=0; i<filenames.size(); ++i)
_files->InsertNextValue(filenames[i]);
// Error if no files where located
if (_files->GetNumberOfValues() == 0)
mooseError("No image file(s) located");
// Read the image stack. Hurray for VTK not using polymorphism in a
// smart way... we actually have to explicitly create the type of
// reader based on the file extension, using an if-statement...
if (file_suffix == "png")
_image = vtkSmartPointer<vtkPNGReader>::New();
else if (file_suffix == "tiff" || file_suffix == "tif")
_image = vtkSmartPointer<vtkTIFFReader>::New();
else
mooseError("Un-supported file type '" << file_suffix << "'");
// Now that _image is set up, actually read the images
// Indicate that data read has started
_is_console << "Reading image(s)..." << std::endl;
// Extract the data
_image->SetFileNames(_files);
_image->Update();
_data = _image->GetOutput();
_algorithm = _image->GetOutputPort();
// Set the image dimensions and voxel size member variable
//.........这里部分代码省略.........
示例5: p
void
ClosePackIC::computeCircleCenters()
{
// Determine the extents of the mesh
MeshTools::BoundingBox bbox = MeshTools::bounding_box(_fe_problem.mesh().getMesh());
const Point & min = bbox.min();
const Point & max = bbox.max();
// Create the x,y,z limits for the while loops
Real x_min = min(0);
Real x_max = max(0) + 2*_radius;
Real y_min = min(1) - 2*std::sqrt(3.0)*_radius + _radius;
Real y_max = max(1) + 2*_radius;
// Real z_min = min(2) - 2*std::sqrt(3.0)*_radius + _radius;
Real z_max = 0;
// Initialize the coordinates that will be used in looping
Real x = x_min;
Real y = y_min;
Real z = 0;
// Adjust the 3D z-dimension maximum
if (_fe_problem.mesh().dimension() == 3)
z_max = max(2) + 2*_radius;
// Counters for offsetting every other row column in x,y dimensions
unsigned int i = 0;
unsigned int j = 0;
while (z <= z_max)
{
// Offset the y-coordinate by sqrt(3)*r every other loop
if (j % 2 != 0)
y += std::sqrt(3)*_radius/2;
while (y <= y_max)
{
// Offset the x-coordinate by r every other loop
if (i % 2 == 0)
x += _radius;
while (x <= x_max)
{
Point p(x, y, z);
_centers.push_back(p);
_radii.push_back(_radius);
x += 2*_radius;
}
// Reset x-coord and increment y-coord
x = x_min;
y += std::sqrt(3.)*_radius;
i++;
}
// Reset y-coord and increment z-coord
y = y_min;
z += std::sqrt(3.) * _radius;
j++;
}
}
示例6: setsIntersect
void
FeatureFloodCount::calculateBubbleVolumes()
{
Moose::perf_log.push("calculateBubbleVolume()", "FeatureFloodCount");
// Figure out which bubbles intersect the boundary if the user has enabled that capability.
if (_compute_boundary_intersecting_volume)
{
// Create a std::set of node IDs which are on the boundary called all_boundary_node_ids.
std::set<dof_id_type> all_boundary_node_ids;
// Iterate over the boundary nodes, putting them into the std::set data structure
MooseMesh::bnd_node_iterator
boundary_nodes_it = _mesh.bndNodesBegin(),
boundary_nodes_end = _mesh.bndNodesEnd();
for (; boundary_nodes_it != boundary_nodes_end; ++boundary_nodes_it)
{
BndNode * boundary_node = *boundary_nodes_it;
all_boundary_node_ids.insert(boundary_node->_node->id());
}
// For each of the _maps_size BubbleData lists, determine if the set
// of nodes includes any boundary nodes.
for (unsigned int map_num = 0; map_num < _maps_size; ++map_num)
{
std::list<BubbleData>::iterator
bubble_it = _bubble_sets[map_num].begin(),
bubble_end = _bubble_sets[map_num].end();
// Determine boundary intersection for each BubbleData object
for (; bubble_it != bubble_end; ++bubble_it)
bubble_it->_intersects_boundary = setsIntersect(all_boundary_node_ids.begin(), all_boundary_node_ids.end(),
bubble_it->_entity_ids.begin(), bubble_it->_entity_ids.end());
}
}
// Size our temporary data structure
std::vector<std::vector<Real> > bubble_volumes(_maps_size);
for (unsigned int map_num = 0; map_num < _maps_size; ++map_num)
bubble_volumes[map_num].resize(_bubble_sets[map_num].size());
// Clear pre-existing values and allocate space to store the volume
// of the boundary-intersecting grains for each variable.
_total_volume_intersecting_boundary.clear();
_total_volume_intersecting_boundary.resize(_maps_size);
// Loop over the active local elements. For each variable, and for
// each BubbleData object, check whether a majority of the element's
// nodes belong to that Bubble, and if so assign the element's full
// volume to that bubble.
const MeshBase::const_element_iterator el_end = _mesh.getMesh().active_local_elements_end();
for (MeshBase::const_element_iterator el = _mesh.getMesh().active_local_elements_begin(); el != el_end; ++el)
{
Elem * elem = *el;
unsigned int elem_n_nodes = elem->n_nodes();
Real curr_volume = elem->volume();
for (unsigned int map_num = 0; map_num < _maps_size; ++map_num)
{
std::list<BubbleData>::const_iterator
bubble_it = _bubble_sets[map_num].begin(),
bubble_end = _bubble_sets[map_num].end();
for (unsigned int bubble_counter = 0; bubble_it != bubble_end; ++bubble_it, ++bubble_counter)
{
// Count the number of nodes on this element which are flooded.
unsigned int flooded_nodes = 0;
for (unsigned int node = 0; node < elem_n_nodes; ++node)
{
dof_id_type node_id = elem->node(node);
if (bubble_it->_entity_ids.find(node_id) != bubble_it->_entity_ids.end())
++flooded_nodes;
}
// If a majority of the nodes for this element are flooded,
// assign its volume to the current bubble_counter entry.
if (flooded_nodes >= elem_n_nodes / 2)
{
bubble_volumes[map_num][bubble_counter] += curr_volume;
// If the current bubble also intersects the boundary, also
// accumlate the volume into the total volume of bubbles
// which intersect the boundary.
if (bubble_it->_intersects_boundary)
_total_volume_intersecting_boundary[map_num] += curr_volume;
}
}
}
}
// If we're calculating boundary-intersecting volumes, we have to normalize it by the
// volume of the entire domain.
if (_compute_boundary_intersecting_volume)
{
// Compute the total area using a bounding box. FIXME: this
// assumes the domain is rectangular and 2D, and is probably a
// little expensive so we should only do it once if possible.
MeshTools::BoundingBox bbox = MeshTools::bounding_box(_mesh);
Real total_volume = (bbox.max()(0)-bbox.min()(0))*(bbox.max()(1)-bbox.min()(1));
//.........这里部分代码省略.........
示例7: dataLoad
void dataLoad(std::istream & stream, MeshTools::BoundingBox & bbox, void * context)
{
loadHelper(stream, bbox.min(), context);
loadHelper(stream, bbox.max(), context);
}
示例8: dataStore
void dataStore(std::ostream & stream, MeshTools::BoundingBox & bbox, void * context)
{
storeHelper(stream, bbox.min(), context);
storeHelper(stream, bbox.max(), context);
}
示例9: min
void
FeatureFloodCount::FeatureData::updateBBoxMin(MeshTools::BoundingBox & bbox, const Point & min)
{
for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
bbox.min()(i) = std::min(bbox.min()(i), min(i));
}