[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