From 71baca19801bf611edbd078b821ecd44c47115c5 Mon Sep 17 00:00:00 2001
From: Abdullah Alperen <alperena@msu.edu>
Date: Fri, 2 Mar 2018 18:25:38 -0500
Subject: [PATCH] charge method passed as parameter to SAI setup

---
 sPuReMD/src/charges.c | 6 +++---
 sPuReMD/src/lin_alg.c | 8 +++++++-
 sPuReMD/src/lin_alg.h | 2 +-
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/sPuReMD/src/charges.c b/sPuReMD/src/charges.c
index 5d2faa7..fbc3b90 100644
--- a/sPuReMD/src/charges.c
+++ b/sPuReMD/src/charges.c
@@ -864,7 +864,7 @@ static void Setup_Preconditioner_QEq( const reax_system * const system,
         case SAI_PC:
             setup_sparse_approx_inverse( Hptr, &workspace->H_full, &workspace->H_spar_patt,
                     &workspace->H_spar_patt_full, &workspace->H_app_inv,
-                    control->cm_solver_pre_comp_sai_thres );
+                    control->cm_solver_pre_comp_sai_thres, control->charge_method );
             break;
 
         default:
@@ -1009,7 +1009,7 @@ static void Setup_Preconditioner_EE( const reax_system * const system,
         case SAI_PC:
             setup_sparse_approx_inverse( Hptr, &workspace->H_full, &workspace->H_spar_patt,
                     &workspace->H_spar_patt_full, &workspace->H_app_inv,
-                    control->cm_solver_pre_comp_sai_thres );
+                    control->cm_solver_pre_comp_sai_thres, control->charge_method );
             break;
 
         default:
@@ -1158,7 +1158,7 @@ static void Setup_Preconditioner_ACKS2( const reax_system * const system,
         case SAI_PC:
             setup_sparse_approx_inverse( Hptr, &workspace->H_full, &workspace->H_spar_patt,
                     &workspace->H_spar_patt_full, &workspace->H_app_inv,
-                    control->cm_solver_pre_comp_sai_thres );
+                    control->cm_solver_pre_comp_sai_thres, control->charge_method );
             break;
 
         default:
diff --git a/sPuReMD/src/lin_alg.c b/sPuReMD/src/lin_alg.c
index 1f17ed7..7dedd27 100644
--- a/sPuReMD/src/lin_alg.c
+++ b/sPuReMD/src/lin_alg.c
@@ -224,7 +224,7 @@ static void compute_full_sparse_matrix( const sparse_matrix * const A,
  *   Each row of A has at least one non-zero (i.e., no rows with all zeros) */
 void setup_sparse_approx_inverse( const sparse_matrix * const A, sparse_matrix ** A_full,
               sparse_matrix ** A_spar_patt, sparse_matrix **A_spar_patt_full,
-                    sparse_matrix ** A_app_inv, const real filter )
+                    sparse_matrix ** A_app_inv, const real filter, const unsigned int cm )
 {
     int i, pj, size;
     int left, right, k, p, turn;
@@ -335,6 +335,12 @@ void setup_sparse_approx_inverse( const sparse_matrix * const A, sparse_matrix *
                 (*A_spar_patt)->j[size] = A->j[pj];
                 size++;
             }
+            else if ( ( cm == ACKS2_CM ) && ( i >= (A->n)/2 ) && ( i == A->j[pj] + (A->n)/2 ) )
+            {
+                (*A_spar_patt)->val[size] = A->val[pj];
+                (*A_spar_patt)->j[size] = A->j[pj];
+                size++;
+            }
         }
     }
     (*A_spar_patt)->start[A->n] = size;
diff --git a/sPuReMD/src/lin_alg.h b/sPuReMD/src/lin_alg.h
index ab0237c..edcda89 100644
--- a/sPuReMD/src/lin_alg.h
+++ b/sPuReMD/src/lin_alg.h
@@ -33,7 +33,7 @@ typedef enum
 void Sort_Matrix_Rows( sparse_matrix * const );
 
 void setup_sparse_approx_inverse( const sparse_matrix * const, sparse_matrix **, 
-        sparse_matrix **, sparse_matrix **, sparse_matrix **, const real );
+        sparse_matrix **, sparse_matrix **, sparse_matrix **, const real, const unsigned int );
 
 int Estimate_LU_Fill( const sparse_matrix * const, const real * const );
 
-- 
GitLab