本文整理汇总了C++中teuchos::Ptr类的典型用法代码示例。如果您正苦于以下问题:C++ Ptr类的具体用法?C++ Ptr怎么用?C++ Ptr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Ptr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void get_1d_copy_helper<MV,S>::
do_get (const Teuchos::Ptr<const MV>& mv,
const Teuchos::ArrayView<S>& vals,
const size_t ldx,
EDistribution distribution,
typename MV::global_ordinal_t indexBase)
{
typedef typename MV::local_ordinal_t lo_t;
typedef typename MV::global_ordinal_t go_t;
typedef typename MV::global_size_t gs_t;
typedef typename MV::node_t node_t;
TEUCHOS_TEST_FOR_EXCEPTION(
mv.getRawPtr () == NULL, std::invalid_argument,
"Amesos2::get_1d_copy_helper::do_get(5 args): mv is null.");
Teuchos::RCP<const Tpetra::Map<lo_t,go_t,node_t> > map
= Amesos2::Util::getDistributionMap<lo_t,go_t,gs_t,node_t> (distribution,
mv->getGlobalLength (),
mv->getComm (),
indexBase,
mv->getMap());
do_get (mv, vals, ldx, Teuchos::ptrInArg (*map), distribution);
}
示例2: apply
void diff_type_get_copy<MV,S>::
apply (const Teuchos::Ptr<const MV>& mv,
const Teuchos::ArrayView<S>& v,
const size_t& ldx,
Teuchos::Ptr<const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map,
EDistribution distribution )
{
typedef typename MV::scalar_t mv_scalar_t;
typedef typename Teuchos::Array<mv_scalar_t>::size_type size_type;
TEUCHOS_TEST_FOR_EXCEPTION(
mv.getRawPtr () == NULL, std::invalid_argument,
"Amesos2::diff_type_get_copy::apply: mv is null.");
TEUCHOS_TEST_FOR_EXCEPTION(
distribution_map.getRawPtr () == NULL, std::invalid_argument,
"Amesos2::diff_type_get_copy::apply: distribution_map is null.");
const size_type vals_length = v.size ();
Teuchos::Array<mv_scalar_t> vals_tmp (vals_length);
mv->get1dCopy (vals_tmp (), ldx, distribution_map, distribution);
for (size_type i = 0; i < vals_length; ++i) {
v[i] = Teuchos::as<S> (vals_tmp[i]);
}
}
示例3:
void MueLuTpetraPreconditionerFactory<Scalar,LocalOrdinal,GlobalOrdinal,Node>::uninitializePrec(
PreconditionerBase<Scalar> *prec,
Teuchos::RCP<const LinearOpSourceBase<Scalar> > *fwdOp,
ESupportSolveUse *supportSolveUse
) const
{
// Check precondition
TEUCHOS_ASSERT(prec);
// Retrieve concrete preconditioner object
const Teuchos::Ptr<DefaultPreconditioner<Scalar> > defaultPrec =
Teuchos::ptr(dynamic_cast<DefaultPreconditioner<Scalar> *>(prec));
TEUCHOS_TEST_FOR_EXCEPT(Teuchos::is_null(defaultPrec));
if (fwdOp) {
// TODO: Implement properly instead of returning default value
*fwdOp = Teuchos::null;
}
if (supportSolveUse) {
// TODO: Implement properly instead of returning default value
*supportSolveUse = Thyra::SUPPORT_SOLVE_UNSPECIFIED;
}
defaultPrec->uninitialize();
}
示例4: performNodalMeshReduction
void performNodalMeshReduction(
stk::mesh::Part &samplePart,
stk::mesh::BulkData& bulkData)
{
const stk::mesh::EntityRank nodeEntityRank(0);
const stk::mesh::MetaData &metaData = stk::mesh::MetaData::get(bulkData);
std::vector<stk::mesh::Entity *> sampleNodes;
stk::mesh::get_selected_entities(samplePart, bulkData.buckets(nodeEntityRank), sampleNodes);
const stk::mesh::Selector locallyOwned = stk::mesh::MetaData::get(bulkData).locally_owned_part();
std::vector<stk::mesh::Entity *> relatedEntities;
typedef boost::indirect_iterator<std::vector<stk::mesh::Entity *>::const_iterator> EntityIterator;
for (EntityIterator it(sampleNodes.begin()), it_end(sampleNodes.end()); it != it_end; ++it) {
const stk::mesh::PairIterRelation relations = it->relations();
typedef stk::mesh::PairIterRelation::first_type RelationIterator;
for (RelationIterator rel_it = relations.first, rel_it_end = relations.second; rel_it != rel_it_end; ++rel_it) {
const Teuchos::Ptr<stk::mesh::Entity> relatedEntity(rel_it->entity());
if (Teuchos::nonnull(relatedEntity) && locallyOwned(*relatedEntity)) {
relatedEntities.push_back(relatedEntity.get());
}
}
}
std::sort(relatedEntities.begin(), relatedEntities.end(), stk::mesh::EntityLess());
relatedEntities.erase(
std::unique(relatedEntities.begin(), relatedEntities.end(), stk::mesh::EntityEqual()),
relatedEntities.end());
std::vector<stk::mesh::Entity *> sampleClosure;
stk::mesh::find_closure(bulkData, relatedEntities, sampleClosure);
// Keep only the closure, remove the rest, by decreasing entityRanks
{
const stk::mesh::Selector ownedOrShared = metaData.locally_owned_part() | metaData.globally_shared_part();
typedef boost::indirect_iterator<std::vector<stk::mesh::Entity *>::const_iterator> EntityIterator;
EntityIterator allKeepersEnd(sampleClosure.end());
const EntityIterator allKeepersBegin(sampleClosure.begin());
for (stk::mesh::EntityRank candidateRankCount = metaData.entity_rank_count(); candidateRankCount > 0; --candidateRankCount) {
const stk::mesh::EntityRank candidateRank = candidateRankCount - 1;
const EntityIterator keepersBegin = std::lower_bound(allKeepersBegin, allKeepersEnd,
stk::mesh::EntityKey(candidateRank, 0),
stk::mesh::EntityLess());
const EntityIterator keepersEnd = allKeepersEnd;
std::vector<stk::mesh::Entity *> candidates;
stk::mesh::get_selected_entities(ownedOrShared, bulkData.buckets(candidateRank), candidates);
{
BulkModification modification(bulkData);
std::set_difference(candidates.begin(), candidates.end(),
keepersBegin.base(), keepersEnd.base(),
EntityDestructor(modification),
stk::mesh::EntityLess());
}
allKeepersEnd = keepersBegin;
}
}
}
示例5: getComm
Teuchos::RCP<const Teuchos::Comm<Teuchos::Ordinal> > getComm(const Thyra::VectorSpaceBase<Scalar> &space) {
typedef Thyra::SpmdVectorSpaceBase<Scalar> SVSB;
const Teuchos::Ptr<const SVSB> space_downcasted = Teuchos::ptr_dynamic_cast<const SVSB>(Teuchos::ptrFromRef(space));
if (Teuchos::nonnull(space_downcasted)) {
return space_downcasted->getComm();
} else {
return Teuchos::null;
}
}
示例6: mvConvTimer
int
MUMPS<Matrix,Vector>::solve_impl(
const Teuchos::Ptr<MultiVecAdapter<Vector> > X,
const Teuchos::Ptr<const MultiVecAdapter<Vector> > B) const
{
typedef FunctionMap<MUMPS,scalar_type> function_map;
using Teuchos::as;
const global_size_type ld_rhs = this->root_ ? X->getGlobalLength() : 0;
const size_t nrhs = X->getGlobalNumVectors();
const size_t val_store_size = as<size_t>(ld_rhs * nrhs);
xvals_.resize(val_store_size);
bvals_.resize(val_store_size);
#ifdef HAVE_AMESOS2_TIMERS
Teuchos::TimeMonitor mvConvTimer(this->timers_.vecConvTime_);
Teuchos::TimeMonitor redistTimer( this->timers_.vecRedistTime_ );
#endif
Util::get_1d_copy_helper<MultiVecAdapter<Vector>,
slu_type>::do_get(B, bvals_(),as<size_t>(ld_rhs),
ROOTED);
int ierr = 0; // returned error code
mumps_par.nrhs = nrhs;
mumps_par.lrhs = mumps_par.n;
mumps_par.job = 3;
if ( this->root_ )
{
mumps_par.rhs = bvals_.getRawPtr();
}
#ifdef HAVE_AMESOS2_TIMERS
Teuchos::TimeMonitor solveTimer(this->timers_.solveTime_);
#endif
function_map::mumps_c(&(mumps_par));
MUMPS_ERROR();
#ifdef HAVE_AMESOS2_TIMERS
Teuchos::TimeMonitor redistTimer(this->timers_.vecRedistTime_);
#endif
Util::put_1d_data_helper<
MultiVecAdapter<Vector>,slu_type>::do_put(X, bvals_(),
as<size_t>(ld_rhs),
ROOTED);
return(ierr);
}//end solve()
示例7:
void LibmeshAdjacencies::getLibmeshAdjacencies<libMesh::Elem,libMesh::Node>(
const Teuchos::Ptr<libMesh::Elem>& entity,
Teuchos::Array<Teuchos::Ptr<libMesh::Node> >& adjacent_entities
) const
{
int num_nodes = entity->n_nodes();
adjacent_entities.resize( num_nodes );
for ( int n = 0; n < num_nodes; ++n )
{
adjacent_entities[n] = Teuchos::ptr( entity->get_node(n) );
}
}
示例8: blockEpetraToThyra
// Convert a Epetra_MultiVector with assumed block structure dictated by the
// vector space into a Thyra::MultiVectorBase object.
// const Teuchos::RCP<const Thyra::MultiVectorBase<double> > blockEpetraToThyra(const Epetra_MultiVector & e,const Teuchos::RCP<const Thyra::VectorSpaceBase<double> > & vs)
void blockEpetraToThyra(const Epetra_MultiVector & epetraX,const Teuchos::Ptr<Thyra::MultiVectorBase<double> > & thyraX)
{
TEUCHOS_ASSERT(thyraX->range()->dim()==epetraX.GlobalLength());
// extract local information from the Epetra_MultiVector
int leadingDim=0,numVectors=0,localDim=0;
double * epetraData=0;
epetraX.ExtractView(&epetraData,&leadingDim);
numVectors = epetraX.NumVectors();
blockEpetraToThyra(numVectors,epetraData,leadingDim,thyraX.ptr(),localDim);
TEUCHOS_ASSERT(localDim==epetraX.MyLength());
}
示例9:
void same_type_get_copy<MV>::apply(const Teuchos::Ptr<const MV>& mv,
const Teuchos::ArrayView<typename MV::scalar_t>& v,
const size_t ldx,
Teuchos::Ptr<const Tpetra::Map<typename MV::local_ordinal_t, typename MV::global_ordinal_t, typename MV::node_t> > distribution_map )
{
mv->get1dCopy(v, ldx, distribution_map);
}
示例10: initializePrec
void initializePrec(
const PreconditionerFactoryBase<Scalar> &precFactory,
const Teuchos::RCP<const LinearOpBase<Scalar> > &fwdOp,
const Teuchos::Ptr<PreconditionerBase<Scalar> > &prec,
const ESupportSolveUse supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED
)
{
precFactory.initializePrec(defaultLinearOpSource(fwdOp), prec.get(),
supportSolveUse);
}
示例11: if
void PointValues_Evaluator<EvalT,TRAITST>::initialize(const Teuchos::RCP<const panzer::PointRule> & pointRule,
const Teuchos::Ptr<const ArrayT> & userArray,
// const Teuchos::Ptr<const Kokkos::DynRankView<double,PHX::Device> > & userArray,
const Teuchos::RCP<const panzer::PureBasis> & pureBasis)
{
basis = pureBasis;
if(userArray!=Teuchos::null && basis==Teuchos::null)
useBasisValuesRefArray = false;
else if(userArray==Teuchos::null && basis!=Teuchos::null)
useBasisValuesRefArray = true;
else {
// this is a conflicting request, throw an exception
TEUCHOS_ASSERT(false);
}
panzer::MDFieldArrayFactory af(pointRule->getName()+"_");
// copy user array data
if(userArray!=Teuchos::null) {
TEUCHOS_ASSERT(userArray->rank()==2);
refPointArray = Kokkos::DynRankView<double,PHX::Device>("refPointArray",userArray->dimension(0),userArray->dimension(1));
// TEUCHOS_ASSERT(refPointArray.size()==userArray->size());
for(int i=0;i<userArray->extent_int(0);i++)
for(int j=0;j<userArray->extent_int(1);j++)
refPointArray(i,j) = (*userArray)(i,j);
}
// setup all fields to be evaluated and constructed
pointValues.setupArrays(pointRule,af);
// the field manager will allocate all of these field
this->addEvaluatedField(pointValues.coords_ref);
this->addEvaluatedField(pointValues.node_coordinates);
this->addEvaluatedField(pointValues.jac);
this->addEvaluatedField(pointValues.jac_inv);
this->addEvaluatedField(pointValues.jac_det);
this->addEvaluatedField(pointValues.point_coords);
std::string n = "PointValues_Evaluator: " + pointRule->getName();
this->setName(n);
}
示例12: getEntityNodeCoordinates
//---------------------------------------------------------------------------//
// Get the coordinates of the entity nodes in canonical order.
void MoabHelpers::getEntityNodeCoordinates(
const moab::EntityHandle& moab_entity,
const Teuchos::Ptr<moab::ParallelComm>& moab_mesh,
Teuchos::Array<double>& coordinates )
{
const moab::EntityHandle* entity_nodes;
int num_nodes = 0;
std::vector<moab::EntityHandle> storage;
DTK_CHECK_ERROR_CODE(
moab_mesh->get_moab()->get_connectivity( moab_entity,
entity_nodes,
num_nodes,
false,
&storage )
);
coordinates.resize( 3 * num_nodes );
DTK_CHECK_ERROR_CODE(
moab_mesh->get_moab()->get_coords( entity_nodes,
num_nodes,
coordinates.getRawPtr() )
);
}
示例13: xVec
void DiscreteBoundaryOperator<ValueType>::applyImpl(
const Thyra::EOpTransp M_trans,
const Thyra::MultiVectorBase<ValueType> &X_in,
const Teuchos::Ptr<Thyra::MultiVectorBase<ValueType>> &Y_inout,
const ValueType alpha, const ValueType beta) const {
typedef Thyra::Ordinal Ordinal;
// Note: the name is VERY misleading: these asserts don't disappear in
// release runs, and in case of failure throw exceptions rather than
// abort.
TEUCHOS_ASSERT(this->opSupported(M_trans));
TEUCHOS_ASSERT(X_in.range()->isCompatible(*this->domain()));
TEUCHOS_ASSERT(Y_inout->range()->isCompatible(*this->range()));
TEUCHOS_ASSERT(Y_inout->domain()->isCompatible(*X_in.domain()));
const Ordinal colCount = X_in.domain()->dim();
// Loop over the input columns
for (Ordinal col = 0; col < colCount; ++col) {
// Get access the the elements of X_in's and Y_inout's column #col
Thyra::ConstDetachedSpmdVectorView<ValueType> xVec(X_in.col(col));
Thyra::DetachedSpmdVectorView<ValueType> yVec(Y_inout->col(col));
const Teuchos::ArrayRCP<const ValueType> xArray(xVec.sv().values());
const Teuchos::ArrayRCP<ValueType> yArray(yVec.sv().values());
// Wrap the Trilinos array in an Armadillo vector. const_cast is used
// because it's more natural to have a const arma::Col<ValueType> array
// than an arma::Col<const ValueType> one.
const arma::Col<ValueType> xCol(const_cast<ValueType *>(xArray.get()),
xArray.size(), false /* copy_aux_mem */);
arma::Col<ValueType> yCol(yArray.get(), yArray.size(), false);
applyBuiltInImpl(static_cast<TranspositionMode>(M_trans), xCol, yCol, alpha,
beta);
}
}
示例14: entitySupportIds
//---------------------------------------------------------------------------//
// Given an entity, get the ids of its support locations
void LibmeshNodalShapeFunction::entitySupportIds(
const DataTransferKit::Entity& entity,
Teuchos::Array<DataTransferKit::SupportId>& support_ids ) const
{
// Node case.
if ( 0 == entity.topologicalDimension() )
{
DTK_CHECK( extractGeom<libMesh::Node>(entity)->valid_id() );
support_ids.assign( 1, extractGeom<libMesh::Node>(entity)->id() );
}
// Element case.
else
{
Teuchos::Ptr<libMesh::Elem> elem = extractGeom<libMesh::Elem>(entity);
int num_nodes = elem->n_nodes();
support_ids.resize( num_nodes );
for ( int n = 0; n < num_nodes; ++n )
{
DTK_CHECK( elem->get_node(n)->valid_id() );
support_ids[n] = elem->get_node(n)->id();
}
}
}
示例15: redist_mv
void MultiVecAdapter<Epetra_MultiVector>::get1dCopy(
const Teuchos::ArrayView<MultiVecAdapter<Epetra_MultiVector>::scalar_t>& av,
size_t lda,
Teuchos::Ptr<
const Tpetra::Map<MultiVecAdapter<Epetra_MultiVector>::local_ordinal_t,
MultiVecAdapter<Epetra_MultiVector>::global_ordinal_t,
MultiVecAdapter<Epetra_MultiVector>::node_t> > distribution_map ) const
{
using Teuchos::rcpFromPtr;
using Teuchos::as;
const size_t num_vecs = getGlobalNumVectors();
#ifdef HAVE_AMESOS2_DEBUG
const size_t requested_vector_length = distribution_map->getNodeNumElements();
TEUCHOS_TEST_FOR_EXCEPTION( lda < requested_vector_length,
std::invalid_argument,
"Given stride is not large enough for local vector length" );
TEUCHOS_TEST_FOR_EXCEPTION( as<size_t>(av.size()) < (num_vecs-1) * lda + requested_vector_length,
std::invalid_argument,
"MultiVector storage not large enough given leading dimension "
"and number of vectors" );
#endif
// Optimization for ROOTED
if ( num_vecs == 1 && mv_->Comm().MyPID() == 0 && mv_->Comm().NumProc() == 1 ) {
mv_->ExtractCopy(av.getRawPtr(), lda);
}
else {
Epetra_Map e_dist_map
= *Util::tpetra_map_to_epetra_map<local_ordinal_t,
global_ordinal_t,
global_size_t,
node_t>(*distribution_map);
multivec_t redist_mv(e_dist_map, as<int>(num_vecs));
const Epetra_Import importer(e_dist_map, *mv_map_); // Note, target/source order is reversed in Tpetra
redist_mv.Import(*mv_, importer, Insert);
// Finally, do copy
redist_mv.ExtractCopy(av.getRawPtr(), lda);
}
}