Subversion Repositories slepc-dev

Rev

Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
986 slepc 1
/*
2
  This file contains the Fortran version of SlepcInitialize().
3
*/
4
 
5
#include "zpetsc.h"
6
#include "slepc.h"
7
#include "slepcst.h"
8
#include "slepceps.h"
1375 slepc 9
#include "slepcsvd.h"
10
#include "slepcip.h"
986 slepc 11
 
12
extern PetscTruth SlepcBeganPetsc;
13
 
14
static PetscTruth SlepcInitializeCalled=PETSC_FALSE;
15
 
16
#ifdef PETSC_HAVE_FORTRAN_CAPS
17
#define petscinitialize_              PETSCINITIALIZE
18
#define slepcinitialize_              SLEPCINITIALIZE
19
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
20
#define petscinitialize_              petscinitialize
21
#define slepcinitialize_              slepcinitialize
22
#endif
23
 
24
EXTERN_C_BEGIN
1021 slepc 25
extern void PETSC_STDCALL petscinitialize_(CHAR filename PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len));
986 slepc 26
EXTERN_C_END
27
 
28
#if defined(PETSC_USE_DYNAMIC_LIBRARIES)
1363 slepc 29
extern PetscDLLibrary DLLibrariesLoaded;
986 slepc 30
#endif
31
 
32
EXTERN_C_BEGIN
33
/*
34
    SlepcInitialize - Version called from Fortran.
35
 
36
    Notes:
37
    Since this routine is called from Fortran it does not return error codes.
38
*/
39
void PETSC_STDCALL slepcinitialize_(CHAR filename PETSC_MIXED_LEN(len),int *ierr PETSC_END_LEN(len))
40
{
41
#if defined(PETSC_USE_DYNAMIC_LIBRARIES)
42
  char       libs[PETSC_MAX_PATH_LEN],dlib[PETSC_MAX_PATH_LEN];
43
  PetscTruth found;
44
#endif
45
  *ierr = 1;
46
  if (SlepcInitializeCalled) {*ierr = 0; return;}
47
 
48
  if (!PetscInitializeCalled) {
1021 slepc 49
#if defined(PETSC_HAVE_FORTRAN_MIXED_STR_ARG)
986 slepc 50
    petscinitialize_(filename,len,ierr);
51
#else
52
    petscinitialize_(filename,ierr,len);
53
#endif
1021 slepc 54
    if (*ierr) { (*PetscErrorPrintf)("SlepcInitialize:PetscInitialize failed");return;}
986 slepc 55
    SlepcBeganPetsc = PETSC_TRUE;
56
  }
57
 
58
#if defined(PETSC_USE_DYNAMIC_LIBRARIES)
59
  *ierr = PetscStrcpy(libs,SLEPC_LIB_DIR);if (*ierr) return;
60
  *ierr = PetscStrcat(libs,"/libslepc");if (*ierr) return;
61
  *ierr = PetscDLLibraryRetrieve(PETSC_COMM_WORLD,libs,dlib,1024,&found);if (*ierr) return;
62
  if (found) {
63
    *ierr = PetscDLLibraryAppend(PETSC_COMM_WORLD,&DLLibrariesLoaded,libs);if (*ierr) return;
64
  } else {
65
    *ierr = 1;
66
    (*PetscErrorPrintf)("Unable to locate SLEPc dynamic library %s \n You cannot move the dynamic libraries!\n or remove USE_DYNAMIC_LIBRARIES from ${PETSC_DIR}/bmake/$PETSC_ARCH/petscconf.h\n and rebuild libraries before moving\n",libs);
67
    return;
68
  }
69
#else
1021 slepc 70
  *ierr = STInitializePackage(PETSC_NULL); if (*ierr) { (*PetscErrorPrintf)("SlepcInitialize:Initializing ST package");return;}
71
  *ierr = EPSInitializePackage(PETSC_NULL); if (*ierr) { (*PetscErrorPrintf)("SlepcInitialize:Initializing EPS package");return;}
1375 slepc 72
  *ierr = SVDInitializePackage(PETSC_NULL); if (*ierr) { (*PetscErrorPrintf)("SlepcInitialize:Initializing SVD package");return;}
73
  *ierr = IPInitializePackage(PETSC_NULL); if (*ierr) { (*PetscErrorPrintf)("SlepcInitialize:Initializing IP package");return;}
986 slepc 74
#endif
75
 
76
  SlepcInitializeCalled = PETSC_TRUE;
1038 slepc 77
  *ierr = PetscInfo(0,"SLEPc successfully started from Fortran\n");
1037 slepc 78
  if (*ierr) { (*PetscErrorPrintf)("SlepcInitialize:Calling PetscInfo()");return;}
986 slepc 79
 
80
}  
81
 
82
EXTERN_C_END