Actual source code: zswarmf90.c

  1: #include <petsc/private/fortranimpl.h>
  2: #include <petscdmswarm.h>
  3: #include <petsc/private/f90impl.h>

  5: #if defined(PETSC_HAVE_FORTRAN_CAPS)
  6:   #define dmswarmgetfield_     DMSWARMGETFIELD
  7:   #define dmswarmrestorefield_ DMSWARMRESTOREFIELD
  8: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && !defined(FORTRANDOUBLEUNDERSCORE)
  9:   #define dmswarmgetfield_     dmswarmgetfield
 10:   #define dmswarmrestorefield_ dmswarmerstorefield
 11: #endif

 13: /* Definitions of Fortran Wrapper routines */

 15: PETSC_EXTERN void dmswarmgetfield_(DM *dm, char *name, PetscInt *blocksize, PetscDataType *type, F90Array1d *ptr, int *ierr PETSC_F90_2PTR_PROTO(ptrd), PETSC_FORTRAN_CHARLEN_T lenN)
 16: {
 17:   PetscScalar *v;
 18:   PetscInt     n;
 19:   char        *fieldname;

 21:   FIXCHAR(name, lenN, fieldname);
 22:   *ierr = DMSwarmGetSize(*dm, &n);
 23:   if (*ierr) return;
 24:   *ierr = DMSwarmGetField(*dm, fieldname, blocksize, type, (void **)&v);
 25:   if (*ierr) return;
 26:   *ierr = F90Array1dCreate((void *)v, MPIU_SCALAR, 1, n, ptr PETSC_F90_2PTR_PARAM(ptrd));
 27:   FREECHAR(name, fieldname);
 28: }

 30: PETSC_EXTERN void dmswarmrestorefield_(DM *dm, char *name, PetscInt *blocksize, PetscDataType *type, F90Array1d *ptr, int *ierr PETSC_F90_2PTR_PROTO(ptrd), PETSC_FORTRAN_CHARLEN_T lenN)
 31: {
 32:   PetscScalar *v;
 33:   char        *fieldname;

 35:   FIXCHAR(name, lenN, fieldname);
 36:   *ierr = F90Array1dAccess(ptr, MPIU_SCALAR, (void **)&v PETSC_F90_2PTR_PARAM(ptrd));
 37:   if (*ierr) return;
 38:   *ierr = DMSwarmRestoreField(*dm, fieldname, blocksize, type, (void **)&v);
 39:   if (*ierr) return;
 40:   *ierr = F90Array1dDestroy(ptr, MPIU_SCALAR PETSC_F90_2PTR_PARAM(ptrd));
 41:   FREECHAR(name, fieldname);
 42: }