unstable but might run ...
[physik/posic.git] / moldyn.h
index 1647c1c..0f37a35 100644 (file)
--- a/moldyn.h
+++ b/moldyn.h
@@ -49,12 +49,14 @@ typedef struct s_atom {
 
 #define ATOM_ATTR_FP   0x01    /* fixed position (bulk material) */
 #define ATOM_ATTR_HB   0x02    /* coupled to heat bath (velocity scaling) */
-#define ATOM_ATTR_VA   0x04    /* visualize this atom */
+#define ATOM_ATTR_VA   0x04    /* visualize this atom */ // TODO
 #define ATOM_ATTR_VB   0x08    /* visualize the bond of this atom */
 
-#define ATOM_ATTR_1BP          0x10    /* single paricle potential */
-#define ATOM_ATTR_2BP          0x20    /* pair potential */
-#define ATOM_ATTR_3BP          0x40    /* 3 body potential */ 
+#define ATOM_ATTR_1BP  0x10    /* single paricle potential */
+#define ATOM_ATTR_2BP  0x20    /* pair potential */
+#define ATOM_ATTR_3BP  0x40    /* 3 body potential */ 
+
+#define DEFAULT_ATOM_ATTR      0x74    // 1,2,3 body interaction + visualize
 
 /* cell lists */
 typedef struct s_linkcell {
@@ -117,7 +119,6 @@ typedef struct s_moldyn {
        double cutoff;          /* cutoff radius */
        double cutoff_square;   /* square of the cutoff radius */
        double nnd;             /* nearest neighbour distance (optional) */
-       double bondlen[3];      /* bond lengthes (only 2 atomic systems) */
 
        t_linkcell lc;          /* linked cell list interface */
 
@@ -217,6 +218,10 @@ typedef struct s_moldyn {
        t_random random;        /* random interface */
 
        double debug;           /* debugging stuff, ignore */
+
+       /* potential 2 body check function */
+       int (*check_2b_bond)(struct s_moldyn *moldyn,
+                            t_atom *itom,t_atom *jtom,u8 bc);
 } t_moldyn;
 
 typedef struct s_pcc {
@@ -232,6 +237,10 @@ typedef struct s_ba {
        int tcnt;
 } t_ba;
 
+typedef struct s_vb {
+       int fd;
+} t_vb;
+
 /*
  *
  *  defines
@@ -248,10 +257,15 @@ typedef struct s_ba {
 #define MOLDYN_2BP                     0x20    /* 2 body */
 #define MOLDYN_3BP                     0x40    /* and 3 body particle pots */
 
+#define T_SCALE_NONE                   0x00
 #define T_SCALE_BERENDSEN              0x01    /* berendsen t control */
 #define T_SCALE_DIRECT                 0x02    /* direct t control */
+#define T_SCALE_MASK                   0x03
+
+#define P_SCALE_NONE                   0x00
 #define P_SCALE_BERENDSEN              0x04    /* berendsen p control */
 #define P_SCALE_DIRECT                 0x08    /* direct p control */
+#define P_SCALE_MASK                   0x0c
 
 /*
  * default values & units
@@ -288,6 +302,7 @@ typedef struct s_ba {
 #define MOLDYN_POTENTIAL_HO            0x00
 #define MOLDYN_POTENTIAL_LJ            0x01
 #define MOLDYN_POTENTIAL_TM            0x02
+#define MOLDYN_POTENTIAL_AM            0x03
 
 #define LOG_TOTAL_ENERGY               0x01
 #define LOG_TOTAL_MOMENTUM             0x02
@@ -309,12 +324,15 @@ typedef struct s_ba {
 #define SCALE_DIRECT                   'D'
 
 /*
- * potential related phsical values / constants
- *
+ * usefull constants
  */
 
 #define ONE_THIRD              (1.0/3.0)
 
+/*
+ * element specific defines
+ */
+
 #define C                      0x06
 #define LC_C                   3.567                           /* A */
 #define M_C                    12.011                          /* amu */
@@ -325,82 +343,6 @@ typedef struct s_ba {
 
 #define LC_3C_SIC              4.3596                          /* A */
 
-#define LJ_SIGMA_SI            ((0.25*sqrt(3.0)*LC_SI)/1.122462)       /* A */
-//#define LJ_SIGMA_SI          (LC_SI/1.122462)                        /* A */
-//#define LJ_SIGMA_SI          (0.5*sqrt(2.0)*LC_SI/1.122462)          /* A */
-#define LJ_EPSILON_SI          (2.1678*EV)                             /* NA */
-
-#define TM_R_SI                        2.7                             /* A */
-#define TM_S_SI                        3.0                             /* A */
-#define TM_A_SI                        (1830.8*EV)                     /* NA */
-#define TM_B_SI                        (471.18*EV)                     /* NA */
-#define TM_LAMBDA_SI           2.4799                          /* 1/A */
-#define TM_MU_SI               1.7322                          /* 1/A */
-#define TM_BETA_SI             1.1000e-6
-#define TM_N_SI                        0.78734
-#define TM_C_SI                        1.0039e5
-#define TM_D_SI                        16.217
-#define TM_H_SI                        -0.59825
-
-#define TM_R_C                 1.8                             /* A */
-#define TM_S_C                 2.1                             /* A */
-#define TM_A_C                 (1393.6*EV)                     /* NA */
-#define TM_B_C                 (346.7*EV)                      /* NA */
-#define TM_LAMBDA_C            3.4879                          /* 1/A */
-#define TM_MU_C                        2.2119                          /* 1/A */
-#define TM_BETA_C              1.5724e-7
-#define TM_N_C                 0.72751
-#define TM_C_C                 3.8049e4
-#define TM_D_C                 4.384
-#define TM_H_C                 -0.57058
-
-#define TM_CHI_SIC             0.9776
-
-#define TM_LC_SIC              4.32                            /* A */
-
-#define ALBE_R_SI              (2.82-0.14)
-#define ALBE_S_SI              (2.82+0.14)
-#define ALBE_A_SI              (3.24*EV/0.842)
-#define ALBE_B_SI              (-1.842*3.24*EV/0.842)
-#define ALBE_R0_SI             2.232
-#define ALBE_LAMBDA_SI         (1.4761*sqrt(2.0*1.842))
-#define ALBE_MU_SI             (1.4761*sqrt(2.0/1.842))
-#define ALBE_GAMMA_SI          0.114354
-#define ALBE_C_SI              2.00494
-#define ALBE_D_SI              0.81472
-#define ALBE_H_SI              0.259
-
-#define ALBE_LC_SI             5.429
-
-#define ALBE_R_C               (2.00-0.15)
-#define ALBE_S_C               (2.00+0.15)
-#define ALBE_A_C               (6.00*EV/1.167)
-#define ALBE_B_C               (-2.167*6.00*EV/1.167)
-#define ALBE_R0_C              1.4276
-#define ALBE_LAMBDA_C          (2.0099*sqrt(2.0*2.167))
-#define ALBE_MU_C              (2.0099*sqrt(2.0/2.167))
-#define ALBE_GAMMA_C           0.11233
-#define ALBE_C_C               181.910
-#define ALBE_D_C               6.28433
-#define ALBE_H_C               0.5556
-
-#define ALBE_LC_C              3.566
-
-#define ALBE_R_SIC             (2.40-0.20)
-#define ALBE_S_SIC             (2.40+0.20)
-#define ALBE_A_SIC             (4.36*EV/0.847)
-#define ALBE_B_SIC             (-1.847*4.36*EV/0.847)
-#define ALBE_R0_SIC            1.79
-#define ALBE_LAMBDA_SIC                (1.6991*sqrt(2.0*1.847))
-#define ALBE_MU_SIC            (1.6991*sqrt(2.0/1.847))
-#define ALBE_GAMMA_SIC         0.011877
-#define ALBE_C_SIC             273987
-#define ALBE_D_SIC             180.314
-#define ALBE_H_SIC             0.68
-
-#define ALBE_LC_SIC            4.359
-
-
 /*
  * lattice types
  */
@@ -408,6 +350,7 @@ typedef struct s_ba {
 #define CUBIC                  0x01
 #define FCC                    0x02
 #define DIAMOND                        0x04
+#define ZINCBLENDE             0x08
 
 /*
  *
@@ -415,30 +358,20 @@ typedef struct s_ba {
  *
  */
 
-typedef int (*pf_func1b)(t_moldyn *,t_atom *);
-typedef int (*pf_func2b)(t_moldyn *,t_atom *,t_atom *,u8);
-typedef int (*pf_func3b)(t_moldyn *,t_atom *,t_atom *,t_atom *,u8);
-
 int moldyn_init(t_moldyn *moldyn,int argc,char **argv);
 int moldyn_shutdown(t_moldyn *moldyn);
 
 int set_int_alg(t_moldyn *moldyn,u8 algo);
 int set_cutoff(t_moldyn *moldyn,double cutoff);
-int set_bondlen(t_moldyn *moldyn,double b0,double b1,double bm);
 int set_temperature(t_moldyn *moldyn,double t_ref);
 int set_pressure(t_moldyn *moldyn,double p_ref);
+int set_p_scale(t_moldyn *moldyn,u8 ptype,double ptc);
+int set_t_scale(t_moldyn *moldyn,u8 ttype,double ttc);
 int set_pt_scale(t_moldyn *moldyn,u8 ptype,double ptc,u8 ttype,double ttc);
 int set_dim(t_moldyn *moldyn,double x,double y,double z,u8 visualize);
 int set_nn_dist(t_moldyn *moldyn,double dist);
 int set_pbc(t_moldyn *moldyn,u8 x,u8 y,u8 z);
-int set_potential1b(t_moldyn *moldyn,pf_func1b func);
-int set_potential2b(t_moldyn *moldyn,pf_func2b func);
-int set_potential3b_j1(t_moldyn *moldyn,pf_func2b func);
-int set_potential3b_j2(t_moldyn *moldyn,pf_func2b func);
-int set_potential3b_j3(t_moldyn *moldyn,pf_func2b func);
-int set_potential3b_k1(t_moldyn *moldyn,pf_func3b func);
-int set_potential3b_k2(t_moldyn *moldyn,pf_func3b func);
-int set_potential_params(t_moldyn *moldyn,void *params);
+int set_potential(t_moldyn *moldyn,u8 type);
 
 int set_avg_skip(t_moldyn *moldyn,int skip);
 
@@ -524,6 +457,8 @@ int bond_analyze_process(t_moldyn *moldyn,t_atom *itom,t_atom *jtom,
 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);
 int visual_atoms(t_moldyn *moldyn);
 
 #endif