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 > >
