00001
00008 #include <stdio.h>
00009 #include <stdlib.h>
00010 #include <stdarg.h>
00011 #include <string.h>
00012
00013 #include "charm.h"
00014 #include "charm-api.h"
00015
00016
00017 extern "C" void CmiAbort(const char *why) {
00018 fprintf(stderr,"Fatal error> %s\n",why);
00019 abort();
00020 }
00021
00022 extern "C" void CmiPrintf(const char *fmt, ...) {
00023 va_list p; va_start(p, fmt);
00024 vfprintf(stdout,fmt,p);
00025 va_end(p);
00026 }
00027 extern "C" void CmiError(const char *fmt, ...) {
00028 va_list p; va_start(p, fmt);
00029 vfprintf(stderr,fmt,p);
00030 va_end(p);
00031 }
00032
00033 extern "C" void *CmiTmpAlloc(int size) {return malloc(size);}
00034 extern "C" void CmiTmpFree(void *p) {free(p);}
00035 extern "C" void __cmi_assert(const char *expr, const char *file, int line) { CmiAbort(expr);}
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 int _Cmi_mype=0;
00046 int _Cmi_numpes=1;
00047 int _Cmi_myrank=0;
00048 int _Cmi_mynodesize=1;
00049 int _Cmi_mynode=0;
00050 int _Cmi_numnodes=1;
00051
00052
00053 double _cpu_speed_factor=0.0;
00054 CDECL double CmiTimer(void) {return 0.0;}
00055 #ifndef CmiWallTimer
00056 CDECL double CmiWallTimer(void) {return 0.0;}
00057 #endif
00058
00059
00060 #include "tcharmc.h"
00061 CDECL void TCHARM_Migrate(void) {}
00062
00063 enum {tc_global_max=64};
00064 void *tc_globals[tc_global_max];
00065 void TCHARM_Set_global(int globalID,void *new_value,TCHARM_Pup_global_fn pup_or_NULL) {
00066 tc_globals[globalID]=new_value;
00067 }
00068 void *TCHARM_Get_global(int globalID) {
00069 return tc_globals[globalID];
00070 }
00071
00072
00073
00074 CDECL int TCHARM_Register(void *data,TCHARM_Pup_fn pfn) {return -1;}
00075 FORTRAN_AS_C_RETURN(int,TCHARM_REGISTER,TCHARM_Register,tcharm_register,
00076 (void *data,TCHARM_Pup_fn pfn),(data,pfn))
00077
00078 CDECL void *TCHARM_Get_userdata(int id) {return 0;}
00079
00080 CDECL void TCHARM_Done(void) { }
00081 FORTRAN_AS_C(TCHARM_DONE,TCHARM_Done,tcharm_done,(void),())
00082
00083 CDECL void TCHARM_Barrier(void) { }
00084 FORTRAN_AS_C(TCHARM_BARRIER,TCHARM_Barrier,tcharm_barrier,(void),())
00085
00086 CDECL int TCHARM_Element(void) {return 0;}
00087 FORTRAN_AS_C_RETURN(int,TCHARM_ELEMENT,TCHARM_Element,tcharm_element,(void),())
00088
00089 CDECL int TCHARM_Num_elements(void) {return 1;}
00090 FORTRAN_AS_C_RETURN(int,TCHARM_NUM_ELEMENTS,TCHARM_Num_elements,tcharm_num_elements,(void),())
00091
00092 CDECL double TCHARM_Wall_timer(void) {return 0.0;}
00093 FORTRAN_AS_C_RETURN(double,TCHARM_WALL_TIMER,TCHARM_Wall_timer,tcharm_wall_timer,(void),())
00094
00095 #define FORTRAN_TCHARM_UNIMPLEMENTED(ROUTINE,routine) \
00096 FDECL void FTN_NAME(TCHARM_##ROUTINE,tcharm_##routine)(void) \
00097 { CkAbort("Sorry, standalone mode does not have TCHARM_" #ROUTINE); }
00098
00099 FORTRAN_TCHARM_UNIMPLEMENTED(INIT,init)
00100 FORTRAN_TCHARM_UNIMPLEMENTED(CREATE,create)
00101 FORTRAN_TCHARM_UNIMPLEMENTED(MIGRATE,migrate)
00102 FORTRAN_TCHARM_UNIMPLEMENTED(SET_STACK_SIZE,set_stack_size)
00103 FORTRAN_TCHARM_UNIMPLEMENTED(CREATE_DATA,create_data)
00104 FORTRAN_TCHARM_UNIMPLEMENTED(MIGRATE_TO,migrate_to)
00105 FORTRAN_TCHARM_UNIMPLEMENTED(YIELD,yeild)
00106
00107
00108
00109 static char **saved_argv=NULL;
00110
00111 CDECL int CmiGetArgFlagDesc(char **argv,const char *arg,const char *desc) {
00112 int i;
00113 saved_argv=argv;
00114 for (i=0;argv[i]!=NULL;i++)
00115 if (0==strcmp(argv[i],arg))
00116 {
00117 return 1;
00118 }
00119 return 0;
00120 }
00121
00122 CDECL int CmiGetArgIntDesc(char **argv,const char *arg,int *optDest,const char *desc) {
00123 int i;
00124 saved_argv=argv;
00125 for (i=0;argv[i]!=NULL;i++)
00126 if (0==strcmp(argv[i],arg))
00127 {
00128 *optDest = atoi(argv[i+1]);
00129 return 1;
00130 }
00131 return 0;
00132 }
00133
00134 FDECL void FTN_NAME(TCHARM_GETARG,tcharm_getarg)(int *arg,char *dest,int destLen) {
00135 if (saved_argv==NULL)
00136 CkAbort("TCHARM_GETARG not supported in FEM_ALONE mode!\n");
00137 else {
00138 int i;
00139 const char *src=saved_argv[*arg];
00140 strcpy(dest,src);
00141 for (i=strlen(dest);i<destLen;i++) dest[i]=' ';
00142 }
00143 }
00144