diff --git a/GridDxFormat/grid_reader.c b/GridDxFormat/grid_reader.c index e90d9024e596765d59bc945ed308d3a1709e1a4e..ef11ba833c05ea713b15d8dc2ff9d9fdf5f6b9b8 100644 --- a/GridDxFormat/grid_reader.c +++ b/GridDxFormat/grid_reader.c @@ -405,7 +405,7 @@ void set_grid_data(void* src, compute_type compute, void* kernel) } } -static void* create_new_grid(size_t nx, size_t ny, size_t nz, double* origin, double** basis) +void* create_new_grid(size_t nx, size_t ny, size_t nz, double* origin, double** basis) { void* g = malloc(sizeof(grid)); ((grid*)g)->nx = nx; @@ -602,6 +602,14 @@ void sum_grids(void* dest, int num, void** src) } } +void sub_grids(void* dest, void* s1, void* s2) +{ + grid* src1 = (grid*)s1; + grid* src2 = (grid*)s2; + grid* out = (grid*)dest; + for(size_t idx = 0; idx < out->size; idx++) + out->data[idx] = src1->data[idx]-src2->data[idx]; +} void pad_grid(void** g, int nx, int ny, int nz) { grid* src = (grid*)(*g); @@ -628,7 +636,12 @@ void pad_grid(void** g, int nx, int ny, int nz) } } grid_destroy(src); - *g = dest; + *g = dest; + double* o = get_grid_origin(*g); + double** b= get_grid_basis(*g); + o[0] -= (nx-old_nx)/2*b[0][0]; + o[1] -= (ny-old_ny)/2*b[1][1]; + o[2] -= (nz-old_nz)/2*b[2][2]; } void slice_grid(void** g, int nx, int ny, int nz) @@ -659,12 +672,17 @@ void slice_grid(void** g, int nx, int ny, int nz) for(int k = k0; k < k1; ++k) { int old = k + old_nz * ( j + old_ny * i); - int new = k+(nz-old_nz)/2 + nz * ( j + (ny-old_ny)/2 + ny * (i +(nx-old_nx)/2)); + int new = (k-k0) + nz * ( j - j0 + ny * (i - i0)); (get_grid_data(dest))[new] = (get_grid_data(src))[old]; } } } grid_destroy(src); - *g = dest; + *g = dest; + double* o = get_grid_origin(*g); + double** b = get_grid_basis(*g); + o[0] -= (nx-old_nx)/2*b[0][0]; + o[1] -= (ny-old_ny)/2*b[1][1]; + o[2] -= (nz-old_nz)/2*b[2][2]; } diff --git a/Kernel/debye_huckel_kernel.c b/Kernel/debye_huckel_kernel.c index b7f840f8c7b807884c90076b30e51ea0bb693441..04df7504b2418b48ea8d07721466218187d69df6 100644 --- a/Kernel/debye_huckel_kernel.c +++ b/Kernel/debye_huckel_kernel.c @@ -6,7 +6,7 @@ struct debye_huckel_kernel { double screen_length; - double shift; + double epsilon; }; void* debye_huckel_create(char* name) @@ -35,11 +35,11 @@ void* debye_huckel_create(char* name) return NULL; } } - else if(strcmp(tmp, "Shift") == 0) + else if(strcmp(tmp, "Dielectric") == 0) { tmp = strtok(NULL, " "); if(tmp != NULL) - ((debye_huckel_kernel*)src)->shift = atof(tmp); + ((debye_huckel_kernel*)src)->epsilon = atof(tmp); else { printf("Error formating\n"); @@ -54,6 +54,7 @@ void* debye_huckel_create(char* name) return NULL; } } + fclose(infile); return src; } @@ -63,9 +64,14 @@ double debye_huckel_compute(size_t i, size_t j, size_t k, double* origin, double double pos[3]; for(size_t dim = 0; dim < 3; ++dim) pos[dim] = basis[dim][0]*i + basis[dim][1]*j + basis[dim][2]*k + origin[dim]; - double d = sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]); - double e = exp(-d/kernel->screen_length)/(d+kernel->shift); - return (e > 100) ? 100: e; + double d = sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]); + if(d > 0.) + { + double e = exp(-d/kernel->screen_length)/d/kernel->epsilon; + return (e > 20.) ? 20.: e; + } + else + return 20.; } void debye_huckel_destroy(void* src) diff --git a/Kernel/lenard_jones_kernel.c b/Kernel/lenard_jones_kernel.c index 12a7e481c38cacc26536e7902c99f7ac985c0934..a1f31df00995cf2d8c9650baa6453b22e2c9c84b 100644 --- a/Kernel/lenard_jones_kernel.c +++ b/Kernel/lenard_jones_kernel.c @@ -54,6 +54,7 @@ void* lenard_jones_create(char* name) return NULL; } } + fclose(infile); return src; } diff --git a/Kernel/lenard_jones_repulsion_kernel.c b/Kernel/lenard_jones_repulsion_kernel.c index 735c45eef9d550950b7f6e2fc788a458c34d792d..c2c150522fdd259e646eeb94b39df15b19ca1ad0 100644 --- a/Kernel/lenard_jones_repulsion_kernel.c +++ b/Kernel/lenard_jones_repulsion_kernel.c @@ -54,6 +54,7 @@ void* lenard_jones_repulsion_create(char* name) return NULL; } } + fclose(infile); return src; } diff --git a/Kernel/lenard_jones_trunc_kernel.c b/Kernel/lenard_jones_trunc_kernel.c index e5dad1c55810c1f6ab42ff2d5c611ba2edbfdf7f..e7e0f82d68a889efce7cab8e41d325a7188c9878 100644 --- a/Kernel/lenard_jones_trunc_kernel.c +++ b/Kernel/lenard_jones_trunc_kernel.c @@ -72,6 +72,7 @@ void* lenard_jones_trunc_create(char* name) } ((lenard_jones_trunc_kernel*)src)->c6 /= ((lenard_jones_trunc_kernel*)src)->scaling; ((lenard_jones_trunc_kernel*)src)->c12 /= ((lenard_jones_trunc_kernel*)src)->scaling; + fclose(infile); return src; } diff --git a/Makefile b/Makefile index c9d44be93910d91ffe33361f6506cf0eed57e3ad..14519783b60aa5caa0c82a0ae05863774f5a1ebe 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,43 @@ CC=gcc -INC=-I/usr/include -I./inc +INC=-I/usr/include -I/home/hchou10/GenerateGridPotential/inc ifeq ($(dbg),1) CFLAGS= -std=c99 -D_GNU_SOURCE -g -Og -Wall -Wextra -lm else CFLAGS= -std=c99 -D_GNU_SOURCE -O3 -Wall -Wextra -lm 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 +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 + ifeq ($(dbg),1) EXE=gen_pot-dbg else EXE=gen_pot endif -EXE_SUM=sum_grid +EXE_SUM=sum_grid slice_grid sub_grid + all: ${EXE} ${EXE_SUM} ${EXE}:${OBJ} ${CC} ${CFLAGS} ${INC} ${OBJ} -o ${EXE} ${CLIB} -${EXE_SUM}: sum.o GridDxFormat/grid_reader.o - ${CC} ${CFLAGS} ${INC} sum.o GridDxFormat/grid_reader.o -o ${EXE_SUM} +${EXE_SUM}: grid_tools/sum.o GridDxFormat/grid_reader.o grid_tools/slice.o grid_tools/sub.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 main.o: main.c ${CC} ${CFLAGS} ${INC} -c main.c -o main.o -sum.o: sum.c - ${CC} ${CFLAGS} ${INC} -c sum.c -o sum.o +grid_tools/sub.o: grid_tools/sub.c + ${CC} ${CFLAGS} ${INC} -c grid_tools/sub.c -o grid_tools/sub.o + +grid_tools/sum.o: grid_tools/sum.c + ${CC} ${CFLAGS} ${INC} -c grid_tools/sum.c -o grid_tools/sum.o + +grid_tools/slice.o: grid_tools/slice.c + ${CC} ${CFLAGS} ${INC} -c grid_tools/slice.c -o grid_tools/slice.o GridDxFormat/grid_reader.o: GridDxFormat/grid_reader.c ${CC} ${CFLAGS} ${INC} -c GridDxFormat/grid_reader.c -o GridDxFormat/grid_reader.o @@ -36,12 +48,24 @@ Kernel/debye_huckel_kernel.o:Kernel/debye_huckel_kernel.c Kernel/lenard_jones_kernel.o:Kernel/lenard_jones_kernel.c ${CC} ${CFLAGS} ${INC} -c Kernel/lenard_jones_kernel.c -o Kernel/lenard_jones_kernel.o +Kernel/lenard_jones_kernel1.o:Kernel/lenard_jones_kernel1.c + ${CC} ${CFLAGS} ${INC} -c Kernel/lenard_jones_kernel1.c -o Kernel/lenard_jones_kernel1.o + Kernel/lenard_jones_trunc_kernel.o:Kernel/lenard_jones_trunc_kernel.c ${CC} ${CFLAGS} ${INC} -c Kernel/lenard_jones_trunc_kernel.c -o Kernel/lenard_jones_trunc_kernel.o Kernel/lenard_jones_repulsion_kernel.o:Kernel/lenard_jones_repulsion_kernel.c ${CC} ${CFLAGS} ${INC} -c Kernel/lenard_jones_repulsion_kernel.c -o Kernel/lenard_jones_repulsion_kernel.o +Kernel/tabulated_pot_kernel.o:Kernel/tabulated_pot_kernel.c + ${CC} ${CFLAGS} ${INC} -c Kernel/tabulated_pot_kernel.c -o Kernel/tabulated_pot_kernel.o + +Kernel/onc_elec_kernel.o:Kernel/onc_elec_kernel.c + ${CC} ${CFLAGS} ${INC} -c Kernel/onc_elec_kernel.c -o Kernel/onc_elec_kernel.o + +Kernel/gaussian_kernel.o:Kernel/gaussian_kernel.c + ${CC} ${CFLAGS} ${INC} -c Kernel/gaussian_kernel.c -o Kernel/gaussian_kernel.o + LinkList/link_list.o:LinkList/link_list.c ${CC} ${CFLAGS} ${INC} -c LinkList/link_list.c -o LinkList/link_list.o @@ -49,4 +73,4 @@ fftw/fftw.o:fftw/fftw.c ${CC} ${CFLAGS} ${INC} -c fftw/fftw.c -o fftw/fftw.o clean: - rm -f ${OBJ} ${EXE} ${EXE_SUM} + rm -f ${OBJ} ${EXE} ${EXE_SUM} grid_tools/*.o diff --git a/inc/grid_reader.h b/inc/grid_reader.h index 7b6c6d7ba517595f1bf5f52a2e20d2ff15653b1d..b3f5f694d03b3af694d2b3f887258f8a000054b9 100644 --- a/inc/grid_reader.h +++ b/inc/grid_reader.h @@ -18,6 +18,8 @@ typedef double (*compute_type)(size_t,size_t,size_t,double*,double**, void*); void set_grid_data(void* src, compute_type compute, void* kernel); void* resample_grid_data(void* src); void sum_grids(void* dest, int num, void** src); +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); #endif diff --git a/inc/kernel.h b/inc/kernel.h index 971a74e64314c82cc9e9aafb060cf11515cbe160..51936b69f03a389151a5986e1cffad4f5301ba78 100644 --- a/inc/kernel.h +++ b/inc/kernel.h @@ -7,3 +7,7 @@ typedef void (*destroy_type)(char*); #include "lenard_jones_kernel.h" #include "lenard_jones_trunc_kernel.h" #include "lenard_jones_repulsion_kernel.h" +#include "tabulated_pot_kernel.h" +#include "onc_elec_kernel.h" +#include "gaussian_kernel.h" +#include "lenard_jones_kernel1.h"