On Feb 7, 2012, at 2:12 PM, Jack Poulson wrote:

> Barry,
> 
> Believe me, I apologize if it came across as me trying to dump something else 
> on your plates. I was simply trying to point out some shortcomings of 
> standard approaches to complex numbers. 

   No apology needed. 
> 
> I know that PETSc supports quad precision for real numbers, but it seems that 
> there isn't yet a good way to do so for the complex case, as it would require 
> a custom complex class. If not, please let me know!

   I have not tried complex quad precision. If you are right than it may not be 
possible right out of the box with std:complex.    We are not in  position to 
provide a proper complex class for this case (for the same reasons I listed 
before) so if someone wants PETSc with complex quad they may have their work 
cut out for them.

   Barry

> 
> Jack
> 
> On Tue, Feb 7, 2012 at 1:26 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
>   Jack,
> 
>    PetscScalar is defined in petscmath.h to be one of several things:
> 
> typedef std::complex<float> PetscScalar;
> typedef std::complex<double> PetscScalar;
> typedef float complex PetscScalar;
> typedef double complex PetscScalar;
> typedef float PetscScalar;
> typedef double PetscScalar;
> typedef __float128 PetscScalar;
> 
> Matt's point is that WE (the guys hacking on PETSc everyday) are not going to 
> add other possibilities for cusp and complex at this point in time. We simply 
> don't have the time/reason to add all this functionality now.  If recursader 
> wants that functionality he is free to hack the code and add it; if he does 
> it in a clean way that he can provide patches then we will put the patches 
> into petsc-dev.  We simply don't have the resources to add all stuff to PETSc 
> that anyone wants anytime and we have to focus on adding functionality that 
> is commonly needed and will be widely used (especially within DOE).
> 
>   Barry
> 
> 
> 
> On Feb 7, 2012, at 12:10 PM, Jack Poulson wrote:
> 
> > On Tue, Feb 7, 2012 at 11:29 AM, Matthew Knepley <knepley at gmail.com> 
> > wrote:
> > On Tue, Feb 7, 2012 at 11:20 AM, recrusader <recrusader at gmail.com> wrote:
> > Whether is it possible to find an efficient mechanism to do the conversion 
> > between std::complex and cusp::complex when the conversion is necessary.
> >
> > That does not matter. This is a compile error. We are not going to change 
> > this right now, and it seems like you are not going
> > make the necessary changes, so I would say that complex numbers are not 
> > supported with our GPU code right now. The
> > change would involve using cusp::complex for PetscScalar, and I am not sure 
> > how much work that would entail.
> >
> >    Matt
> >
> > Matt,
> >
> > You might be interested to hear that the C++03 standard states that "The 
> > effect of instantiating the template complex for any type other than float, 
> > double or long double is unspecified". Thus, complex quad precision with it 
> > is probably a bad idea and, if I'm not mistaken, the standard does not 
> > state that the class must store data in the form
> >
> > double real, imag;
> >
> > so this could potentially break interfaces (e.g., to BLAS or LAPACK). Maybe 
> > it would be worthwhile to avoid usage of std::complex and simultaneously 
> > fix the compatibility issue with cusp::complex. I recently ripped 
> > std::complex out of Elemental for the above reasons.
> >
> > Jack
> 
> 

Reply via email to