[petsc-users] How to fetch right values of a local vector

袁煕 yuanxi at advancesoft.jp
Fri Feb 23 08:53:53 CST 2024


Hello,

I cannot fetch right values of a local vector after a second time calling
DMSetLocalSection.  My program runs like

====================
call PetscSectionSetup(section1,ierr)
call DMSetLocalSection(dm_mesh,section1,ierr)
call PetscSectionDestroy(section1,ierr)

call DMCreateGlobalVector(dm_mesh,vec_a,ierr)

call VecDestroy(vec_a,ierr)
call DMClearLocalVectors(dm_mesh, ierr);

call PetscSectionSetup(section2,ierr)
call DMSetLocalSection(dm_mesh,section2,ierr)

call DMCreateGlobalVector(dm_mesh,vec_a,ierr)
call DMGetLocalVector(dm_mesh,lvec,ierr);
call DMGlobalToLocal(dm_mesh,vec_a,INSERT_VALUES,lvec,ierr)
call VecGetArrayReadF90(lvec,tempv,ierr)
call VecGetArrayReadF90(vec_a,tempv1,ierr)
========================

In this program, I got two Fortran style arrays, *tempv* and *tempv1*, from
a Vec *vec_a*. When only 1 cpu is used, those two arrays should be
completely the same. Am I right? But I found there are differences as
follows:

*  In array *tempv*,  dofs newly introduced by section2 are zero valued.
Looks like those values are ignored by DMGlobalToLocal. But in array
*tempv1*, all dofs values are set correctly.

Did I do something wrong in the above code?

Much thanks for your help.

X. Yuan, Ph.D. in Solid Mechanics
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20240223/1a0cdf9e/attachment.html>


More information about the petsc-users mailing list