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: PetscErrorCode SlepcMagmaInit(void)
     39: {
     40:   PetscFunctionBegin;
     41:   if (!SlepcBeganMagma) {
     42:     PetscCallMAGMA(slepc_magma_init, NULL);
     43:     SlepcBeganMagma = PETSC_TRUE;
     44:     PetscCall(PetscRegisterFinalize(SlepcMagmaFinalize));
     45:   }
     46:   PetscFunctionReturn(PETSC_SUCCESS);
     47: }