nearly finished tersoff potential ...
[physik/posic.git] / moldyn.h
index 66f774e..9c63307 100644 (file)
--- a/moldyn.h
+++ b/moldyn.h
@@ -25,7 +25,8 @@ typedef struct s_atom {
        t_3dvec f;              /* force */
        int element;            /* number of element in pse */
        double mass;            /* atom mass */
-       unsigned char attr;     /* attributes */
+       u8 bnum;                /* brand number */
+       u8 attr;                /* attributes */
 } t_atom;
 
 #define ATOM_ATTR_FP   0x01    /* fixed position (bulk material) */
@@ -58,12 +59,14 @@ typedef struct s_moldyn {
 
        t_3dvec dim;            /* dimensions of the simulation volume */
 
-       /* potential force function pointer and parameters */
+       /* potential force function and parameter pointers */
        int (*pf_func1b)(struct s_moldyn *,t_atom *);
+       void *pot1b_params;
        int (*pf_func2b)(struct s_moldyn *,t_atom *,t_atom *);
+       void *pot2b_params;
        int (*pf_func3b)(struct s_moldyn *,t_atom *,t_atom *,t_atom *);
+       void *pot3b_params;
        //int (*potential_force_function)(struct s_moldyn *moldyn);
-       void *pot_params;       /* parameters describing the potential */ 
 
        double cutoff;          /* cutoff radius */
        double cutoff_square;   /* square of the cutoff radius */
@@ -81,7 +84,7 @@ typedef struct s_moldyn {
        double energy;          /* energy */
 
        t_visual vis;           /* visualization/log/save interface structure */
-       unsigned char lvstat;   /* log & vis properties */
+       u8 lvstat;      /* log & vis properties */
        unsigned int ewrite;    /* how often to log energy */
        char efb[64];           /* energy log filename */
        int efd;                /* fd for energy log */
@@ -93,7 +96,7 @@ typedef struct s_moldyn {
        void *visual;           /* pointer (hack!) */
        unsigned int swrite;    /* how often to create a save file */
 
-       unsigned char status;   /* general moldyn properties */
+       u8 status;      /* general moldyn properties */
 
        t_random random;        /* random interface */
 } t_moldyn;
@@ -119,13 +122,58 @@ typedef struct s_lj_params {
        double epsilon4;
 } t_lj_params;
 
-typedef struct s_tersoff_params {
-       double l_1,l_2;
-       double m_1,m_2;
-       double a_1,a_2;
-       double b_1,b_2;
-       double r_1,r_2;
-       double s_1,s_2;
+/* tersoff exchange structure to exchange 2bp and 3bp calculated values */
+
+typedef struct s_tersoff_exchange {
+       double f_c,df_c;
+
+       t_3dvec dist_ij;
+       double d_ij;
+       double d_ij2;
+
+       double chi;
+
+       double *B;
+       double *mu;
+
+       double *beta;
+       double *n;
+       double *c;
+       double *d;
+       double *h;
+
+       double c2;
+       double d2;
+       double c2d2;
+
+       u8 run3bp;
+} t_tersoff_exchange;
+
+/* tersoff multi (2!) potential parameters */
+
+typedef struct s_tersoff_mult_params {
+       double S[2];            /* tersoff cutoff radii */
+       double R[2];            /* tersoff cutoff radii */
+       double Smixed;          /* mixed S radius */
+       double Rmixed;          /* mixed R radius */
+       double A[2];            /* factor of tersoff attractive part */
+       double B[2];            /* factor of tersoff repulsive part */
+       double Amixed;          /* mixed A factor */
+       double Bmixed;          /* mixed B factor */
+       double lambda[2];       /* tersoff lambda */
+       double lambda_m;        /* mixed lambda */
+       double mu[2];           /* tersoff mu */
+       double mu_m;            /* mixed mu */
+
+       double chi;
+
+       double beta[2];
+       double n[2];
+       double c[2];
+       double d[2];
+       double h[2];
+
+       t_tersoff_exchange exchange;    /* exchange between 2bp and 3bp calc */
 } t_tersoff_params;
 
 /*
@@ -171,7 +219,7 @@ int moldyn_log_init(t_moldyn *moldyn);
 int moldyn_init(t_moldyn *moldyn,int argc,char **argv);
 int moldyn_shutdown(t_moldyn *moldyn);
 
-int create_lattice(unsigned char type,int element,double mass,double lc,
+int create_lattice(u8 type,int element,double mass,double lc,
                    int a,int b,int c,t_atom **atom);
 int destroy_lattice(t_atom *atom);
 int thermal_init(t_moldyn *moldyn);