added albe potential (still wrong energy!)
[physik/posic.git] / potentials / albe.h
diff --git a/potentials/albe.h b/potentials/albe.h
new file mode 100644 (file)
index 0000000..35a0762
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * albe.h - albe potential header file
+ *
+ * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
+ *
+ */
+
+#ifndef ALBE_H
+#define ALBE_H
+
+#define ALBE_MAXN      16*27
+
+/* albe exchange type */
+typedef struct s_albe_exchange {
+
+       t_3dvec dist_ij;
+       double d_ij2;
+       double d_ij;
+
+       t_3dvec dist_ik[ALBE_MAXN];
+       double d_ik2[ALBE_MAXN];
+       double d_ik[ALBE_MAXN];
+
+       double f_c_ik[ALBE_MAXN];
+       double df_c_ik[ALBE_MAXN];
+
+       double g[ALBE_MAXN];
+       double dg[ALBE_MAXN];
+       double cos_theta[ALBE_MAXN];
+
+       double *gamma_i;
+       double *c_i;
+       double *d_i;
+       double *h_i;
+
+       double ci2;
+       double di2;
+       double ci2di2;
+
+       double zeta_ij;
+       double pre_dzeta;
+
+       int kcount;
+} t_albe_exchange;
+
+/* albe mult (2!) potential parameters */
+typedef struct s_albe_mult_params {
+       double S[2];            /* albe cutoff radii */
+       double S2[2];           /* albe cutoff radii squared */
+       double R[2];            /* albe cutoff radii */
+       double Smixed;          /* mixed S radius */
+       double S2mixed;         /* mixed S radius squared */
+       double Rmixed;          /* mixed R radius */
+       double A[2];            /* factor of albe attractive part */
+       double B[2];            /* factor of albe repulsive part */
+       double r0[2];           /* r_0 */
+       double Amixed;          /* mixed A factor */
+       double Bmixed;          /* mixed B factor */
+       double r0_mixed;        /* mixed r_0 */
+       double lambda[2];       /* albe lambda */
+       double lambda_m;        /* mixed lambda */
+       double mu[2];           /* albe mu */
+       double mu_m;            /* mixed mu */
+
+       double gamma[2];
+       double c[2];
+       double d[2];
+       double h[2];
+
+       t_albe_exchange exchange;       /* exchange between 2bp and 3bp calc */
+} t_albe_mult_params;
+
+/* function prototypes */
+int albe_mult_complete_params(t_albe_mult_params *p);
+int albe_mult_1bp(t_moldyn *moldyn,t_atom *ai);
+int albe_mult_2bp(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+int albe_mult_3bp_j1(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+int albe_mult_3bp_k1(t_moldyn *moldyn,
+                        t_atom *ai,t_atom *aj,t_atom *ak,u8 bc);
+int albe_mult_3bp_j2(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc);
+int albe_mult_3bp_k2(t_moldyn *moldyn,
+                        t_atom *ai,t_atom *aj,t_atom *ak,u8 bc);
+
+#endif