diff --git a/sPuReMD/src/control.c b/sPuReMD/src/control.c index 783c73852c03a4a0aa7790830d71009c881a7fff..bec04123391c1a165a1252d8d7ccb66a8deb37c0 100644 --- a/sPuReMD/src/control.c +++ b/sPuReMD/src/control.c @@ -22,6 +22,7 @@ #include "control.h" #include <ctype.h> +#include <zlib.h> #include "traj.h" #include "tool_box.h" diff --git a/sPuReMD/src/lin_alg.c b/sPuReMD/src/lin_alg.c index e0ea4d5f09c50d7a7f331332d4261e730460483c..bcf785139b285daa63854785c97860e3fd83584b 100644 --- a/sPuReMD/src/lin_alg.c +++ b/sPuReMD/src/lin_alg.c @@ -29,10 +29,10 @@ /* Intel MKL */ #if defined(HAVE_LAPACKE_MKL) -#include "mkl.h" + #include "mkl.h" /* reference LAPACK */ #elif defined(HAVE_LAPACKE) -#include "lapacke.h" + #include "lapacke.h" #endif @@ -3233,7 +3233,7 @@ int GMRES_HouseHolder( const static_storage * const workspace, Vector_Copy( u[0], z[0], N ); u[0][0] += ( u[0][0] < 0.0 ? -1 : 1 ) * w[0]; - Vector_Scale( u[0], 1 / Norm( u[0], N ), u[0], N ); + Vector_Scale( u[0], 1.0 / Norm( u[0], N ), u[0], N ); w[0] *= ( u[0][0] < 0.0 ? 1 : -1 ); t_vops += Get_Timing_Info( t_start ); @@ -3243,12 +3243,13 @@ int GMRES_HouseHolder( const static_storage * const workspace, { /* compute v_j */ t_start = Get_Time( ); - Vector_Scale( z[j], -2 * u[j][j], u[j], N ); + Vector_Scale( z[j], -2.0 * u[j][j], u[j], N ); z[j][j] += 1.; /* due to e_j */ for ( i = j - 1; i >= 0; --i ) { - Vector_Add( z[j] + i, -2 * Dot( u[i] + i, z[j] + i, N - i ), u[i] + i, N - i ); + Vector_Add( z[j] + i, -2.0 * Dot( u[i] + i, z[j] + i, N - i ), + u[i] + i, N - i ); } t_vops += Get_Timing_Info( t_start ); @@ -3267,7 +3268,8 @@ int GMRES_HouseHolder( const static_storage * const workspace, t_start = Get_Time( ); for ( i = 0; i <= j; ++i ) { - Vector_Add( v + i, -2 * Dot( u[i] + i, v + i, N - i ), u[i] + i, N - i ); + Vector_Add( v + i, -2.0 * Dot( u[i] + i, v + i, N - i ), + u[i] + i, N - i ); } if ( !Vector_isZero( v + (j + 1), N - (j + 1) ) ) @@ -3279,16 +3281,17 @@ int GMRES_HouseHolder( const static_storage * const workspace, #ifdef _OPENMP #pragma omp single #endif - u[j + 1][j + 1] += ( v[j + 1] < 0.0 ? -1 : 1 ) * temp; + u[j + 1][j + 1] += ( v[j + 1] < 0.0 ? -1.0 : 1.0 ) * temp; #ifdef _OPENMP #pragma omp barrier #endif - Vector_Scale( u[j + 1], 1 / Norm( u[j + 1], N ), u[j + 1], N ); + Vector_Scale( u[j + 1], 1.0 / Norm( u[j + 1], N ), u[j + 1], N ); /* overwrite v with P_m+1 * v */ - temp = 2 * Dot( u[j + 1] + (j + 1), v + (j + 1), N - (j + 1) ) * u[j + 1][j + 1]; + temp = 2.0 * Dot( u[j + 1] + (j + 1), v + (j + 1), N - (j + 1) ) + * u[j + 1][j + 1]; #ifdef _OPENMP #pragma omp single #endif @@ -3299,7 +3302,7 @@ int GMRES_HouseHolder( const static_storage * const workspace, #endif Vector_MakeZero( v + (j + 2), N - (j + 2) ); -// Vector_Add( v, -2 * Dot( u[j+1], v, N ), u[j+1], N ); +// Vector_Add( v, -2.0 * Dot( u[j+1], v, N ), u[j+1], N ); } t_vops += Get_Timing_Info( t_start ); @@ -3314,7 +3317,7 @@ int GMRES_HouseHolder( const static_storage * const workspace, tmp1 = workspace->hc[i] * v[i] + workspace->hs[i] * v[i + 1]; tmp2 = -workspace->hs[i] * v[i] + workspace->hc[i] * v[i + 1]; - v[i] = tmp1; + v[i] = tmp1; v[i + 1] = tmp2; } diff --git a/sPuReMD/src/mytypes.h b/sPuReMD/src/mytypes.h index a173ecca352c8460181947f859c9d17491f1c236..dfadda825b596470163f7b396abb01688954af1d 100644 --- a/sPuReMD/src/mytypes.h +++ b/sPuReMD/src/mytypes.h @@ -28,13 +28,9 @@ #endif #include <math.h> -#include <random.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <sys/time.h> -#include <time.h> -#include <zlib.h> #ifdef _OPENMP #include <omp.h> @@ -43,13 +39,13 @@ //#define DEBUG_FOCUS //#define TEST_FORCES //#define TEST_ENERGY -#define REORDER_ATOMS // turns on nbrgen opt by re-ordering atoms +#define REORDER_ATOMS /* turns on nbrgen opt by re-ordering atoms */ //#define LGJ -#define SUCCESS 1 -#define FAILURE 0 -#define TRUE 1 -#define FALSE 0 +#define SUCCESS (1) +#define FAILURE (0) +#define TRUE (1) +#define FALSE (0) #define LOG log #define EXP exp @@ -81,56 +77,56 @@ #endif #if !defined(PI) - #define PI 3.14159265 + #define PI (3.14159265) #endif -#define C_ele 332.06371 -//#define K_B 503.398008 // kcal/mol/K -#define K_B 0.831687 // amu A^2 / ps^2 / K +#define C_ele (332.06371) +//#define K_B (503.398008) // kcal/mol/K +#define K_B (0.831687) // amu A^2 / ps^2 / K #define F_CONV (1e6 / 48.88821291 / 48.88821291) // --> amu A / ps^2 -#define E_CONV 0.002391 // amu A^2 / ps^2 --> kcal/mol -#define EV_to_KCALpMOL 14.400000 // ElectronVolt --> KCAL per MOLe -#define KCALpMOL_to_EV 23.060549 // 23.020000//KCAL per MOLe --> ElectronVolt -#define ECxA_to_DEBYE 4.803204 // elem. charge * angstrom -> debye conv -#define CAL_to_JOULES 4.184000 // CALories --> JOULES -#define JOULES_to_CAL (1/4.184000) // JOULES --> CALories -#define AMU_to_GRAM 1.6605e-24 -#define ANG_to_CM 1.0e-8 -#define AVOGNR 6.0221367e23 +#define E_CONV (0.002391) // amu A^2 / ps^2 --> kcal/mol +#define EV_to_KCALpMOL (14.400000) // ElectronVolt --> KCAL per MOLe +#define KCALpMOL_to_EV (23.060549) // 23.020000//KCAL per MOLe --> ElectronVolt +#define ECxA_to_DEBYE (4.803204) // elem. charge * angstrom -> debye conv +#define CAL_to_JOULES (4.184000) // CALories --> JOULES +#define JOULES_to_CAL (1.0 / 4.184000) // JOULES --> CALories +#define AMU_to_GRAM (1.6605e-24) +#define ANG_to_CM (1.0e-8) +#define AVOGNR (6.0221367e23) #define P_CONV (1.0e-24 * AVOGNR * JOULES_to_CAL) -#define MAX_STR 1024 -#define MAX_LINE 1024 -#define MAX_TOKENS 1024 -#define MAX_TOKEN_LEN 1024 - -#define MAX_ATOM_ID 100000 -#define MAX_RESTRICT 15 -#define MAX_MOLECULE_SIZE 20 -#define MAX_ATOM_TYPES 25 - -#define MAX_GRID 50 -#define MAX_3BODY_PARAM 5 -#define MAX_4BODY_PARAM 5 -#define NO_OF_INTERACTIONS 10 - -#define MAX_dV 1.01 -#define MIN_dV 0.99 -#define MAX_dT 4.00 -#define MIN_dT 0.00 - -#define ZERO 0.000000000000000e+00 -#define ALMOST_ZERO 1e-10 -#define NEG_INF -1e10 -#define NO_BOND 1e-3 -#define HB_THRESHOLD 1e-2 -#define MAX_BONDS 40 -#define MIN_BONDS 15 -#define MIN_HBONDS 50 -#define SAFE_HBONDS 1.4 -#define MIN_GCELL_POPL 50 -#define SAFE_ZONE 1.2 -#define DANGER_ZONE 0.95 -#define LOOSE_ZONE 0.75 +#define MAX_STR (1024) +#define MAX_LINE (1024) +#define MAX_TOKENS (1024) +#define MAX_TOKEN_LEN (1024) + +#define MAX_ATOM_ID (100000) +#define MAX_RESTRICT (15) +#define MAX_MOLECULE_SIZE (20) +#define MAX_ATOM_TYPES (25) + +#define MAX_GRID (50) +#define MAX_3BODY_PARAM (5) +#define MAX_4BODY_PARAM (5) +#define NO_OF_INTERACTIONS (10) + +#define MAX_dV (1.01) +#define MIN_dV (0.99) +#define MAX_dT (4.00) +#define MIN_dT (0.00) + +#define ZERO (0.000000000000000e+00) +#define ALMOST_ZERO (1e-10) +#define NEG_INF (-1e10) +#define NO_BOND (1e-3) +#define HB_THRESHOLD (1e-2) +#define MAX_BONDS (40) +#define MIN_BONDS (15) +#define MIN_HBONDS (50) +#define SAFE_HBONDS (1.4) +#define MIN_GCELL_POPL (50) +#define SAFE_ZONE (1.2) +#define DANGER_ZONE (0.95) +#define LOOSE_ZONE (0.75) /* config params */ @@ -251,7 +247,8 @@ typedef int ivec[3]; typedef real rtensor[3][3]; -/* Force field global params mapping: +/* Force field global parameters mapping + * (contained in section 1 of file): * * l[0] = p_boc1 * l[1] = p_boc2 @@ -287,7 +284,7 @@ typedef real rtensor[3][3]; * l[31] = p_ovun4 * l[32] = p_ovun3 * l[33] = p_val8 - * l[34] = ACKS2 bond softness + * l[34] = b_s_acks2 (ACKS2 bond softness) * l[35] = N/A * l[36] = N/A * l[37] = version number @@ -303,11 +300,14 @@ typedef struct typedef struct { /* Line one in field file */ - char name[15]; /* Two character atom name */ + /* Two character atom name */ + char name[15]; real r_s; - real valency; /* Valency of the atom */ - real mass; /* Mass of atom */ + /* Valency of the atom */ + real valency; + /* Mass of atom */ + real mass; real r_vdw; real epsilon; real gamma; @@ -322,8 +322,8 @@ typedef struct real p_ovun5; real chi; real eta; - /* Determines whether this type of atom participates in H_bonds. - * It is 1 for donor H, 2 for acceptors (O,S,N), 0 for others*/ + /* Determines whether this type of atom participates in H_bonds: + * 1 for H donor, 2 for acceptors (O,S,N), 0 for others */ int p_hbond; /* Line three in field file */ @@ -358,7 +358,8 @@ typedef struct real p_bo6; real r_s; real r_p; - real r_pp; /* r_o distances in BO formula */ + /* r_o distances in BO formula */ + real r_pp; real p_boc3; real p_boc4; real p_boc5; @@ -383,9 +384,11 @@ typedef struct real acore; /* electrostatic parameters */ - real gamma; // note: this parameter is gamma^-3 and not gamma. + /* note: this parameter is gamma^-3 and not gamma */ + real gamma; - real v13cor, ovc; + real v13cor; + real ovc; } two_body_parameters; @@ -483,8 +486,11 @@ typedef struct rvec side_prop; rvec nbr_box_press[27]; - rtensor box, box_inv, old_box; - rtensor trans, trans_inv; + rtensor box; + rtensor box_inv; + rtensor old_box; + rtensor trans; + rtensor trans_inv; rtensor g; } simulation_box; @@ -501,13 +507,13 @@ typedef struct rvec len; rvec inv_len; - int**** atoms; - int*** top; - int*** mark; - int*** start; - int*** end; - ivec**** nbrs; - rvec**** nbrs_cp; + int **** atoms; + int *** top; + int *** mark; + int *** start; + int *** end; + ivec **** nbrs; + rvec **** nbrs_cp; } grid; @@ -554,9 +560,10 @@ typedef struct int reneighbor; real vlist_cut; real nbr_cut; + /* upper and lower taper */ real r_cut; real r_sp_cut; - real r_low; // upper and lower taper + real r_low; real bo_cut; real thb_cut; real hb_cut; @@ -637,7 +644,6 @@ typedef struct real v_eps; real v_eps_old; real a_eps; - } isotropic_barostat; @@ -688,8 +694,10 @@ typedef struct int prev_steps; real time; - real M; /* Total Mass */ - real inv_M; /* 1 / Total Mass */ + /* Total Mass */ + real M; + /* 1.0 / Total Mass */ + real inv_M; rvec xcm; /* Center of mass */ rvec vcm; /* Center of mass velocity */ @@ -720,7 +728,7 @@ typedef struct real E_Ele; /* Total electrostatics energy */ real E_Pol; /* Polarization energy */ - real N_f; /*Number of degrees of freedom */ + real N_f; /* Number of degrees of freedom */ rvec t_scale; rtensor p_scale; thermostat therm; /* Used in Nose_Hoover method */ @@ -1038,6 +1046,8 @@ typedef struct /* local forces per thread */ rvec *f_local; #endif + unsigned int temp_int_omp; + real temp_real_omp; reallocate_data realloc; @@ -1127,7 +1137,7 @@ typedef struct /* trajectory output function pointer definitions */ int (* write_header)( reax_system*, control_params*, static_storage*, void* ); - int (* append_traj_frame)(reax_system*, control_params*, + int (* append_traj_frame)( reax_system*, control_params*, simulation_data*, static_storage*, reax_list **, void* ); int (* write)( FILE *, const char *, ... ); @@ -1146,7 +1156,6 @@ typedef struct FILE *ecou; #endif - FILE *ftot; #ifdef TEST_FORCES FILE *fbo; FILE *fdbo; @@ -1157,6 +1166,7 @@ typedef struct FILE *fhb; FILE *f4body; FILE *fnonb; + FILE *ftot; FILE *ftot2; #endif } output_controls; diff --git a/sPuReMD/src/print_utils.c b/sPuReMD/src/print_utils.c index 447e7cc326a7b10e4f0c60aca94bfe16829c30be..b019dfa0fb7514636d7213c7859be800ec790951 100644 --- a/sPuReMD/src/print_utils.c +++ b/sPuReMD/src/print_utils.c @@ -546,16 +546,12 @@ void Print_Far_Neighbors2( reax_system *system, control_params *control, } +#if defined(TEST_FORCES) void Print_Total_Force( reax_system *system, control_params *control, simulation_data *data, static_storage *workspace, reax_list **lists, output_controls *out_control ) { int i; -#if !defined(TEST_FORCES) - char temp[1000]; - snprintf( temp, 1000, "%.*s.ftot", 994, control->sim_name ); - out_control->ftot = fopen( temp, "w" ); -#endif for ( i = 0; i < system->N; ++i ) { @@ -567,10 +563,8 @@ void Print_Total_Force( reax_system *system, control_params *control, } fflush( out_control->ftot ); -#if !defined(TEST_FORCES) - fclose( out_control->ftot ); -#endif } +#endif void Output_Results( reax_system *system, control_params *control, diff --git a/sPuReMD/src/random.c b/sPuReMD/src/random.c index 4afe6aeac249822b2303a553bbf4938b08892f80..b4ce0ee6dccd19465a905ad991658f8f34f12b05 100644 --- a/sPuReMD/src/random.c +++ b/sPuReMD/src/random.c @@ -21,40 +21,13 @@ #include "random.h" - -/* System random number generator used linear congruance method with - * large periodicity for generation of pseudo random number. function - * Random returns this random number appropriately scaled so that - * 0 <= Random(range) < range */ -double Random(double range) -{ - return (random() * range) / 2147483647L; -} +#include <time.h> /* This function seeds the system pseudo random number generator with * current time. Use this function once in the begining to initialize - * the system */ -void Randomize() + * the system. */ +void Randomize( ) { - srandom(time(NULL)); -} - - -/* GRandom return random number with gaussian distribution with mean - * and standard deviation "sigma" */ -double GRandom(double mean, double sigma) -{ - double v1 = Random(2.0) - 1.0; - double v2 = Random(2.0) - 1.0; - double rsq = v1 * v1 + v2 * v2; - - while (rsq >= 1.0 || rsq == 0.0) - { - v1 = Random(2.0) - 1.0; - v2 = Random(2.0) - 1.0; - rsq = v1 * v1 + v2 * v2; - } - - return mean + v1 * sigma * SQRT(-2.0 * LOG(rsq) / rsq); + srandom( time(NULL) ); } diff --git a/sPuReMD/src/random.h b/sPuReMD/src/random.h index 1fd1642f4e5a7044f898fcc003ded9d428e4d07b..cf8517ab151c3b8628a0c9715476f06db3cfc428 100644 --- a/sPuReMD/src/random.h +++ b/sPuReMD/src/random.h @@ -22,23 +22,43 @@ #ifndef __RANDOM_H_ #define __RANDOM_H_ +/* Includes <stdlib.h> for random( ) */ #include "mytypes.h" -/* System random number generator used linear congruance method with - large periodicity for generation of pseudo random number. function - Random returns this random number appropriately scaled so that - 0 <= Random(range) < range */ -double Random( double ); - /* This function seeds the system pseudo random number generator with current time. Use this function once in the begining to initialize the system */ void Randomize( ); + +/* System random number generator used linear congruance method with + * large periodicity for generation of pseudo random number. Function + * Random returns this random number appropriately scaled so that + * 0 <= Random(range) < range. */ +static inline double Random( double range ) +{ + return (random( ) * range) / 2147483647L; +} + + /* GRandom return random number with gaussian distribution with mean - and standard deviation "sigma" */ -double GRandom( double, double ); + * and standard deviation "sigma." */ +static inline double GRandom( double mean, double sigma ) +{ + double v1 = Random(2.0) - 1.0; + double v2 = Random(2.0) - 1.0; + double rsq = v1 * v1 + v2 * v2; + + while (rsq >= 1.0 || rsq == 0.0) + { + v1 = Random(2.0) - 1.0; + v2 = Random(2.0) - 1.0; + rsq = v1 * v1 + v2 * v2; + } + + return mean + v1 * sigma * SQRT(-2.0 * LOG(rsq) / rsq); +} #endif diff --git a/sPuReMD/src/tool_box.c b/sPuReMD/src/tool_box.c index c0a61f51d633b63a5c3d8d360d08659cda3e9a80..1cc6ba72f6fa14fe5d501194932f5f1a8434e633 100644 --- a/sPuReMD/src/tool_box.c +++ b/sPuReMD/src/tool_box.c @@ -22,6 +22,7 @@ #include "tool_box.h" #include <ctype.h> +#include <sys/time.h> /************** taken from box.c **************/ diff --git a/sPuReMD/src/traj.c b/sPuReMD/src/traj.c index 03cc5d74e1a644fdc10d84e8c6b57d9331c1a644..35e893584f524d5bab66ffc88a120aa61c87fd3b 100644 --- a/sPuReMD/src/traj.c +++ b/sPuReMD/src/traj.c @@ -23,6 +23,8 @@ #include "list.h" +#include <zlib.h> + /************************************************/ /* CUSTOM FORMAT ROUTINES */ diff --git a/sPuReMD/src/traj.h b/sPuReMD/src/traj.h index 738bc19333b244a586e8a4bb63d29c275f7915cf..f4d074c8fdd8242737bb38693adad6c03c7638f5 100644 --- a/sPuReMD/src/traj.h +++ b/sPuReMD/src/traj.h @@ -24,8 +24,6 @@ #include "mytypes.h" -#include <zlib.h> - #define BLOCK_MARK "REAX_BLOCK_MARK " #define BLOCK_MARK_LEN 16 diff --git a/sPuReMD/src/vector.h b/sPuReMD/src/vector.h index f150b84cc933bb4f1f23d400473546794ce4cd00..5550a2d7354362ffcfe24bbdbd94bc77af0afc13 100644 --- a/sPuReMD/src/vector.h +++ b/sPuReMD/src/vector.h @@ -24,6 +24,8 @@ #include "mytypes.h" +#include "random.h" + /* file scope to make OpenMP shared (Vector_isZero) */ static unsigned int ret_omp; @@ -200,10 +202,6 @@ static inline void rvec_Copy( rvec dest, const rvec src ) { dest[i] = src[i]; } - -// dest[0] = src[0]; -// dest[1] = src[1]; -// dest[2] = src[2]; } static inline void rvec_Scale( rvec ret, const real c, const rvec v ) @@ -217,10 +215,6 @@ static inline void rvec_Scale( rvec ret, const real c, const rvec v ) { ret[i] = c * v[i]; } - -// ret[0] = c * v[0]; -// ret[1] = c * v[1]; -// ret[2] = c * v[2]; } @@ -235,10 +229,6 @@ static inline void rvec_Add( rvec ret, const rvec v ) { ret[i] += v[i]; } - -// ret[0] += v[0]; -// ret[1] += v[1]; -// ret[2] += v[2]; } @@ -253,10 +243,6 @@ static inline void rvec_ScaledAdd( rvec ret, const real c, const rvec v ) { ret[i] += c * v[i]; } - -// ret[0] += c * v[0]; -// ret[1] += c * v[1]; -// ret[2] += c * v[2]; } @@ -271,10 +257,6 @@ static inline void rvec_Sum( rvec ret, const rvec v1 , const rvec v2 ) { ret[i] = v1[i] + v2[i]; } - -// ret[0] = v1[0] + v2[0]; -// ret[1] = v1[1] + v2[1]; -// ret[2] = v1[2] + v2[2]; } @@ -290,10 +272,6 @@ static inline void rvec_ScaledSum( rvec ret, const real c1, const rvec v1, { ret[i] = c1 * v1[i] + c2 * v2[i]; } - -// ret[0] = c1 * v1[0] + c2 * v2[0]; -// ret[1] = c1 * v1[1] + c2 * v2[1]; -// ret[2] = c1 * v1[2] + c2 * v2[2]; } @@ -313,8 +291,6 @@ static inline real rvec_Dot( const rvec v1, const rvec v2 ) } return ret; - -// return (v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]); } @@ -335,8 +311,6 @@ static inline real rvec_ScaledDot( const real c1, const rvec v1, } return c1 * c2 * ret; - -// return (c1 * c2) * (v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]); } @@ -351,10 +325,6 @@ static inline void rvec_Multiply( rvec r, const rvec v1, const rvec v2 ) { r[i] = v1[i] * v2[i]; } - -// r[0] = v1[0] * v2[0]; -// r[1] = v1[1] * v2[1]; -// r[2] = v1[2] * v2[2]; } @@ -369,10 +339,6 @@ static inline void rvec_iMultiply( rvec r, const ivec v1, const rvec v2 ) { r[i] = v1[i] * v2[i]; } - -// r[0] = v1[0] * v2[0]; -// r[1] = v1[1] * v2[1]; -// r[2] = v1[2] * v2[2]; } @@ -387,10 +353,6 @@ static inline void rvec_Divide( rvec r, const rvec v1, const rvec v2 ) { r[i] = v1[i] / v2[i]; } - -// r[0] = v1[0] / v2[0]; -// r[1] = v1[1] / v2[1]; -// r[2] = v1[2] / v2[2]; } @@ -405,10 +367,6 @@ static inline void rvec_iDivide( rvec r, const rvec v1, const ivec v2 ) { r[i] = v1[i] / v2[i]; } - -// r[0] = v1[0] / v2[0]; -// r[1] = v1[1] / v2[1]; -// r[2] = v1[2] / v2[2]; } @@ -423,10 +381,6 @@ static inline void rvec_Invert( rvec r, const rvec v ) { r[i] = 1.0 / v[i]; } - -// r[0] = 1.0 / v[0]; -// r[1] = 1.0 / v[1]; -// r[2] = 1.0 / v[2]; } @@ -442,10 +396,6 @@ static inline void rvec_Cross( rvec ret, const rvec v1, const rvec v2 ) ret[i] = v1[(i + 1) % 3] * v2[(i + 2) % 3] - v1[(i + 2) % 3] * v2[(i + 1) % 3]; } - -// ret[0] = v1[1] * v2[2] - v1[2] * v2[1]; -// ret[1] = v1[2] * v2[0] - v1[0] * v2[2]; -// ret[2] = v1[0] * v2[1] - v1[1] * v2[0]; } @@ -479,8 +429,6 @@ static inline real rvec_Norm_Sqr( const rvec v ) } return ret; - -// return SQR(v[0]) + SQR(v[1]) + SQR(v[2]); } @@ -500,8 +448,6 @@ static inline real rvec_Norm( const rvec v ) } return SQRT( ret ); - -// return SQRT( SQR(v[0]) + SQR(v[1]) + SQR(v[2]) ); } @@ -520,14 +466,6 @@ static inline int rvec_isZero( const rvec v ) } return ret; - -// if ( FABS(v[0]) > ALMOST_ZERO || -// FABS(v[1]) > ALMOST_ZERO || -// FABS(v[2]) > ALMOST_ZERO ) -// { -// return FALSE; -// } -// return TRUE; } @@ -542,13 +480,11 @@ static inline void rvec_MakeZero( rvec v ) { v[i] = ZERO; } - -// v[0] = ZERO; -// v[1] = ZERO; -// v[2] = ZERO; } +/* Note: currently not thread-safe since uses random( ) underneath, + * change to reentrant version later if needed */ static inline void rvec_Random( rvec v ) { v[0] = Random(2.0) - 1.0; @@ -788,10 +724,6 @@ static inline void ivec_MakeZero( ivec v ) { v[i] = 0; } - -// v[0] = 0; -// v[1] = 0; -// v[2] = 0; } @@ -806,10 +738,6 @@ static inline void ivec_Copy( ivec dest, const ivec src ) { dest[i] = src[i]; } - -// dest[0] = src[0]; -// dest[1] = src[1]; -// dest[2] = src[2]; } @@ -824,10 +752,6 @@ static inline void ivec_Scale( ivec dest, const real C, const ivec src ) { dest[i] = C * src[i]; } - -// dest[0] = C * src[0]; -// dest[1] = C * src[1]; -// dest[2] = C * src[2]; } @@ -842,10 +766,6 @@ static inline void ivec_rScale( ivec dest, const real C, const rvec src ) { dest[i] = (int)(C * src[i]); } - -// dest[0] = (int)(C * src[0]); -// dest[1] = (int)(C * src[1]); -// dest[2] = (int)(C * src[2]); } @@ -864,12 +784,6 @@ static inline int ivec_isZero( const ivec v ) } return ret; - -// if ( v[0] == 0 && v[1] == 0 && v[2] == 0 ) -// { -// return TRUE; -// } -// return FALSE; } @@ -888,13 +802,6 @@ static inline int ivec_isEqual( const ivec v1, const ivec v2 ) } return ret; - -// if ( v1[0] == v2[0] && v1[1] == v2[1] && v1[2] == v2[2] ) -// { -// return TRUE; -// } -// -// return FALSE; } @@ -909,10 +816,6 @@ static inline void ivec_Sum( ivec dest, const ivec v1, const ivec v2 ) { dest[i] = v1[i] * v2[i]; } - -// dest[0] = v1[0] + v2[0]; -// dest[1] = v1[1] + v2[1]; -// dest[2] = v1[2] + v2[2]; } diff --git a/tools/driver.py b/tools/driver.py index 59a8c4a8ba7b6eda19fe08b8dcb9e61fd18e38fc..93163deaec3d723284d3d61d73d57d3d23df3fb3 100644 --- a/tools/driver.py +++ b/tools/driver.py @@ -1,6 +1,9 @@ #!/bin/python3 -from ctypes import * +from ctypes import c_int, c_double, c_char, c_char_p, c_void_p, \ + Structure, Union, POINTER, CFUNCTYPE, cdll +import sqlite3 as sq3 +from os import path class BondOrderData(Structure): @@ -220,7 +223,6 @@ class SimulationData(Structure): ("ext_press", c_double * 3), ("kin_press", c_double), ("tot_press", c_double * 3), - ("tot_press", c_double * 3), ("timing", ReaxTiming), ] @@ -236,6 +238,141 @@ class ReaxAtom(Structure): ] +def create_db(name='spuremd.db'): + conn = sq3.connect(name) + + conn.executescript(""" + CREATE TABLE simulation( + id integer, + date text, + name text, + ensemble_type integer, + steps integer, + time_step integer, + restart_format integer, + random_velocity integer, + reposition_atoms integer, + peroidic_boundary integer, + geo_format integer, + restrict_bonds integer, + tabulate_long_range integer, + reneighbor integer, + vlist_cutoff real, + neighbor_cutoff real, + three_body_cutoff real, + hydrogen_bond_cutoff real, + bond_graph_cutoff real, + charge_method integer, + cm_q_net real, + cm_solver_type integer, + cm_solver_max_iters integer, + cm_solver_restart integer, + cm_solver_q_err real, + cm_domain_sparsity real, + cm_solver_pre_comp_type integer, + cm_solver_pre_comp_refactor integer, + cm_solver_pre_comp_droptol real, + cm_solver_pre_comp_sweeps integer, + cm_solver_pre_comp_sai_thres real, + cm_solver_pre_app_type integer, + cm_solver_pre_app_jacobi_iters integer, + temp_init real, + temp_final real, + temp_mass real, + temp_mode integer, + temp_rate real, + temp_freq integer, + pressure real, + pressure_mass real, + compress integer, + pressure_mode integer, + remove_center_of_mass integer, + debug_level integer, + write_freq integer, + traj_compress integer, + traj_format integer, + traj_title text, + atom_info integer, + atom_velocities integer, + atom_forces integer, + bond_info integer, + angle_info integer, + test_forces integer, + molecule_analysis integer, + freq_molecule_analysis integer, + ignore integer, + dipole_analysis integer, + freq_dipole_analysis integer, + diffusion_coefficient integer, + freq_diffusion_coefficient integer, + restrict_type integer, + PRIMARY KEY (id) + ); + + CREATE TABLE system_properties( + id integer, + step integer, + total_energy real, + potential_energy real, + kinetic_energy real, + temperature real, + volume real, + pressure real, + PRIMARY KEY (id, step) + ); + + CREATE TABLE potential( + id integer, + step integer, + bond_energy real, + atom_energy real, + lone_pair_energy real, + angle_energy real, + coa_energy real, + hydrogen_bond_energy real, + torsion_energy real, + conjugation_energy real, + van_der_waals_energy real, + coulombic_energy real, + polarization_energy real, + PRIMARY KEY (id, step) + ); + + CREATE TABLE trajectory( + id integer, + step integer, + atom_id integer, + position_x real, + position_y real, + position_z real, + charge real, + PRIMARY KEY (id, step, atom_id) + ); + + CREATE TABLE performance( + id integer, + step integer, + time_total real, + time_nbrs real, + time_init real, + time_bonded real, + time_nonbonded real, + time_cm real, + time_cm_sort real, + cm_solver_iters integer, + time_cm_pre_comp real, + time_cm_pre_app real, + time_cm_solver_spmv real, + time_cm_solver_vec_ops real, + time_cm_solver_orthog real, + time_cm_solver_tri_solve real, + PRIMARY KEY (id, step) + ); + """) + + conn.close() + + if __name__ == '__main__': lib = cdll.LoadLibrary("libspuremd.so.1") @@ -258,10 +395,6 @@ if __name__ == '__main__': CALLBACKFUNC = CFUNCTYPE(None, POINTER(ReaxAtom), POINTER(SimulationData), POINTER(ReaxList)) - def get_simulation_step_results(atoms, data, lists): - print("{0:24.15f} {1:24.15f} {2:24.15f}".format( - data[0].E_Tot, data[0].E_Kin, data[0].E_Pot)) - setup_callback = lib.setup_callback setup_callback.restype = c_int @@ -269,6 +402,57 @@ if __name__ == '__main__': set_output_enabled.argtypes = [c_void_p, c_int] set_output_enabled.restype = c_int + db_file = "spuremd.db" + + if not path.isfile(db_file): + create_db(db_file) + + conn = sq3.connect(db_file) + record_potential = True + record_trajectory = False + record_performance = True + + def get_simulation_step_results(atoms, data, lists): + print("{0:24.15f} {1:24.15f} {2:24.15f}".format( + data[0].E_Tot, data[0].E_Kin, data[0].E_Pot)) + + if data[0].step == 0: + #TODO: insert data into simulation table + pass + + with conn: + conn.execute("INSERT INTO system_properties VALUES (?,?,?,?,?,?,?,?)", + (0, data[0].step, data[0].E_Tot, data[0].E_Pot, data[0].E_Kin, + data[0].therm.T, 0.0, data[0].iso_bar.P)) + # MISSING: ID, system->box.volume + + if record_potential: + with conn: + conn.execute("INSERT INTO potential VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", + (0, data[0].step, data[0].E_BE, data[0].E_Ov + data[0].E_Un, + data[0].E_Lp, data[0].E_Ang + data[0].E_Pen, data[0].E_Coa, + data[0].E_HB, data[0].E_Tor, data[0].E_Con, data[0].E_vdW, + data[0].E_Ele, data[0].E_Pol)) + + if record_trajectory: + with conn: + for i in range(6540): + conn.execute("INSERT INTO trajectory VALUES (?,?,?,?,?,?,?)", + (0, data[0].step, i, atoms[i].x[0], atoms[i].x[1], + atoms[i].x[2], atoms[i].q)) + + if record_performance: + with conn: + conn.execute("INSERT INTO performance VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + (0, data[0].step, data[0].timing.total, data[0].timing.nbrs, data[0].timing.init_forces, + data[0].timing.bonded, data[0].timing.nonb, data[0].timing.cm, + data[0].timing.cm_sort_mat_rows, data[0].timing.cm_solver_iters, + data[0].timing.cm_solver_pre_comp, + data[0].timing.cm_solver_pre_app, data[0].timing.cm_solver_spmv, + data[0].timing.cm_solver_vector_ops, data[0].timing.cm_solver_orthog, + data[0].timing.cm_solver_tri_solve)) + + handle = setup(b"data/benchmarks/water/water_6540.pdb", b"data/benchmarks/water/ffield.water", b"environ/param.gpu.water") @@ -288,4 +472,5 @@ if __name__ == '__main__': print("{0:9d} {1:24.15f} {2:24.15f} {3:24.15f} {4:24.15f}".format( i + 1, atoms[i].x[0], atoms[i].x[1], atoms[i].x[2], atoms[i].q)) + conn.close() cleanup(handle)