Update references to hapi_src to hapi_impl and revert hapiRegisterCallbacks
[charm.git] / src / util / ckstandalone.C
blob1c548e91dc57996b48ec0497288e4293fa560268
1 /**
2 "Standalone" version of all the Charm++ routines
3 needed by simple libraries.  Currently only used 
4 for FEM_ALONE mode.
6 Orion Sky Lawlor, olawlor@acm.org, 2003/8/15
7 */
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <stdarg.h> /*<- for va_start & friends */
11 #include <string.h> /*<- for strlen */
13 #include "charm.h"
14 #include "charm-api.h"
16 /* CkPrintf/CkAbort support: */
17 extern "C" void CmiAbort(const char *why) {
18         fprintf(stderr,"Fatal error> %s\n",why);
19         abort();
22 extern "C" void CmiPrintf(const char *fmt, ...) {
23         va_list p; va_start(p, fmt);
24         vfprintf(stdout,fmt,p);
25         va_end(p);
27 extern "C" void CmiError(const char *fmt, ...) {
28         va_list p; va_start(p, fmt);
29         vfprintf(stderr,fmt,p);
30         va_end(p);
33 extern "C" void *CmiTmpAlloc(int size) {return malloc(size);}
34 extern "C" void CmiTmpFree(void *p) {free(p);}
35 extern "C" void __cmi_assert(const char *errmsg) { CmiAbort(errmsg);}
37 /* Bizarre stuff for Cpv support: thankfully not needed by FEM.
38 #ifndef CmiMyPe
39 int CmiMyPe(void) {return 0;}
40 #endif
41 #ifndef CmiMyRank
42 int CmiMyRank(void) {return 0;}
43 #endif
44  */
45 int _Cmi_mype=0;
46 int _Cmi_numpes=1;
47 int _Cmi_mynodesize=1;
48 int _Cmi_mynode=0;
49 int _Cmi_numnodes=1;
51 /* CmiWallTimer support */
52 double _cpu_speed_factor=0.0;
53 CDECL double CmiTimer(void) {return 0.0;}
54 #ifndef CmiWallTimer
55 CDECL double CmiWallTimer(void) {return 0.0;}
56 #endif
58 /* Mini-micro TCHARM */
59 #include "tcharmc.h"
60 CDECL void TCHARM_Migrate(void) {}
62 enum {tc_global_max=64};
63 void *tc_globals[tc_global_max];
64 void TCHARM_Set_global(int globalID,void *new_value,TCHARM_Pup_global_fn pup_or_NULL) {
65         tc_globals[globalID]=new_value;
67 void *TCHARM_Get_global(int globalID) {
68         return tc_globals[globalID];
72 /* FIXME: add real calls based on MPI here: */
73 CDECL int TCHARM_Register(void *data,TCHARM_Pup_fn pfn) {return -1;}
74 FORTRAN_AS_C_RETURN(int,TCHARM_REGISTER,TCHARM_Register,tcharm_register,
75         (void *data,TCHARM_Pup_fn pfn),(data,pfn))
77 CDECL void *TCHARM_Get_userdata(int id) {return 0;}
79 CDECL void TCHARM_Done(int exitcode) { /* fallthrough */ }
80 FORTRAN_AS_C(TCHARM_DONE,TCHARM_Done,tcharm_done,(int *exitcode),(*exitcode))
82 CDECL void TCHARM_Barrier(void) { /* fallthrough */ }
83 FORTRAN_AS_C(TCHARM_BARRIER,TCHARM_Barrier,tcharm_barrier,(void),())
85 CDECL int TCHARM_Element(void) {return 0;}
86 FORTRAN_AS_C_RETURN(int,TCHARM_ELEMENT,TCHARM_Element,tcharm_element,(void),())
88 CDECL int TCHARM_Num_elements(void) {return 1;}
89 FORTRAN_AS_C_RETURN(int,TCHARM_NUM_ELEMENTS,TCHARM_Num_elements,tcharm_num_elements,(void),())
91 CDECL double TCHARM_Wall_timer(void) {return 0.0;}
92 FORTRAN_AS_C_RETURN(double,TCHARM_WALL_TIMER,TCHARM_Wall_timer,tcharm_wall_timer,(void),())
94 #define FORTRAN_TCHARM_UNIMPLEMENTED(ROUTINE,routine) \
95 FDECL void FTN_NAME(TCHARM_##ROUTINE,tcharm_##routine)(void) \
96         { CkAbort("Sorry, standalone mode does not have TCHARM_" #ROUTINE); }
98 FORTRAN_TCHARM_UNIMPLEMENTED(INIT,init)
99 FORTRAN_TCHARM_UNIMPLEMENTED(CREATE,create)
100 FORTRAN_TCHARM_UNIMPLEMENTED(MIGRATE,migrate)
101 FORTRAN_TCHARM_UNIMPLEMENTED(SET_STACK_SIZE,set_stack_size)
102 FORTRAN_TCHARM_UNIMPLEMENTED(CREATE_DATA,create_data)
103 FORTRAN_TCHARM_UNIMPLEMENTED(MIGRATE_TO,migrate_to)
104 FORTRAN_TCHARM_UNIMPLEMENTED(YIELD,yeild)
107 /* Command-line argument handling */
108 static char **saved_argv=NULL;
110 CDECL int CmiGetArgFlagDesc(char **argv,const char *arg,const char *desc) {
111         int i;
112         saved_argv=argv;
113         for (i=0;argv[i]!=NULL;i++)
114                 if (0==strcmp(argv[i],arg))
115                 {/*We found the argument*/
116                         return 1;
117                 }
118         return 0;/*Didn't find the argument*/
121 CDECL int CmiGetArgIntDesc(char **argv,const char *arg,int *optDest,const char *desc) {
122         int i;
123         saved_argv=argv;
124         for (i=0;argv[i]!=NULL;i++)
125                 if (0==strcmp(argv[i],arg))
126                 {/*We found the argument*/
127                         *optDest = atoi(argv[i+1]);
128                         return 1;
129                 }
130         return 0;/*Didn't find the argument*/
133 FDECL void FTN_NAME(TCHARM_GETARG,tcharm_getarg)(int *arg,char *dest,int destLen) {
134         if (saved_argv==NULL)
135                 CkAbort("TCHARM_GETARG not supported in FEM_ALONE mode!\n");
136         else /* actually have a saved argument-- return it */ {
137                 int i;
138                 const char *src=saved_argv[*arg];
139                 strcpy(dest,src);
140                 for (i=strlen(dest);i<destLen;i++) dest[i]=' ';
141         }