[FLASH-USERS] [EXT] Re: Retrieving values in HYPRE matrix

Eddie Hansen ehansen at pas.rochester.edu
Fri Feb 26 11:36:11 EST 2021


You might've already tried this, but it's possible that your method for
what you're trying to do is fine and you just need to flip the i and j
indices. The ordering in FLASH (i,j) is opposite that of HYPRE (j,i).

On Fri, Feb 26, 2021 at 9:34 AM Alberti, Anthony L <
anthony.alberti at oregonstate.edu> wrote:

> Hi Akash, Eddie,
>
>
>
> Thanks for the feedback. I tried adding HYPRE_SStructMatrixAssemble
> before trying to retrieve the values of gr_hypreMatA, and it did have an
> effect, but the values are still wrong. Here is what I am seeing for a 2D
> matrix:
>
>    1      0.250226772E-02      0.250226772E-02
>
>    2      0.000000000E+00      -.249827048E-02
>
>    3      -.249827048E-02      -.399723277E-05
>
>    4      0.000000000E+00      -.399723277E-05
>
>    5      -.399723277E-05      -.399723277E-05
>
>    6      0.250626495E-02      0.250626495E-02
>
>    7      0.000000000E+00      -.249827048E-02
>
>    8      -.249827048E-02      0.000000000E+00
>
>    9      -.399723277E-05      0.250626495E-02
>
>   10      -.399723277E-05      0.000000000E+00
>
>>
>   476      0.500053820E-02      0.000000000E+00
>
>  477      -.249827048E-02      0.000000000E+00
>
>  478      -.249827048E-02      0.000000000E+00
>
>  479      -.399723277E-05      0.000000000E+00
>
>  480      0.000000000E+00      0.000000000E+00
>
>  481      0.500053820E-02      0.000000000E+00
>
>  482      -.249827048E-02      0.000000000E+00
>
>>
>
>
> Maybe a bit more context into what I’m interested in doing will be
> helpful. I’m currently writing a new module within the general implicit
> diffusion solver to do reduced-order modeling (via projection-based
> methods, e.g. POD). Since HYPRE is a bit of a mystery to me as well, I
> decided to use PETSc in my module (due to familiarity and more built-in
> functionality – at least to my knowledge). Doing so requires me to
> transform the HYPRE matrix, gr_hypreMatA, into a PETSc matrix. Conceptually
> it is easy to do, I just need to be able to extract the values from
> gr_hypreMatA into an array of reals so I can insert them into a PETSc
> matrix. I was able to do it in 1D, but my method does not work for 2D –
> thus me reaching out to the mailing list. Any suggestions would be welcomed.
>
>
>
> Cheers,
>
> Tony
>
>
>
>
>
> *From: *Eddie Hansen <ehansen at pas.rochester.edu>
> *Date: *Friday, February 26, 2021 at 6:27 AM
> *To: *Akash Dhruv <akashdhruv at email.gwu.edu>
> *Cc: *"Alberti, Anthony L" <anthony.alberti at oregonstate.edu>, "
> flash-users at flash.uchicago.edu" <flash-users at flash.uchicago.edu>
> *Subject: *Re: [EXT] Re: [FLASH-USERS] Retrieving values in HYPRE matrix
>
>
>
> [This email originated from outside of OSU. Use caution with links and
> attachments.]
>
> Hi Tony,
>
>
>
> I'm not sure if you can retrieve all the box values in a stencil-wise
> manner from gr_hypreMatA the way you're thinking. If my understanding is
> correct, the SetBoxValues routine uses the stencil and the offsets like a
> guide so that it knows which entries in gr_hypreMatA to set or add to. So
> when you use GetBoxValues this way, you're assigning "combined" matrix
> entries from gr_hypreMatA to test and you'll have repeated values based on
> the stencil and offsets.
>
>
>
> In other words, let's say you're in 2D and your stencil is 5 points in
> this order: (i,j), (i-1,j), (i+1,j), (i,j-1), (i,j+1). The GetBoxValues
> routine will set test from matrix A as follows:
>
> test(1) = A(i,j)
>
> test(2) = A(i-1,j)
>
> test(3) = A(i+1,j)
>
> test(4) = A(i,j-1)
>
> test(5) = A(i,j+1)
>
> test(6) = A(i,j+1)
>
> test(7) = A(i-1,j+1)
>
> test(8) = A(i+1,j+1)
>
> test(9) = A(i,j)
>
> test(10) = A(i,j+2)
>
> etc., etc.
>
>
>
> I've dealt with the HYPRE setup routines in FLASH a lot since I'm the one
> primarily in charge of implementing new implicit diffusion solvers.
> However, much of HYPRE itself is still a mystery to me, so I could still be
> wrong about how the SetBoxValues and GetBoxValues routines are operating.
>
>
>
> Alternatively, if you're just interested in looking at gr_hypreMatA, you
> can use the subroutine HYPRE_SStructMatrixPrint(). There should be some
> lines in Grid_advanceDiffusion.F90 that you can uncomment to do this. Then
> you can use matlab or whatever program you prefer to look at the matrix.
>
>
>
>
>
>
>
> On Thu, Feb 25, 2021 at 9:09 PM Akash Dhruv <akashdhruv at email.gwu.edu>
> wrote:
>
> Hi Tony,
>
>
>
> Can you share a snippet of the output? Also, can you try getting the
> BoxValues after HYPRE_SStructMatrixAssemble is called?
>
>
>
> Akash
>
>
>
>
>
>
>
> On Feb 25, 2021, at 9:48 PM, Alberti, Anthony L <
> anthony.alberti at oregonstate.edu> wrote:
>
>
>
> Hi folks,
>
>
>
> I’m interested in retrieving the values written to the matrix for the
> system of equations built in
> source/Grid/GridSolvers/HYPRE/UG/gr_hypreCreateMatrix.F90. After BoxVal is
> filled and then assigned to gr_hypreMatA(via the call to
> HYPRE_SStructMatrixSetBoxValues) I’ve added a snippet of code that
> attempts to retrieve the values just written to gr_hypreMatA and writes
> to the screen a comparison of BoxVal and an array of reals called test –
> see the snippet below. However, when I run this the values for BoxVal and
> test are not even close. Does anyone have an idea on how to alter this
> snippet so test and BoxVal are the same?
>
>
>
> allocate(test(nentries*product(datasize(1:NDIM)))) !nentries * total
> number of grid cells per block )
>
> call HYPRE_SStructMatrixGetBoxValues(gr_hypreMatA, mypart,
> gr_hypreLower(lb,1:NDIM), &
>
>      gr_hypreUpper(lb,1:NDIM), var, nentries, stencil_indices(1:nentries),
> test(:), ierr)
>
> do i=1,nentries*product(datasize(1:NDIM))
>
>    WRITE(*,fmt='(I4.0, 6X, E15.9, 6X, E15.9)') i, BoxVal(i), test(i)
>
> end do
>
> call exit(0)
>
>
>
> Thanks in advance,
>
> Tony
>
>
>
>
>
>
>
> -----------------------------------------------------------
>
> Tony Alberti
> Postdoctoral Scholar
> School of Nuclear Science and Engineering
> https://ne.oregonstate.edu/tony-alberti
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__ne.oregonstate.edu_tony-2Dalberti&d=DwMFaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=6F-TMED_bsUqKfX7XKE7kRK41M2Ogti8WJdx1GwNjkQ&m=viEEdaFV01zo9zrxAe3CDWtm6Kozcf5kb-Yoh2znXIA&s=aObgG-RLEKrNZ5hGr5VKNmbiTxeqGRkOBnGgU1QNERw&e=>
>
>
>
>
>
>
> --
>
> Eddie Hansen, PhD
> Postdoctoral Associate
>
> University of Rochester
>
> 607-341-6126 | Flash Center
>


-- 
Eddie Hansen, PhD
Postdoctoral Associate
University of Rochester
607-341-6126 | Flash Center
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://flash.rochester.edu/pipermail/flash-users/attachments/20210226/7b6768d3/attachment.htm>


More information about the flash-users mailing list