question on solving the transpose of a system

Randall Mackie randy at geosystem.us
Mon Sep 25 14:43:41 CDT 2006


Barry,

Same effect with gmres. I'm going to try using MatTranspose
and transpose both A and P, and use KSPSolve and see what happens.

Randy


Barry Smith wrote:
>   Randy,
> 
>    Can you try -ksp_type gmres and see if you still get the
> affect?
> 
>    Barry
> 
> 
> On Mon, 25 Sep 2006, Randall Mackie wrote:
> 
>>
>> Barry Smith wrote:
>>>   Randy,
>>>
>>>> Now, if I want to solve (2) above, do I simply make a call to
>>>> KSPSolveTranspose(ksp,b,xsol), where I've set b to the right
>>>> hand side of (2)
>>>    Yes, this is the way we intend it to be used. You should not
>>> have to construct the transposed matrices.
>>>
>>>   Questions:
>>>
>>> Are you using KSPSetNullSpace()?
>> No
>>
>>> Are you using right or left preconditioning? Or not setting it?
>> I'm not setting it, just using the default
>>
>>
>>> What KSP method are you using?
>>> What preconditioner are you using?
>>          -em_ksp_truemonitor \
>>          -em_ksp_type bcgs \
>>          -em_pc_type bjacobi \
>>          -em_sub_pc_type ilu \
>>          -em_sub_pc_factor_levels 3 \
>>          -em_sub_pc_factor_fill 6 \
>>
>>>    Barry
>>>
>>>
>>>
>>> On Mon, 25 Sep 2006, Randall Mackie wrote:
>>>
>>>> I have a situation where I have to solve the following problems:
>>>>
>>>> 1) Ax=b
>>>>
>>>> 2) (A)^T u = c
>>>>
>>>> A is not symmetric.
>>>>
>>>>
>>>> After I set up my A matrix and the preconditioner P (which is NOT the same
>>>> as
>>>> A),
>>>> I solve it like so:
>>>>
>>>>
>>>>         call set_P(da,P,l,m,n,period,resist,x,y,z)
>>>>         call set_A(da,A,l,m,n,period,resist,x,y,z)
>>>>
>>>>         call MatSetBlockSize(A,3,ierr)
>>>>         call MatSetBlockSize(P,3,ierr)
>>>>
>>>>         call KSPSetOperators(ksp,A,P,DIFFERENT_NONZERO_PATTERN,ierr)
>>>>         call KSPSetInitialGuessNonzero(ksp,PETSC_TRUE,ierr)
>>>>
>>>>             call KSPSolve(ksp,b,xsol,ierr)
>>>>             call KSPGetIterationNumber(ksp,its,ierr)
>>>>             call KSPGetConvergedReason(ksp,reason,ierr)
>>>>
>>>>
>>>> Now, if I want to solve (2) above, do I simply make a call to
>>>> KSPSolveTranspose(ksp,b,xsol), where I've set b to the right
>>>> hand side of (2), or do I have to create the transposes of both
>>>> A and the preconditioner and just use KSPSolve?
>>>>
>>>>
>>>> When I've tried just using KSPSolveTranspose, the preconditioned residual
>>>> norm falls, but not as rapidly as when doing (1), and the true residual
>>>> norm
>>>> seems not to change much at all.
>>>>
>>>>
>>>> Thanks, Randy
>>>>
>>>>
>>>>
>>
> 

-- 
Randall Mackie
GSY-USA, Inc.
PMB# 643
2261 Market St.,
San Francisco, CA 94114-1600
Tel (415) 469-8649
Fax (415) 469-5044

California Registered Geophysicist
License No. GP 1034




More information about the petsc-users mailing list