> On Apr 29, 2018, at 6:19 AM, Patrick Sanan <[email protected]> wrote:
>
> For functions like this (only for one impl), should this new check be
> considered new best practices (as opposed to the composition approach,
> defining things with names like DMDASetUniformCoordinates_DMDA())? It seems
> like less boilerplate, as well as avoiding a function on the stack (and the
> check itself if it's turned off in optimized mode).
No, it is just error checking for incorrectly written code that is too much
hassle to change.
Barry
>
> 2018-04-28 22:38 GMT+02:00 Smith, Barry F. <[email protected]>:
>
> Added runtime error checking for such incorrect calls in
> barry/dmda-calls-type-check
>
>
> > On Apr 28, 2018, at 9:19 AM, Matthew Knepley <[email protected]> wrote:
> >
> > On Sat, Apr 28, 2018 at 2:08 AM, Danyang Su <[email protected]> wrote:
> > Hi All,
> >
> > I use DMPlex and need to get coordinates back after distribution. However,
> > I always get segmentation violation in getting coords values in the
> > following codes if using multiple processors. If only one processor is
> > used, it works fine.
> >
> > For each processors, the off value starts from 0 which looks good. I also
> > tried 0-based index, which gives the same error. Would any one help to
> > check what is wrong here?
> >
> > idof 1 off 0
> > idof 2 off 0
> > idof 1 off 2
> > idof 2 off 2
> > idof 1 off 4
> > idof 2 off 4
> > idof 1 off 6
> > idof 2 off 6
> > idof 1 off 8
> > idof 2 off 8
> >
> >
> > DM :: distributedMesh, cda
> > Vec :: gc
> > PetscScalar, pointer :: coords(:)
> > PetscSection :: cs
> >
> > ...
> >
> > call DMGetCoordinatesLocal(dmda_flow%da,gc,ierr)
> > CHKERRQ(ierr)
> >
> > call DMGetCoordinateDM(dmda_flow%da,cda,ierr)
> > CHKERRQ(ierr)
> >
> > call DMGetDefaultSection(cda,cs,ierr)
> > CHKERRQ(ierr)
> >
> > call PetscSectionGetChart(cs,istart,iend,ierr)
> > CHKERRQ(ierr)
> >
> > !c get coordinates array
> > call DMDAVecGetArrayF90(cda,gc,coords,ierr)
> >
> > You cannot call DMDA function if you have a DMPlex. You jsut call
> > VecGetArrayF90()
> >
> > Matt
> >
> > CHKERRQ(ierr)
> >
> > do ipoint = istart, iend-1
> >
> > call PetscSectionGetDof(cs,ipoint,dof,ierr)
> > CHKERRQ(ierr)
> >
> > call PetscSectionGetOffset(cs,ipoint,off,ierr)
> > CHKERRQ(ierr)
> >
> > inode = ipoint-istart+1
> >
> > if (cell_coords == coords_xyz) then
> > nodes(inode)%x = coords(off+1)
> > nodes(inode)%y = coords(off+2)
> > nodes(inode)%z = coords(off+3)
> > else if (cell_coords == coords_xy) then
> > nodes(inode)%x = coords(off+1)
> > nodes(inode)%y = coords(off+2)
> > nodes(inode)%z = 0.0d0
> > else if (cell_coords == coords_yz) then
> > nodes(inode)%x = 0.0d0
> > nodes(inode)%y = coords(off+1)
> > nodes(inode)%z = coords(off+2)
> > else if (cell_coords ==coords_xz) then
> > nodes(inode)%x = coords(off+1)
> > nodes(inode)%y = 0.0d0
> > nodes(inode)%z = coords(off+2)
> > end if
> > end do
> >
> > call DMDAVecRestoreArrayF90(cda,gc,coords,ierr)
> > CHKERRQ(ierr)
> >
> > 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/
>
>