diff --git a/GridDxFormat/grid_reader.c b/GridDxFormat/grid_reader.c index 909a77a9489e389024760c0c979e160e36744e57..e90d9024e596765d59bc945ed308d3a1709e1a4e 100644 --- a/GridDxFormat/grid_reader.c +++ b/GridDxFormat/grid_reader.c @@ -243,10 +243,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, "#OpenDx file generated from grids reader/writer program\n",56); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < 56) { + fprintf(stderr, "less bytes written"); return 9999; } @@ -258,10 +260,12 @@ int gridformat_writer(char* name, void* src) if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } @@ -271,10 +275,12 @@ int gridformat_writer(char* name, void* src) if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } @@ -285,10 +291,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, buff, len); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } @@ -299,10 +307,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, buff, len); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } @@ -311,10 +321,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, buff, len); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } @@ -326,10 +338,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, buff, len); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } } @@ -340,10 +354,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, buff, len); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } } @@ -354,10 +370,12 @@ int gridformat_writer(char* name, void* src) bytes_write = write(fildes, buff, len); if(bytes_write < -1) { + perror("Error in writing"); return errno; } else if(bytes_write < len) { + fprintf(stderr, "less bytes written"); return 9999; } } @@ -583,3 +601,70 @@ void sum_grids(void* dest, int num, void** src) out->data[idx] += in[i]->data[idx]; } } + +void pad_grid(void** g, int nx, int ny, int nz) +{ + grid* src = (grid*)(*g); + int old_nx = get_nx(src); + int old_ny = get_ny(src); + int old_nz = get_nz(src); + if(nx < old_nx || ny < old_ny || nz < old_nz) + { + fprintf(stderr, "New grid dimension is smaller than old one, use slice function\n"); + return; + } + grid* dest = create_new_grid(nx, ny, nz, get_grid_origin(src), get_grid_basis(src)); + + for(int i = 0; i < old_nx; ++i) + { + for(int j = 0; j < old_ny; ++j) + { + for(int k = 0; k < old_nz; ++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)); + (get_grid_data(dest))[new] = (get_grid_data(src))[old]; + } + } + } + grid_destroy(src); + *g = dest; +} + +void slice_grid(void** g, int nx, int ny, int nz) +{ + grid* src = (grid*)(*g); + int old_nx = get_nx(src); + int old_ny = get_ny(src); + int old_nz = get_nz(src); + if(nx > old_nx || ny > old_ny || nz > old_nz) + { + fprintf(stderr, "New grid dimension is bigger than old one, use pad function\n"); + return; + } + grid* dest = create_new_grid(nx, ny, nz, get_grid_origin(src), get_grid_basis(src)); + + int i0 = (old_nx-nx)/2; + int i1 = i0 + nx; + + int j0 = (old_ny-ny)/2; + int j1 = j0 + ny; + + int k0 = (old_nz-nz)/2; + int k1 = k0 + nz; + for(int i = i0; i < i1; ++i) + { + for(int j = j0; j < j1; ++j) + { + 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)); + (get_grid_data(dest))[new] = (get_grid_data(src))[old]; + } + } + } + grid_destroy(src); + *g = dest; +} + diff --git a/Makefile b/Makefile index 7cc29d2a906ce553a26be66c1402b77e4a5f22e5..c9d44be93910d91ffe33361f6506cf0eed57e3ad 100644 --- a/Makefile +++ b/Makefile @@ -1,26 +1,32 @@ CC=gcc INC=-I/usr/include -I./inc ifeq ($(dbg),1) - CFLAGS=-std=c99 -g -Og -Wall -Wextra + CFLAGS= -std=c99 -D_GNU_SOURCE -g -Og -Wall -Wextra -lm else - CFLAGS=-std=c99 -O3 -Wall -Wextra + CFLAGS= -std=c99 -D_GNU_SOURCE -O3 -Wall -Wextra -lm endif -CLIB=-lfftw3 -lm -OBJ=main.o GridDxFormat/grid_reader.o Kernel/debye_huckel_kernel.o LinkList/link_list.o fftw/fftw.o Kernel/lenard_jones_kernel.o +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 ifeq ($(dbg),1) EXE=gen_pot-dbg else EXE=gen_pot endif - -all: ${EXE} +EXE_SUM=sum_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} + 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 + GridDxFormat/grid_reader.o: GridDxFormat/grid_reader.c ${CC} ${CFLAGS} ${INC} -c GridDxFormat/grid_reader.c -o GridDxFormat/grid_reader.o @@ -30,6 +36,12 @@ 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_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 + LinkList/link_list.o:LinkList/link_list.c ${CC} ${CFLAGS} ${INC} -c LinkList/link_list.c -o LinkList/link_list.o @@ -37,4 +49,4 @@ fftw/fftw.o:fftw/fftw.c ${CC} ${CFLAGS} ${INC} -c fftw/fftw.c -o fftw/fftw.o clean: - rm -f ${OBJ} ${EXE} + rm -f ${OBJ} ${EXE} ${EXE_SUM} diff --git a/inc/grid_reader.h b/inc/grid_reader.h index e5c04d8858136f10adfe193fe0952f0bd8f3767c..7b6c6d7ba517595f1bf5f52a2e20d2ff15653b1d 100644 --- a/inc/grid_reader.h +++ b/inc/grid_reader.h @@ -18,4 +18,6 @@ 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 pad_grid(void** g, int nx, int ny, int nz); +void slice_grid(void** g, int nx, int ny, int nz); #endif diff --git a/inc/kernel.h b/inc/kernel.h index ced6030d26339cbdb2f6ec82084652f809e4bb88..971a74e64314c82cc9e9aafb060cf11515cbe160 100644 --- a/inc/kernel.h +++ b/inc/kernel.h @@ -5,3 +5,5 @@ typedef void (*destroy_type)(char*); #endif #include "debye_huckel_kernel.h" #include "lenard_jones_kernel.h" +#include "lenard_jones_trunc_kernel.h" +#include "lenard_jones_repulsion_kernel.h" diff --git a/main.c b/main.c index 915ab6634785c8f65736a614982e2c5d79b2d035..483d6a6919da2e88c10e886f6c8e700b76c0b5ac 100644 --- a/main.c +++ b/main.c @@ -91,9 +91,6 @@ int main(int argc, char** argv) compute_type functor = find_list(compute_map, kernel_name); set_grid_data(potential, functor, kernel); - //gridformat_writer("kernel.dx", potential); - //shift_zero_frequency(get_nx(density), get_ny(density), get_nz(density), get_grid_data(density)); - //shift_zero_frequency(get_nx(potential), get_ny(potential), get_nz(potential), get_grid_data(potential)); fftw_complex* density_out, *potential_out; fftw_plan plan1, plan2;