[petsc-users] Some Problems in Modifying Parallel Programs

Yingjie Wu yjwu16 at gmail.com
Mon Oct 15 11:03:03 CDT 2018


Thanks,Matt

I'm sorry I didn't describe the problem clearly.
I'm still wondering how, although VecLoad supports parallel vector reading,
how can I guarantee that the local vector on the processor corresponds to
the DM's IS?
For example, when in FormInitialGuess, I want to make sure that the array
VecGetArray() obtained by the local vector(Vectors read from binary files)
and the array  DMGlobalToLocal () DMVecGetArray () obtained by the DM
belong to the same processor, so that some errors in the mpi can be avoided.
Thanks,
Yingjie

Matthew Knepley <knepley at gmail.com> 于2018年10月15日周一 下午11:32写道:

> On Mon, Oct 15, 2018 at 11:13 AM Yingjie Wu <yjwu16 at gmail.com> wrote:
>
>> Thank you very much, Matt.
>>
>> My problem is actually a two-dimensional problem, and the matrix in my
>> binary file is actually a two-dimensional array, each point corresponding
>> to a value on the two-dimensional grid.
>>
>
> These are still vectors. Vec store fields, which gives values to points on
> your grid. Matrices map between states, so between vectors.
>
>
>> Your suggestion is very useful to me. I can try to convert the matrix
>> binary file into a vector binary file to give program an initial value. So
>> what I should do is:
>> 1. establish parallel vectors.
>>  2. reads data from binary files to vectors. (VecLoad())
>> 3. use VecGetArray() in FormInitialGuess() to use vector elements to give
>> the initial values of the field variables.
>> I know DM can support parallel computing (domain decomposition). How can
>> I ensure that the part of the vector built on each processor corresponds to
>> the index of DM object? (Cause my field variables are established by
>> DMDACreate2d,  and I want to assign initial values to field variables using
>> read vectors )
>>
>
> Yes. Many times you will want to VecLoad, then DMGlobalToLocal() to get
> ghosted vectors, then DMVecGetArray() to get ghosted arrays.
>
>    Matt
>
>
>>
>> Thanks,
>> Yingjie
>>
>> Matthew Knepley <knepley at gmail.com> 于2018年10月15日周一 下午10:52写道:
>>
>>> On Mon, Oct 15, 2018 at 10:42 AM Yingjie Wu <yjwu16 at gmail.com> wrote:
>>>
>>>> Dear Petsc developer:
>>>> Hi,
>>>> Thank you very much for your previous reply.
>>>> I recently wanted to modify my program to parallel version, and
>>>> encountered some problems in modifying it.
>>>> 1. There are functions (read matrix) in the program that reads
>>>> files,will they affect my parallelism?
>>>>
>>>
>>> No, MatLoad works in parallel. This will work unchanged if you want the
>>> default layout. If you want a special partition,
>>> you must call MatSetSizes() after MatCreate().
>>>
>>>
>>>> The codes are as follows:
>>>>
>>>> ierr = PetscViewerBinaryOpen (PETSC_COMM_WORLD, file, FILE_MODE_READ,
>>>> &viewer); CHKERRQ (ierr);
>>>> ierr = MatCreate (PETSC_COMM_WORLD, &A1); CHKERRQ (ierr);
>>>> ierr = MatSetFromOptions (A1); CHKERRQ (ierr);
>>>> ierr = MatCreate (PETSC_COMM_WORLD, &A2); CHKERRQ (ierr);
>>>> ierr = MatSetFromOptions (A2); CHKERRQ (ierr);
>>>> ierr = MatLoad (A1, viewer); CHKERRQ (ierr);
>>>> ierr = MatLoad (A2, viewer); CHKERRQ (ierr);
>>>> ierr = PetscViewerDestroy (&viewer); CHKERRQ (ierr);
>>>>
>>>> I read two matrix information from a binary file and wanted to use it
>>>> on each processor (in fact, my goal was to use these two matrices to give
>>>> initial values to the two field variables). The program can run in serial
>>>> time. Now I want to change it to parallel program. What do I need to
>>>> modify?
>>>> 2. Following the last question, I used the following code in giving
>>>> initial value procedure FormInitialGuess():
>>>>
>>>> ierr = MatSeqAIJGetArray (A1, &initial_phi1); CHKERRQ (ierr);
>>>>
>>>> ierr = MatSeqAIJGetArray (A2, &initial_phi2); CHKERRQ (ierr);
>>>>
>>>>
>>>> I found this function on manualpages, and I felt that it could fulfill
>>>> my need to represent the elements of the matrix in arrays to give field
>>>> variables an initial value in each grid. The matrix A1 and A2 above are
>>>> actually the matrix information that was read from the file before. Now I
>>>> want to modify it as a parallel program. How do I use matrix information to
>>>> give initial values in parallel? (In program, field variables are
>>>> implemented through DM because parallel computing and Ghost Value are
>>>> supported)
>>>>
>>>
>>> I do not understand the use of matrices to initialize field values.
>>> Usually field values are stored on Vec objects, and this is
>>> the philosophy of DM objects.
>>>
>>>   Thanks,
>>>
>>>      Matt
>>>
>>>
>>>> Thanks,
>>>> Yingjie
>>>>
>>>
>>>
>>> --
>>> 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/>
>>>
>>
>
> --
> 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/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181016/afbc59e2/attachment.html>


More information about the petsc-users mailing list