[Trilinos-Users] Sparse direct solver and language options for GPU

Alicia M Klinvex aklinvex at purdue.edu
Sun Sep 21 03:42:58 MDT 2014


Hello Tom,

How many columns does your B have?  In my case, B is dense and very narrow, so I can store the approximate Schur complement S = B^T Z, where Z is an approximate solution of AZ=B (since S is generally no larger for me than 100x100, whereas A can be 10,000,000x10,000,000.)  If B is NOT sufficiently narrow for S to be small, you probably don't want to explicitly form and store S.  Instead, you can define an operator SchurOp with an apply method that does the following:

SchurOp::Apply(const SerialDenseVector X, SerialDenseVector Y)
{
  // Compute V = B*X
  // Solve AZ=V either directly or iteratively.  You may use a preconditioner if you wish.
  // Compute Y = B^T * Z
}

Keep in mind that Belos (the iterative solver package) is templated on operators rather than matrices, so if you need to solve a linear system with S, you'll be able to give Belos a SchurOp to solve Sx=f.

Does that make sense?

Best wishes,
Alicia

PS: The code is on my office machine.  I'll send it to you tomorrow.



----- Original Message -----
From: "Tom Anderson" <tomacorp at gmail.com>
To: trilinos-users at software.sandia.gov
Sent: Sunday, September 21, 2014 4:00:33 AM
Subject: Re: [Trilinos-Users] Sparse direct solver and language options for	GPU




Alicia, 


Yes, please send this to me. There is so much in the Benzi/Golub paper that I didn't know where to begin, and it is great to hear about your approach. I am especially interested to see you computed AZ=B. In my case, A and B are both sparse. 


I haven't yet figured out how to use preconditioning in my system. 
I tried ML but so far I just get segfaults. I hope to learn from your example. 


Thanks, 


-Tom Anderson 
tomacorp at gmail.com 

From: Alicia M Klinvex < aklinvex at purdue.edu > 

I have a few Trilinos codes that solve saddle point problems of a specific structure: the 1-1 block is a sparse, symmetric matrix (A); the 1-2 block is a multivector (a tall, dense matrix) (B); the 2-1 block is B^T; the 2-2 block is zero. 

The first code I have forms the inexact Schur complement S=B^T Z, where Z is the approximate solution of AZ=B, computed by an iterative method. (If you want to precondition A, you can. If you want to use a direct method instead of an iterative one, you could also do that.) It then uses the Schur complement to construct the solution to your saddle point problem (as in section 5 of the Benzi/Golub paper). 

I also implemented the block diagonal preconditioner of section 10.1.1. I haven't implemented block upper triangular preconditioning, constraint preconditioning or any of the other block preconditioners they mention, but it wouldn't be too difficult to modify the code to accommodate them. 

These saddle point solvers aren't in Trilinos 11.10.2 (as far as I know), but I'd be happy to send you my code if it would help you. 

Best wishes, 
Alicia 



_______________________________________________
Trilinos-Users mailing list
Trilinos-Users at software.sandia.gov
https://software.sandia.gov/mailman/listinfo/trilinos-users


More information about the Trilinos-Users mailing list