本文整理汇总了C++中hier::Box类的典型用法代码示例。如果您正苦于以下问题:C++ Box类的具体用法?C++ Box怎么用?C++ Box使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Box类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: computeBlocksOctant
/*
*************************************************************************
*
* Compute the rotations for the particular block number. The
* "local_blocks" argument is basically saying who is the ne
*
*************************************************************************
*/
void computeBlocksOctant(
const hier::Box& bb,
int local_blocks[6],
int nblock,
int nth)
{
const hier::Index ifirst = bb.lower();
const hier::Index ilast = bb.upper();
local_blocks[0] = nblock; // imin stays local
local_blocks[3] = nblock; // jmin stays local
static int jmn[3] = { 0, 0, 2 }; // matrix of rotations
static int jmx[3] = { 1, 1, 1 };
static int kmn[3] = { 0, 1, 0 };
static int kmx[3] = { 2, 2, 2 };
//
// bounds of the patch zones go from 0 to nth-1
//
if (ifirst(1) <= 0) local_blocks[1] = jmn[nblock];
if (ifirst(2) <= 0) local_blocks[2] = kmn[nblock];
if (ilast(1) >= nth - 1) local_blocks[4] = jmx[nblock];
if (ilast(2) >= nth - 1) local_blocks[5] = kmx[nblock];
}
示例2: setCartesianMetrics
void MblkGeometry::setCartesianMetrics(
const hier::Box& domain,
const int level_number,
const int block_number)
{
if (d_metrics_set[level_number][block_number]) return;
hier::Index lower(domain.lower());
hier::Index upper(domain.upper());
hier::Index diff(upper - lower + hier::Index(lower.getDim(), 1));
if (static_cast<int>(d_dx.size()) < (level_number + 1)) {
d_dx.resize(level_number + 1);
}
if (static_cast<int>(d_dx[level_number].size()) < d_nblocks) {
d_dx[level_number].resize(d_nblocks);
}
if (static_cast<int>(d_dx[level_number][block_number].size()) < d_dim.getValue()) {
d_dx[level_number][block_number].resize(d_dim.getValue());
}
for (int i = 0; i < d_dim.getValue(); ++i) {
d_dx[level_number][block_number][i] =
(d_cart_xhi[block_number][i] - d_cart_xlo[block_number][i]) / (double)diff(i);
}
d_metrics_set[level_number][block_number] = true;
}
示例3:
NodeIterator::NodeIterator(
const hier::Box& box,
bool begin):
d_index(box.lower(), hier::IntVector::getZero(box.getDim())),
d_box(NodeGeometry::toNodeBox(box))
{
if (!d_box.empty() && !begin) {
d_index(d_box.getDim().getValue() - 1) =
d_box.upper(static_cast<tbox::Dimension::dir_t>(d_box.getDim().getValue() - 1)) + 1;
}
}
示例4: setSShellMetrics
void MblkGeometry::setSShellMetrics(
const hier::Box& domain,
const int level_number)
{
int b = domain.getBlockId().getBlockValue();
//
// Set dx (drad, dth, dphi) for the level
//
d_dx.resize(level_number + 1);
d_dx[level_number].resize(d_nblocks);
d_dx[level_number][b].resize(d_dim.getValue());
double nrad = (domain.upper(0) - domain.lower(0) + 1);
double nth = (domain.upper(1) - domain.lower(1) + 1);
double nphi = 0;
if (d_dim == tbox::Dimension(3)) {
nphi = (domain.upper(2) - domain.lower(2) + 1);
}
/*
* If its a solid shell, its a single block and dx = dr, dth, dphi
*/
if (d_sshell_type == "SOLID") {
d_dx[level_number][b][0] = (d_sshell_rmax - d_sshell_rmin) / nrad;
d_dx[level_number][b][1] =
2.0 * tbox::MathUtilities<double>::Abs(d_sangle_thmin) / nth;
if (d_dim == tbox::Dimension(3)) {
d_dx[level_number][b][2] =
2.0 * tbox::MathUtilities<double>::Abs(d_sangle_thmin) / nphi;
}
} else {
d_dx[level_number][b][0] = 0.0001;
d_dx[level_number][b][1] = 0.0001;
if (d_dim == tbox::Dimension(3)) {
d_dx[level_number][b][2] = 0.0001;
}
}
/*
* If its an OCTANT shell, then everything is set in the
* computeUnitSphereOctant() method so all we do here is allocate
* space for d_dx.
*/
d_metrics_set[level_number][0] = true;
}
示例5: TBOX_ASSERT
dcomplex
PatchFaceDataNormOpsComplex::dot(
const std::shared_ptr<pdat::FaceData<dcomplex> >& data1,
const std::shared_ptr<pdat::FaceData<dcomplex> >& data2,
const hier::Box& box,
const std::shared_ptr<pdat::FaceData<double> >& cvol) const
{
TBOX_ASSERT(data1 && data2);
tbox::Dimension::dir_t dimVal = box.getDim().getValue();
dcomplex retval = dcomplex(0.0, 0.0);
if (!cvol) {
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
const hier::Box face_box = pdat::FaceGeometry::toFaceBox(box, d);
retval += d_array_ops.dot(data1->getArrayData(d),
data2->getArrayData(d),
face_box);
}
} else {
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
const hier::Box face_box = pdat::FaceGeometry::toFaceBox(box, d);
retval += d_array_ops.dotWithControlVolume(
data1->getArrayData(d),
data2->getArrayData(d),
cvol->getArrayData(d),
face_box);
}
}
return retval;
}
示例6: dcomplex
dcomplex
PatchSideDataNormOpsComplex::integral(
const boost::shared_ptr<pdat::SideData<dcomplex> >& data,
const hier::Box& box,
const boost::shared_ptr<pdat::SideData<double> >& vol) const
{
TBOX_ASSERT(data);
int dimVal = box.getDim().getValue();
dcomplex retval = dcomplex(0.0, 0.0);
const hier::IntVector& directions = data->getDirectionVector();
TBOX_ASSERT(directions ==
hier::IntVector::min(directions, vol->getDirectionVector()));
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
if (directions(d)) {
retval += d_array_ops.integral(
data->getArrayData(d),
vol->getArrayData(d),
pdat::SideGeometry::toSideBox(box, d));
}
}
return retval;
}
示例7:
ArrayDataIterator::ArrayDataIterator(
const hier::Box& box,
bool begin):
d_index(box.lower()),
d_box(box)
{
if (!d_box.empty() && !begin) {
d_index(d_box.getDim().getValue() - 1) =
d_box.upper(static_cast<tbox::Dimension::dir_t>(d_box.getDim().getValue() - 1)) + 1;
}
}
示例8:
SideIterator::SideIterator(
const hier::Box& box,
const tbox::Dimension::dir_t axis,
bool begin):
d_index(box.lower(), axis, SideIndex::Lower),
d_box(SideGeometry::toSideBox(box, axis))
{
if (!d_box.empty() && !begin) {
d_index(d_box.getDim().getValue() - 1) =
d_box.upper(static_cast<tbox::Dimension::dir_t>(d_box.getDim().getValue() - 1)) + 1;
}
}
示例9: TBOX_ASSERT
/*
*************************************************************************
*
* Compute the boxes for the stencil around a given patch box
*
*************************************************************************
*/
void
FirstLayerCellVariableFillPattern::computeStencilBoxes(
hier::BoxContainer& stencil_boxes,
const hier::Box& dst_box) const
{
TBOX_ASSERT(stencil_boxes.size() == 0);
hier::Box ghost_box(
hier::Box::grow(dst_box,
hier::IntVector::getOne(dst_box.getDim())));
stencil_boxes.removeIntersections(ghost_box, dst_box);
}
示例10: TBOX_ASSERT
size_t
PatchSideDataNormOpsReal<TYPE>::numberOfEntries(
const boost::shared_ptr<pdat::SideData<TYPE> >& data,
const hier::Box& box) const
{
TBOX_ASSERT(data);
TBOX_ASSERT_OBJDIM_EQUALITY2(*data, box);
tbox::Dimension::dir_t dimVal = box.getDim().getValue();
size_t retval = 0;
const hier::Box ibox = box * data->getGhostBox();
const hier::IntVector& directions = data->getDirectionVector();
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
if (directions(d)) {
const hier::Box dbox = pdat::SideGeometry::toSideBox(ibox, d);
retval += (dbox.size() * data->getDepth());
}
}
return retval;
}
示例11:
CoarsenCopyTransaction::CoarsenCopyTransaction(
const std::shared_ptr<hier::PatchLevel>& dst_level,
const std::shared_ptr<hier::PatchLevel>& src_level,
const std::shared_ptr<hier::BoxOverlap>& overlap,
const hier::Box& dst_box,
const hier::Box& src_box,
const CoarsenClasses::Data** coarsen_data,
int item_id):
d_dst_patch_rank(dst_box.getOwnerRank()),
d_src_patch_rank(src_box.getOwnerRank()),
d_overlap(overlap),
d_coarsen_data(coarsen_data),
d_item_id(item_id),
d_incoming_bytes(0),
d_outgoing_bytes(0)
{
TBOX_ASSERT(dst_level);
TBOX_ASSERT(src_level);
TBOX_ASSERT(overlap);
TBOX_ASSERT_OBJDIM_EQUALITY4(*dst_level,
*src_level,
dst_box,
src_box);
TBOX_ASSERT(dst_box.getLocalId() >= 0);
TBOX_ASSERT(src_box.getLocalId() >= 0);
TBOX_ASSERT(coarsen_data != 0);
TBOX_ASSERT(item_id >= 0);
if (d_dst_patch_rank == dst_level->getBoxLevel()->getMPI().getRank()) {
d_dst_patch = dst_level->getPatch(dst_box.getGlobalId());
}
if (d_src_patch_rank == src_level->getBoxLevel()->getMPI().getRank()) {
d_src_patch = src_level->getPatch(src_box.getGlobalId());
}
}
示例12:
void
PatchFaceDataNormOpsComplex::abs(
const std::shared_ptr<pdat::FaceData<double> >& dst,
const std::shared_ptr<pdat::FaceData<dcomplex> >& src,
const hier::Box& box) const
{
TBOX_ASSERT(dst && src);
TBOX_ASSERT_OBJDIM_EQUALITY3(*dst, *src, box);
tbox::Dimension::dir_t dimVal = box.getDim().getValue();
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
d_array_ops.abs(dst->getArrayData(d),
src->getArrayData(d),
pdat::FaceGeometry::toFaceBox(box, d));
}
}
示例13: TBOX_ASSERT
double
PatchSideDataNormOpsComplex::weightedL2Norm(
const boost::shared_ptr<pdat::SideData<dcomplex> >& data,
const boost::shared_ptr<pdat::SideData<dcomplex> >& weight,
const hier::Box& box,
const boost::shared_ptr<pdat::SideData<double> >& cvol) const
{
TBOX_ASSERT(data && weight);
TBOX_ASSERT_OBJDIM_EQUALITY3(*data, *weight, box);
int dimVal = box.getDim().getValue();
double retval = 0.0;
const hier::IntVector& directions = data->getDirectionVector();
TBOX_ASSERT(directions ==
hier::IntVector::min(directions, weight->getDirectionVector()));
if (!cvol) {
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
if (directions(d)) {
const hier::Box side_box = pdat::SideGeometry::toSideBox(box, d);
double aval = d_array_ops.weightedL2Norm(data->getArrayData(d),
weight->getArrayData(d),
side_box);
retval += aval * aval;
}
}
} else {
TBOX_ASSERT(directions ==
hier::IntVector::min(directions, cvol->getDirectionVector()));
TBOX_ASSERT_OBJDIM_EQUALITY2(*data, *cvol);
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
if (directions(d)) {
const hier::Box side_box = pdat::SideGeometry::toSideBox(box, d);
double aval = d_array_ops.weightedL2NormWithControlVolume(
data->getArrayData(d),
weight->getArrayData(d),
cvol->getArrayData(d),
side_box);
retval += aval * aval;
}
}
}
return sqrt(retval);
}
示例14: dcomplex
dcomplex
PatchFaceDataNormOpsComplex::integral(
const std::shared_ptr<pdat::FaceData<dcomplex> >& data,
const hier::Box& box,
const std::shared_ptr<pdat::FaceData<double> >& vol) const
{
TBOX_ASSERT(data);
tbox::Dimension::dir_t dimVal = box.getDim().getValue();
dcomplex retval = dcomplex(0.0, 0.0);
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
retval += d_array_ops.integral(data->getArrayData(d),
vol->getArrayData(d),
pdat::FaceGeometry::toFaceBox(box, d));
}
return retval;
}
示例15:
void
PatchSideDataOpsComplex::copyData(
const std::shared_ptr<pdat::SideData<dcomplex> >& dst,
const std::shared_ptr<pdat::SideData<dcomplex> >& src,
const hier::Box& box) const
{
TBOX_ASSERT(dst && src);
TBOX_ASSERT(dst->getDirectionVector() == src->getDirectionVector());
TBOX_ASSERT_OBJDIM_EQUALITY3(*dst, *src, box);
int dimVal = box.getDim().getValue();
const hier::IntVector& directions = dst->getDirectionVector();
for (tbox::Dimension::dir_t d = 0; d < dimVal; ++d) {
if (directions(d)) {
dst->getArrayData(d).copy(src->getArrayData(d),
pdat::SideGeometry::toSideBox(box, d));
}
}
}