C言語です。実行後にコアダンプを起こしました。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
発生している問題・エラーメッセージ
実行後にコアダンプです。
エラーメッセージ
該当のソースコード
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 13
double get_vr(double r)
{
double rinv =1.0/r;
return 4.0*(pow(rinv, 12.0)-pow(rinv, 6.0));
}
double get_dvdr(double r)
{
double rinv = 1.0/r;
return -24.0*(2.0*pow(rinv, 13.0) - pow(rinv, 7.0));
}
double getforce(double *x, double *y, double *z, double *fx, double *fy, double *fz)
{
int i,j;
double rij_norm, dvdr, pe=0.0;
double xij,yij,zij,drdxi,drdyi,drdzi;
for (i=0;i<N;i++){
fx[i]=0.0;fy[i]=0.0;fz[i]=0.0;
}
for (i=0;i<N-1;i++){
for (j=i+1;j<N;j++){
xij=x[i]-x[j];
yij=y[i]-y[j];
zij=z[i]-z[j];
rij_norm=sqrt(xij*xij+yij*yij+zij*zij); pe+=get_vr(rij_norm); dvdr=get_dvdr(rij_norm); drdxi=xij/rij_norm; drdyi=yij/rij_norm; drdzi=zij/rij_norm; fx[i]-=drdxi*dvdr; fy[i]-=drdyi*dvdr; fz[i]-=drdzi*dvdr; fx[j]+=drdxi*dvdr; fy[j]+=drdyi*dvdr; fz[j]+=drdzi*dvdr; }
}
return pe;
}
void update_v(double vx,double vy,double vz, double fx,double fy, double fz,double dt)
{
int i;
for (i=0;i<N;i++){
vx[i]+=0.5dtfx[i];
vy[i]+=0.5dtfy[i];
vz[i]+=0.5dtfz[i];
}
}
void update_r(double *x,double *y,double *z,double vx,double vy,double vz, double dt)
{
int i;
for (i=0;i<N;i++){
x[i]+=dtvx[i];
y[i]+=dtvy[i];
z[i]+=dtvz[i];
}
}
double get_ke(double *vx,double *vy,double *vz)
{
int i;
double ke=0.0;
for (i=0;i<N;i++)
ke +=vx[i]*vx[i]+vy[i]*vy[i]+vz[i]*vz[i];
return 0.5*ke;
}
int main (void)
{
int i,istep,nstep,nskip=10;
double x[N],y[N],z[N],vx[N],vy[N],vz[N],fx[N],fy[N],fz[N];
double dt,ke,pe,ham,keav,peav;
FILE *start_in_ptr,*start_out_ptr,*physav_ptr,*physinst_ptr;
FILE *trj_r_ptr,*trj_v_ptr;
scanf("%d",&nstep);
start_in_ptr=fopen("start.in","r");
start_out_ptr=fopen("start.out","w+");
physinst_ptr=fopen("physinst.dat","w+");
physav_ptr=fopen("physav.dat","w+");
trj_r_ptr=fopen("cluster_r.trj","w+");
trj_v_ptr=fopen("cluster_v.trj","w+");
dt =0.01;
for (i=0;i<N;i++){
fscanf(start_in_ptr, "%lf %lf %lf %lf %lf %lf",&x[i],&y[i],&z[i],&vx[i],&vy[i],&vz[i]);
}
pe=getforce(x,y,z,fx,fy,fz);
keav=0.0; peav=0.0;
for (istep=1;istep<=nstep;istep++){
update_v(vx,vy,vz,fx,fy,fz,dt);
update_r(x,y,z,vx,vy,vz,dt);
pe=getforce(x,y,z,vx,vy,vz);
update_v(vx,vy,vz,fx,fy,fz,dt);
ke=get_ke(vx,vy,vz);
ham=ke+pe;
keav+=ke;peav+=pe;
printf("%d %w %f %f\n",istep,ham,ke,pe);
if (istep%nskip==0){
fprintf(physinst_ptr,"%d %f %f\n",istep,ke,pe);
fprintf(physav_ptr,"%d %f %f\n",istep,keav/istep,peav/istep);
for (i=0;i<N;i++){ fprintf(trj_r_ptr,"%f %f %f\n",x[i],y[i],z[i]); fprintf(trj_v_ptr,"%f %f %f\n",vx[i],vy[i],vz[i]); }
}
}
for (i=0;i<N;i++)
fprintf(start_out_ptr,"%.18e %.18e %.18e %.18e %.18e %.18e\n",x[i],y[i],z[i],vx[i],vy[i],vz[i]);
fclose(start_in_ptr);
fclose(start_out_ptr);
fclose(physav_ptr);
fclose(trj_r_ptr);
fclose(trj_v_ptr);
return 0;
}
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
