new albe potential + new force calc routine (old potentials need to be
[physik/posic.git] / moldyn.h
index e2b2ee4..066ad36 100644 (file)
--- a/moldyn.h
+++ b/moldyn.h
@@ -49,13 +49,15 @@ 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 DEFAULT_ATOM_ATTR      0x74    // 1,2,3 body interaction + visualize
+
 /* cell lists */
 typedef struct s_linkcell {
        int nx,ny,nz;           /* amount of cells in x, y and z direction */
@@ -102,15 +104,18 @@ typedef struct s_moldyn {
        double volume;          /* volume of sim cell (dim.x*dim.y*dim.z) */
 
        /* potential force function and parameter pointers */
-       int (*func1b)(struct s_moldyn *moldyn,t_atom *ai);
-       int (*func2b)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-       int (*func3b_j1)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-       int (*func3b_j2)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-       int (*func3b_j3)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
-       int (*func3b_k1)(struct s_moldyn *moldyn,
-                        t_atom *ai,t_atom *aj,t_atom *ak,u8 bck);
-       int (*func3b_k2)(struct s_moldyn *moldyn,
-                        t_atom *ai,t_atom *aj,t_atom *ak,u8 bck);
+       int (*func_i0)(struct s_moldyn *moldyn,t_atom *ai);
+       int (*func_j0)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+       int (*func_j0_k0)(struct s_moldyn *moldyn,
+                         t_atom *ai,t_atom *aj,t_atom *ak,u8 bck);
+       int (*func_j0e)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+       int (*func_j1)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+       int (*func_j1_k0)(struct s_moldyn *moldyn,
+                         t_atom *ai,t_atom *aj,t_atom *ak,u8 bck);
+       int (*func_j1c)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+       int (*func_j1_k1)(struct s_moldyn *moldyn,
+                         t_atom *ai,t_atom *aj,t_atom *ak,u8 bck);
+       int (*func_j1e)(struct s_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
        void *pot_params;
        unsigned char run3bp;
 
@@ -143,6 +148,7 @@ typedef struct s_moldyn {
 
        double p_ref;           /* reference pressure */
        double p;               /* actual pressure (computed by virial) */
+       double px,py,pz;        /* components of pressure */
        double p_sum;           /* sum over all p */
        double p_avg;           /* average value of p */
 
@@ -255,10 +261,15 @@ typedef struct s_vb {
 #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
@@ -345,6 +356,12 @@ typedef struct s_vb {
 #define DIAMOND                        0x04
 #define ZINCBLENDE             0x08
 
+/*
+ * more includes
+ */
+
+#include "pse.h"
+
 /*
  *
  * function prototypes
@@ -358,6 +375,8 @@ int set_int_alg(t_moldyn *moldyn,u8 algo);
 int set_cutoff(t_moldyn *moldyn,double cutoff);
 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);