int cells; /* total amount of cells */
double len; /* prefered cell edge length */
double x,y,z; /* the actual cell lengthes */
+#ifdef STATIC_LISTS
+ int **subcell; /* pointer to the cell lists */
+#else
t_list *subcell; /* pointer to the cell lists */
+#endif
int dnlc; /* direct neighbour lists counter */
} t_linkcell;
+#define MAX_ATOMS_PER_LIST 20
+
/* moldyn schedule structure */
typedef struct s_moldyn_schedule {
int count;
double gp_sum; /* sum over all gp */
double gp_avg; /* average value of gp */
- double virial; /* actual virial */
+ t_virial vir; /* actual virial */
+ double virial;
double virial_sum; /* sum over all calculated virials */
double virial_avg; /* average of virial */
double p_sum; /* sum over all p */
double p_avg; /* average value of p */
- t_3dvec tp; /* thermodynamic pressure dU/dV */
- double dv; /* dV for thermodynamic pressure calc */
+ double tp; /* thermodynamic pressure dU/dV */
+ double tp_sum; /* sum over dU/dV pressure */
+ double tp_avg; /* average value of dU/dV pressure */
+ int tp_cnt; /* how often to do thermodynamic p calc */
/* pressure and temperature control (velocity/volume scaling) */
/* (t_tc in units of tau, p_tc in units of tau * isoth. compressib.) */
int pfd; /* fd for pressure log */
unsigned int twrite; /* how often to log temperature */
int tfd; /* fd for temperature log */
- unsigned int vwrite; /* how often to visualize atom information */
+ unsigned int vwrite; /* how often to log volume */
+ int vfd; /* fd for volume log */
+ unsigned int awrite; /* how often to visualize atom information */
unsigned int swrite; /* how often to create a save file */
int rfd; /* report file descriptor */
char rtitle[64]; /* report title */
#define KILOGRAM (1.0/AMU) /* amu */
#define NEWTON (METER*KILOGRAM/(SECOND*SECOND)) /* A amu / fs^2 */
#define PASCAL (NEWTON/(METER*METER)) /* N / A^2 */
+#define GPA (1e9*PASCAL) /* N / A^2 */
#define BAR ((1.0e5*PASCAL)) /* N / A^2 */
#define K_BOLTZMANN (1.380650524e-23*METER*NEWTON) /* NA/K */
#define K_B2 (K_BOLTZMANN*K_BOLTZMANN) /* (NA)^2/K^2 */
#define LOG_TOTAL_MOMENTUM 0x02
#define LOG_PRESSURE 0x04
#define LOG_TEMPERATURE 0x08
-#define SAVE_STEP 0x10
-#define VISUAL_STEP 0x20
-#define CREATE_REPORT 0x40
+#define LOG_VOLUME 0x10
+#define SAVE_STEP 0x20
+#define VISUAL_STEP 0x40
+#define CREATE_REPORT 0x80
#define TRUE 1
#define FALSE 0
int scale_velocity(t_moldyn *moldyn,u8 equi_init);
double virial_sum(t_moldyn *moldyn);
double pressure_calc(t_moldyn *moldyn);
-int energy_fluctuation_calc(t_moldyn *moldyn);
+int average_reset(t_moldyn *moldyn);
+int average_and_fluctuation_calc(t_moldyn *moldyn);
int get_heat_capacity(t_moldyn *moldyn);
double thermodynamic_pressure_calc(t_moldyn *moldyn);
double get_pressure(t_moldyn *moldyn);
int link_cell_init(t_moldyn *moldyn,u8 vol);
int link_cell_update(t_moldyn *moldyn);
+#ifdef STATIC_LISTS
+int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,int **cell);
+#else
int link_cell_neighbour_index(t_moldyn *moldyn,int i,int j,int k,t_list *cell);
+#endif
int link_cell_shutdown(t_moldyn *moldyn);
typedef int (*set_hook)(void *,void *);
int moldyn_bc_check(t_moldyn *moldyn);
+int moldyn_read_save_file(t_moldyn *moldyn,char *file);
+int moldyn_load(t_moldyn *moldyn);
int get_line(int fd,char *line,int max);
+int pair_correlation_init(t_moldyn *moldyn,double dr);
+int calculate_diffusion_coefficient(t_moldyn *moldyn,double *dc);
+int calculate_pair_correlation(t_moldyn *moldyn,double dr,void *ptr);
+
int visual_init(t_moldyn *moldyn,char *filebase);
int visual_atoms(t_moldyn *moldyn);