Actual source code: zdtf90.c

  1: #include <petsc/private/ftnimpl.h>
  2: #include <petscdt.h>

  4: #if PetscDefined(HAVE_FORTRAN_CAPS)
  5:   #define petscquadraturegetdata_     PETSCQUADRATUREGETDATA
  6:   #define petscquadraturerestoredata_ PETSCQUADRATURERESTOREDATA
  7:   #define petscquadraturesetdata_     PETSCQUADRATURESETDATA
  8: #elif !PetscDefined(HAVE_FORTRAN_UNDERSCORE)
  9:   #define petscquadraturegetdata_     petscquadraturegetdata
 10:   #define petscquadraturerestoredata_ petscquadraturerestoredata
 11:   #define petscquadraturesetdata_     petscquadraturesetdata
 12: #endif

 14: PETSC_EXTERN void petscquadraturegetdata_(PetscQuadrature *q, PetscInt *dim, PetscInt *Nc, PetscInt *npoints, F90Array1d *ptrP, F90Array1d *ptrW, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrp) PETSC_F90_2PTR_PROTO(ptrw))
 15: {
 16:   const PetscReal *points, *weights;
 17:   PetscInt         dim_, Nc_, npoints_;

 19:   CHKFORTRANNULLINTEGER(dim);
 20:   CHKFORTRANNULLINTEGER(Nc);
 21:   CHKFORTRANNULLINTEGER(npoints);
 22:   *ierr = PetscQuadratureGetData(*q, &dim_, &Nc_, &npoints_, &points, &weights);
 23:   if (*ierr) return;
 24:   if (dim) *dim = dim_;
 25:   if (Nc) *Nc = Nc_;
 26:   if (npoints) *npoints = npoints_;
 27:   if (!FORTRANNULLREALPOINTER(ptrP)) {
 28:     *ierr = F90Array1dCreate((void *)points, MPIU_REAL, 1, npoints_ * dim_, ptrP PETSC_F90_2PTR_PARAM(ptrp));
 29:     if (*ierr) return;
 30:   }
 31:   if (!FORTRANNULLREALPOINTER(ptrW)) {
 32:     *ierr = F90Array1dCreate((void *)weights, MPIU_REAL, 1, npoints_ * Nc_, ptrW PETSC_F90_2PTR_PARAM(ptrw));
 33:     if (*ierr) return;
 34:   }
 35:   *ierr = PETSC_SUCCESS;
 36: }

 38: PETSC_EXTERN void petscquadraturerestoredata_(PetscQuadrature *q, PetscInt *dim, PetscInt *Nc, PetscInt *npoints, F90Array1d *ptrP, F90Array1d *ptrW, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrp) PETSC_F90_2PTR_PROTO(ptrw))
 39: {
 40:   if (!FORTRANNULLREALPOINTER(ptrP)) {
 41:     *ierr = F90Array1dDestroy(ptrP, MPIU_REAL PETSC_F90_2PTR_PARAM(ptrp));
 42:     if (*ierr) return;
 43:   }
 44:   if (!FORTRANNULLREALPOINTER(ptrW)) {
 45:     *ierr = F90Array1dDestroy(ptrW, MPIU_REAL PETSC_F90_2PTR_PARAM(ptrw));
 46:     if (*ierr) return;
 47:   }
 48:   *ierr = PETSC_SUCCESS;
 49: }

 51: PETSC_EXTERN void petscquadraturesetdata_(PetscQuadrature *q, PetscInt *dim, PetscInt *Nc, PetscInt *npoints, F90Array1d *ptrP, F90Array1d *ptrW, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrp) PETSC_F90_2PTR_PROTO(ptrw))
 52: {
 53:   PetscReal *points, *weights;

 55:   *ierr = F90Array1dAccess(ptrP, MPIU_REAL, (void **)&points PETSC_F90_2PTR_PARAM(ptrp));
 56:   if (*ierr) return;
 57:   *ierr = F90Array1dAccess(ptrW, MPIU_REAL, (void **)&weights PETSC_F90_2PTR_PARAM(ptrw));
 58:   if (*ierr) return;
 59:   *ierr = PetscQuadratureSetData(*q, *dim, *Nc, *npoints, points, weights);
 60: }