[Trilinos-Users] ansazi question

Alicia Klinvex aklinvex at purdue.edu
Mon Feb 23 08:20:06 MST 2015


Hello David,

I have attached an example of how to create and use your own custom status
test; this driver shows how to use spectrum folding to compute interior
eigenpairs, but the important part is how to define a status test.  Note
that in the checkStatus method of the status test, you have access to the
LOBPCG solver.  You can use it to access the approximate eigenvectors via
the getRitzVectors function.

If it is unclear how to do so, please let me know and I'll help you out :-)

Best wishes,
Alicia Klinvex

On Thu, Feb 19, 2015 at 10:05 AM, Alicia Klinvex <aklinvex at purdue.edu>
wrote:

> Sorry, I've been traveling.  I have an example file of how to do this;
> I'll comment it and send it to you after I get back.
>
> - Alicia
>
> On Fri, Feb 13, 2015 at 8:03 PM, Hysom, David A. <hysom1 at llnl.gov> wrote:
>
>>  Alicia,
>>
>>  I polled my collegues, some whom are are computer scientists, others
>> are more
>> math inclined, and was rather surprised at their quick replies:
>>
>>  Andy Yoo: "I would say definitely yes too."
>>
>>  Geoff Sanders: "Yeah, I think we need it.    Dynamic graphs it would be
>> useful for, too ... It's extremely useful to a numerical analyst that seeks
>> to understand what error modes an algorithm is struggling with."
>>
>>  Lance Ward: "I would vote yes since it is very hard to know in advance
>> what the smallest tolerance you'll be able to obtain is and on the
>> assumption it is better to give the customer some results which may be less
>> than ideal and a warning about it vs giving them nothing like we currently
>> do if it fails?"
>>
>>  regards, David
>>  ------------------------------
>> *From:* trilinos-users-bounces at software.sandia.gov [
>> trilinos-users-bounces at software.sandia.gov] on behalf of Hysom, David A.
>> [hysom1 at llnl.gov]
>> *Sent:* Friday, February 13, 2015 3:44 PM
>> *To:* Alicia Klinvex
>>
>> *Cc:* trilinos-users at software.sandia.gov
>> *Subject:* Re: [Trilinos-Users] ansazi question
>>
>>   Alicia,
>>
>>  Thanks for your quick response. Yes, we'd really like to do this.
>>
>>  FYI, we're performing iterative spectral clustering:
>>   - compute the 2nd smallest eigenvector
>>   - use it to determine how to split the graph (of the matrix) into two
>> sub-graphs
>>   - recurse for each subgraph, until some stopping criteria is met
>>
>>  A question is: what is the "best" thing to do if we get convergence
>> failure
>> at some point, on one of the sub-graphs? In the past, we've thrown an
>> exception.
>> Currently, we print out an error message and continue processing
>> whatever
>> sub-graphs are still to be split (and don't attempt to split the
>> sub-graph for which
>> convergence was not achieved). What we'd like to experiment with:
>> retrieve the eigenvectors, even if not converged, and run some
>> statistical tests
>> to determine if they're "good enough" to provide a reasonable splitting.
>>
>>  - David
>>
>>  ------------------------------
>> *From:* Alicia Klinvex [aklinvex at purdue.edu]
>> *Sent:* Friday, February 13, 2015 3:29 PM
>> *To:* Hysom, David A.
>> *Cc:* trilinos-users at software.sandia.gov
>> *Subject:* Re: [Trilinos-Users] ansazi question
>>
>>   Hello David,
>>
>>  There is a way to retrieve the eigenpairs if convergence fails, but
>> it's not easy.  The issue is that you use the LOBPCGSolMgr, I assume, which
>> does not give you access to the solver.  The solver has a function to
>> return the Ritz values and vectors; the solver manager does not.  You would
>> need to create a custom debug status test (which allows you to grab the
>> solver) and provide it to the solver manager.  This is not something that
>> we generally recommend doing, but if you desperately want to do so, I can
>> give you more information about how to do this.
>>
>>  Best wishes,
>> Alicia
>>
>> On Fri, Feb 13, 2015 at 6:14 PM, Hysom, David A. <hysom1 at llnl.gov> wrote:
>>
>>>  Hi,
>>>
>>>  We're using anasazi's LOBPCG, and have cases where convergence
>>> fails, but we'd still like to retrieve the 2nd smallest eigenvector
>>> (we're
>>> computing the smallesBasicEigenproblemt two). When we call:
>>>
>>>  Anasazi::Eigensolution<scalar_t, mvec_t> sol = problem->getSolution();
>>> Teuchos::RCP<mvec_t> evecs = sol.Evecs;
>>> cout << "evecs.size: " << evecs->getNumVectors() << endl;
>>>
>>>  we get a single vector. However, since anasazi can print out the
>>> eigenvalues and residuals after every iteration, I'm guessing there
>>> should be a way to retrieve the eigenpairs if convergence fails.
>>>
>>>  So, is there? If not, how easy would it be to modify the code to
>>> do so, and where should I start?
>>>
>>>  thanks, David
>>>
>>> _______________________________________________
>>> Trilinos-Users mailing list
>>> Trilinos-Users at software.sandia.gov
>>> https://software.sandia.gov/mailman/listinfo/trilinos-users
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://software.sandia.gov/pipermail/trilinos-users/attachments/20150223/e9740e59/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: anderson_fold.cpp
Type: text/x-c++src
Size: 10704 bytes
Desc: not available
URL: <http://software.sandia.gov/pipermail/trilinos-users/attachments/20150223/e9740e59/attachment.bin>


More information about the Trilinos-Users mailing list