[Trilinos-Users] [EXTERNAL] Amesos Superlu/Superludist Question
Travis Austin
austin at txcorp.com
Tue Sep 4 11:25:08 MDT 2012
HI Siva,
I have confirmed that changing
118 //! Always returns true.
119 bool UseTranspose() const {return(true);};
120 //@}
to
118 //! Always returns false.
119 bool UseTranspose() const {return(false);};
120 //@}
in Amesos_Superludist.h now yields a residual that is O(1e-17)
and essentially equivalent to Amesos_Superlu.h
I'd suggest making this change in Amesos_Superludist.
Travis
>> 1 //! Always returns true.
>> 119 bool UseTranspose() const {return(true);};
>> 120 //@}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Travis Austin, Ph.D.
VP of Computational Mathematics
Tech-X Corporation
5621 Arapahoe Ave, Suite A
Boulder, CO 80303
austin at txcorp.com
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On Sep 4, 2012, at 10:57 AM, Siva Rajamanickam wrote:
> Hi Travis,
> The useTranspose is used in lot of Amesos solvers as a shortcut to go between row storage and column storage (without copying), when the TPL requires a column storage and it can support a transpose solve. This appears to be a bug while computing the residuals though (as we don't use the trick for Superlu_dist). Do you get the correct answer when useTranspose() is false ?
>
> Siva
>
> Travis Austin wrote:
>> Hi,
>>
>> I am using Amesos Superlu and Superludist to solve a very simple nonsymmetric problem. There is agreement in the
>> solution between the two problems but the residual ||Ax - b|| is not in agreement. (See below.)
>>
>> Amesos_Superlu:
>> ===================
>> Amesos_Superlu : vector 0, ||Ax - b|| = 0
>> Amesos_Superlu : vector 0, ||x|| = 0.25, ||b|| = 1
>>
>> Amesos_Superludist:
>> ===================
>> Amesos_Superludist : vector 0, ||Ax - b|| = 0.5
>> Amesos_Superludist : vector 0, ||x|| = 0.25, ||b|| = 1
>>
>> The residual is being printed out because I am setting the ComputeTrueResidual parameter to true.
>> In Amesos_Superludist.cpp I see the method Amesos_Superludist::Solve() actually compute the residual and issues the
>> following call:
>>
>> if (ComputeTrueResidual_)
>> ComputeTrueResidual(*RowMatrixA_, *vecX, *vecB, UseTranspose(),
>> "Amesos_Superludist");
>>
>> Furthermore, for Superludist UseTranspose() always returns true implying that I am computing ||A^t x - b||. This is exactly
>> what I have found for my small example matrix and explains the nonzero residual above in Amesos_Superludist.
>>
>> Can someone explain why UseTranspose() is hard coded to return true in Amesos_Superludist.h:118-120
>>
>> 118 //! Always returns true.
>> 119 bool UseTranspose() const {return(true);};
>> 120 //@}
>>
>> I'd think it should return false since it says that Superludist does not support transpose solves.
>>
>> Thanks,
>> Travis
>>
>>
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> Travis Austin, Ph.D.
>> VP of Computational Mathematics
>> Tech-X Corporation
>> 5621 Arapahoe Ave, Suite A
>> Boulder, CO 80303
>> austin at txcorp.com
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>>
>>
>>
>>
>> _______________________________________________
>> Trilinos-Users mailing list
>> Trilinos-Users at software.sandia.gov
>> http://software.sandia.gov/mailman/listinfo/trilinos-users
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://software.sandia.gov/pipermail/trilinos-users/attachments/20120904/391ec5e1/attachment.html
More information about the Trilinos-Users
mailing list