I would start by simply using the PETSc binary dense format for the
matrices; it will work find for 1d (and 2d) development work with dozens of
processes. Latter, if need be, you can switch to the HDF5, the only difference
in your code would be the viewer you MatLoad() from will be an HDF5 file
instead of a PETSc binary file.
The format of a PETSc binary dense file is
4 integer values (the header) followed by the matrix as one contiguous
array of doubles (stored by row). The header is of the form
MAT_FILE_CLASSID, M, N, -1 (where M and N are number of rows and columns
in the matrix.)
You can easily create this file from Python (which I assume is where you
are getting your h(t) values from).
Barry
> On Nov 30, 2018, at 4:27 PM, Sajid Ali via petsc-users
> <[email protected]> wrote:
>
> Hi,
>
> I'm trying to solve the Helmholtz equation in 1D for x-rays which roughly
> like :
>
> u_dot = a*u_xx + h(t)*u
>
> I've already implemented the case where h(t) is always zero (free-space) in
> PETSc as per the last box on page 156 of the manual.
>
> For the time dependent version of the same the next step is to modify the
> RHSMatrix by adding h(t) via MatDiagonalSet&Insert. (With h(t)=0, the RHS
> matrix is just a (scaled) Laplacian matrix)
>
> The h(t) is related to x-ray refractive index at that time. These x-ray
> indices need to be (preferably) stored in matrix beforehand. Each column of
> the matrix would be the refractive index to be used in one iteration. Using
> hdf5 is something I'd like to do because I can make/view the grid using numpy
> in python and solve the PDE using PETSc in C.
>
> PS: I've seen past questions on this thread strongly discouraging users from
> storing dense matrices in hdf5 format.
>
> PPS : This 1D x-ray scattering problem is just a stepping stone to doing the
> same in 2D so if there's a better approach to adopt, I'm be open to new
> ideas.
>
> Thank You,
> Sajid Ali
> Applied Physics
> Northwestern University