From 457733deaf6daff6d246c3e6ab1f202919df9649 Mon Sep 17 00:00:00 2001
From: Han-Yi Chou <hchou10@illinois.edu>
Date: Wed, 1 Apr 2020 21:37:55 -0500
Subject: [PATCH] add multiply constant to the grid

---
 GridDxFormat/grid_reader.c |  8 ++++++++
 Makefile                   | 11 +++++++----
 grid_tools/multiply.c      | 17 +++++++++++++++++
 inc/grid_reader.h          |  1 +
 4 files changed, 33 insertions(+), 4 deletions(-)
 create mode 100644 grid_tools/multiply.c

diff --git a/GridDxFormat/grid_reader.c b/GridDxFormat/grid_reader.c
index ef11ba8..551b473 100644
--- a/GridDxFormat/grid_reader.c
+++ b/GridDxFormat/grid_reader.c
@@ -610,6 +610,14 @@ void sub_grids(void* dest, void* s1, void* s2)
     for(size_t idx = 0; idx < out->size; idx++)
         out->data[idx] = src1->data[idx]-src2->data[idx];
 }
+
+void multiply_constant(void* dest, double a)
+{
+    grid* out = (grid*)dest;
+    for(size_t idx = 0; idx < out->size; idx++)
+        out->data[idx] *= a;
+}
+
 void pad_grid(void** g, int nx, int ny, int nz)
 {
     grid* src = (grid*)(*g);
diff --git a/Makefile b/Makefile
index 1451978..782c700 100644
--- a/Makefile
+++ b/Makefile
@@ -8,25 +8,25 @@ endif
 CLIB=-lfftw3
 OBJ=main.o GridDxFormat/grid_reader.o Kernel/debye_huckel_kernel.o Kernel/lenard_jones_repulsion_kernel.o Kernel/lenard_jones_trunc_kernel.o \
 LinkList/link_list.o fftw/fftw.o Kernel/lenard_jones_kernel.o Kernel/tabulated_pot_kernel.o Kernel/onc_elec_kernel.o Kernel/gaussian_kernel.o \
-Kernel/lenard_jones_kernel1.o
+Kernel/lenard_jones_kernel1.o 
 
 ifeq ($(dbg),1)
 	EXE=gen_pot-dbg
 else
 	EXE=gen_pot
 endif
-EXE_SUM=sum_grid slice_grid sub_grid
+EXE_SUM=sum_grid slice_grid sub_grid mult_grid
 
 all: ${EXE} ${EXE_SUM}
 
 ${EXE}:${OBJ}
 	${CC} ${CFLAGS} ${INC} ${OBJ} -o ${EXE} ${CLIB}
 
-${EXE_SUM}: grid_tools/sum.o GridDxFormat/grid_reader.o grid_tools/slice.o grid_tools/sub.o
+${EXE_SUM}: grid_tools/sum.o GridDxFormat/grid_reader.o grid_tools/slice.o grid_tools/sub.o grid_tools/multiply.o
 	${CC} ${CFLAGS} ${INC} grid_tools/sum.o GridDxFormat/grid_reader.o -o sum_grid
 	${CC} ${CFLAGS} ${INC} grid_tools/slice.o GridDxFormat/grid_reader.o -o slice_grid
 	${CC} ${CFLAGS} ${INC} grid_tools/sub.o GridDxFormat/grid_reader.o -o sub_grid
-
+	${CC} ${CFLAGS} ${INC} grid_tools/multiply.o GridDxFormat/grid_reader.o -o mult_grid
 main.o: main.c
 	${CC} ${CFLAGS} ${INC} -c main.c -o main.o
 
@@ -36,6 +36,9 @@ grid_tools/sub.o: grid_tools/sub.c
 grid_tools/sum.o: grid_tools/sum.c
 	${CC} ${CFLAGS} ${INC} -c grid_tools/sum.c -o grid_tools/sum.o
 
+grid_tools/multiply.o: grid_tools/multiply.c
+	${CC} ${CFLAGS} ${INC} -c grid_tools/multiply.c -o grid_tools/multiply.o
+
 grid_tools/slice.o: grid_tools/slice.c
 	${CC} ${CFLAGS} ${INC} -c grid_tools/slice.c -o grid_tools/slice.o
 
diff --git a/grid_tools/multiply.c b/grid_tools/multiply.c
new file mode 100644
index 0000000..8655d4b
--- /dev/null
+++ b/grid_tools/multiply.c
@@ -0,0 +1,17 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include "grid_reader.h"
+
+int main(int argc, char** argv)
+{
+    double a = (double)atof(argv[3]);
+    void* grid;
+    grid = gridformat_reader(argv[1]);
+    multiply_constant(grid, a);
+
+    gridformat_writer(argv[2], grid); 
+    grid_destroy(grid);
+    return 0;
+}
diff --git a/inc/grid_reader.h b/inc/grid_reader.h
index b3f5f69..3817a66 100644
--- a/inc/grid_reader.h
+++ b/inc/grid_reader.h
@@ -22,4 +22,5 @@ void sub_grids(void* dest, void* s1, void* s2);
 void pad_grid(void** g, int nx, int ny, int nz);
 void slice_grid(void** g, int nx, int ny, int nz);
 void* create_new_grid(size_t nx, size_t ny, size_t nz, double* origin, double** basis);
+void multiply_constant(void* dest, double a);
 #endif
-- 
GitLab