! ! Test Fortran binding of sort routines ! #include "petsc/finclude/petsc.h" module ex49fmodule use petsc implicit none type uctx PetscInt myint end type uctx contains subroutine CompareIntegers(a, b, ctx, res) implicit none PetscInt :: a, b type(uctx) :: ctx integer :: res if (a < b) then res = -1 else if (a == b) then res = 0 else res = 1 end if end subroutine CompareIntegers end module ex49fmodule program main use ex49fmodule implicit none PetscErrorCode ierr PetscCount, parameter:: iN = 3 PetscInt, parameter :: N = 3 PetscInt x(N), x1(N), y(N), z(N) PetscMPIInt mx(N), my(N) PetscScalar s(N) PetscReal r(N) PetscMPIInt, parameter:: two = 2, five = 5, seven = 7 type(uctx):: ctx PetscInt i PetscSizeT sizeofentry PetscCallA(PetscInitialize(ierr)) x = [3, 2, 1] x1 = [3, 2, 1] y = [6, 5, 4] z = [3, 5, 2] mx = [five, seven, two] my = [five, seven, two] s = [1.0, 2.0, 3.0] r = [1.0, 2.0, 3.0] #if defined(PETSC_USE_64BIT_INDICES) sizeofentry = 8 #else sizeofentry = 4 #endif ctx%myint = 1 PetscCallA(PetscSortInt(iN, x, ierr)) PetscCallA(PetscTimSort(N, x1, sizeofentry, CompareIntegers, ctx, ierr)) do i = 1, N PetscCheckA(x1(i) == x(i), PETSC_COMM_SELF, PETSC_ERR_PLIB, 'PetscTimSort and PetscSortInt arrays did not match') end do PetscCallA(PetscSortIntWithArray(iN, y, x, ierr)) PetscCallA(PetscSortIntWithArrayPair(iN, x, y, z, ierr)) PetscCallA(PetscSortMPIInt(iN, mx, ierr)) PetscCallA(PetscSortMPIIntWithArray(iN, mx, my, ierr)) PetscCallA(PetscSortMPIIntWithIntArray(iN, mx, y, ierr)) PetscCallA(PetscSortIntWithScalarArray(iN, x, s, ierr)) PetscCallA(PetscSortReal(iN, r, ierr)) PetscCallA(PetscSortRealWithArrayInt(iN, r, x, ierr)) PetscCallA(PetscFinalize(ierr)) end program main !/*TEST ! ! test: ! output_file: output/empty.out ! !TEST*/