From bfe478fed6eaf8504d81d996b22fb6f794d233c2 Mon Sep 17 00:00:00 2001
From: "Kurt A. O'Hearn" <ohearnku@cse.msu.edu>
Date: Mon, 27 Feb 2017 18:51:20 -0500
Subject: [PATCH] Update data collection scripts.

---
 sPuReMD/src/charges.c | 36 ++++++++++++----
 sPuReMD/src/vector.c  |  7 ++-
 tools/run_sim.py      | 99 ++++++++++++++++++++++++-------------------
 3 files changed, 89 insertions(+), 53 deletions(-)

diff --git a/sPuReMD/src/charges.c b/sPuReMD/src/charges.c
index c2242449..54233396 100644
--- a/sPuReMD/src/charges.c
+++ b/sPuReMD/src/charges.c
@@ -585,7 +585,14 @@ static real diag_pre_comp( const sparse_matrix * const H, real * const Hdia_inv
         default(none) private(i)
     for ( i = 0; i < H->n; ++i )
     {
-        Hdia_inv[i] = 1.0 / H->val[H->start[i + 1] - 1];
+        if ( H->val[H->start[i + 1] - 1] != 0.0 )
+        {
+            Hdia_inv[i] = 1.0 / H->val[H->start[i + 1] - 1];
+        }
+        else
+        {
+            Hdia_inv[i] = 1.0;
+        }
     }
 
     return Get_Timing_Info( start );
@@ -2606,13 +2613,6 @@ static void ACKS2( reax_system * const system, control_params * const control,
     }
 
 //   Print_Linear_System( system, control, workspace, data->step );
-//    Print_Sparse_Matrix2( workspace->H, "H_0.out" );
-//    Print_Sparse_Matrix2( workspace->L, "L_0.out" );
-//    Print_Sparse_Matrix2( workspace->U, "U_0.out" );
-//    FILE * fp = fopen( "b.out", "w" );
-//    Vector_Print( fp, "b.out", workspace->b_s, system->N_cm );
-//    fclose( fp );
-//    exit(0);
 
     Extrapolate_Charges_EEM( system, control, data, workspace );
 
@@ -2663,6 +2663,16 @@ void Compute_Charges( reax_system * const system, control_params * const control
                       const list * const far_nbrs, const output_controls * const out_control )
 {
     int i;
+//    char fname[200];
+//    FILE * fp;
+
+//    if ( data->step == 10 || data->step == 50 || data->step == 100 )
+//    {
+//        sprintf( fname, "s_%d_%s.out", data->step, control->sim_name );
+//        fp = fopen( fname, "w" );
+//        Vector_Print( fp, NULL, workspace->s[0], system->N_cm );
+//        fclose( fp );
+//    }
 
     switch ( control->charge_method )
     {
@@ -2683,4 +2693,14 @@ void Compute_Charges( reax_system * const system, control_params * const control
         exit( INVALID_INPUT );
         break;
     }
+
+//    if ( data->step == 0 )
+//    {
+//        sprintf( fname, "H_%d_%s.out", data->step, control->sim_name );
+//        Print_Sparse_Matrix2( workspace->H, fname );
+//
+//        sprintf( fname, "b_%d_%s.out", data->step, control->sim_name );
+//        fp = fopen( fname, "w" );
+//        Vector_Print( fp, NULL, workspace->b_s, system->N_cm );
+//    }
 }
diff --git a/sPuReMD/src/vector.c b/sPuReMD/src/vector.c
index ba4a5ea3..483ba806 100644
--- a/sPuReMD/src/vector.c
+++ b/sPuReMD/src/vector.c
@@ -118,12 +118,15 @@ void Vector_Print( FILE * const fout, const char * const vname, const real * con
 {
     unsigned int i;
 
-    fprintf( fout, "%s:\n", vname );
+    if ( vname != NULL )
+    {
+        fprintf( fout, "%s:\n", vname );
+    }
+
     for ( i = 0; i < k; ++i )
     {
         fprintf( fout, "%24.15e\n", v[i] );
     }
-    fprintf( fout, "\n" );
 }
 
 
diff --git a/tools/run_sim.py b/tools/run_sim.py
index 3aa4ad51..2ee79c24 100644
--- a/tools/run_sim.py
+++ b/tools/run_sim.py
@@ -32,24 +32,32 @@ class TestCase():
                     r'(?P<key>nsteps\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
                 'tabulate_long_range': lambda l, x: sub(
                     r'(?P<key>tabulate_long_range\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'qeq_solver_type': lambda l, x: sub(
-                    r'(?P<key>qeq_solver_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'qeq_solver_q_err': lambda l, x: sub(
-                    r'(?P<key>qeq_solver_q_err\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'qeq_domain_sparsity': lambda l, x: sub(
-                    r'(?P<key>qeq_domain_sparsity\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'pre_comp_type': lambda l, x: sub(
-                    r'(?P<key>pre_comp_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'pre_comp_droptol': lambda l, x: sub(
-                    r'(?P<key>pre_comp_droptol\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'pre_comp_refactor': lambda l, x: sub(
-                    r'(?P<key>pre_comp_refactor\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'pre_comp_sweeps': lambda l, x: sub(
-                    r'(?P<key>pre_comp_sweeps\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'pre_app_type': lambda l, x: sub(
-                    r'(?P<key>pre_app_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
-                'pre_app_jacobi_iters': lambda l, x: sub(
-                    r'(?P<key>pre_app_jacobi_iters\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'charge_method': lambda l, x: sub(
+                    r'(?P<key>charge_method\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_q_net': lambda l, x: sub(
+                    r'(?P<key>cm_q_net\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_type': lambda l, x: sub(
+                    r'(?P<key>cm_solver_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_max_iters': lambda l, x: sub(
+                    r'(?P<key>cm_solver_max_iters\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_restart': lambda l, x: sub(
+                    r'(?P<key>cm_solver_restart\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_q_err': lambda l, x: sub(
+                    r'(?P<key>cm_solver_q_err\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_domain_sparsity': lambda l, x: sub(
+                    r'(?P<key>cm_domain_sparsity\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_pre_comp_type': lambda l, x: sub(
+                    r'(?P<key>cm_solver_pre_comp_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_pre_comp_droptol': lambda l, x: sub(
+                    r'(?P<key>cm_solver_pre_comp_droptol\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_pre_comp_refactor': lambda l, x: sub(
+                    r'(?P<key>cm_solver_pre_comp_refactor\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_pre_comp_sweeps': lambda l, x: sub(
+                    r'(?P<key>cm_solver_pre_comp_sweeps\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_pre_app_type': lambda l, x: sub(
+                    r'(?P<key>cm_solver_pre_app_type\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
+                'cm_solver_pre_app_jacobi_iters': lambda l, x: sub(
+                    r'(?P<key>cm_solver_pre_app_jacobi_iters\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
                 'geo_format': lambda l, x: sub(
                     r'(?P<key>geo_format\s+)\S+(?P<comment>.*)', r'\g<key>%s\g<comment>' % x, l), \
         }
@@ -88,15 +96,16 @@ class TestCase():
         for p in product(*[self.__params[k] for k in self.__param_names]):
             param_dict = dict((k, v) for (k, v) in zip(self.__param_names, p))
             param_dict['name'] = path.basename(self.__geo_file).split('.')[0] \
+                + '_cm' + param_dict['charge_method'] \
                 + '_s' + param_dict['nsteps'] \
-		+ '_q' + param_dict['qeq_solver_type'] \
- 		+ '_qtol' + param_dict['qeq_solver_q_err'] \
- 		+ '_qds' + param_dict['qeq_domain_sparsity'] \
-                + '_pc' + param_dict['pre_comp_type'] \
-                + '_pctol' + param_dict['pre_comp_droptol'] \
-                + '_pcs' + param_dict['pre_comp_sweeps'] \
-                + '_pa' + param_dict['pre_app_type'] \
-                + '_paji' + param_dict['pre_app_jacobi_iters'] \
+		+ '_q' + param_dict['cm_solver_type'] \
+ 		+ '_qtol' + param_dict['cm_solver_q_err'] \
+ 		+ '_qds' + param_dict['cm_domain_sparsity'] \
+                + '_pc' + param_dict['cm_solver_pre_comp_type'] \
+                + '_pctol' + param_dict['cm_solver_pre_comp_droptol'] \
+                + '_pcs' + param_dict['cm_solver_pre_comp_sweeps'] \
+                + '_pa' + param_dict['cm_solver_pre_app_type'] \
+                + '_paji' + param_dict['cm_solver_pre_app_jacobi_iters'] \
 		+ '_t' + param_dict['threads']
 
 
@@ -128,7 +137,7 @@ class TestCase():
 
     def _process_result(self, fout, param):
         time = 0.
-        qeq = 0.
+        cm = 0.
         iters = 0.
         pre_comp = 0.
         pre_app = 0.
@@ -143,7 +152,7 @@ class TestCase():
             for line in fp:
                 line = line.split()
                 try:
-                    qeq = qeq + float(line[6])
+                    cm = cm + float(line[6])
                     iters = iters + float(line[8])
                     pre_comp = pre_comp + float(line[9])
                     pre_app = pre_app + float(line[10])
@@ -159,7 +168,7 @@ class TestCase():
                         pass
             cnt = cnt - 1
             if cnt > 0:
-                qeq = qeq / cnt
+                cm = cm / cnt
                 iters = iters / cnt
                 pre_comp = pre_comp / cnt
                 pre_app = pre_app / cnt
@@ -167,10 +176,10 @@ class TestCase():
 
         if cnt == int(param['nsteps']):
             fout.write(self.__result_body_fmt.format(path.basename(self.__geo_file).split('.')[0], 
-                param['nsteps'], param['qeq_solver_type'], param['qeq_solver_q_err'], param['qeq_domain_sparsity'],
-                param['pre_comp_type'], param['pre_comp_droptol'], param['pre_comp_sweeps'],
-                param['pre_app_type'], param['pre_app_jacobi_iters'], pre_comp, pre_app, iters, spmv,
-                qeq, param['threads'], time))
+                param['nsteps'], param['cm_solver_type'], param['cm_solver_q_err'], param['cm_domain_sparsity'],
+                param['cm_solver_pre_comp_type'], param['cm_solver_pre_comp_droptol'], param['cm_solver_pre_comp_sweeps'],
+                param['cm_solver_pre_app_type'], param['cm_solver_pre_app_jacobi_iters'], pre_comp, pre_app, iters, spmv,
+                cm, param['threads'], time))
         else:
             print('**WARNING: nsteps not correct in file {0}...'.format(log_file))
         fout.flush()
@@ -205,22 +214,26 @@ if __name__ == '__main__':
 
     header_fmt_str = '{:15}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:10}|{:10}|{:10}|{:10}|{:10}|{:3}|{:10}\n'
     header_str = ['Data Set', 'Steps', 'QType', 'Q Tol', 'QDS', 'PreCT', 'PreCD', 'PreCS', 'PreAT', 'PreAJ', 'Pre Comp',
-            'Pre App', 'Iters', 'SpMV', 'QEq', 'Thd', 'Time (s)']
+            'Pre App', 'Iters', 'SpMV', 'CM', 'Thd', 'Time (s)']
     body_fmt_str = '{:15} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:3} {:10.3f}\n'
 
     params = {
             'ensemble_type': ['0'],
             'nsteps': ['20'],
             'tabulate_long_range': ['0'],
-            'qeq_solver_type': ['0'],
-            'qeq_solver_q_err': ['1e-6'],
-            'qeq_domain_sparsity': ['1.0'],
-            'pre_comp_type': ['2'],
-            'pre_comp_refactor': ['100'],
-            'pre_comp_droptol': ['0.0'],
-            'pre_comp_sweeps': ['3'],
-            'pre_app_type': ['2'],
-            'pre_app_jacobi_iters': ['30'],
+            'charge_method': ['0'],
+            'cm_q_net': ['0.0'],
+            'cm_solver_type': ['0'],
+            'cm_solver_max_iters': ['20'],
+            'cm_solver_restart': ['100'],
+            'cm_solver_q_err': ['1e-6'],
+            'cm_domain_sparsity': ['1.0'],
+            'cm_solver_pre_comp_type': ['2'],
+            'cm_solver_pre_comp_refactor': ['100'],
+            'cm_solver_pre_comp_droptol': ['0.0'],
+            'cm_solver_pre_comp_sweeps': ['3'],
+            'cm_solver_pre_app_type': ['2'],
+            'cm_solver_pre_app_jacobi_iters': ['30'],
             'threads': ['1'],
             'geo_format': [],
     }
-- 
GitLab