00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _MEAM_H
00010 #define _MEAM_H
00011
00012 #include "mdparallel.h"
00013
00014 class Matrix333
00015 {
00016 public:
00017 double element[3][3][3];
00018 void clear() { memset((double *)element,0,sizeof(double)*27);}
00019 Matrix333(){clear();}
00020 };
00021
00022 class MEAMFrame : public MDPARALLELFrame
00023 {
00024 public:
00025
00026 double zsmeam, alphas, betas[4], esubs, asubs, ts[4], rozros;
00027 double rcutmeam, cmin, cmax, repuls, attrac, legend;
00028 int ibarr, noscr;
00029 double res, alat, ielement, rcutmeam2;
00030 double sconst, scnres, xzbl, xzbl0, hmeam;
00031 char elt[10], lat[10];
00032 int enable_zbl_fdimer, enable_square_rscrn;
00033
00034
00035 double *atpe2b, *atpe3b, *rhotot, *embf;
00036 double *c8a, *dang1, *dang2, *cg8c ;
00037
00038 Vector3 *tav, *rhsq, *a8b, *ag;
00039 Matrix33 *b8c;
00040 Matrix333 *d8d;
00041
00042 double **scrnab; char *scrnab_mem;
00043 double **dscrnab; char *dscrnab_mem;
00044
00045 MEAMFrame() :zsmeam(0),alphas(0),esubs(0),asubs(0),
00046 rozros(0),rcutmeam(0),cmin(2.0),cmax(2.8),
00047 repuls(0),attrac(0),legend(0),ibarr(0),noscr(0),
00048 res(0),alat(0),ielement(1),rcutmeam2(0),
00049 sconst(1.3),scnres(1.0e-6),xzbl(-3),xzbl0(-1),hmeam(1.0e-5),
00050 enable_zbl_fdimer(1),enable_square_rscrn(1),
00051 atpe2b(0),atpe3b(0),rhotot(0),embf(0),
00052 c8a(0),dang1(0),dang2(0),cg8c(0),
00053 tav(0),rhsq(0),a8b(0),ag(0),b8c(0),d8d(0),
00054 scrnab(0),scrnab_mem(0),dscrnab(0),dscrnab_mem(0)
00055
00056 {};
00057
00058 virtual void potential ();
00059 void screen();
00060 void dscreen();
00061 void dscrfor();
00062 void rhoMEAM();
00063 void kraMEAM();
00064 int readMEAM();
00065
00066
00067 inline double rhof(double r,double abc,double re,double rozero);
00068 inline double frhoi(double rhotp,double asub,double esub);
00069 inline double dfrhoi(double rho,double asub,double esub);
00070 inline double rscrn(double);
00071 inline double erose(double,double,double,double,double,double);
00072 inline double zbar(int,double,char *,double,double,double);
00073
00074 double phiid(double rmagg, int i);
00075 double bar(double rho0,double A,int ibar,double z,double *dang1,double *dang2);
00076 double zbl(double,double charge1,double charge2);
00077 Matrix33 dcmij(Vector3 rr,double rs);
00078 double dscrn(double,double,double,double,double);
00079
00080 virtual void Alloc();
00081 virtual void initvars();
00082
00083 virtual int exec(char *nam);
00084 virtual void initparser();
00085
00086 void printpairpot();
00087
00088 #ifdef _PARALLEL
00089 void Broadcast_MEAM_Param();
00090 #endif
00091 };
00092
00093 #define drhof(abc,re,rho) (-(abc)*(rho)/(re))
00094 #define xcut(x) SQR(1.0-(x)*(x)*(x)*(x))
00095
00096 #endif // _MEAM_H
00097