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: }