Actual source code: math2opusutils.cu

  1: #include <petsc/private/matimpl.h>
  2: #include <petsc/private/vecimpl.h>
  3: #include <petscsf.h>
  4: #if PetscDefined(HAVE_CUDA)
  5:   #include <thrust/for_each.h>
  6:   #include <thrust/device_vector.h>
  7:   #include <thrust/execution_policy.h>
  8: #endif

 10: PETSC_INTERN PetscErrorCode MatDenseGetH2OpusStridedSF(Mat A, PetscSF h2sf, PetscSF *osf)
 11: {
 12:   PetscSF asf;

 14:   PetscFunctionBegin;
 17:   PetscAssertPointer(osf, 3);
 18:   PetscCall(PetscObjectQuery((PetscObject)A, "_math2opus_stridedsf", (PetscObject *)&asf));
 19:   if (!asf) {
 20:     PetscInt lda;

 22:     PetscCall(MatDenseGetLDA(A, &lda));
 23:     PetscCall(PetscSFCreateStridedSF(h2sf, A->cmap->N, lda, PETSC_DECIDE, &asf));
 24:     PetscCall(PetscObjectCompose((PetscObject)A, "_math2opus_stridedsf", (PetscObject)asf));
 25:     PetscCall(PetscObjectDereference((PetscObject)asf));
 26:   }
 27:   *osf = asf;
 28:   PetscFunctionReturn(PETSC_SUCCESS);
 29: }