00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _MEAM_LAMMPS_H
00010 #define _MEAM_LAMMPS_H
00011
00012 #include "mdparallel.h"
00013
00014 class Vector6
00015 {
00016 public:
00017 double x[6];
00018 Vector6() {for(int i=0;i<6;i++) x[i]=0;}
00019 double operator [] (int i) const { return x[i]; }
00020 double & operator [] (int i) { return x[i]; }
00021 void clear() {for(int i=0;i<6;i++) x[i]=0;}
00022 };
00023
00024 class Vector10
00025 {
00026 public:
00027 double x[10];
00028 Vector10() {for(int i=0;i<10;i++) x[i]=0;}
00029 double operator [] (int i) const { return x[i]; }
00030 double & operator [] (int i) { return x[i]; }
00031 void clear() {for(int i=0;i<10;i++) x[i]=0;}
00032 };
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifdef _CYGWIN
00050 #define meam_setup_global_ meam_setup_global__
00051 #define meam_setup_param_ meam_setup_param__
00052 #define meam_setup_done_ meam_setup_done__
00053 #define meam_dens_init_ meam_dens_init__
00054 #define meam_dens_final_ meam_dens_final__
00055 #define meam_force_ meam_force__
00056
00057 #endif
00058
00059 extern "C" {
00060 void meam_setup_global_(int *, int *, double *, int *, double *, double *,
00061 double *, double *, double *, double *, double *,
00062 double *, double *, double *, double *, double *,
00063 double *, double *, int *);
00064 void meam_setup_param_(int *, double *, int *, int *, int *);
00065 void meam_setup_done_(double *);
00066
00067 void meam_dens_init_(int *, int *, int *, double *, int *, int *, int *, double *,
00068 int *, int *, int *, int *,
00069 double *, double *, double *, double *, double *, double *,
00070 double *, double *, double *, double *, int *);
00071
00072 void meam_dens_final_(int *, int *, int *, double *, int *, int *, int *,
00073 double *, double *, double *, double *, double *, double *,
00074 double *, double *, double *, double *, double *, double *,
00075 double *, double *, double *, double *,
00076 double *, int *, int *);
00077
00078 #ifdef _TORSION_OR_BENDING
00079 void meam_force_(int *, int *, int *, int *, double *, int *, int *, int *, double *,
00080 int *, int *, int *, int *, double *, double *, double *,
00081 double *, double *, double *, double *, double *, double *, double *, double *,
00082 double *, double *, double *, double *, double *, double *, double *, double *,
00083 int *, double *,
00084 int *, double *,
00085 int *, double *, double *,
00086 int *);
00087 #else
00088 void meam_force_(int *, int *, int *, double *, int *, int *, int *, double *,
00089 int *, int *, int *, int *, double *, double *,
00090 double *, double *, double *, double *, double *, double *,
00091 double *, double *, double *, double *, double *, double *,
00092 double *, double *, double *, double *, double *,
00093 double *, int *);
00094
00095 #endif
00096
00097 void phif_(int *, int *, double *, double *, double *);
00098 }
00099
00100 enum{FCC,BCC,HCP,DIM,DIAMOND,B1,C11};
00101 int nkeywords = 15;
00102 char *keywords[] = {"Ec","alpha","rho0","delta",
00103 "lattce","attrac","repuls",
00104 "nn2","Cmin","Cmax","rc",
00105 "delr","augt1","gsmooth_factor","re"};
00106
00107 class MEAMFrame : public MDPARALLELFrame
00108 {
00109 private:
00110
00111 char meamfile[1000], meafile[1000];
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 double *scrfcn,*dscrfcn,*fcpair;
00123 double *rho,*rho0,*rho1,*rho2,*rho3,*frhop;
00124 double *gamma,*dgamma1,*dgamma2,*dgamma3,*arho2b;
00125 Vector3 *arho1; Vector6 *arho2; Vector10 *arho3;
00126 Vector3 *arho3b, *t_ave, *rtmp;
00127 int *type, *fmap;
00128 double rcut;
00129
00130
00131 int maxneigh;
00132 int *num_neigh_full, **ind_neigh_full; char *ind_neigh_full_mem;
00133 int *num_neigh_half, **ind_neigh_half; char *ind_neigh_half_mem;
00134
00135
00136
00137
00138 void neigh_f2c(int *numn, int **firstn);
00139 void neigh_c2f(int *numn, int **firstn);
00140
00141 public:
00142
00143 MEAMFrame():
00144 scrfcn(0),dscrfcn(0),fcpair(0),
00145 rho(0),rho0(0),rho1(0),rho2(0),rho3(0),frhop(0),
00146 gamma(0),dgamma1(0),dgamma2(0),dgamma3(0),arho2b(0),
00147 arho1(0),arho2(0),arho3(0),arho3b(0),t_ave(0),
00148 rtmp(0),fmap(0),rcut(0), maxneigh(0),
00149 num_neigh_full(0),ind_neigh_full(0),ind_neigh_full_mem(0),
00150 num_neigh_half(0),ind_neigh_half(0),ind_neigh_half_mem(0)
00151 {};
00152
00153 virtual void potential ();
00154 virtual void NbrList_reconstruct(int iatom=-1);
00155 void NbrList_translate();
00156
00157 int readMEAM();
00158 void read_files(char *, char *);
00159
00160 void MEAM();
00161
00162 virtual void Alloc();
00163 virtual void initvars();
00164 virtual void initparser();
00165
00166 virtual int exec(char *nam);
00167
00168 void compute(int, int);
00169 void settings(int, char **);
00170 void coeff(int, char **);
00171 double init_one(int, int);
00172 void init_style();
00173
00174 void printpairpot();
00175
00176 #ifdef _PARALLEL
00177 void Broadcast_MEAM_Param();
00178 #endif
00179
00180
00181
00182
00183
00184
00185
00186
00187 };
00188
00189 #endif // _MEAM-LAMMPS_H
00190