Skip to content
Snippets Groups Projects
Commit 9fc89eea authored by hchou10's avatar hchou10
Browse files

add some new kernel of functions and fix some bugs

parent d6e3280f
No related branches found
No related tags found
No related merge requests found
...@@ -243,10 +243,12 @@ int gridformat_writer(char* name, void* src) ...@@ -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); bytes_write = write(fildes, "#OpenDx file generated from grids reader/writer program\n",56);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < 56) else if(bytes_write < 56)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
...@@ -258,10 +260,12 @@ int gridformat_writer(char* name, void* src) ...@@ -258,10 +260,12 @@ int gridformat_writer(char* name, void* src)
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
...@@ -271,10 +275,12 @@ int gridformat_writer(char* name, void* src) ...@@ -271,10 +275,12 @@ int gridformat_writer(char* name, void* src)
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
...@@ -285,10 +291,12 @@ int gridformat_writer(char* name, void* src) ...@@ -285,10 +291,12 @@ int gridformat_writer(char* name, void* src)
bytes_write = write(fildes, buff, len); bytes_write = write(fildes, buff, len);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
...@@ -299,10 +307,12 @@ int gridformat_writer(char* name, void* src) ...@@ -299,10 +307,12 @@ int gridformat_writer(char* name, void* src)
bytes_write = write(fildes, buff, len); bytes_write = write(fildes, buff, len);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
...@@ -311,10 +321,12 @@ int gridformat_writer(char* name, void* src) ...@@ -311,10 +321,12 @@ int gridformat_writer(char* name, void* src)
bytes_write = write(fildes, buff, len); bytes_write = write(fildes, buff, len);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
...@@ -326,10 +338,12 @@ int gridformat_writer(char* name, void* src) ...@@ -326,10 +338,12 @@ int gridformat_writer(char* name, void* src)
bytes_write = write(fildes, buff, len); bytes_write = write(fildes, buff, len);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
} }
...@@ -340,10 +354,12 @@ int gridformat_writer(char* name, void* src) ...@@ -340,10 +354,12 @@ int gridformat_writer(char* name, void* src)
bytes_write = write(fildes, buff, len); bytes_write = write(fildes, buff, len);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
} }
...@@ -354,10 +370,12 @@ int gridformat_writer(char* name, void* src) ...@@ -354,10 +370,12 @@ int gridformat_writer(char* name, void* src)
bytes_write = write(fildes, buff, len); bytes_write = write(fildes, buff, len);
if(bytes_write < -1) if(bytes_write < -1)
{ {
perror("Error in writing");
return errno; return errno;
} }
else if(bytes_write < len) else if(bytes_write < len)
{ {
fprintf(stderr, "less bytes written");
return 9999; return 9999;
} }
} }
...@@ -583,3 +601,70 @@ void sum_grids(void* dest, int num, void** src) ...@@ -583,3 +601,70 @@ void sum_grids(void* dest, int num, void** src)
out->data[idx] += in[i]->data[idx]; 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;
}
CC=gcc CC=gcc
INC=-I/usr/include -I./inc INC=-I/usr/include -I./inc
ifeq ($(dbg),1) ifeq ($(dbg),1)
CFLAGS=-std=c99 -g -Og -Wall -Wextra CFLAGS= -std=c99 -D_GNU_SOURCE -g -Og -Wall -Wextra -lm
else else
CFLAGS=-std=c99 -O3 -Wall -Wextra CFLAGS= -std=c99 -D_GNU_SOURCE -O3 -Wall -Wextra -lm
endif endif
CLIB=-lfftw3 -lm CLIB=-lfftw3
OBJ=main.o GridDxFormat/grid_reader.o Kernel/debye_huckel_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
ifeq ($(dbg),1) ifeq ($(dbg),1)
EXE=gen_pot-dbg EXE=gen_pot-dbg
else else
EXE=gen_pot EXE=gen_pot
endif endif
EXE_SUM=sum_grid
all: ${EXE} all: ${EXE} ${EXE_SUM}
${EXE}:${OBJ} ${EXE}:${OBJ}
${CC} ${CFLAGS} ${INC} ${OBJ} -o ${EXE} ${CLIB} ${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 main.o: main.c
${CC} ${CFLAGS} ${INC} -c main.c -o main.o ${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 GridDxFormat/grid_reader.o: GridDxFormat/grid_reader.c
${CC} ${CFLAGS} ${INC} -c GridDxFormat/grid_reader.c -o GridDxFormat/grid_reader.o ${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 ...@@ -30,6 +36,12 @@ Kernel/debye_huckel_kernel.o:Kernel/debye_huckel_kernel.c
Kernel/lenard_jones_kernel.o:Kernel/lenard_jones_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 ${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 LinkList/link_list.o:LinkList/link_list.c
${CC} ${CFLAGS} ${INC} -c LinkList/link_list.c -o LinkList/link_list.o ${CC} ${CFLAGS} ${INC} -c LinkList/link_list.c -o LinkList/link_list.o
...@@ -37,4 +49,4 @@ fftw/fftw.o:fftw/fftw.c ...@@ -37,4 +49,4 @@ fftw/fftw.o:fftw/fftw.c
${CC} ${CFLAGS} ${INC} -c fftw/fftw.c -o fftw/fftw.o ${CC} ${CFLAGS} ${INC} -c fftw/fftw.c -o fftw/fftw.o
clean: clean:
rm -f ${OBJ} ${EXE} rm -f ${OBJ} ${EXE} ${EXE_SUM}
...@@ -18,4 +18,6 @@ typedef double (*compute_type)(size_t,size_t,size_t,double*,double**, void*); ...@@ -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 set_grid_data(void* src, compute_type compute, void* kernel);
void* resample_grid_data(void* src); void* resample_grid_data(void* src);
void sum_grids(void* dest, int num, 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 #endif
...@@ -5,3 +5,5 @@ typedef void (*destroy_type)(char*); ...@@ -5,3 +5,5 @@ typedef void (*destroy_type)(char*);
#endif #endif
#include "debye_huckel_kernel.h" #include "debye_huckel_kernel.h"
#include "lenard_jones_kernel.h" #include "lenard_jones_kernel.h"
#include "lenard_jones_trunc_kernel.h"
#include "lenard_jones_repulsion_kernel.h"
...@@ -91,9 +91,6 @@ int main(int argc, char** argv) ...@@ -91,9 +91,6 @@ int main(int argc, char** argv)
compute_type functor = find_list(compute_map, kernel_name); compute_type functor = find_list(compute_map, kernel_name);
set_grid_data(potential, functor, kernel); 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_complex* density_out, *potential_out;
fftw_plan plan1, plan2; fftw_plan plan1, plan2;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment