On Mon, Oct 15, 2018 at 11:13 AM Yingjie Wu <[email protected]> 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 <[email protected]> 于2018年10月15日周一 下午10:52写道: > >> On Mon, Oct 15, 2018 at 10:42 AM Yingjie Wu <[email protected]> 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/>
