Unfortunately PetscSFSetGraph/PetscSFGetGraph need custom bindings for Fortran and they have not been written. Shouldn't be difficult, but will take a little work/testing. I would probably make the array of PetscSFNode be a PetscInt array of length 2n (or of shape (2,n)) -- that's an equivalent memory representation to what we're using now.
Adrian Croucher <[email protected]> writes: > hi > > For the dual-porosity stuff I'm working on, I'm creating a modified > DMPlex. Looking at e.g. TS ex11.c (in the SplitFaces() routine), it > appears I am going to have to set up a PetscSF for the new DM (from what > I can gather, that is needed for managing parallel communication of > partition ghost cell values). > > The way I've set up the modified DMPlex, the partition ghost cells are > in the same locations as they were in the original single-porosity DM. > So I'm thinking I basically just have to copy the SF straight over from > the original DM. > > The routine DMGetPointSF() seems to work OK in Fortran, but I'm having a > bit of trouble with PetscSFGetGraph(). > > When I try to declare an array of type PetscSFNode for the iremote > parameter, it doesn't seem to know about PetscSFNode, even though I have > a 'use petsc' in my code, which normally gives access to everything. > > Also I'm not sure of exactly how to set up the ilocal and iremote array > parameters for this function in Fortran. How should they be declared- as > pointer arrays? > > - Adrian > > -- > Dr Adrian Croucher > Senior Research Fellow > Department of Engineering Science > University of Auckland, New Zealand > email: [email protected] > tel: +64 (0)9 923 4611
