Actual source code: ztao_start.c

  1: /*$Id$*/

  3: /*
  4:   This file contains the Fortran version of TaoInitialize().
  5: */

  7: /*
  8:     This is to prevent the Cray T3D version of MPI (University of Edinburgh)
  9:   from redefining MPI_INIT(). They put this in to detect errors in C code,
 10:   but here we do want to be calling the Fortran version from a C subroutine. 
 11: */
 12: #define T3DMPI_FORTRAN
 13: #define T3EMPI_FORTRAN

 15: #include "zpetsc.h" 
 16: #include "tao_solver.h"


 21: // static TaoTruth TaoInitializeCalled=TAO_FALSE;

 23: #if defined(PETSC_HAVE_NAGF90)
 24: #define iargc_  f90_unix_MP_iargc
 25: #define getarg_ f90_unix_MP_getarg
 26: #endif

 28: #ifdef PETSC_HAVE_FORTRAN_CAPS
 29: #define petscinitialize_              PETSCINITIALIZE
 30: #define taoinitialize_                TAOINITIALIZE
 31: #define iargc_                        IARGC
 32: #define getarg_                       GETARG
 33: #if defined(PARCH_win32)
 34: #define IARGC                         NARGS
 35: #endif

 37: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
 38: #define petscinitialize_              petscinitialize
 39: #define taoinitialize_                taoinitialize
 40: /*
 41:     HP-UX does not have Fortran underscore but iargc and getarg 
 42:   do have underscores????
 43: */
 44: #if !defined(PETSC_HAVE_FORTRAN_IARGC_UNDERSCORE)
 45: #define iargc_                        iargc
 46: #define getarg_                       getarg
 47: #endif

 49: #endif


 54: #if defined(PETSC_USE_FORTRAN_MIXED_STR_ARG)
 56: #else
 58: #endif

 60: /*
 61:      Different Fortran compilers handle command lines in different ways
 62: */
 63: #if defined(PARCH_win32)
 64: /*
 67: */

 71: #else
 74: /*
 75:       The Cray T3D/T3E use the PXFGETARG() function
 76: */
 77: #if defined(PETSC_HAVE_PXFGETARG)
 79: #endif
 80: #endif


 86: /*
 87:     TaoInitialize - Version called from Fortran.

 89:     Notes:
 90:     Since this routine is called from Fortran it does not return error codes.
 91: */
 92: void PETSC_STDCALL taoinitialize_(CHAR filename PETSC_MIXED_LEN(len),int *ierr PETSC_END_LEN(len))
 93: {
 94:   *1;
 95:   if (TaoInitializeCalled) {*0; return;}

 97:   if (!PetscInitializeCalled) {
 98: #if defined(PETSC_USE_FORTRAN_MIXED_STR_ARG)
 99:     petscinitialize_(filename,len,ierr);
100: #else
101:     petscinitialize_(filename,ierr,len);
102: #endif
103:     if (*ierr) return;
104:     TaoBeganPetsc = TAO_TRUE;
105:   }

107:   /* We currently register just one cookie for use by TAO solvers; in
108:      the future we may need additional ones */
109:   TAO_COOKIE = 0;
110:   *ierr=PetscLogClassRegister(&TAO_COOKIE,"TAO Solver");

112:   *TaoRegisterEvents(); 

114:   *TaoStandardRegisterAll();

116:   TaoInitializeCalled++;
117:   *PetscInfo(0,"TaoInitialize:TAO successfully started from Fortran\n"); 
118: }