From: Alexis Tantet <alexis.tantet@gmail.com>
To: Patrick Alken <alken@colorado.edu>
Cc: gsl-discuss@sourceware.org
Subject: Re: Sparse matrix extension
Date: Tue, 19 Jan 2016 19:55:00 -0000 [thread overview]
Message-ID: <CAMWWPT2kMe=R0qUz4P6n_xzG+oW-8pOFwCtBuaritZ5MF6jzAg@mail.gmail.com> (raw)
In-Reply-To: <569E6C33.1090505@colorado.edu>
Hi Patrick,
Thanks for the quick reply! I wanted to be sure that this contribution
is useful before to spend time on the merging with the latest version.
I will create the gsl.git repository and work on it during the week.
I had already had a look at the documentation but did not know about
the iterative solvers (a link between each modules would be useful).
My contribution indeed fits in the sparse matrix module + the update
of the dgemm and dgemv functions to support CRS (an update may also be
needed for the solvers).
I have also developed a simple C++ object allowing to use gsl_spmatrix
as a user-defined matrix in ARPACK++ (a maintained fork of ARPACK++
can be found at https://github.com/m-reuter/arpackpp), allowing to
avoid having to use other libraries such as superLU. It could be
useful to others, maybe as an extension. Now that I think about it,
the iterative solvers could also be used to support the shift and
invert modes (see ARPACK++ documentation). What do you think (I could
work on it)?
If you have major comments, the sooner the better, so that I can work
on them while merging.
Thank you for your interest,
Alexis
On Tue, Jan 19, 2016 at 6:02 PM, Patrick Alken <alken@colorado.edu> wrote:
> Hi Alexis,
>
> This looks like very good work! Adding compressed row storage has been on
> my todo list for a while. The 'gslsp' extension is unfortunately very out of
> date, and the current git contains newer code (including a GMRES iterative
> linear solver). I removed the gslsp extension from the web page a while back
> to reflect this. You can browse the latest manual to see the current sparse
> matrix capabilities (http://www.gnu.org/software/gsl/manual/gsl-ref.pdf) -
> there are 3 chapters: sparse matrices, sparse blas and sparse linear algebra
> - it looks like your contributions will fit into the sparse matrices
> chapter.
>
> Would you be able to verify that your changes are compatible with the
> current gsl.git repository? This will make it much easier for me to merge
> everything into the git when ready. It would be best if you made a new
> branch of gsl.git, and add your changes so I can then pull them from github
> or somewhere. I will try to find some time in the next few days to look over
> your code.
>
> Thanks again,
> Patrick
>
>
> On 01/19/2016 09:43 AM, Alexis Tantet wrote:
>>
>> Dear GSLers,
>>
>> As a scientist rather than a developer, I have developed an extension
>> of the sparse matrix module (CRS, I/O, manipulation, see below), which
>> I have tested. These modifications conserve the structure of the
>> original module and be useful for a large number of sparse matrices
>> users.
>>
>> I'm not familiar with the contributing process here. My repository can
>> be found there:
>> https://github.com/atantet/gslsp
>> Unfortunately, I did not know of the gsl.git repository and I forked it
>> froml:
>> https://github.com/drjerry/gslsp ,
>> which seems to be a bit older than gsl.git.
>>
>> How can I push/merge to gsl.git ? Should it be as an update or another
>> extension? Is it necessary to adapt to the newest version of the code
>> ?
>>
>> Best regards,
>> Alexis Tantet
>>
>> CHANGES.md:
>>
>> Extension of the sparse matrix module of GSL
>>
>> ===================================
>>
>> Introduction
>> ------------
>>
>> Usages of sparse matrices are numerous in scientific computing.
>> When numerical linear algebra problems become large, sparse
>> matrices become necessary to avoid memory overload and unnecessary
>> computations, at the cost of element access and matrix construction.
>> As a result, most large scale linear solvers or eigen solvers perform
>> on sparse matrices.
>>
>> Fortunately, a very useful sparse matrix module has recently been
>> introduced to GSL.
>> However, important features are still lacking, such has
>> Compressed Row Storage (CRS) matrices, input/output functions and
>> other matrix properties and manipulation functions.
>> This new version attempts to address this, conserving the original
>> structure of the module and conventions.
>>
>> Major changes
>> -------------
>>
>> * Add CRS format and update functions manipulating compressed matrices :
>> - additional flag GSL_SPMATRIX_CRS and macro GSLSP_ISMATRIX (
>> gsl_spmatrix.h )
>> - additional members innerSize and outerSize used to iterate
>> matrix elements ( gsl_spmatrix.h )
>> - rename some variables for coherence ( gsl_spmatrix.h , *.c )
>> - update all functions on compressed matrices ( *.c )
>> * Allow to sum duplicate elements when compressing ( spcompress.c ) :
>> - modify gsl_spmatrix_compress
>> - add gsl_spmatrix_sum_duplicate
>> * CCS <-> CRS and fast transpose inplace in spswap.c :
>> - add gsl_spmatrix_switch_major
>> - add gsl_spmatrix_transpose
>> * Add printing and scanning functions in spio.c :
>> - add gsl_spmatrix_fprintf
>> - add gsl_spmatrix_fscanf
>> * Add manipulation functions in spmanip.c (particularly useful for
>> Markov chain transition matrices) :
>> - add gsl_spmatrix_get_rowsum : get vector of sum over row elements
>> - add gsl_spmatrix_get_colsum : get vector of sum over column
>> elements
>> - add gsl_spmatrix_div_rows : divide all elements of each row
>> by a vector element
>> - add gsl_spmatrix_div_cols : divide all elements of each
>> column by a vector element
>> * Add test functions in atprop.c :
>> - add gsl_spmatrix_gt_elements : greater than test for each matrix
>> element
>> - add gsl_spmatrix_ge_elements : greater or equal than test for
>> each matrix element
>> - add gsl_spmatrix_lt_elements : lower than test for each matrix
>> element
>> - add gsl_spmatrix_le_elements : lower or equal than test for
>> each matrix element
>> - add gsl_spmatrix_any : test if any non-zero element in
>> matrix
>>
>> Other minor changes have been made, such as error tests.
>> test.c has also been updated to test new features.
>
>
--
Alexis Tantet
next prev parent reply other threads:[~2016-01-19 19:55 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAMWWPT3uJj4Vrn7ut6+F18gY===zd6+1r1UJhz0hcCj--zwtdg@mail.gmail.com>
2016-01-19 16:43 ` Alexis Tantet
2016-01-19 17:02 ` Patrick Alken
2016-01-19 19:55 ` Alexis Tantet [this message]
2016-01-19 20:50 ` Patrick Alken
2016-01-20 18:31 ` Alexis Tantet
2016-02-07 0:03 ` Patrick Alken
2016-02-07 1:03 ` Alexis Tantet
2016-02-07 17:25 ` Patrick Alken
2016-02-07 19:32 ` Alexis Tantet
2016-02-07 20:14 ` Patrick Alken
2016-02-07 20:31 ` Alexis Tantet
2016-02-07 21:34 ` Patrick Alken
2016-02-08 0:59 ` Alexis Tantet
2016-02-10 13:16 ` Alexis Tantet
2016-02-10 13:48 ` Alexis Tantet
2016-02-10 15:56 ` Patrick Alken
2016-02-12 10:43 ` Alexis Tantet
2016-02-13 19:42 ` Patrick Alken
2016-02-14 11:06 ` Alexis Tantet
2016-02-14 18:11 ` Patrick Alken
2016-02-14 18:25 ` Brian Gladman
2016-02-15 5:10 ` Patrick Alken
2016-02-15 11:09 ` Brian Gladman
[not found] ` <CAMWWPT0J9ENRZjJHLO=cxot4DGdSLer+n2HkBVnhFnO0oiVV8g@mail.gmail.com>
2016-02-15 13:56 ` Alexis Tantet
2016-02-15 17:17 ` Patrick Alken
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAMWWPT2kMe=R0qUz4P6n_xzG+oW-8pOFwCtBuaritZ5MF6jzAg@mail.gmail.com' \
--to=alexis.tantet@gmail.com \
--cc=alken@colorado.edu \
--cc=gsl-discuss@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).