本文整理汇总了C++中Plan::GetBootstrapSkip方法的典型用法代码示例。如果您正苦于以下问题:C++ Plan::GetBootstrapSkip方法的具体用法?C++ Plan::GetBootstrapSkip怎么用?C++ Plan::GetBootstrapSkip使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Plan
的用法示例。
在下文中一共展示了Plan::GetBootstrapSkip方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: weightGridList
std::unique_ptr<const bfly::PotentialField<R,d,q>>
transform
( const bfly::Context<R,d,q>& context,
const Plan<d>& plan,
const Amplitude<R,d>& amplitude,
const Phase<R,d>& phase,
const Box<R,d>& sBox,
const Box<R,d>& tBox,
const vector<Source<R,d>>& mySources )
{
#ifdef TIMING
bfly::ResetTimers();
bfly::timer.Start();
#endif
typedef complex<R> C;
const size_t q_to_d = Pow<q,d>::val;
// Extract our communicator and its size
MPI_Comm comm = plan.GetComm();
int rank, numProcesses;
MPI_Comm_rank( comm, &rank );
MPI_Comm_size( comm, &numProcesses );
// Get the problem-specific parameters
const size_t N = plan.GetN();
const size_t log2N = Log2( N );
const array<size_t,d>& myInitialSBoxCoords =
plan.GetMyInitialSourceBoxCoords();
const array<size_t,d>& log2InitialSBoxesPerDim =
plan.GetLog2InitialSourceBoxesPerDim();
array<size_t,d> mySBoxCoords = myInitialSBoxCoords;
array<size_t,d> log2SBoxesPerDim = log2InitialSBoxesPerDim;
Box<R,d> mySBox;
for( size_t j=0; j<d; ++j )
{
mySBox.widths[j] = sBox.widths[j] / (1u<<log2SBoxesPerDim[j]);
mySBox.offsets[j] = sBox.offsets[j] + mySBox.widths[j]*mySBoxCoords[j];
}
array<size_t,d> myTBoxCoords, log2TBoxesPerDim;
myTBoxCoords.fill(0);
log2TBoxesPerDim.fill(0);
Box<R,d> myTBox;
myTBox = tBox;
const size_t bootstrap = plan.GetBootstrapSkip();
// Compute the number of source and target boxes that our process is
// responsible for initializing weights in
size_t log2WeightGridSize = 0;
size_t log2LocalSBoxes = 0;
size_t log2LocalTBoxes = 0;
array<size_t,d> log2LocalSBoxesPerDim, log2LocalTBoxesPerDim;
log2LocalTBoxesPerDim.fill(0);
for( size_t j=0; j<d; ++j )
{
if( log2N-log2SBoxesPerDim[j] >= bootstrap )
log2LocalSBoxesPerDim[j]= (log2N-log2SBoxesPerDim[j]) - bootstrap;
else
log2LocalSBoxesPerDim[j] = 0;
log2LocalTBoxesPerDim[j] = bootstrap;
log2LocalSBoxes += log2LocalSBoxesPerDim[j];
log2LocalTBoxes += log2LocalTBoxesPerDim[j];
log2WeightGridSize += log2N-log2SBoxesPerDim[j];
}
// Initialize the weights using Lagrangian interpolation on the
// smooth component of the kernel.
WeightGridList<R,d,q> weightGridList( 1u<<log2WeightGridSize );
#ifdef TIMING
bfly::initializeWeightsTimer.Start();
#endif
bfly::InitializeWeights
( context, plan, phase, sBox, tBox, mySBox,
log2LocalSBoxes, log2LocalSBoxesPerDim, mySources, weightGridList );
#ifdef TIMING
bfly::initializeWeightsTimer.Stop();
#endif
// Now cut the target domain if necessary
for( size_t j=0; j<d; ++j )
{
if( log2LocalSBoxesPerDim[j] == 0 )
{
log2LocalTBoxesPerDim[j] -= bootstrap - (log2N-log2SBoxesPerDim[j]);
log2LocalTBoxes -= bootstrap - (log2N-log2SBoxesPerDim[j]);
}
}
// Start the main recursion loop
if( bootstrap == log2N/2 )
{
#ifdef TIMING
bfly::M2LTimer.Start();
#endif
bfly::M2L
( context, plan, amplitude, phase, sBox, tBox, mySBox, myTBox,
log2LocalSBoxes, log2LocalTBoxes,
log2LocalSBoxesPerDim, log2LocalTBoxesPerDim, weightGridList );
#ifdef TIMING
bfly::M2LTimer.Stop();
//.........这里部分代码省略.........