本文整理汇总了C++中scalargpuField::size方法的典型用法代码示例。如果您正苦于以下问题:C++ scalargpuField::size方法的具体用法?C++ scalargpuField::size怎么用?C++ scalargpuField::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类scalargpuField
的用法示例。
在下文中一共展示了scalargpuField::size方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tcoarseCoeffs
Foam::tmp<Foam::scalargpuField> Foam::GAMGInterface::agglomerateCoeffs
(
const scalargpuField& fineCoeffs
) const
{
tmp<scalargpuField> tcoarseCoeffs(new scalargpuField(size(), 0.0));
scalargpuField& coarseCoeffs = tcoarseCoeffs();
if (fineCoeffs.size() != faceRestrictAddressing_.size())
{
FatalErrorIn
(
"GAMGInterface::agglomerateCoeffs(const scalarField&) const"
) << "Size of coefficients " << fineCoeffs.size()
<< " does not correspond to the size of the restriction "
<< faceRestrictAddressing_.size()
<< abort(FatalError);
}
if (debug && max(faceRestrictAddressing_) > size())
{
FatalErrorIn
(
"GAMGInterface::agglomerateCoeffs(const scalargpuField&) const"
) << "Face restrict addressing addresses outside of coarse interface"
<< " size. Max addressing:" << max(faceRestrictAddressing_)
<< " coarse size:" << size()
<< abort(FatalError);
}
thrust::transform
(
faceRestrictTargetStartAddressing_.begin(),
faceRestrictTargetStartAddressing_.end()-1,
faceRestrictTargetStartAddressing_.begin()+1,
thrust::make_permutation_iterator
(
coarseCoeffs.begin(),
faceRestrictTargetAddressing_.begin()
),
GAMGInterfaceAgglomerateCoeffs
(
fineCoeffs.data(),
faceRestrictSortAddressing_.data()
)
);
return tcoarseCoeffs;
}
示例2: time
void Foam::fvMesh::storeOldVol(const scalargpuField& V)
{
if (curTimeIndex_ < time().timeIndex())
{
if (debug)
{
Info<< "fvMesh::storeOldVol(const scalarField&) :"
<< " Storing old time volumes since from time " << curTimeIndex_
<< " and time now " << time().timeIndex()
<< " V:" << V.size()
<< endl;
}
if (V00Ptr_ && V0Ptr_)
{
// Copy V0 into V00 storage
*V00Ptr_ = *V0Ptr_;
}
if (V0Ptr_)
{
// Copy V into V0 storage
V0Ptr_->getField().scalargpuField::operator=(V);
}
else
{
// Allocate V0 storage, fill with V
V0Ptr_ = new DimensionedField<scalar, volMesh>
(
IOobject
(
"V0",
time().timeName(),
*this,
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
*this,
dimVolume
);
scalargpuField& V0 = (*V0Ptr_).getField();
// Note: V0 now sized with current mesh, not with (potentially
// different size) V.
V0.setSize(V.size());
V0 = V;
}
curTimeIndex_ = time().timeIndex();
if (debug)
{
Info<< "fvMesh::storeOldVol() :"
<< " Stored old time volumes V0:" << V0Ptr_->size()
<< endl;
if (V00Ptr_)
{
Info<< "fvMesh::storeOldVol() :"
<< " Stored oldold time volumes V00:" << V00Ptr_->size()
<< endl;
}
}
}
}
示例3: solverPerf
Foam::solverPerformance Foam::smoothSolver::solve
(
scalargpuField& psi,
const scalargpuField& source,
const direction cmpt
) const
{
// Setup class containing solver performance data
solverPerformance solverPerf(typeName, fieldName_);
// If the nSweeps_ is negative do a fixed number of sweeps
if (nSweeps_ < 0)
{
autoPtr<lduMatrix::smoother> smootherPtr = lduMatrix::smoother::New
(
fieldName_,
matrix_,
interfaceBouCoeffs_,
interfaceIntCoeffs_,
interfaces_,
controlDict_
);
smootherPtr->smooth
(
psi,
source,
cmpt,
-nSweeps_
);
solverPerf.nIterations() -= nSweeps_;
}
else
{
scalar normFactor = 0;
{
scalargpuField Apsi(psi.size());
scalargpuField temp(psi.size());
// Calculate A.psi
matrix_.Amul(Apsi, psi, interfaceBouCoeffs_, interfaces_, cmpt);
// Calculate normalisation factor
normFactor = this->normFactor(psi, source, Apsi, temp);
// Calculate residual magnitude
solverPerf.initialResidual() = gSumMag
(
(source - Apsi)(),
matrix().mesh().comm()
)/normFactor;
solverPerf.finalResidual() = solverPerf.initialResidual();
}
if (lduMatrix::debug >= 2)
{
Info.masterStream(matrix().mesh().comm())
<< " Normalisation factor = " << normFactor << endl;
}
// Check convergence, solve if not converged
if
(
minIter_ > 0
|| !solverPerf.checkConvergence(tolerance_, relTol_)
)
{
autoPtr<lduMatrix::smoother> smootherPtr = lduMatrix::smoother::New
(
fieldName_,
matrix_,
interfaceBouCoeffs_,
interfaceIntCoeffs_,
interfaces_,
controlDict_
);
// Smoothing loop
do
{
smootherPtr->smooth
(
psi,
source,
cmpt,
nSweeps_
);
// Calculate the residual to check convergence
solverPerf.finalResidual() = gSumMag
(
matrix_.residual
(
psi,
source,
interfaceBouCoeffs_,
interfaces_,
//.........这里部分代码省略.........
示例4: solverPerf
Foam::solverPerformance Foam::GAMGSolver::solve
(
scalargpuField& psi,
const scalargpuField& source,
const direction cmpt
) const
{
// Setup class containing solver performance data
solverPerformance solverPerf(typeName, fieldName_);
// Calculate A.psi used to calculate the initial residual
scalargpuField Apsi(psi.size());
matrix_.Amul(Apsi, psi, interfaceBouCoeffs_, interfaces_, cmpt);
// Create the storage for the finestCorrection which may be used as a
// temporary in normFactor
scalargpuField finestCorrection(psi.size());
// Calculate normalisation factor
scalar normFactor = this->normFactor(psi, source, Apsi, finestCorrection);
if (debug >= 2)
{
Pout<< " Normalisation factor = " << normFactor << endl;
}
// Calculate initial finest-grid residual field
scalargpuField finestResidual(source - Apsi);
// Calculate normalised residual for convergence test
solverPerf.initialResidual() = gSumMag
(
finestResidual,
matrix().mesh().comm()
)/normFactor;
solverPerf.finalResidual() = solverPerf.initialResidual();
// Check convergence, solve if not converged
if
(
minIter_ > 0
|| !solverPerf.checkConvergence(tolerance_, relTol_)
)
{
// Create coarse grid correction fields
PtrList<scalargpuField> coarseCorrFields;
// Create coarse grid sources
PtrList<scalargpuField> coarseSources;
// Create the smoothers for all levels
PtrList<lduMatrix::smoother> smoothers;
// Scratch fields if processor-agglomerated coarse level meshes
// are bigger than original. Usually not needed
scalargpuField scratch1;
scalargpuField scratch2;
// Initialise the above data structures
initVcycle
(
coarseCorrFields,
coarseSources,
smoothers,
scratch1,
scratch2
);
do
{
Vcycle
(
smoothers,
psi,
source,
Apsi,
finestCorrection,
finestResidual,
(scratch1.size() ? scratch1 : Apsi),
(scratch2.size() ? scratch2 : finestCorrection),
coarseCorrFields,
coarseSources,
cmpt
);
// Calculate finest level residual field
matrix_.Amul(Apsi, psi, interfaceBouCoeffs_, interfaces_, cmpt);
finestResidual = source;
finestResidual -= Apsi;
solverPerf.finalResidual() = gSumMag
(
finestResidual,
matrix().mesh().comm()
)/normFactor;
if (debug >= 2)
//.........这里部分代码省略.........
示例5: comm
void Foam::processorGAMGInterfaceField::updateInterfaceMatrix
(
scalargpuField& result,
const scalargpuField&,
const scalargpuField& coeffs,
const direction cmpt,
const Pstream::commsTypes commsType
) const
{
if (updatedMatrix())
{
return;
}
label oldWarn = UPstream::warnComm;
UPstream::warnComm = comm();
if (commsType == Pstream::nonBlocking && !Pstream::floatTransfer)
{
// Fast path.
if
(
outstandingRecvRequest_ >= 0
&& outstandingRecvRequest_ < Pstream::nRequests()
)
{
UPstream::waitRequest(outstandingRecvRequest_);
}
// Recv finished so assume sending finished as well.
outstandingSendRequest_ = -1;
outstandingRecvRequest_ = -1;
// Consume straight from scalarReceiveBuf_
if( ! Pstream::gpuDirectTransfer)
{
scalargpuReceiveBuf_ = scalarReceiveBuf_;
}
// Transform according to the transformation tensor
transformCoupleField(scalargpuReceiveBuf_, cmpt);
// Multiply the field by coefficients and add into the result
GAMGUpdateInterfaceMatrix
(
result,
coeffs,
scalargpuReceiveBuf_,
procInterface_
);
}
else
{
scalargpuReceiveBuf_.setSize(coeffs.size());
procInterface_.compressedReceive<scalar>(commsType, scalargpuReceiveBuf_);
transformCoupleField(scalargpuReceiveBuf_, cmpt);
GAMGUpdateInterfaceMatrix
(
result,
coeffs,
scalargpuReceiveBuf_,
procInterface_
);
}
const_cast<processorGAMGInterfaceField&>(*this).updatedMatrix() = true;
UPstream::warnComm = oldWarn;
}