本文整理汇总了C++中EBISBox::volFrac方法的典型用法代码示例。如果您正苦于以下问题:C++ EBISBox::volFrac方法的具体用法?C++ EBISBox::volFrac怎么用?C++ EBISBox::volFrac使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EBISBox
的用法示例。
在下文中一共展示了EBISBox::volFrac方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ivsregion
void
setToExactDivF(EBCellFAB& a_exactDivF,
const EBISBox& a_ebisBox,
const Box& a_region,
const Real& a_dx)
{
a_exactDivF.setVal(0.);
IntVectSet ivsregion(a_region);
for (VoFIterator vofit(ivsregion, a_ebisBox.getEBGraph()); vofit.ok(); ++vofit)
{
const VolIndex& vof = vofit();
RealVect xval;
IntVect iv = vof.gridIndex();
for (int idir = 0; idir < SpaceDim; idir++)
{
xval[idir] = (Real(iv[idir]) + 0.5)*a_dx;
}
Real solnrv = exactDivergence(xval);
Real kappa = a_ebisBox.volFrac(vof);
a_exactDivF(vof,0) = kappa*solnrv;
}
}
示例2: checkEBISBox
int checkEBISBox(const Box& a_gridCoar, const EBISBox& a_ebisBoxCoar, const EBISBox& a_ebisBoxFine)
{
IntVectSet ivs = a_ebisBoxCoar.getIrregIVS(a_gridCoar);
Real dxCoar = 2; Real dxFine = 1;
#if CH_SPACEDIM==2
Real areaFineCell = dxFine;
Real areaCoarCell = dxCoar;
Real voluFineCell = dxFine*dxFine;
Real voluCoarCell = dxCoar*dxCoar;
#elif CH_SPACEDIM==3
Real areaFineCell = dxFine*dxFine;
Real areaCoarCell = dxCoar*dxCoar;
Real voluFineCell = dxFine*dxFine*dxFine;
Real voluCoarCell = dxCoar*dxCoar*dxCoar;
#else
MayDay::Error();
#endif
int retval = 0;
for (VoFIterator vofit(ivs, a_ebisBoxCoar.getEBGraph()); vofit.ok(); ++vofit)
{
const VolIndex& vofCoar = vofit();
Vector<VolIndex> vofsFine = a_ebisBoxCoar.refine(vofCoar);
//check the easy bits
Real volumCoar = a_ebisBoxCoar.volFrac( vofCoar);
RealVect areaCritCoar = a_ebisBoxCoar.bndryArea(vofCoar)*
a_ebisBoxCoar.normal(vofCoar);
Real volumFine = 0;
RealVect areaCritFine = RealVect::Zero;
for (int ivof = 0; ivof < vofsFine.size(); ivof++)
{
volumFine += a_ebisBoxFine.volFrac( vofsFine[ivof]);
areaCritFine += a_ebisBoxFine.bndryArea(vofsFine[ivof])*
a_ebisBoxFine.normal(vofsFine[ivof]);
}
volumFine *= voluFineCell;
areaCritFine *= areaFineCell;
volumCoar *= voluCoarCell;
areaCritCoar *= areaCoarCell;
Real tolerance = 1.0e-10;
if (Abs(volumFine -volumCoar) > tolerance*volumCoar)
{
pout() << "volume problem in coar cell " << vofCoar.gridIndex() << endl;
retval = -1;
}
// Real maxCc = 0.0;
// Real maxDev = 0.0;
for (int idir=0; idir<SpaceDim; idir++)
{
if (Abs(areaCritFine[idir]-areaCritCoar[idir]) >
tolerance*Abs(areaCritCoar[idir]))
{
pout() << "bndry area problem in coar cell " << vofCoar.gridIndex() << endl;
retval = -2;
}
}
//centroids are a bit uglier to test
// RealVect bndryCentroidCoar = a_ebisBoxCoar.bndryCentroid( vofCoar);
// RealVect bndryCentroidFine = RealVect::Zero;
//the areas are somewhat more painful to test
// for (int idir = 0; idir < SpaceDim; idir++)
// {
//
// }
}
return retval;
}