Thank you very much for your inputs. Matthew, this LS is a part of a rSVD algorithm (Halko et al, SIAM Review, 2009), hence I need to compute direct and adjoints system solutions.
Hong, that is the option I'll be using. I am explicitly setting a transpose for now and this works (at a cost, as you said). Barry, I'll also try this solution here, thanks! Best, Jean On Sat, Apr 9, 2022 at 6:37 PM Barry Smith <[email protected]> wrote: > > It would also be very straightforward for you to provide a merge request > that adds support for PETSc to directly use SuperLU_DIST and Strumpacks > transpose solver capability. Just add the support to superlu_dist.c (and > for strumpack) mimicking the style in mumps.c More specifically add a > > PetscErrorCode MatSolveTranspose_SuperLU_DIST(Mat A,Vec b,Vec x) function > almost identical to MatSolveTranspose_MUMPS() but setting > > Mat_SuperLU_DIST *lu=(Mat_SuperLU_DIST*)A->data; > lu->options.trans = TRANS; > > and register it where the solve is registered later in the file (seach for > ops->solve) > > Detailed instructions on making a PETSc MR can be found at > https://petsc.org/release/developers/integration/#getting-your-code-and-documentation-into-petsc > > > > > On Apr 9, 2022, at 8:57 PM, Zhang, Hong via petsc-users < > [email protected]> wrote: > > Jean, > > You can use -ksp_use_explicittranspose to make KSP transpose the system > explicitly in the transposed solve. This option was designed to enable more > choices of linear solvers and preconditions in adjoint solves, of course, > at a cost. > > Hong (Mr.) > > On Apr 8, 2022, at 4:52 PM, Jean Marques <[email protected]> > wrote: > > Hi all, > > This may be a naive question, and I hope this is the right place to ask > about it. > I need to solve a direct linear system with a sparse matrix R, then an > adjoint system the hermitian of R. > > I use a petsc4py, so what I do is this: > self.R.setUp() > to set up the PETSc KSP variable R, then I do: > self.R.solve(f, q) > and later: > self.R.solveTranspose(f, q) > > However, 'solveTranspose()' only works when I use MUMPS. If I try > STRUMPACK or SUPERLU_DIST it fails, it seems that 'solveTranpose()' is not > defined for them? or is there a specific way to call them with these > libraries? > Maybe the approach would be to define another 'self.R' variable but then > set it as a transpose().conjugate() before setUp()? > I was trying STRUMPACK because it has a low-memory approach and that's my > main bottleneck. > > I appreciate any help you can provide. > > Best, > Jean > > -- > *Jean Helder Marques Ribeiro* > Ph.D. Candidate > University of California, Los Angeles > 420 Westwood Plaza, Los Angeles, CA 90095 > phone: (310) 689-6593 > > > > -- *Jean Helder Marques Ribeiro* Ph.D. Candidate University of California, Los Angeles 420 Westwood Plaza, Los Angeles, CA 90095 phone: (310) 689-6593
