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)
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;
}
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}
......@@ -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
......@@ -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"
......@@ -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;
......
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