X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fposic.git;a=blobdiff_plain;f=moldyn.h;fp=moldyn.h;h=0670f3d19239ada190d6c7d65fd99317392af295;hp=b2d6a3405ff13d3f66a1d60557510ef4397aaa1f;hb=6e6d7126ea9a845f11637d8e1b8eb2b570ac4dc9;hpb=97dc63eb6a519b8e1f4fbfaa9760dd94539436b0 diff --git a/moldyn.h b/moldyn.h index b2d6a34..0670f3d 100644 --- a/moldyn.h +++ b/moldyn.h @@ -45,6 +45,7 @@ typedef struct s_atom { u8 brand; /* brand id */ int tag; /* atom unique id (number of atom) */ u8 attr; /* attributes */ + int pbc[3]; /* pb crossing in x, y and z direction */ } t_atom; #define ATOM_ATTR_FP 0x01 /* fixed position (bulk material) */ @@ -58,6 +59,12 @@ typedef struct s_atom { #define DEFAULT_ATOM_ATTR 0x74 // 1,2,3 body interaction + visualize +/* special list structure for low mem approach */ +typedef struct s_lowmem_list { + int *head; + int *list; +} t_lowmem_list; + /* cell lists */ typedef struct s_linkcell { int nx,ny,nz; /* amount of cells in x, y and z direction */ @@ -66,6 +73,8 @@ typedef struct s_linkcell { double x,y,z; /* the actual cell lengthes */ #ifdef STATIC_LISTS int **subcell; /* pointer to the cell lists */ +#elif LOWMEM_LISTS + t_lowmem_list *subcell; /* low mem approach list */ #else t_list *subcell; /* pointer to the cell lists */ #endif @@ -132,14 +141,22 @@ typedef struct s_moldyn { double t_sum; /* sum over all t */ double t_avg; /* average value of t */ + /* for sale! */ t_virial gvir; /* global virial (absolute coordinates) */ - double gv; - double gv_sum; - double gv_avg; - - double gp; /* pressure computed from global virial */ - double gp_sum; /* sum over all gp */ - double gp_avg; /* average value of gp */ + //double gv; + //double gv_sum; + //double gv_avg; + double sale1; + double sale2; + double sale3; + + // gp stuff exchanged by kinetic energies + //double gp; /* pressure computed from global virial */ + //double gp_sum; /* sum over all gp */ + //double gp_avg; /* average value of gp */ + double ekinx; + double ekiny; + double ekinz; t_virial vir; /* actual virial */ double virial; @@ -245,6 +262,43 @@ typedef struct s_vb { int fd; } t_vb; +typedef struct s_part_params { + u8 type; + double r; + t_3dvec p; + t_3dvec d; +} t_part_params; + +#define PART_INSIDE_R 1 +#define PART_OUTSIDE_R 2 +#define PART_INSIDE_D 3 +#define PART_OUTSIDE_D 4 + +typedef struct s_defect_params { + u8 type; + u8 stype; + double od; + double dd; + int element; + u8 brand; + u8 attr; +} t_defect_params; + +#define DEFECT_TYPE_0D 1 +#define DEFECT_TYPE_1D 2 +#define DEFECT_TYPE_2D 3 +#define DEFECT_TYPE_3D 4 + +#define DEFECT_STYPE_DB_X 1 +#define DEFECT_STYPE_DB_Y 2 +#define DEFECT_STYPE_DB_Z 3 +#define DEFECT_STYPE_DB_R 4 + +typedef struct s_offset_params { + t_3dvec o; + u8 use; +} t_offset_params; + /* * * defines @@ -356,12 +410,13 @@ typedef struct s_vb { #define FCC 0x02 #define DIAMOND 0x04 #define ZINCBLENDE 0x08 +#define NONE 0x80 /* * more includes */ -#include "pse.h" +//#include "pse.h" /* * @@ -391,14 +446,19 @@ int moldyn_set_report(t_moldyn *moldyn,char *author,char *title); int moldyn_set_log(t_moldyn *moldyn,u8 type,int timer); int moldyn_log_shutdown(t_moldyn *moldyn); -int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element,double mass, - u8 attr,u8 brand,int a,int b,int c,t_3dvec *origin); -int add_atom(t_moldyn *moldyn,int element,double mass,u8 brand,u8 attr, +int create_lattice(t_moldyn *moldyn,u8 type,double lc,int element, + u8 attr,u8 brand,int a,int b,int c,t_3dvec *origin, + t_part_params *p_params,t_defect_params *d_params, + t_offset_params *o_params); +int add_atom(t_moldyn *moldyn,int element,u8 brand,u8 attr, t_3dvec *r,t_3dvec *v); int del_atom(t_moldyn *moldyn,int tag); -int cubic_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin); -int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin); -int diamond_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin); +int cubic_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin, + t_part_params *p_params,t_defect_params *d_params); +int fcc_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin, + t_part_params *p_params,t_defect_params *d_params); +int diamond_init(int a,int b,int c,double lc,t_atom *atom,t_3dvec *origin, + t_part_params *p_params,t_defect_params *d_params); int destroy_atoms(t_moldyn *moldyn); int thermal_init(t_moldyn *moldyn,u8 equi_init); @@ -427,6 +487,8 @@ int link_cell_init(t_moldyn *moldyn,u8 vol); int link_cell_update(t_moldyn *moldyn); #ifdef STATIC_LISTS int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,int **cell); +#elif LOWMEM_LISTS +int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,int *cell); #else int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,t_list *cell); #endif @@ -445,6 +507,7 @@ int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d); //inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d) // __attribute__((always_inline)); int check_per_bound(t_moldyn *moldyn,t_3dvec *a); +int check_per_bound_and_care_for_pbc(t_moldyn *moldyn,t_atom *a); //inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a) // __attribute__((always_inline)); @@ -456,10 +519,15 @@ int moldyn_load(t_moldyn *moldyn); int process_2b_bonds(t_moldyn *moldyn,void *data, int (*process)(t_moldyn *moldyn,t_atom *itom,t_atom *jtom, void *data,u8 bc)); +int process_neighbours(t_moldyn *moldyn,void *data,t_atom *atom, + int (*process)(t_moldyn *moldyn,t_atom *atom,t_atom *natom, + void *data,u8 bc)); + int get_line(int fd,char *line,int max); int pair_correlation_init(t_moldyn *moldyn,double dr); int calculate_diffusion_coefficient(t_moldyn *moldyn,double *dc); +int calculate_msd(t_moldyn *moldyn,double *msd); int calculate_pair_correlation_process(t_moldyn *moldyn,t_atom *itom, t_atom *jtom,void *data,u8 bc); int calculate_pair_correlation(t_moldyn *moldyn,double dr,void *ptr); @@ -470,7 +538,13 @@ int bond_analyze(t_moldyn *moldyn,double *quality); int visual_init(t_moldyn *moldyn,char *filebase); int visual_bonds_process(t_moldyn *moldyn,t_atom *itom,t_atom *jtom, void *data,u8 bc); +#ifdef VISUAL_THREAD +void *visual_atoms(void *ptr); +#else int visual_atoms(t_moldyn *moldyn); +#endif + +int fpu_set_rtd(void); #endif