> On 9 Apr 2024, at 4:19 PM, Carl-Johan Thore <[email protected]> wrote:
> 
> This Message Is From an External Sender
> This message came from outside your organization.
> Thanks for the suggestion. I don't have a factored matrix (and can't really 
> use direct linear solvers) so MatSolveTranspose doesn't seem to be an option. 
> I should have mentioned that I've also tried KSPSolveTranspose but that 
> doesn't work with pcredistribute

I’m not a frequent PCREDISTRIBUTE user, but it looks like 
https://urldefense.us/v3/__https://petsc.org/release/src/ksp/pc/impls/redistribute/redistribute.c.html*line332__;Iw!!G_uCfscf7eWS!bgGlN3dW5g5M98EkZPPaYivRkcXtawYE_jKsdMC0zK2bDy4u1Qy1KOMIcZ-_sBABRkHTzGlKHmAefb8Ozy3XbQ$
  could be copy/paste’d into PCApplyTranspose_Redistribute() by just changing a 
MatMult() to MatMultTranspose() and KSPSolve() to KSPSolveTranspose().
Would you be willing to contribute (and test) this?
Then, KSPSolveTranspose() — which should be the function you call — will work.

Thanks,
Pierre

> /Carl-Johan
> 
> On Tue, Apr 9, 2024 at 3:59 PM Zhang, Hong <[email protected] 
> <mailto:[email protected]>> wrote:
>> Carl-Johan,
>> You can use MatSolveTranspose() to solve A'*x = b. See 
>> petsc/src/ksp/ksp/tutorials/ex79.c
>> 
>> `MatCreateTranspose()` is used if you only need a matrix that behaves like 
>> the transpose, but don't need the storage to be changed, i.e., A and A' 
>> share same matrix storage, thus MatGetRow() needs to get columns of A, which 
>> is not supported.
>> 
>> Hong
>> From: petsc-users <[email protected] 
>> <mailto:[email protected]>> on behalf of Carl-Johan Thore 
>> <[email protected] <mailto:[email protected]>>
>> Sent: Tuesday, April 9, 2024 6:38 AM
>> To: petsc-users <[email protected] <mailto:[email protected]>>
>> Subject: [petsc-users] MatCreateTranspose
>>  
>> This Message Is From an External Sender 
>> This message came from outside your organization. 
>>  
>> Hi,
>> 
>> I have a matrix A with transpose A' and would like to solve the linear 
>> system A'*x = b using the pcredistribute preconditioner. It seemed like a 
>> good idea to use MatCreateTranspose, but this leads to
>> 
>> [0]PETSC ERROR: --------------------- Error Message 
>> --------------------------------------------------------------
>> [0]PETSC ERROR: No support for this operation for this object type
>> [0]PETSC ERROR: No method getrow for Mat of type transpose
>> [0]PETSC ERROR: See 
>> https://urldefense.us/v3/__https://petsc.org/release/faq/__;!!G_uCfscf7eWS!bgGlN3dW5g5M98EkZPPaYivRkcXtawYE_jKsdMC0zK2bDy4u1Qy1KOMIcZ-_sBABRkHTzGlKHmAefb8Z27cesg$
>>   
>> <https://urldefense.us/v3/__https://petsc.org/release/faq/__;!!G_uCfscf7eWS!bVYrcPfbXSXCcthSH37OClTgnf7RxkizULEW1ZZJ5yYG3-50366x_OFSPmOgGWEcOeFyOmAMSFewAyCnxIUg7K8W_neRPw$>
>>  for trouble shooting.
>> [0]PETSC ERROR: Petsc Release Version 3.21.0, unknown
>> [0]PETSC ERROR: Configure options COPTFLAGS="-O3 -march=native" 
>> CXXOPTFLAGS="-O3 -march=native" --with-fortran-bindings=0 FOPTFLAGS="-O3 
>> -march=native" CUDAOPTFLAGS=-O3 --with-cuda --with-cusp --with-debugging=0 
>> --download-scalapack --download-hdf5 --download-zlib --download-mumps 
>> --download-parmetis --download-metis --download-ptscotch --download-hypre 
>> --download-spai
>> [0]PETSC ERROR: #1 MatGetRow() at 
>> /mnt/c/mathware/petsc/petsc-v3-21-0/src/mat/interface/matrix.c:573
>> [0]PETSC ERROR: #2 PCSetUp_Redistribute() at 
>> /mnt/c/mathware/petsc/petsc-v3-21-0/src/ksp/pc/impls/redistribute/redistribute.c:111
>> [0]PETSC ERROR: #3 PCSetUp() at 
>> /mnt/c/mathware/petsc/petsc-v3-21-0/src/ksp/pc/interface/precon.c:1079
>> [0]PETSC ERROR: #4 KSPSetUp() at 
>> /mnt/c/mathware/petsc/petsc-v3-21-0/src/ksp/ksp/interface/itfunc.c:415
>> 
>> MatTranspose is a working alternative, but MatCreateTranspose would be 
>> preferable. In principle the solution seems straightforward -- just add a 
>> getrow method -- but is it, and is it a good idea (performancewise etc)?
>> 
>> Kind regards,
>> Carl-Johan 

Reply via email to