Re: [petsc-users] Insert one sparse matrix as a block in another

2022-12-13 Thread Peder Jørgensgaard Olesen via petsc-users
Yes, MATNEST seems do to just what I wanted, and extremely fast too. Thanks!


For context, I am doing a snapshot POD (like SVD, but less memory intensive) in 
which I'm building a dense matrix S_pq = u_p^T B u_q for the EVP Sa=λa, where 
{u_p} and {u_q} are vectors in a particular dataset. The kernel B is the sparse 
matrix I was asking about.


Thanks again,

Peder


Fra: Matthew Knepley 
Sendt: 12. december 2022 23:58:02
Til: Jed Brown
Cc: Mark Adams; Peder Jørgensgaard Olesen; petsc-users@mcs.anl.gov
Emne: Re: [petsc-users] Insert one sparse matrix as a block in another

On Mon, Dec 12, 2022 at 5:24 PM Jed Brown 
mailto:j...@jedbrown.org>> wrote:
The description matches MATNEST (MATCOMPOSITE is for a sum or product of 
matrices) or parallel decompositions. Also consider the assembly style of 
src/snes/tutorials/ex28.c, which can create either a monolithic or block 
(MATNEST) matrix without extra storage or conversion costs.

I will just say a few words about ex28. The idea is that if you are already 
calling MatSetValues() to assemble your submatrices, then
you can use MatSetValuesLocal() to remap those locations into locations in the 
large matrix, using a LocalToGlobalMap. This allows
you to choose either a standard AIJ matrix (which supports factorizations for 
example), or a MatNest object that supports fast extraction
of the blocks.

  Thanks,

Matt

Mark Adams mailto:mfad...@lbl.gov>> writes:

> Do you know what kind of solver works well for this problem?
>
> You probably want to figure that out first and not worry about efficiency.
>
> MATCOMPOSITE does what you want but not all solvers will work with it.
>
> Where does this problem come from? We have a lot of experience and might
> know something.
>
> Mark
>
> On Mon, Dec 12, 2022 at 1:33 PM Peder Jørgensgaard Olesen via petsc-users <
> petsc-users@mcs.anl.gov<mailto:petsc-users@mcs.anl.gov>> wrote:
>
>> Hello
>>
>>
>> I have a set of sparse matrices (A1, A2, ...) , and need to generate a
>> larger matrix B with these as submatrices. I do not know the precise sparse
>> layouts of the A's (only that each row has one or two non-zero values),
>> and extracting *all* values to copy into B seems incredibly wasteful. How
>> can I make use of the sparsity to solve this efficiently?
>>
>>
>> Thanks,
>>
>> Peder
>>
>>
>>
>> Peder Jørgensgaard Olesen
>> PhD student
>> Department of Civil and Mechanical Engineering
>>
>> pj...@mek.dtu.dk<mailto:pj...@mek.dtu.dk>
>> Koppels Allé
>> Building 403, room 105
>> 2800 Kgs. Lyngby
>> www.dtu.dk/english<http://www.dtu.dk/english>
>>
>>


--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>


Re: [petsc-users] Insert one sparse matrix as a block in another

2022-12-12 Thread Matthew Knepley
On Mon, Dec 12, 2022 at 5:24 PM Jed Brown  wrote:

> The description matches MATNEST (MATCOMPOSITE is for a sum or product of
> matrices) or parallel decompositions. Also consider the assembly style of
> src/snes/tutorials/ex28.c, which can create either a monolithic or block
> (MATNEST) matrix without extra storage or conversion costs.
>

I will just say a few words about ex28. The idea is that if you are already
calling MatSetValues() to assemble your submatrices, then
you can use MatSetValuesLocal() to remap those locations into locations in
the large matrix, using a LocalToGlobalMap. This allows
you to choose either a standard AIJ matrix (which supports factorizations
for example), or a MatNest object that supports fast extraction
of the blocks.

  Thanks,

Matt


> Mark Adams  writes:
>
> > Do you know what kind of solver works well for this problem?
> >
> > You probably want to figure that out first and not worry about
> efficiency.
> >
> > MATCOMPOSITE does what you want but not all solvers will work with it.
> >
> > Where does this problem come from? We have a lot of experience and might
> > know something.
> >
> > Mark
> >
> > On Mon, Dec 12, 2022 at 1:33 PM Peder Jørgensgaard Olesen via
> petsc-users <
> > petsc-users@mcs.anl.gov> wrote:
> >
> >> Hello
> >>
> >>
> >> I have a set of sparse matrices (A1, A2, ...) , and need to generate a
> >> larger matrix B with these as submatrices. I do not know the precise
> sparse
> >> layouts of the A's (only that each row has one or two non-zero values),
> >> and extracting *all* values to copy into B seems incredibly wasteful.
> How
> >> can I make use of the sparsity to solve this efficiently?
> >>
> >>
> >> Thanks,
> >>
> >> Peder
> >>
> >>
> >>
> >> Peder Jørgensgaard Olesen
> >> PhD student
> >> Department of Civil and Mechanical Engineering
> >>
> >> pj...@mek.dtu.dk
> >> Koppels Allé
> >> Building 403, room 105
> >> 2800 Kgs. Lyngby
> >> www.dtu.dk/english
> >>
> >>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ 


Re: [petsc-users] Insert one sparse matrix as a block in another

2022-12-12 Thread Jed Brown
The description matches MATNEST (MATCOMPOSITE is for a sum or product of 
matrices) or parallel decompositions. Also consider the assembly style of 
src/snes/tutorials/ex28.c, which can create either a monolithic or block 
(MATNEST) matrix without extra storage or conversion costs.

Mark Adams  writes:

> Do you know what kind of solver works well for this problem?
>
> You probably want to figure that out first and not worry about efficiency.
>
> MATCOMPOSITE does what you want but not all solvers will work with it.
>
> Where does this problem come from? We have a lot of experience and might
> know something.
>
> Mark
>
> On Mon, Dec 12, 2022 at 1:33 PM Peder Jørgensgaard Olesen via petsc-users <
> petsc-users@mcs.anl.gov> wrote:
>
>> Hello
>>
>>
>> I have a set of sparse matrices (A1, A2, ...) , and need to generate a
>> larger matrix B with these as submatrices. I do not know the precise sparse
>> layouts of the A's (only that each row has one or two non-zero values),
>> and extracting *all* values to copy into B seems incredibly wasteful. How
>> can I make use of the sparsity to solve this efficiently?
>>
>>
>> Thanks,
>>
>> Peder
>>
>>
>>
>> Peder Jørgensgaard Olesen
>> PhD student
>> Department of Civil and Mechanical Engineering
>>
>> pj...@mek.dtu.dk
>> Koppels Allé
>> Building 403, room 105
>> 2800 Kgs. Lyngby
>> www.dtu.dk/english
>>
>>


Re: [petsc-users] Insert one sparse matrix as a block in another

2022-12-12 Thread Mark Adams
Do you know what kind of solver works well for this problem?

You probably want to figure that out first and not worry about efficiency.

MATCOMPOSITE does what you want but not all solvers will work with it.

Where does this problem come from? We have a lot of experience and might
know something.

Mark

On Mon, Dec 12, 2022 at 1:33 PM Peder Jørgensgaard Olesen via petsc-users <
petsc-users@mcs.anl.gov> wrote:

> Hello
>
>
> I have a set of sparse matrices (A1, A2, ...) , and need to generate a
> larger matrix B with these as submatrices. I do not know the precise sparse
> layouts of the A's (only that each row has one or two non-zero values),
> and extracting *all* values to copy into B seems incredibly wasteful. How
> can I make use of the sparsity to solve this efficiently?
>
>
> Thanks,
>
> Peder
>
>
>
> Peder Jørgensgaard Olesen
> PhD student
> Department of Civil and Mechanical Engineering
>
> pj...@mek.dtu.dk
> Koppels Allé
> Building 403, room 105
> 2800 Kgs. Lyngby
> www.dtu.dk/english
>
>


[petsc-users] Insert one sparse matrix as a block in another

2022-12-12 Thread Peder Jørgensgaard Olesen via petsc-users
Hello


I have a set of sparse matrices (A1, A2, ...) , and need to generate a larger 
matrix B with these as submatrices. I do not know the precise sparse layouts of 
the A's (only that each row has one or two non-zero values), and extracting all 
values to copy into B seems incredibly wasteful. How can I make use of the 
sparsity to solve this efficiently?


Thanks,

Peder



[http://www.dtu.dk/-/media/DTU_Generelt/Andet/mail-signature-logo.png]

Peder Jørgensgaard Olesen
PhD student
Department of Civil and Mechanical Engineering

pj...@mek.dtu.dk
Koppels Allé
Building 403, room 105
2800 Kgs. Lyngby
www.dtu.dk/english