#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>#define fm 30#define pi 3.1415926#define dt 0.001#define Nt 1000#define Nx 400#define Nz 400#define N 6void fun(float *source){ int it,i; float t1,t2,t0,tdelay; for(i=0;i<Nt;i++) source[i]=0.0; tdelay=2.0*sqrt(pi)/(fm*4.0); for(it=0;it<Nt;it++) { t1=it*dt-tdelay; source[it]=(1.0-2.0*pow(pi*fm*t1,2.0))*exp(-pow(pi*fm*t1,2.0)); }}int main(){ FILE *fp; char filename[40]; int it,ix,iz,shot; int Snx,Snz,**source_shot; float dx,dz,dh; float U,**Un,**Unm,**Unp,**v,*source; //Un t时刻 Unp t+1时刻 Unm t-1时刻 float a2; int m; float c0=0.0,Sum=0.0; float C[7]; Un=(float**)malloc(sizeof(float*)*Nx); for(ix=0;ix<Nx;ix++){ Un[ix]=(float*)malloc(sizeof(float)*Nz);} Unm=(float**)malloc(sizeof(float*)*Nx); for(ix=0;ix<Nx;ix++){ Unm[ix]=(float*)malloc(sizeof(float)*Nz);} Unp=(float**)malloc(sizeof(float*)*Nx); for(ix=0;ix<Nx;ix++){ Unp[ix]=(float*)malloc(sizeof(float)*Nz);} source_shot=(int**)malloc(sizeof(int*)*Nx); for(ix=0;ix<Nx;ix++){ source_shot[ix]=(int*)malloc(sizeof(int)*Nz);} v=(float**)malloc(sizeof(float*)*Nx); for(ix=0;ix<Nx;ix++){ v[ix]=(float*)malloc(sizeof(float)*Nz);} source=(float*)malloc(sizeof(float)*Nt); C[0]=-2.982778;C[1]=1.714286;C[2]=-0.2678578;C[3]=0.052910;C[4]=-0.008929;C[5]=0.001039;C[6]=-0.000060; for(m=0;m<=N;m++) { c0+=C[m]; } for(ix=0;ix<Nx;ix++) { for(iz=0;iz<Nz;iz++) { v[ix][iz]=2000; } } dx=dz=dh=5.0; fun(source); Snx=Nx/2; Snz=Nz/2; for(ix=0;ix<Nx;ix++) { for(iz=0;iz<Nz;iz++) { Un[ix][iz]=0.0; Unm[ix][iz]=0.0; Unp[ix][iz]=0.0; } } for(it=0;it<Nt;it++) { printf("t=%d\n",it); for(ix=N;ix<(Nx-N);ix++) for(iz=N;iz<(Nz-N);iz++) { a2=v[ix][iz]*v[ix][iz]*dt*dt/dh/dh; { for(m=1;m<=N;m++) { Sum=Sum+C[m]*(Un[ix-m][iz]+Un[ix+m][iz]+Un[ix][iz-m]+Un[ix][iz+m]); } } if(ix==Snx&&iz==Snz) shot=1; else shot=0; Unp[ix][iz]=a2*Sum+2*(1+a2*c0)*Un[ix][iz]-Unm[ix][iz]+source[it]*shot; } for(ix=N;ix<(Nx-N);ix++) { for(iz=N;iz<(Nz-N);iz++) { Unm[ix][iz]=Un[ix][iz]; Un[ix][iz]=Unp[ix][iz]; } } if(it==500) { if((fp=fopen("wavefront.txt","w"))!=NULL) { for(ix=N;ix<(Nx-N);ix++) for(iz=N;iz<(Nz-N);iz++) { fprintf(fp,"%f\n",Un[ix][iz]); } fclose(fp); } } }return 0;}
很可能是除数为0造成的无效数据
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632