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