Actual source code: slepcmagma.c

  1: /*
  2:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  3:    SLEPc - Scalable Library for Eigenvalue Problem Computations
  4:    Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain

  6:    This file is part of SLEPc.
  7:    SLEPc is distributed under a 2-clause BSD license (see LICENSE).
  8:    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  9: */

 11: #include <slepc/private/slepcimpl.h>
 12: #include <slepcmagma.h>

 14: static PetscBool SlepcBeganMagma = PETSC_FALSE;

 16: static void slepc_magma_finalize(void PETSC_UNUSED *unused, magma_int_t *ierr)
 17: {
 18:   (void)unused;
 19:   *ierr = magma_finalize();
 20:   return;
 21: }

 23: static PetscErrorCode SlepcMagmaFinalize(void)
 24: {
 25:   PetscFunctionBegin;
 26:   SlepcBeganMagma = PETSC_FALSE;
 27:   PetscCallMAGMA(slepc_magma_finalize, NULL);
 28:   PetscFunctionReturn(PETSC_SUCCESS);
 29: }

 31: static void slepc_magma_init(void PETSC_UNUSED *unused, magma_int_t *ierr)
 32: {
 33:   (void)unused;
 34:   *ierr = magma_init();
 35:   return;
 36: }

 38: /*@
 39:    SlepcMagmaInit - A helper function to cleanly initialize MAGMA from within SLEPc
 40:    when needed.

 42:    Logically Collective

 44:    Level: developer

 46: .seealso: `SlepcInitialize()`
 47: @*/
 48: PetscErrorCode SlepcMagmaInit(void)
 49: {
 50:   PetscFunctionBegin;
 51:   if (!SlepcBeganMagma) {
 52:     PetscCallMAGMA(slepc_magma_init, NULL);
 53:     SlepcBeganMagma = PETSC_TRUE;
 54:     PetscCall(PetscRegisterFinalize(SlepcMagmaFinalize));
 55:   }
 56:   PetscFunctionReturn(PETSC_SUCCESS);
 57: }