Vectors created from a DMDA have multi-dimensional information attached to 
them. When the vector is saved with an HDF5 viewer, this multi-dimensional 
information is saved in the HDF5 file.  When a vector created with a DMDA loads 
the HDF5 file, the multi-dimensional information is used for a successful load.

When a plain vector (obtained with VecCreate) loads from the HDF5 file, it does 
not have the concept of multidimensional information and thus, for some reason, 
works incorrectly. I would consider the current error output to be a bug; it 
should provide a more useful error message.

Note that for DMDA in parallel, the DMDA vector data is transformed to be 
stored in the natural multidimensional ordering on the disk. When it is read 
back in with a DMDA vector, the transformation is reversed to get the data back 
into PETSc's parallel ordering. So, in parallel, it would never make sense to 
store a DMDA vector with hdf5 and then read it back in with a "plain" vector 
since the plain vector does not know how to transform the data. 

Barry


> On Aug 9, 2024, at 1:11 AM, 王惊梦 <pentaerythro...@gmail.com> wrote:
> 
> Dear Barry,
> 
> Thank you for your quick reply, the problem has been solved.
> 
> I'm just still curious why when I use PETSC_COMM_SELF in PETSCVIEWER to load 
> a 50*50*50 vector, and the error happens that "Global size of array in file 
> is 2500(50*50), not 125000(50*50*50) as expected".
> 
> Best regards,
> Yingjie ZHOU
> 
> Barry Smith <bsm...@petsc.dev <mailto:bsm...@petsc.dev>> 于2024年8月9日周五 02:28写道:
>> 
>>   Try reading the vector back in with a vector created from the DM.
>> 
>> 
>> 
>>> On Aug 8, 2024, at 10:46 AM, 王惊梦 <pentaerythro...@gmail.com 
>>> <mailto:pentaerythro...@gmail.com>> wrote:
>>> 
>>> This Message Is From an External Sender
>>> This message came from outside your organization.
>>> Dear Sir or Madam,
>>> 
>>> I met a problem about loading data from hdf5 file. Attached is a simple 
>>> test program.
>>> 
>>> A introduction of the program is as follows:
>>> I create a 3d DMDA object(50*50*50), and create 2 global vectors x and y by 
>>> DMDA, then I write the vector x into file test.h5.
>>> When I try to load the vector y from test.h5, the error occurs that "Global 
>>> size of array in file is 2500, not 125000 as expected", but the size of the 
>>> array should be 125000 which I've checked in python.
>>> 
>>> Thank you for your help!
>>> 
>>> Best regards
>>> ZHOU Yingjie
>>> <test.c>
>> 

Reply via email to