52e848f787b522feb6204c6e4d158bc12d629bbf
[physik/posic.git] / potentials / tersoff.h
1 /*
2  * tersoff.h - tersoff potential header file
3  *
4  * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
5  *
6  */
7
8 #ifndef TERSOFF_H
9 #define TERSOFF_H
10
11 #define TERSOFF_MAXN    16*27
12
13 /* tersoff exchange type */
14 typedef struct s_tersoff_echange {
15
16         t_3dvec dist_ij;
17         double d_ij2;
18         double d_ij;
19
20         t_3dvec dist_ik[TERSOFF_MAXN];
21         double d_ik2[TERSOFF_MAXN];
22         double d_ik[TERSOFF_MAXN];
23
24         double f_c_ik[TERSOFF_MAXN];
25         double df_c_ik[TERSOFF_MAXN];
26
27         double g[TERSOFF_MAXN];
28         double dg[TERSOFF_MAXN];
29         double cos_theta[TERSOFF_MAXN];
30
31         double *beta_i;
32         double *n_i;
33         double *c_i;
34         double *d_i;
35         double *h_i;
36
37         double ci2;
38         double di2;
39         double ci2di2;
40         double betaini;
41
42         double zeta_ij;
43         double pre_dzeta;
44
45         int kcount;
46 } t_tersoff_exchange;
47
48 /* tersoff mult (2!) potential parameters */
49 typedef struct s_tersoff_mult_params {
50         double S[2];            /* tersoff cutoff radii */
51         double S2[2];           /* tersoff cutoff radii squared */
52         double R[2];            /* tersoff cutoff radii */
53         double Smixed;          /* mixed S radius */
54         double S2mixed;         /* mixed S radius squared */
55         double Rmixed;          /* mixed R radius */
56         double A[2];            /* factor of tersoff attractive part */
57         double B[2];            /* factor of tersoff repulsive part */
58         double Amixed;          /* mixed A factor */
59         double Bmixed;          /* mixed B factor */
60         double lambda[2];       /* tersoff lambda */
61         double lambda_m;        /* mixed lambda */
62         double mu[2];           /* tersoff mu */
63         double mu_m;            /* mixed mu */
64
65         double chi;
66
67         double beta[2];
68         double n[2];
69         double c[2];
70         double d[2];
71         double h[2];
72
73         t_tersoff_exchange exchange;    /* exchange between 2bp and 3bp calc */
74 } t_tersoff_mult_params;
75
76 /* function prototypes */
77 int tersoff_mult_complete_params(t_tersoff_mult_params *p);
78 int tersoff_mult_1bp(t_moldyn *moldyn,t_atom *ai);
79 int tersoff_mult_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
80 int tersoff_mult_3bp_j1(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
81 int tersoff_mult_3bp_k1(t_moldyn *moldyn,
82                         t_atom *ai,t_atom *aj,t_atom *ak,u8 bc);
83 int tersoff_mult_3bp_j2(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
84 int tersoff_mult_3bp_k2(t_moldyn *moldyn,
85                         t_atom *ai,t_atom *aj,t_atom *ak,u8 bc);
86
87 #endif