[Trilinos-Users] [EXTERNAL] Amesos Superlu/Superludist Question
Travis Austin
austin at txcorp.com
Tue Sep 4 11:01:55 MDT 2012
Siva,
Unless I make changes to Amesos_Superludist.h I cannot make useTranpose() return false. That was my next plan but there is a
sequence of builds that I need to retest everything. I'll go ahead and give it a try though. By the way, here is more relevant code
along with comments in Amesos_Superludist.h:
//! Amesos_Superludist does not support transpose at this time.
/*! returns 0 if UseTranspose is set to false, else 1 (failure)
*/
int SetUseTranspose(bool UseTranspose) { return( UseTranspose?1:0 );};
//! Always returns true.
bool UseTranspose() const {return(true);};
//@}
I'll let you know how it works when I change UseTranpose method to return false.
Travis
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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
>>
>
More information about the Trilinos-Users
mailing list