Actual source code: zvecnestf.c

  1: #include <petsc/private/fortranimpl.h>
  2: #include <petscvec.h>

  4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
  5:   #define vecnestgetsubvecs_ VECNESTGETSUBVECS
  6:   #define vecnestsetsubvecs_ VECNESTSETSUBVECS
  7:   #define veccreatenest_     VECCREATENEST
  8: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
  9:   #define vecnestgetsubvecs_ vecnestgetsubvecs
 10:   #define vecnestsetsubvecs_ vecnestsetsubvecs
 11:   #define veccreatenest_     veccreatenest
 12: #endif

 14: PETSC_EXTERN void vecnestgetsubvecs_(Vec *X, PetscInt *N, Vec *sx, PetscErrorCode *ierr)
 15: {
 16:   Vec     *tsx;
 17:   PetscInt i, n;
 18:   CHKFORTRANNULLINTEGER(N);
 19:   *ierr = VecNestGetSubVecs(*X, &n, &tsx);
 20:   if (*ierr) return;
 21:   if (N) *N = n;
 22:   CHKFORTRANNULLOBJECT(sx);
 23:   if (sx) {
 24:     for (i = 0; i < n; i++) sx[i] = tsx[i];
 25:   }
 26: }

 28: PETSC_EXTERN void vecnestsetsubvecs_(Vec *X, PetscInt *N, PetscInt *idxm, Vec *sx, PetscErrorCode *ierr)
 29: {
 30:   *ierr = VecNestSetSubVecs(*X, *N, idxm, sx);
 31: }

 33: PETSC_EXTERN void veccreatenest_(MPI_Fint *comm, PetscInt *nb, IS is[], Vec x[], Vec *Y, int *ierr)
 34: {
 35:   CHKFORTRANNULLOBJECT(is);
 36:   CHKFORTRANNULLOBJECT(x);
 37:   *ierr = VecCreateNest(MPI_Comm_f2c(*comm), *nb, is, x, Y);
 38: }