c5b13c8a0e2a5fd1692b5d8bf0e0dc3077a65d15
[charm.git] / examples / charm++ / cell / md / md_config.h
1 #ifndef __MD_CONFIG_H__
2 #define __MD_CONFIG_H__
3
4
5 ////////////////////////////////////////////////////////////////////////////////
6 // Default Simulation Parameters
7
8
9 // convenience typedefs and consts to facilitate float vs double usage
10 #define USE_DOUBLE 0
11 #if USE_DOUBLE
12 typedef double  MD_FLOAT;
13 #define  MD_VEC veclf
14 const double zero=0.0;
15 const double one=1.0;
16 const double two=2.0;
17 #define myvec_numElems veclf_numElems;
18 #define vextract_MDF vextractlf
19 #define vsub_MDF vsublf
20 #define vadd_MDF vaddlf
21 #define vmadd_MDF vmaddlf
22 #define vmul_MDF vmullf
23 #define vspread_MDF vspreadlf
24 #define vrecip_MDF vreciplf
25 #define vsqrt_MDF vsqrtlf
26 #define visfinite_MDF visfinitelf
27 #else
28 typedef float  MD_FLOAT;
29 #define  MD_VEC vecf
30 #define myvec_numElems vecf_numElems;
31 const float zero=0.0f;
32 const float one=1.0f;
33 const float two=2.0f;
34
35 #define vextract_MDF vextractf
36 #define vsub_MDF vsubf
37 #define vadd_MDF vaddf
38 #define vmadd_MDF vmaddf
39 #define vmul_MDF vmulf
40 #define vspread_MDF vspreadf
41 #define vrecip_MDF vrecipf
42 #define vsqrt_MDF vsqrtf
43 #define visfinite_MDF visfinitef
44 #endif
45
46
47 #define DEFAULT_NUM_PARTICLES_PER_PATCH  (128)
48
49 #define DEFAULT_NUM_PATCHES_X              (2)
50 #define DEFAULT_NUM_PATCHES_Y              (2)
51 #define DEFAULT_NUM_PATCHES_Z              (2)
52
53 #define DEFAULT_NUM_STEPS                 (16)
54 #define STEPS_PER_PRINT                   (16)
55
56 #define USE_ARRAY_SECTIONS                 (1)
57
58 #define USE_PROXY_PATCHES                  (1)
59
60
61 ////////////////////////////////////////////////////////////////////////////////
62 // Physics Constants
63
64 #if USE_DOUBLE
65 #define TIME_PER_STEP       (1.0e-15)           // Unit: s
66 #define SIM_BOX_SIDE_LEN    (1.0e-7)            // Unit: m (NOTE: 1 nm = 10A)
67 #define COULOMBS_CONSTANT   (8.987551787e-9)    // Unit: N*(m^2)*(C^-2)
68 #define ELECTRON_CHARGE     (-1.602176487e-19)  // Unit: C
69 #define ELECTRON_MASS       (9.109382154e-31)   // Unit: kg
70 #else
71 #define TIME_PER_STEP       (1.0e-15f)           // Unit: s
72 #define SIM_BOX_SIDE_LEN    (1.0e-7f)            // Unit: m (NOTE: 1 nm = 10A)
73 #define COULOMBS_CONSTANT   (8.987551787e-9f)    // Unit: N*(m^2)*(C^-2)
74 #define ELECTRON_CHARGE     (-1.602176487e-19f)  // Unit: C
75 #define ELECTRON_MASS       (9.109382154e-31f)   // Unit: kg
76 #endif
77
78 ////////////////////////////////////////////////////////////////////////////////
79 // Misc. Helper Macros
80
81 #define PATCH_XYZ_TO_I(x,y,z)  (((z)*numPatchesX*numPatchesY)+((y)*numPatchesX)+(x))
82 #define PATCH_I_TO_X(i)        ((i)%numPatchesX)
83 #define PATCH_I_TO_Y(i)        (((i)/numPatchesX)%numPatchesY)
84 #define PATCH_I_TO_Z(i)        ((i)/(numPatchesX*numPatchesY))
85
86
87 ////////////////////////////////////////////////////////////////////////////////
88 // Misc. Macros for Performance Testing
89
90 // DMK - DEBUG
91 #define ENABLE_STATIC_LOAD_BALANCING     (0)
92
93 // DMK - DEBUG
94 #define DUMP_INITIAL_PARTICLE_DATA       (0)
95
96 // DMK - DEBUG
97 #define COUNT_FLOPS                      (0)
98
99 // EJB - SANITY CHECK
100 #define SANITY_CHECK                     (0)
101
102 // DMK - DEBUG
103 #define ENABLE_USER_EVENTS               (0)
104 #define PROJ_USER_EVENT_PATCH_FORCECHECKIN_CALLBACK  (1120)
105 #define PROJ_USER_EVENT_PATCH_INTEGRATE_CALLBACK     (1121)
106 #define PROJ_USER_EVENT_SELFCOMPUTE_DOCALC_CALLBACK  (1130)
107 #define PROJ_USER_EVENT_SELFCOMPUTE_DOCALC_WORK      (1131)
108 #define PROJ_USER_EVENT_PAIRCOMPUTE_DOCALC_CALLBACK  (1140)
109 #define PROJ_USER_EVENT_PAIRCOMPUTE_DOCALC_WORK      (1141)
110 #define PROJ_USER_EVENT_MACHINEPROGRESS              (1150)
111
112 // DMK - DEBUG
113 #define ENABLE_NETWORK_PROGRESS          (0)
114 #if ENABLE_NETWORK_PROGRESS != 0
115   #if ENABLE_USER_EVENTS != 0
116     #define NetworkProgress  \
117       {  \
118         double __start_time__ = CmiWallTimer();  \
119         CmiMachineProgressImpl();  \
120         traceUserBracketEvent(PROJ_USER_EVENT_MACHINEPROGRESS, __start_time__, CmiWallTimer());  \
121       }
122   #else
123     #define NetworkProgress  CmiMachineProgressImpl();
124   #endif
125 #else
126   #define NetworkProgress
127 #endif
128
129
130 #endif //__MD_CONFIG_H__