[Trilinos-Users] Compilation error when specializing Thyra::initializePrec<Scalar> with [Scalar=double]

Bartlett, Roscoe A. bartlettra at ornl.gov
Wed Nov 2 20:14:33 MDT 2011


I will look into this to make sure it is being tested.

-Ross


> -----Original Message-----
> From: trilinos-users-bounces at software.sandia.gov [mailto:trilinos-users-
> bounces at software.sandia.gov] On Behalf Of Alberto F. Martín-Huertas
> Sent: Wednesday, November 02, 2011 7:51 PM
> To: Bartlett, Roscoe A.; trilinos-users at software.sandia.gov
> Cc: Javier Principe
> Subject: Re: [Trilinos-Users] Compilation error when specializing
> Thyra::initializePrec<Scalar> with [Scalar=double]
> 
>  Dear Ross,
> 
>  thanks for your quick response.
> 
>  I am indeed using the non-member
>  helper function Thyra::uninitializePrec<double>(...)
>  when I get the compilation error. If you take a closer
>  look at the following lines of Thyra_PreconditionerFactoryHelpers.hpp:
> 
>  00058 template <class Scalar>
>  00059 void initializePrec(
>  00060   const PreconditionerFactoryBase<Scalar> &precFactory,
>  00061   const Teuchos::RCP<const LinearOpBase<Scalar> > &fwdOp,
>  00062   const Teuchos::Ptr<PreconditionerBase<Scalar> > &prec,
>  00063   const ESupportSolveUse supportSolveUse =
>  SUPPORT_SOLVE_UNSPECIFIED
>  00064   )
>  00065 {
>  00066   precFactory.initializePrec(defaultLinearOpSource(fwdOp),
>  prec.get(),
>  00067     supportSolveUse);
>  00068 }
>  00076 template <class Scalar>
>  00077 void uninitializePrec(
>  00078   const PreconditionerFactoryBase<Scalar> &precFactory,
>  00079   const Teuchos::Ptr<PreconditionerBase<Scalar> > &prec,
>  00080   const Teuchos::Ptr<Teuchos::RCP<const LinearOpBase<Scalar> > >
>  &fwdOp = Teuchos::null,
>  00081   const Teuchos::Ptr<ESupportSolveUse> &supportSolveUse =
>  Teuchos::null
>  00082   )
>  00083 {
>  00084   Teuchos::RCP<const LinearOpSourceBase<Scalar> > fwdOpSrc;
>  00085   precFactory.uninitializePrec(prec, Teuchos::outArg(fwdOpSrc),
>  supportSolveUse);
>  00086   if (nonnull(fwdOp)) {*fwdOp = fwdOpSrc->getOp();}
>  00087 }
> 
>  it can be seen that, on line 66, precFactory.initializePrec is
>  called with prec.get() while, on line 85, precFactory.unitialized
>  is called directly with prec instead of prec.get(). Note that
>  both member functions, i.e., precFactory.initializePrec and
>  precFactory.unitialized, have
>  to be called with raw pointers to PreconditionerBase< Scalar >
>  objects. Therefore, as long as I have understood everything properly,
>  it seems that the codes for the two helper non-member functions listed
>  are not consistent.
> 
>  Best regards,
>   Alberto.
> 
>  On Wed, 02 Nov 2011 15:45:43 -0400, Bartlett, Roscoe A. wrote:
> > Alberto,
> >
> >>  I am quite sure that this compilation error is due to the fact that
> >>  the member function
> >>  Thyra::PreconditionerFactoryBase<double>::uninitializePrec
> >>  is not properly called on line 0085 of
> >>  Thyra_PreconditionerFactoryHelpers.hpp.
> >>  In particular, this line currently is:
> >>
> >>  precFactory.uninitializePrec(prec, Teuchos::outArg(fwdOpSrc),
> >>  supportSolveUse);
> >
> > [Bartlett, Roscoe A.]
> >
> > I think you want:
> >
> >    using Teuchos::outArg; Teuchos::inOutArg;
> >    ...
> >    Thyra::uninitializePrec<double>(precFactory, inoutArg(prec),
> > outArg(fwdOpSrc), outArg(supportSolveUse));
> >
> > I would have to see more context to see your types for 'precFactory',
> > 'prec', 'fwdOpSrc' and 'supportSolveUse' to know for sure.
> >
> > The above helper function Thyra::uninitializePrec<>(...) is defined
> > in the header Thyra_PreconditionerFactoryHelpers.hpp
> >
> > Let me know if this does not work for you,
> >
> > -Ross
> >
> > P.S. We are not quite fully finished refactoring Thyra to remove raw
> > C++ pointers using the convention defined in
> >
> hxxp://www.cs.sandia.gov/~rabartl/TeuchosMemoryManagementSAND.pd
> f .
> > That is part of the confusion.  In general, the non-member helpers
> > are
> > updated before the virtual member functions due to backward
> > comparability challenges.
> 
> --
>  Alberto F. Martín-Huertas
>  Centre Internacional de Mètodes Numèrics a l'Enginyeria (CIMNE)
>  Parc Mediterrani de la Tecnologia, UPC
>  Esteve Terrades 5, Building C3, Office 210,
>  08860 Castelldefels (Barcelona, Spain)
>  Tel.: (+34) 9341 34223
>  e-mail: amartin at cimne.upc.edu
> 
>  ________________
>  IMPORTANT NOTICE
>  All personal data contained on this mail will be processed
>  confidentially and registered in a file property of CIMNE in
>  order to manage corporate communications. You may exercise the rights
>  of access, rectification, erasure and object by
>  letter sent to Ed. C1 Campus Norte UPC. Gran Capitán s/n Barcelona.
> 
> 
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> hxxp://software.sandia.gov/mailman/listinfo/trilinos-users



More information about the Trilinos-Users mailing list