interface
  subroutine DMSwarmGetField(dm, fieldname, blocksize, dtype, data, ierr)
    use, intrinsic :: ISO_C_binding
    use petscsys, only: ePetscDataType
    import tDM
    DM dm
    character(len=*) :: fieldname
    PetscInt blocksize
    PetscDataType dtype
    PetscScalar, pointer :: data(:)
    PetscErrorCode ierr
  end subroutine

  subroutine DMSwarmRestoreField(dm, fieldname, blocksize, dtype, data, ierr)
    use, intrinsic :: ISO_C_binding
    use petscsys, only: ePetscDataType
    import tDM
    DM dm
    character(len=*) :: fieldname
    PetscInt blocksize
    PetscDataType dtype
    PetscScalar, pointer :: data(:)
    PetscErrorCode ierr
  end subroutine
end interface

#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
!DEC$ ATTRIBUTES DLLEXPORT::DMSwarmGetField
!DEC$ ATTRIBUTES DLLEXPORT::DMSwarmRestoreField
#endif
