Actual source code: tao_init.c
1: /*$Id: tao_init.c 1.50 05/05/10 15:21:38-05:00 sarich@zorak.(none) $*/
3: #include "tao_solver.h" /*I "tao_solver.h" I*/
5: int TaoRegisterEvents();
7: /* ------------------------Nasty global variables -------------------------------*/
8: int TaoInitializeCalled = 0;
9: int TAO_COOKIE = 0;
11: static int TaoGlobalArgc = 0;
12: static char **TaoGlobalArgs = 0;
16: /*@C
17: TaoInitialize - Initializes the TAO component and many of the packages associated with it.
19: Collective on MPI_COMM_WORLD
21: Input Parameters:
22: + argc - [optional] count of number of command line arguments
23: . args - [optional] the command line arguments
24: . file - [optional] PETSc database file, defaults to ~username/.petscrc
25: (use TAO_NULL for default)
26: - help - [optional] Help message to print, use TAO_NULL for no message
28: Note:
29: TaoInitialize() should always be called near the beginning of your
30: program. However, this command should come after PetscInitialize()
32: Note:
33: The input arguments are required if the options database is to be used.
35: Level: beginner
37: .keywords: TAO_SOLVER, initialize
39: .seealso: TaoInitializeFortran(), TaoFinalize(), PetscInitialize()
40: @*/
41: int TaoInitialize(int *argc,char ***args,char file[],const char help[])
42: {
43: int info=0;
45: TaoFunctionBegin;
47: if (TaoInitializeCalled){ TaoFunctionReturn(0);}
48: TaoInitializeCalled++;
50: if (argc && args){
51: TaoGlobalArgc = *argc;
52: TaoGlobalArgs = *args;
53: }
55: TAO_COOKIE = 0;
56: info=TaoLogClassRegister(&TAO_COOKIE,"TAO Solver"); CHKERRQ(info);
58: info = TaoRegisterEvents(); CHKERRQ(info);
59: /* info = TaoInitialize_DynamicLibraries();CHKERRQ(info); */
60: info = TaoStandardRegisterAll();CHKERRQ(info);
61: info = PetscLogInfo((0,"TaoInitialize:TAO successfully started\n")); CHKERRQ(info);
62: TaoFunctionReturn(info);
63: }
67: /*@
68: TaoFinalize - Checks for options at the end of the TAO program
69: and finalizes interfaces with other packages.
71: Collective on MPI_COMM_WORLD
73: Level: beginner
75: .keywords: finalize, exit, end
77: .seealso: TaoInitialize(), PetscFinalize()
78: @*/
79: int TaoFinalize(void)
80: {
81: int info;
82:
83: TaoFunctionBegin;
84: TaoInitializeCalled--;
85: if (TaoInitializeCalled==0){
86: info = PetscLogInfo((0,"TaoFinalize:Tao successfully ended!\n"));
87: CHKERRQ(info);
88: info = TaoRegisterDestroy(); CHKERRQ(info);
89: }
90: TaoFunctionReturn(0);
91: }
96: // int Tao_Solve, Tao_LineSearch;
97: /*
98: TaoRegisterEvents - Registers TAO events for use in performance logging.
99: */
100: int TaoRegisterEvents()
101: {
102: TaoFunctionBegin;
103: TaoFunctionReturn(0);
104: }
108: /*@C
109: TaoGetArgs - Allows you to access the raw command line arguments anywhere
110: after TaoInitialize() is called but before TaoFinalize().
112: Not Collective
114: Output Parameters:
115: + argc - count of number of command line arguments
116: - args - the command line arguments
118: Level: developer
120: Notes:
121: This is usually used to pass the command line arguments into other
122: libraries that are called internally deep in TAO or the application.
124: .keywords: command line arguments
125:
126: .seealso: TaoFinalize(), TaoInitializeFortran()
128: @*/
129: int TaoGetArgs(int *argc,char ***args)
130: {
131: TaoFunctionBegin;
132: if (!TaoGlobalArgs) {
133: SETERRQ(1,"You must call after TaoInitialize()");
134: }
135: if (argc && args){
136: *argc = TaoGlobalArgc;
137: *args = TaoGlobalArgs;
138: }
139: TaoFunctionReturn(0);
140: }