[Trilinos-Users] Thyra::scale interface changes

Bartlett, Roscoe A. bartlettra at ornl.gov
Tue Dec 11 14:59:59 MST 2012


Thyra follows the safe memory management conventions defined in:

   http://trilinos.sandia.gov/packages/docs/dev/packages/thyra/doc/html/classThyra_1_1MultiVectorBase.html

See a summary in Appendix A.

-Ross

> -----Original Message-----
> From: trilinos-users-bounces at software.sandia.gov [mailto:trilinos-users-
> bounces at software.sandia.gov] On Behalf Of Hoemmen, Mark
> Sent: Tuesday, December 11, 2012 4:56 PM
> To: <trilinos-users at software.sandia.gov>
> Cc: Day, David
> Subject: [Trilinos-Users] Thyra::scale interface changes
> 
> On Dec 11, 2012, at 11:22 AM, <trilinos-users-request at software.sandia.gov>
>  wrote:
> > From: David Day <dmday at sandia.gov<mailto:dmday at sandia.gov>>
> > Date: Tuesday, December 11, 2012 11:52 AM
> > To: "trilinos-users-bounces at software.sandia.gov<mailto:trilinos-users-
> bounces at software.sandia.gov>" <trilinos-users-
> bounces at software.sandia.gov<mailto:trilinos-users-
> bounces at software.sandia.gov>>
> > Subject: teuchos
> >
> > I am trying to upgrade from an old version of Trilinos to a new version of
> Trilinos.
> >
> >
> > void aXDpbY(
> >    Real alpha,
> >    const Thyra::MultiVectorBase<Real> &X_r,
> >    const Thyra::MultiVectorBase<Real> &X_i,
> >    std::vector<Real> &D_r,
> >    std::vector<Real> &D_i,
> >    Real beta,
> >    Thyra::MultiVectorBase<Real> &Y_r,
> >    Thyra::MultiVectorBase<Real> &Y_i)
> > {
> >  // (x_r + i*x_i)*(d_r + i*d_i)
> >  // = (x_r*d_r - x_i*d_i)
> >  // + i*(x_r*d_i + x_i*d_r)
> >
> >  // Y_r = beta*Y_r + alpha*X_r*D_r - alpha*X_i*D_i
> >  //Thyra::scale(beta,&Y_r);   // old Trilinos   ,  this is what used to work
> >  Thyra::scale(beta,Y_r.col(0).ptr());  //   This is what compiles now.
> > ?
> >
> >
> > Is this the right way to pass a multi ? vector to Thyra::scale ?
> 
> 
> This is acceptable if Y_r only has one column.  Otherwise, it will only scale the
> first column of Y_r.
> 
> The issue is that Thyra's nonmember functions (like Thyra::scale()) used to
> accept raw pointers in some cases.  This has been deprecated for a long time,
> and was removed in the 11.0 release.
> 
> You can fix this by passing a Ptr<MultiVectorBase<Real> > instead of a
> MultiVectorBase<Real>*.  In your example, this would be:
> 
> Thyra::scale (beta, Teuchos::ptr (&Y_r));
> 
> The interface changed because in debug mode, Ptr<T> checks whether the
> T* is NULL before dereferencing.  (I would have preferred passing in a T&
> instead of a Ptr<T>, but it wasn't my decision.)
> 
> Hope this helps!  Please feel free to ask any more questions you might have
> about this.
> 
> mfh
> 
> 
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> http://software.sandia.gov/mailman/listinfo/trilinos-users





More information about the Trilinos-Users mailing list