[petsc-users] Error: DM global to natural SF was not created when DMSetUseNatural has already been called
Danyang Su
danyang.su at gmail.com
Wed Nov 28 22:50:02 CST 2018
Hi Matthew,
Thanks for pointing out. The problem is that vec_natural is always zero
after calling DMPlexGlobalToNaturalEnd. I am afraid something is missing
in my code.
Thanks,
Danyang
On 18-11-28 07:34 PM, Matthew Knepley wrote:
> On Wed, Nov 28, 2018 at 8:58 PM Danyang Su via petsc-users
> <petsc-users at mcs.anl.gov <mailto:petsc-users at mcs.anl.gov>> wrote:
>
> Dear All,
>
> I got the following error when using DMPlexGlobalToNatural function
> using 1 processor.
>
>
> We do not create that mapping on 1 proc because the orderings are the
> same. Reordering happens
> when we redistribute.
>
> Thanks,
>
> Matt
>
> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Object is in wrong state
> [0]PETSC ERROR: DM global to natural SF was not created.
> You must call DMSetUseNatural() before DMPlexDistribute().
>
> [0]PETSC ERROR: See
> http://www.mcs.anl.gov/petsc/documentation/faq.html
> for trouble shooting.
> [0]PETSC ERROR: Petsc Release Version 3.10.2, Oct, 09, 2018
>
> The same code does not return error when using more than 2
> processors,
> however, the vec_natural is always zero after calling
> DMPlexGlobalToNaturalEnd.
>
>
> DMSetUseNatural() has already been used before calling
> DMPlexDistribute.
> The code section looks like below
>
> if (rank == 0) then
>
> call DMPlexCreateFromCellList(Petsc_Comm_World,ndim,0,0, &
> num_nodes_per_cell, &
> Petsc_False,dmplex_cells,ndim, & !use
> Petsc_True
> to create intermediate mesh entities (faces, edges),
> dmplex_verts,dmda_flow%da,ierr)
> CHKERRQ(ierr)
>
> end if
>
> !c Set the flag for creating a mapping to the natural order on
> distribution
> call DMSetUseNatural(dmda_flow%da,PETSC_TRUE,ierr)
> CHKERRQ(ierr)
>
> !c distribute mesh over processes
> call DMPlexDistribute(dmda_flow%da,stencil_width, &
> PETSC_NULL_SF, distributedMesh,ierr)
>
> CHKERRQ(ierr)
>
> !c destroy original global mesh after distribution
> if (distributedMesh /= PETSC_NULL_DM) then
> call DMDestroy(dmda_flow%da,ierr)
> CHKERRQ(ierr)
> !c set the global mesh as distributed mesh
> dmda_flow%da = distributedMesh
> end if
>
> ...
>
> call DMPlexCreateSection(dmda_flow%da,dmda_flow%dim, &
> numFields,pNumComp,pNumDof, &
> numBC,pBcField, &
> pBcCompIS,pBcPointIS, &
> PETSC_NULL_IS, &
> section,ierr)
> CHKERRQ(ierr)
>
> call PetscSectionSetFieldName(section,0,'flow',ierr)
> CHKERRQ(ierr)
>
>
> call DMSetSection(dmda_flow%da,section,ierr)
> CHKERRQ(ierr)
>
> call PetscSectionDestroy(section,ierr)
> CHKERRQ(ierr)
>
> call DMSetUp(dmda_flow%da,ierr)
> CHKERRQ(ierr)
>
> ...
>
>
> !c global - natural order
>
> call DMCreateLocalVector(dmda_flow%da,vec_loc,ierr)
> CHKERRQ(ierr)
>
> call DMCreateGlobalVector(dmda_flow%da,vec_global,ierr)
> CHKERRQ(ierr)
>
> call DMCreateGlobalVector(dmda_flow%da,vec_natural,ierr)
> CHKERRQ(ierr)
>
> !c zero entries
> call VecZeroEntries(vec_loc,ierr)
> CHKERRQ(ierr)
>
> !Get a pointer to vector data when you need access to the array
> call VecGetArrayF90(vec_loc,vecpointer,ierr)
> CHKERRQ(ierr)
>
> do inode = 1, num_nodes
> vecpointer(inode) = node_idx_lg2pg(inode) !vector value
> using
> PETSc global order, negative ghost index has been reversed
> end do
>
> !Restore the vector when you no longer need access to the array
> call VecRestoreArrayF90(vec_loc,vecpointer,ierr)
> CHKERRQ(ierr)
>
> !Insert values into global vector
> call DMLocalToGlobalBegin(dmda_flow%da,vec_loc,INSERT_VALUES, &
> vec_global,ierr)
> CHKERRQ(ierr)
>
> call DMLocalToGlobalEnd(dmda_flow%da,vec_loc,INSERT_VALUES, &
> vec_global,ierr)
> CHKERRQ(ierr)
>
>
> !c global to natural ordering
> call DMPlexGlobalToNaturalBegin(dmda_flow%da,vec_global, &
> vec_natural,ierr)
> CHKERRQ(ierr)
>
> call DMPlexGlobalToNaturalEnd(dmda_flow%da,vec_global, &
> vec_natural,ierr)
> CHKERRQ(ierr)
>
>
> Is there anything missing in the code that
> DMPlexGlobalToNatural... does
> not work properly?
>
> Thanks,
>
> Danyang
>
>
>
> --
> 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/%7Eknepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181128/33143874/attachment.html>
More information about the petsc-users
mailing list