[petsc-dev] calling DMPlexPointLocalRef() from fortran
Adrian Croucher
a.croucher at auckland.ac.nz
Thu Apr 3 23:41:25 CDT 2014
hi,
What is the right way to call DMPlexPointLocalRef() from fortran?
I have a test subroutine that I'm basically translating from the
CreatePartitionVec() function in the TS ex 33 example problem.
Near the end there's a loop which in C goes:
ierr = VecGetArray(*partition, &part);CHKERRQ(ierr);
for (c = cStart; c < cEnd; ++c) {
PetscScalar *p;
ierr = DMPlexPointLocalRef(*dmCell, c, part, &p);CHKERRQ(ierr);
p[0] = rank;
}
ierr = VecRestoreArray(*partition, &part);CHKERRQ(ierr);
So in fortran I've done this:
call VecGetArrayF90(partition, part, ierr); CHKERRQ(ierr)
do c = cStart, cEnd-1
call DMPlexPointLocalRef(cell_dm, c, part, p, ierr); CHKERRQ(ierr)
p(1) = rank
end do
call VecRestoreArrayF90(partition, part, ierr); CHKERRQ(ierr)
where I've previously declared
PetscScalar, pointer :: part(:)
PetscScalar, pointer:: p(:)
However the compiler complains:
Error: Rank mismatch in argument 'array' at (1) (scalar and rank-1)
It's not liking the 'part' argument, but I'm not sure how it's supposed
to be passed in. Any clues?
Cheers, Adrian
--
Dr Adrian Croucher
Department of Engineering Science
University of Auckland
New Zealand
tel 64-9-373-7599 ext 84611
More information about the petsc-dev
mailing list