[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