Actual source code: zstart.c
slepc-3.21.2 2024-09-25
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: */
10: /*
11: This file contains the Fortran version of SlepcInitialize()
12: */
14: #include <slepc/private/slepcimpl.h>
15: #include <petsc/private/fortranimpl.h>
17: #if defined(PETSC_HAVE_FORTRAN_CAPS)
18: #define petscinitializef_ PETSCINITIALIZEF
19: #define petscfinalize_ PETSCFINALIZE
20: #define slepcinitializef_ SLEPCINITIALIZEF
21: #define slepcfinalize_ SLEPCFINALIZE
22: #define slepcinitializefortran_ SLEPCINITIALIZEFORTRAN
23: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
24: #define petscinitializef_ petscinitializef
25: #define petscfinalize_ petscfinalize
26: #define slepcinitializef_ slepcinitializef
27: #define slepcfinalize_ slepcfinalize
28: #define slepcinitializefortran_ slepcinitializefortran
29: #endif
31: SLEPC_EXTERN void petscinitializef_(char *filename,char* help,PetscBool *readarguments,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len,PETSC_FORTRAN_CHARLEN_T helplen);
32: SLEPC_EXTERN void petscfinalize_(PetscErrorCode *ierr);
34: /*
35: SlepcInitialize - Version called from Fortran.
37: Notes:
38: Since this routine is called from Fortran it does not return error codes.
39: */
40: SLEPC_EXTERN void slepcinitializef_(char *filename,char* help,PetscBool *readarguments,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len,PETSC_FORTRAN_CHARLEN_T helplen)
41: {
42: PetscBool flg;
44: if (SlepcInitializeCalled) { *ierr = PETSC_SUCCESS; return; }
46: *ierr = PetscInitialized(&flg);
47: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcInitialize:PetscInitialized failed");return; }
48: if (!flg) {
49: petscinitializef_(filename,help,readarguments,ierr,len,helplen);
50: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcInitialize:PetscInitialize failed");return; }
51: SlepcBeganPetsc = PETSC_TRUE;
52: }
54: *ierr = SlepcCitationsInitialize();
55: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcInitialize:SlepcCitationsInitialize()\n");return; }
57: *ierr = SlepcInitialize_DynamicLibraries();
58: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcInitialize:Initializing dynamic libraries\n");return; }
60: SlepcInitializeCalled = PETSC_TRUE;
61: SlepcFinalizeCalled = PETSC_FALSE;
62: *ierr = PetscInfo(0,"SLEPc successfully started from Fortran\n");
63: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcInitialize:Calling PetscInfo()");return; }
64: }
66: SLEPC_EXTERN void slepcfinalize_(PetscErrorCode *ierr)
67: {
68: if (PetscUnlikely(!SlepcInitializeCalled)) {
69: (void)(*PetscErrorPrintf)("SlepcInitialize() must be called before SlepcFinalize()");
70: return;
71: }
73: *ierr = PetscInfo(0,"SlepcFinalize() called from Fortran\n");
74: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcFinalize:Calling PetscInfo()");return; }
75: *ierr = PETSC_SUCCESS;
76: if (SlepcBeganPetsc) {
77: petscfinalize_(ierr);
78: if (*ierr) { (void)(*PetscErrorPrintf)("SlepcFinalize:Calling petscfinalize_()");return; }
79: SlepcBeganPetsc = PETSC_FALSE;
80: }
81: SlepcInitializeCalled = PETSC_FALSE;
82: SlepcFinalizeCalled = PETSC_TRUE;
83: }
85: SLEPC_EXTERN void slepcinitializefortran_(PetscErrorCode *info)
86: {
87: *info = SlepcInitializeFortran();
88: }