Least squares has two supported types: brgn and pounders. They will not 
compile with complex. I suspect the problem, at least with brgn, is its 
handling of bound constraints. Perhaps for complex numbers the handling of 
constraints can simply be #ifdef out? If one does not need constraints.

  Barry

You can start by removing the leastsquares/makefile:#requiresscalar real adding 
it into the pounders directory and then compiling and "fixing" the code in 
brng.c to work with complex.  

But BRNG is a wrapper around TAOBNTL so you need to get that to also build 
correctly with complex.




> On Jun 24, 2021, at 10:11 PM, Barry Smith <[email protected]> wrote:
> 
> 
> $ git grep requiresscalar 
> bound/makefile:#requiresscalar    real
> complementarity/makefile:#requiresscalar    real
> constrained/makefile:#requiresscalar    real
> leastsquares/makefile:#requiresscalar    real
> linesearch/impls/makefile:#requiresscalar    real
> pde_constrained/makefile:#requiresscalar    real
> quadratic/makefile:#requiresscalar    real
> unconstrained/makefile:#requiresscalar    real
> 
> We added these requirements when Tao was brought back into the PETSc fold as 
> Alp mentioned. It would be good to start eliminating the requirements when 
> possible. 
> 
> I have removed the leastsquares/makefile:#requiresscalar    real and have 
> started a build to see how it goes. If everything goes well maybe we can get 
> it working for complex without too much difficulty.
> 
>   Barry
> 
> 
>> On Jun 24, 2021, at 4:02 PM, Junchao Zhang <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> 
>> 
>> 
>> On Thu, Jun 24, 2021 at 3:25 PM Dener, Alp via petsc-users 
>> <[email protected] <mailto:[email protected]>> wrote:
>> Hi Lucas,
>> 
>> In theory, you can attempt to solve complex-valued problems by concatenating 
>> the real and imaginary parts into a single real-valued solution vector and 
>> solving it as if it’s a real-valued problem.
>> 
>> There’s a more practical issue of the PETSc build excluding the TAO source 
>> code entirely for complex builds. I think this is done because we cannot 
>> guarantee that TAO code has been completely rigorous in its distinction of 
>> PetscReal from PetscScalar. There may be places where we used Scalar and 
>> assumed it’s Real. The methods developed in the last few years have paid 
>> more attention to this but there’s a lot of older code floating around that 
>> might break even if you hacked the build into compiling TAO for complex 
>> configurations.
>> If an expression does not support PetscComplex, shouldn't it report a 
>> compilation error?
>> 
>> I’m not entirely sure what’s necessary to enable TAO builds for complex 
>> PETSc. Perhaps Todd, Satish or Barry will have a better idea. If you want to 
>> give it a try though I’d be happy to help you resolve the errors as they 
>> come up so that it can be compiled for complex builds. Can’t provide 
>> convergence guarantees but it would at least let you attempt a solution.
>> 
>> Alp
>> 
>>> On Jun 24, 2021, at 2:44 PM, Lucas Banting <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Hi,
>>> 
>>> I have a complex valued optimization code that requires non-linear least 
>>> squares curve fitting at each iteration. I wanted to use Tao to do the 
>>> non-linear least squares problem, but just discovered that Tao can only be 
>>> used with real scalar types. Is there any workarounds?
>>> 
>>> I was wondering if maybe I could somehow use two different Petsc 
>>> installations at once, or is there any other ways to hack tao into working?
>>> 
>>> Thanks,
>>> Lucas
>> 
> 

Reply via email to