X-Git-Url: https://www.hackdaworld.org/gitweb/?a=blobdiff_plain;f=moldyn.h;h=c5cc064cedc85c1cd417b8b65a7f20fb74c44311;hb=15b4727e1137600f8f46af027aefd2b5c7a56420;hp=9493f5fa9a6bea4986149dd1cc10ffae334015b1;hpb=9c2172b5fce9688fa6be8d8a30745f9ef0b31419;p=physik%2Fposic.git diff --git a/moldyn.h b/moldyn.h index 9493f5f..c5cc064 100644 --- a/moldyn.h +++ b/moldyn.h @@ -22,12 +22,22 @@ /* general */ typedef unsigned char u8; +/* virial */ +typedef struct s_virial { + double xx; /* | xx xy xz | */ + double yy; /* V = | yx yy yz | */ + double zz; /* | zx zy zz | */ + double xy; /* */ + double xz; /* with: xy=yx, xz=zx, yz=zy */ + double yz; /* */ +} t_virial; + /* the atom of the md simulation */ typedef struct s_atom { t_3dvec r; /* position */ t_3dvec v; /* velocity */ t_3dvec f; /* force */ - t_3dvec virial; /* virial (v_xx, v_yy, v_zz) */ + t_virial virial; /* virial */ double e; /* site energy */ int element; /* number of element in pse */ double mass; /* atom mass */ @@ -57,7 +67,8 @@ typedef struct s_linkcell { /* moldyn schedule structure */ typedef struct s_moldyn_schedule { - int content_count; + int count; + int total_sched; int *runs; double *tau; int (*hook)(void *moldyn,void *hook); @@ -71,6 +82,7 @@ typedef struct s_moldyn { t_3dvec dim; /* dimensions of the simulation volume */ double volume; /* volume of sim cell (dim.x*dim.y*dim.z) */ + double vt1,vt2; /* potential force function and parameter pointers */ int (*func1b)(struct s_moldyn *moldyn,t_atom *ai); @@ -172,6 +184,7 @@ typedef struct s_lj_params { double sigma6; double sigma12; double epsilon4; + double uc; } t_lj_params; /* @@ -184,6 +197,7 @@ typedef struct s_tersoff_exchange { double f_a,df_a; t_3dvec dist_ij; + double d_ij2; double d_ij; double chi; @@ -221,8 +235,10 @@ typedef struct s_tersoff_exchange { /* tersoff multi (2!) potential parameters */ typedef struct s_tersoff_mult_params { double S[2]; /* tersoff cutoff radii */ + double S2[2]; /* tersoff cutoff radii squared */ double R[2]; /* tersoff cutoff radii */ double Smixed; /* mixed S radius */ + double S2mixed; /* mixed S radius squared */ double Rmixed; /* mixed R radius */ double A[2]; /* factor of tersoff attractive part */ double B[2]; /* factor of tersoff repulsive part */ @@ -309,6 +325,7 @@ typedef struct s_tersoff_mult_params { #define SI 0x0e #define LC_SI (0.543105e-9*METER) /* A */ #define M_SI 28.08553 /* amu */ + #define LJ_SIGMA_SI ((0.25*sqrt(3.0)*LC_SI)/1.122462) /* A */ #define LJ_EPSILON_SI (2.1678*EV) /* NA */ @@ -386,11 +403,15 @@ int add_atom(t_moldyn *moldyn,int element,double mass,u8 brand,u8 attr, int destroy_atoms(t_moldyn *moldyn); int thermal_init(t_moldyn *moldyn,u8 equi_init); +double temperature_calc(t_moldyn *moldyn); +double get_temperature(t_moldyn *moldyn); int scale_velocity(t_moldyn *moldyn,u8 equi_init); +double pressure_calc(t_moldyn *moldyn); +double get_pressure(t_moldyn *moldyn); int scale_volume(t_moldyn *moldyn); double get_e_kin(t_moldyn *moldyn); -double get_e_pot(t_moldyn *moldyn); +double update_e_kin(t_moldyn *moldyn); double get_total_energy(t_moldyn *moldyn); t_3dvec get_total_p(t_moldyn *moldyn); @@ -408,9 +429,10 @@ int moldyn_integrate(t_moldyn *moldyn); int velocity_verlet(t_moldyn *moldyn); int potential_force_calc(t_moldyn *moldyn); +inline int virial_calc(t_atom *a,t_3dvec *f,t_3dvec *d) + __attribute__((always_inline)); inline int check_per_bound(t_moldyn *moldyn,t_3dvec *a) __attribute__((always_inline)); -int check_per_bound(t_moldyn *moldyn,t_3dvec *a); int harmonic_oscillator(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc); int lennard_jones(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc); int tersoff_mult_complete_params(t_tersoff_mult_params *p);