regular checkin of logfile
[physik/posic.git] / pair_correlation_calc.c
1 /*
2  * calcultae pair correlation function
3  *
4  * author: frank.zirkelbach@physik.uni-augsburg.de
5  *
6  */
7
8 #define _GNU_SOURCE
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <unistd.h>
12 #include <string.h>
13 #include <sys/types.h>
14 #include <sys/stat.h>
15 #include <fcntl.h>
16
17 #include "moldyn.h"
18
19 int usage(char *prog) {
20
21         printf("\nusage:\n");
22         printf("  %s <dr> <save file 1> [<save file 2> ...]\n\n",prog);
23
24         return -1;
25 }
26
27 int main(int argc,char **argv) {
28
29         t_moldyn moldyn;
30         int ret;
31         double *stat,*total;
32         int slots;
33         int i,j;
34         double dr;
35         int fd;
36         unsigned char first;
37
38         if(argc<3) {
39                 usage(argv[0]);
40                 return -1;
41         }
42
43         dr=atof(argv[1]);
44
45         first=1;
46
47         for(j=2;j<argc;j++) {
48
49                 memset(&moldyn,0,sizeof(t_moldyn));
50
51                 printf("[pair corr calc] reading save file ...\n");
52                 ret=moldyn_read_save_file(&moldyn,argv[j]);
53                 if(ret) {
54                         printf("[pair corr calc] exit!\n");
55                         return ret;
56                 }
57
58                 moldyn.cutoff*=2;
59                 moldyn.cutoff_square*=4;
60
61                 slots=moldyn.cutoff/dr;
62                 printf("[pair corr calc]\n");
63                 printf("  slots: %d\n",slots);
64                 printf("  cutoff: %f\n",moldyn.cutoff);
65                 printf("  dr: %f\n",dr);
66
67                 if(first) {
68                         stat=(double *)malloc(3*slots*sizeof(double));
69                         total=(double *)malloc(3*slots*sizeof(double));
70                         first=0;
71                         if(stat==NULL) {
72                                 perror("[pair corr calc] alloc mem (stat)");
73                                 return -1;
74                         }
75                         if(total==NULL) {
76                                 perror("[pair corr calc] alloc mem (toal)");
77                                 return -1;
78                         }
79                         memset(total,0,3*slots*sizeof(double));
80                 }
81
82                 /* link cell init */
83                 link_cell_init(&moldyn,VERBOSE);
84
85                 calculate_pair_correlation(&moldyn,dr,stat);
86
87                 for(i=0;i<3*slots;i++)
88                         total[i]+=stat[i];
89
90         }
91
92         fd=open("pair_corr_func.txt",
93                 O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);
94         dprintf(fd,"#r #ab #aa #bb\n");
95         for(i=0;i<slots;i++)
96                 dprintf(fd,"%f %f %f %f\n",
97                         i*dr,total[i],total[slots+i],total[2*slots+i]);
98         close(fd);
99
100         free(stat);
101         free(total);
102
103         moldyn_free_save_file(&moldyn);
104
105         return 0;
106 }