-int calc_fluctuations(double start,double end,t_moldyn *moldyn) {
-
- int fd;
- int count,ret;
- double time,pot,kin,tot;
- double p_sum,k_sum,t_sum;
- double p2_sum,k2_sum,t2_sum;
- char buf[64];
- char file[128+7];
-
- printf("[moldyn] calculating energy fluctuations [eV]:\n");
-
- snprintf(file,128+7,"%s/energy",moldyn->vlsdir);
- fd=open(file,O_RDONLY);
- if(fd<0) {
- perror("[moldyn] post proc energy open");
- return fd;
- }
-
- /* calc the averages of A and A^2 */
- p_sum=0.0;
- k_sum=0.0;
- t_sum=0.0;
- count=0;
- while(1) {
- ret=get_line(fd,buf,63);
- if(ret<=0) break;
- if(buf[0]=='#') continue;
- sscanf(buf,"%lf %lf %lf %lf",&time,&kin,&pot,&tot);
- if(time<start) continue;
- if(time>end) break;
- p_sum+=pot;
- k_sum+=kin;
- t_sum+=tot;
- p2_sum+=(pot*pot);
- k2_sum+=(kin*kin);
- t2_sum+=(tot*tot);
- count+=1;
- }
-
- /* averages */
- moldyn->k_m=k_sum/count;
- moldyn->p_m=p_sum/count;
- moldyn->t_m=t_sum/count;
-
- /* rms */
- moldyn->dk2_m=k2_sum/count-moldyn->k_m*moldyn->k_m;
- moldyn->dp2_m=p2_sum/count-moldyn->p_m*moldyn->p_m;
- moldyn->dt2_m=t2_sum/count-moldyn->t_m*moldyn->t_m;
-
- printf(" averages : %f %f %f\n",moldyn->k_m,
- moldyn->p_m,
- moldyn->t_m);
- printf(" mean square: %f %f %f\n",moldyn->dk2_m,
- moldyn->dp2_m,
- moldyn->dt2_m);
-
- close(fd);
-
- return 0;
-}
-
-int get_heat_capacity(t_moldyn *moldyn) {
-
- double temp2,mass,ighc;
- int i;
-
- /* (temperature average)^2 */
- temp2=2.0*moldyn->k_m*EV/(3.0*K_BOLTZMANN);
- printf("[moldyn] specific heat capacity for T=%f K [J/(kg K)]\n",temp2);
- temp2*=temp2;
-
- /* total mass */
- mass=0.0;
- for(i=0;i<moldyn->count;i++)
- mass+=moldyn->atom[i].mass;
-
- /* ideal gas contribution */
- ighc=3.0*moldyn->count*K_BOLTZMANN/2.0;
- printf(" ideal gas contribution: %f\n",ighc/mass*KILOGRAM/JOULE);
-
- moldyn->c_v_nvt=moldyn->dp2_m*moldyn->count*moldyn->count*EV/(K_BOLTZMANN*temp2)+ighc;
- moldyn->c_v_nvt/=mass;
- moldyn->c_v_nve=ighc/(1.0-(moldyn->dp2_m*moldyn->count*moldyn->count*EV/(ighc*K_BOLTZMANN*temp2)));
- moldyn->c_v_nve/=mass;
-
- printf(" NVE: %f\n",moldyn->c_v_nve*KILOGRAM/JOULE);
- printf(" NVT: %f\n",moldyn->c_v_nvt*KILOGRAM/JOULE);
-
- return 0;
-}