参考各向同性的程序,进一步修改为VTI介质,不懂的随时交流。 这里是C/C++写的:
/*************************************************************************************/
/***********Elastic Velocity-Stress Finite-difference Modeling with PML***************/
/*************High Order (Highest: sixteen order) Finite-difference*******************/
/***************************Written By Zhang Jianming,2022.10.10**********************/
/***************************************CopyRight*************************************/
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
#define PI 3.1415926
#define dt 0.0005
#define dx 8
#define dz 8
#define NX 401
#define NZ 401
#define NT 401
#define N 1
#define pml 25
//float Txx[NX][NZ], Tzz[NX][NZ], Txz[NX - 1][NZ - 1], Vx[NX - 1][NZ], Vz[NX][NZ - 1], L[NX][NZ], M[NX][NZ], e[NX][NZ];
//float Txx_x[NX][NZ], Tzz_x[NX][NZ], Txz_x[NX - 1][NZ - 1], Vx_x[NX - 1][NZ], Vz_x[NX][NZ - 1];
//float Txx_z[NX][NZ], Tzz_z[NX][NZ], Txz_z[NX - 1][NZ - 1], Vx_z[NX - 1][NZ], Vz_z[NX][NZ - 1];
//float C11[NX][NZ], C33[NX][NZ], C44[NX][NZ], C66[NX][NZ], C13[NX][NZ], Rou[NX][NZ];
//float Txx[NX][NZ],Txx_x[NX][NZ],Txx_z[NX][NZ];
//float Tzz[NX][NZ],Tzz_x[NX][NZ],Tzz_z[NX][NZ];
//float Txz[NX][NZ],Txz_x[NX][NZ],Txz_z[NX][NZ];
//float Vx[NX][NZ],Vx_x[NX][NZ],Vx_z[NX][NZ];
//float Vz[NX][NZ],Vz_x[NX][NZ],Vz_z[NX][NZ];
//float L[NX][NZ], M[NX][NZ], e[NX][NZ];
//float C11[NX][NZ], C33[NX][NZ], C44[NX][NZ], C66[NX][NZ], C13[NX][NZ], Rou[NX][NZ];
int main()
{
float **Txx=new float*[NX],**Txx_x=new float*[NX],**Txx_z=new float*[NX];
float **Tzz=new float*[NX],**Tzz_x=new float*[NX],**Tzz_z=new float*[NX];
float **Txz=new float*[NX],**Txz_x=new float*[NX],**Txz_z=new float*[NX];
float **Vx=new float*[NX],**Vx_x=new float*[NX],**Vx_z=new float*[NX];
//A wierd question: icpc compeler broke down using the below Vz, why?
float **Vz=new float*[NX],**Vz_x=new float*[NX],**Vz_z=new float*[NX];
float **L=new float*[NX],**M=new float*[NX],**e=new float*[NX];
float **C11=new float*[NX],**C33=new float*[NX],**C44=new float*[NX],**C66=new float*[NX],**C13=new float*[NX],**Rou=new float*[NX];
for(int i=0;i<NX;i++)
{
Txx[i]=new float[NZ];Txx_x[i]=new float[NZ];Txx_z[i]=new float[NZ];
Tzz[i]=new float[NZ];Tzz_x[i]=new float[NZ];Tzz_z[i]=new float[NZ];
Txz[i]=new float[NZ];Txz_x[i]=new float[NZ];Txz_z[i]=new float[NZ];
Vx[i]=new float[NZ];Vx_x[i]=new float[NZ];Vx_z[i]=new float[NZ];
Vz[i]=new float[NZ];Vz_x[i]=new float[NZ];Vz_z[i]=new float[NZ];
L[i]=new float[NZ];M[i]=new float[NZ];e[i]=new float[NZ];
C11[i]=new float[NZ];C33[i]=new float[NZ];C44[i]=new float[NZ];C66[i]=new float[NZ];C13[i]=new float[NZ];Rou[i]=new float[NZ];
for(int j=0;j<NZ;j++)
{
Txx[i][j]=0;Txx_x[i][j]=0;Txx_z[i][j]=0;
Tzz[i][j]=0;Tzz_x[i][j]=0;Tzz_z[i][j]=0;
Txz[i][j]=0;Txz_x[i][j]=0;Txz_z[i][j]=0;
Vx[i][j]=0;Vx_x[i][j]=0;Vx_z[i][j]=0;
Vz[i][j]=0;Vz_x[i][j]=0;Vz_z[i][j]=0;
L[i][j]=0;M[i][j]=0;e[i][j]=0;
C11[i][j]=0;C33[i][j]=0;C44[i][j]=0;C66[i][j]=0;C13[i][j]=0;Rou[i][j]=0;
}
}
int i,j,k,f0=30;float t0=1.2/f0;
FILE *fp1,*fp2,*fp3,*fp4,*fp5;
float ddx[NX][NZ];float ddz[NX][NZ];
float R=0.001,Vmax=2500;
int x,z,plx,plz;
for(i=0;i<NX;i++)
for(j=0;j<NZ;j++)
{
Txx[i][j]=0;Txx_x[i][j]=0;Txx_z[i][j]=0;
Tzz[i][j]=0;Tzz_x[i][j]=0;Tzz_z[i][j]=0;
Txz[i][j]=0;Txz_x[i][j]=0;Txz_z[i][j]=0;
Vx[i][j]=0;Vx_x[i][j]=0;Vx_z[i][j]=0;
Vz[i][j]=0;Vz_x[i][j]=0;Vz_z[i][j]=0;
L[i][j]=1.19*pow(10, 10);M[i][j]=5.4*pow(10, 9);e[i][j]=2.0*pow(10, 3);
//if(j<241)
if(j<55551)
{
//Iso
//C11[i][j]=L[i][j]+2*M[i][j];
//C33[i][j]=C11[i][j];
//C44[i][j]=M[i][j];
//C66[i][j]=M[i][j];
//C13[i][j]=L[i][j];
//Rou[i][j]=e[i][j];
//Ice
//C11[i][j]=13.33*pow(10, 9);
//C33[i][j]=14.28*pow(10, 9);
//C44[i][j]=3.26*pow(10, 9);
//C66[i][j]=3.65*pow(10, 9);
//C13[i][j]=5.08*pow(10, 9);
//Rou[i][j]=0.91*pow(10, 3);
//Quartz
//C11[i][j]=116.6*pow(10, 9);
//C33[i][j]=110.40*pow(10, 9);
//C44[i][j]=36.06*pow(10, 9);
//C66[i][j]=49.95*pow(10, 9);
//C13[i][j]=32.8*pow(10, 9);
//Rou[i][j]=2.65*pow(10, 3);
//Mantle
C11[i][j]=212.8*pow(10, 9);
C33[i][j]=249.18*pow(10, 9);
C44[i][j]=70.47*pow(10, 9);
C66[i][j]=66.72*pow(10, 9);
C13[i][j]=76.24*pow(10, 9);
Rou[i][j]=3.22*pow(10, 3);
}
else
{
C11[i][j]=116.6*pow(10, 9);
C33[i][j]=110.40*pow(10, 9);
C44[i][j]=36.06*pow(10, 9);
C66[i][j]=49.95*pow(10, 9);
C13[i][j]=32.8*pow(10, 9);
Rou[i][j]=2.65*pow(10, 3);
}
}
//PML
plx=pml*dx;plz=pml*dz;
for(i=0;i<NX;i++)
for(j=0;j<NZ;j++)
{
if(i>=0&&i<pml&&j>=0&&j<pml)
{
x=pml-i;z=pml-j;
ddx[i][j]=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz[i][j]=-log(R)*3*Vmax*z*z/(2*plz*plz);
}
else if(i>=0&&i<pml&&j>NZ-pml&&j<NZ)
{
x=pml-i;z=j-(NZ-pml);
ddx[i][j]=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz[i][j]=-log(R)*3*Vmax*z*z/(2*plz*plz);
}
else if(i>NX-pml&&i<NX&&j>=0&&j<pml)
{
x=i-(NX-pml);z=pml-j;
ddx[i][j]=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz[i][j]=-log(R)*3*Vmax*z*z/(2*plz*plz);
}
else if(i>NX-pml&&i<NX&&j>NZ-pml&&j<NZ)
{
x=i-(NX-pml);z=j-(NZ-pml);
ddx[i][j]=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz[i][j]=-log(R)*3*Vmax*z*z/(2*plz*plz);
}
else if(i>=pml&&i<=NX-pml&&j>=0&&j<pml)
{
x=i-pml;z=pml-j;
ddx[i][j]=0;
ddz[i][j]=-log(R)*3*Vmax*z*z/(2*plz*plz);
}
else if(i>=pml&&i<=NX-pml&&j>NZ-pml&&j<NZ)
{
x=i-pml;z=j-(NZ-pml);
ddx[i][j]=0;
ddz[i][j]=-log(R)*3*Vmax*z*z/(2*plz*plz);
}
else if(i>=0&&i<pml&&j>=pml&&j<=NZ-pml)
{
x=pml-i;z=j-pml;
ddx[i][j]=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz[i][j]=0;
}
else if(i>NX-pml&&i<NX&&j>=pml&&j<=NZ-pml)
{
x=i-(NX-pml);z=j-pml;
ddx[i][j]=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz[i][j]=0;
}
else if(i>=pml&&i<=NX-pml&&j>=pml&&j<=NZ-pml)
{
x=i-pml;z=j-pml;
ddx[i][j]=0;
ddz[i][j]=0;
}
}
for(k=0;k<NT;k++)
{
for(i=N;i<NX-N;i++)
for(j=N;j<NZ-N;j++)
{
//Txx[i][j]=Txx[i][j]+dt*((L[i][j]+2*M[i][j])*(Vx[i][j]-Vx[i-1][j])/dx+(Vz[i][j]-Vz[i][j-1])/dz*L[i][j]);
//Tzz[i][j]=Tzz[i][j]+dt*((L[i][j]+2*M[i][j])*(Vz[i][j]-Vz[i][j-1])/dz+(Vx[i][j]-Vx[i-1][j])/dx*L[i][j]);
Txx_x[i][j]=(1-0.5*dt*ddx[i][j])/(1+0.5*dt*ddx[i][j])*Txx_x[i][j]+dt*(C11[i][j])/(1+0.5*dt*ddx[i][j])*(Vx[i][j]-Vx[i-1][j])/dx;
Txx_z[i][j]=(1-0.5*dt*ddz[i][j])/(1+0.5*dt*ddz[i][j])*Txx_z[i][j]+dt*C13[i][j]/(1+0.5*dt*ddz[i][j])*(Vz[i][j]-Vz[i][j-1])/dz;
Tzz_x[i][j]=(1-0.5*dt*ddx[i][j])/(1+0.5*dt*ddx[i][j])*Tzz_x[i][j]+dt*C13[i][j]/(1+0.5*dt*ddx[i][j])*(Vx[i][j]-Vx[i-1][j])/dx;
Tzz_z[i][j]=(1-0.5*dt*ddz[i][j])/(1+0.5*dt*ddz[i][j])*Tzz_z[i][j]+dt*(C33[i][j])/(1+0.5*dt*ddz[i][j])*(Vz[i][j]-Vz[i][j-1])/dz;
Txx[i][j]=Txx_x[i][j]+Txx_z[i][j];
Tzz[i][j]=Tzz_x[i][j]+Tzz_z[i][j];
if(i==NX/2&&j==NZ/2)
{
float tmp=pow(PI*f0*(k*dt-t0),2);
//Ricker
Txx_x[i][j]+=0.5*exp(-1.0*tmp)*(1-2.0*tmp);
Txx_z[i][j]+=0.5*exp(-1.0*tmp)*(1-2.0*tmp);
Tzz_x[i][j]+=0.5*exp(-1.0*tmp)*(1-2.0*tmp);
Tzz_z[i][j]+=0.5*exp(-1.0*tmp)*(1-2.0*tmp);
//Gauss
//Tzz[i][j]+=-1.0*PI*PI*f0*f0*(k*dt-t0)*exp(-1.0*tmp)*(3.0-2.0*tmp);
//Txx[i][j]+=-1.0*PI*PI*f0*f0*(k*dt-t0)*exp(-1.0*tmp)*(3.0-2.0*tmp);
}
}
for(i=N;i<NX-N-1;i++)
for(j=N;j<NZ-N-1;j++)
{
//Txz[i][j]=Txz[i][j]+dt*M[i][j]*((Vz[i+1][j]-Vz[i][j])/dx+(Vx[i][j+1]-Vx[i][j])/dz);
Txz_x[i][j]=(1-0.5*dt*ddx[i][j])/(1+0.5*dt*ddx[i][j])*Txz_x[i][j]+dt*C44[i][j]/(1+0.5*dt*ddx[i][j])*(Vz[i+1][j]-Vz[i][j])/dx;
Txz_z[i][j]=(1-0.5*dt*ddz[i][j])/(1+0.5*dt*ddz[i][j])*Txz_z[i][j]+dt*C66[i][j]/(1+0.5*dt*ddz[i][j])*(Vx[i][j+1]-Vx[i][j])/dz;
Txz[i][j]=Txz_x[i][j]+Txz_z[i][j];
}
for(i=N;i<NX-N-1;i++)
for(j=N;j<NZ-N;j++)
{
//Vx[i][j]=Vx[i][j]+dt/e[i][j]*((Txx[i+1][j]-Txx[i][j])/dx+(Txz[i][j]-Txz[i][j-1])/dz);
Vx_x[i][j]=(1-0.5*dt*ddx[i][j])/(1+0.5*dt*ddx[i][j])*Vx_x[i][j]+dt/Rou[i][j]/(1+0.5*dt*ddx[i][j])*(Txx[i+1][j]-Txx[i][j])/dx;
Vx_z[i][j]=(1-0.5*dt*ddz[i][j])/(1+0.5*dt*ddz[i][j])*Vx_z[i][j]+dt/Rou[i][j]/(1+0.5*dt*ddz[i][j])*(Txz[i][j]-Txz[i][j-1])/dz;
Vx[i][j]=Vx_x[i][j]+Vx_z[i][j];
}
for(i=N;i<NX-N;i++)
for(j=N;j<NZ-N-1;j++)
{
//Vz[i][j]=Vz[i][j]+dt/e[i][j]*((Tzz[i][j+1]-Tzz[i][j])/dz+(Txz[i][j]-Txz[i-1][j])/dx);
Vz_x[i][j]=(1-0.5*dt*ddx[i][j])/(1+0.5*dt*ddx[i][j])*Vz_x[i][j]+dt/Rou[i][j]/(1+0.5*dt*ddx[i][j])*(Txz[i][j]-Txz[i-1][j])/dx;
Vz_z[i][j]=(1-0.5*dt*ddz[i][j])/(1+0.5*dt*ddz[i][j])*Vz_z[i][j]+dt/Rou[i][j]/(1+0.5*dt*ddz[i][j])*(Tzz[i][j+1]-Tzz[i][j])/dz;
Vz[i][j]=Vz_x[i][j]+Vz_z[i][j];
}
}
fp1=fopen("Txx.dat", "wb+");
for (i = 0; i < NX; i++)
for (j = 0; j < NZ; j++)
fwrite(&Txx[i][j], sizeof(float), 1, fp1);
fp2=fopen("Tzz.dat", "wb+");
for (i = 0; i < NX; i++)
for (j = 0; j < NZ; j++)
{
fwrite(&Tzz[i][j], sizeof(float), 1, fp2);
}
fp3=fopen("Txz.dat", "wb+");
for (i = 0; i < NX-1; i++)
for (j = 0; j < NZ-1; j++)
fwrite(&Txz[i][j], sizeof(float), 1, fp3);
fp4=fopen("Vx.dat", "wb+");
for (i = 0; i < NX-1; i++)
for (j = 0; j < NZ; j++)
fwrite(&Vx[i][j], sizeof(float), 1, fp4);
fp5=fopen("Vz.dat", "wb+");
for (i = 0; i < NX; i++)
for (j = 0; j < NZ-1; j++)
fwrite(&Vz[i][j], sizeof(float), 1, fp5);
}
这里是MATLAB写的:
clear;clc
dt=0.002;
dx=20;
dz=20;
NX=801;
NZ=801;
NT=801;
N=1;
pml=20;
Uxx=zeros(NX,NZ);
Uzz=zeros(NX,NZ);
Uxz=zeros(NX-1,NZ-1);
Vx=zeros(NX-1,NZ);
Vz=zeros(NX,NZ-1);
L=zeros(NX,NZ);
M=zeros(NX,NZ);
e=zeros(NX,NZ);
Uxx_x=zeros(NX,NZ);
Uzz_x=zeros(NX,NZ);
Uxz_x=zeros(NX-1,NZ-1);
Vx_x=zeros(NX-1,NZ);
Vz_x=zeros(NX,NZ-1);
Uxx_z=zeros(NX,NZ);
Uzz_z=zeros(NX,NZ);
Uxz_z=zeros(NX-1,NZ-1);
Vx_z=zeros(NX-1,NZ);
Vz_z=zeros(NX,NZ-1);
C11=zeros(NX,NZ);
C33=zeros(NX,NZ);
C44=zeros(NX,NZ);
C66=zeros(NX,NZ);
C13=zeros(NX,NZ);
Den=zeros(NX,NZ);
f0=10;
t0=1.2/f0;
t=-t0:dt:(NT-1)*dt-t0;
%FILE *fp1,*fp2,*fp3,*fp4,*fp5;
ddx=zeros(NX,NZ);
ddz=zeros(NX,NZ);
R=0.000001;
Vmax=2500;
for i=1:NX
for j=1:NZ
Uxx(i,j)=0;
Uxx_x(i,j)=0;
Uxx_z(i,j)=0;
Uzz(i,j)=0;
Uzz_x(i,j)=0;
Uzz_z(i,j)=0;
L(i,j)=1.19*(10^10);
M(i,j)=5.4*(10^9);
e(i,j)=2.0*(10^3);
if j<=241/401*NX
C11(i,j)=13.33*(10^9);
C33(i,j)=14.28*(10^9);
C44(i,j)=3.26*(10^9);
C66(i,j)=3.65*(10^9);
C13(i,j)=5.08*(10^9);
Den(i,j)=0.91*(10^3);
else
C11(i,j)=116.6*(10^9);
C33(i,j)=110.40*(10^9);
C44(i,j)=36.06*(10^9);
C66(i,j)=49.95*(10^9);
C13(i,j)=32.8*(10^9);
Den(i,j)=2.65*(10^3);
end
end
end
for i=1:NX-1
for j=1:NZ
Vx(i,j)=0;
Vx_x(i,j)=0;
Vx_z(i,j)=0;
end
end
for i=1:NX
for j=1:NZ-1
Vz(i,j)=0;
Vz_x(i,j)=0;
Vz_z(i,j)=0;
end
end
for i=1:NX-1
for j=1:NZ-1
Uxz(i,j)=0;
Uxz_x(i,j)=0;
Uxz_z(i,j)=0;
end
end
%PML
plx=pml*dx;
plz=pml*dz;
for i=1:NX
for j=1:NZ
if i>=1&&i<=pml&&j>=1&&j<=pml
x=pml-i;z=pml-j;
ddx(i,j)=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz(i,j)=-log(R)*3*Vmax*z*z/(2*plz*plz);
else
if i>=1&&i<=pml&&j>=NZ-pml&&j<=NZ
x=pml-i;z=j-(NZ-pml);
ddx(i,j)=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz(i,j)=-log(R)*3*Vmax*z*z/(2*plz*plz);
else
if i>=NX-pml&&i<=NX&&j>=1&&j<=pml
x=i-(NX-pml);z=pml-j;
ddx(i,j)=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz(i,j)=-log(R)*3*Vmax*z*z/(2*plz*plz);
else
if i>=NX-pml&&i<=NX&&j>=NZ-pml&&j<=NZ
x=i-(NX-pml);z=j-(NZ-pml);
ddx(i,j)=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz(i,j)=-log(R)*3*Vmax*z*z/(2*plz*plz);
else
if i>=pml+1&&i<NX-pml&&j>=1&&j<=pml
x=i-pml;z=pml-j;
ddx(i,j)=0;
ddz(i,j)=-log(R)*3*Vmax*z*z/(2*plz*plz);
else
if i>=pml+1&&i<NX-pml&&j>=NZ-pml&&j<=NZ
x=i-pml;z=j-(NZ-pml);
ddx(i,j)=0;
ddz(i,j)=-log(R)*3*Vmax*z*z/(2*plz*plz);
else
if i>=1&&i<=pml&&j>=pml+1&&j<NZ-pml
x=pml-i;z=j-pml;
ddx(i,j)=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz(i,j)=0;
else
if i>=NX-pml&&i<=NX&&j>=pml+1&&j<NZ-pml
x=i-(NX-pml);z=j-pml;
ddx(i,j)=-log(R)*3*Vmax*x*x/(2*plx*plx);
ddz(i,j)=0;
else
if i>=pml+1&&i<NX-pml&&j>=pml+1&&j<NZ-pml
x=i-pml;z=j-pml;
ddx(i,j)=0;
ddz(i,j)=0;
end
end
end
end
end
end
end
end
end
end
end
figure('units','normalized','position',[0,0,0.5,0.75])%设置成图框的大小
for k=1:NT
for i=N+1:NX-N
for j=N+1:NZ-N
Uxx_x(i,j)=(1-0.5*dt*ddx(i,j))/(1+0.5*dt*ddx(i,j))*Uxx_x(i,j)+dt*(C11(i,j))/(1+0.5*dt*ddx(i,j))*(Vx(i,j)-Vx(i-1,j))/dx;
Uxx_z(i,j)=(1-0.5*dt*ddz(i,j))/(1+0.5*dt*ddz(i,j))*Uxx_z(i,j)+dt*C13(i,j)/(1+0.5*dt*ddz(i,j))*(Vz(i,j)-Vz(i,j-1))/dz;
Uzz_x(i,j)=(1-0.5*dt*ddx(i,j))/(1+0.5*dt*ddx(i,j))*Uzz_x(i,j)+dt*C13(i,j)/(1+0.5*dt*ddx(i,j))*(Vx(i,j)-Vx(i-1,j))/dx;
Uzz_z(i,j)=(1-0.5*dt*ddz(i,j))/(1+0.5*dt*ddz(i,j))*Uzz_z(i,j)+dt*(C33(i,j))/(1+0.5*dt*ddz(i,j))*(Vz(i,j)-Vz(i,j-1))/dz;
Uxx(i,j)=Uxx_x(i,j)+Uxx_z(i,j);
Uzz(i,j)=Uzz_x(i,j)+Uzz_z(i,j);
if i==(NX+1)/2&&j==(NZ+1)/2
Uxx(i,j)=Uxx(i,j)+1000*(1-2*pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0))*exp(-pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0));
Uxx_x(i,j)=Uxx_x(i,j)+500*(1-2*pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0))*exp(-pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0));
Uxx_z(i,j)=Uxx_z(i,j)+500*(1-2*pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0))*exp(-pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0));
Uzz(i,j)=Uzz(i,j)+1000*(1-2*pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0))*exp(-pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0));
Uzz_x(i,j)=Uzz_x(i,j)+500*(1-2*pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0))*exp(-pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0));
Uzz_z(i,j)=Uzz_z(i,j)+500*(1-2*pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0))*exp(-pi*f0*(k*dt-t0)*pi*f0*(k*dt-t0));
end
end
end
for i=N+1:NX-N-1
for j=N+1:NZ-N-1
Uxz_x(i,j)=(1-0.5*dt*ddx(i,j))/(1+0.5*dt*ddx(i,j))*Uxz_x(i,j)+dt*C44(i,j)/(1+0.5*dt*ddx(i,j))*(Vz(i+1,j)-Vz(i,j))/dx;
Uxz_z(i,j)=(1-0.5*dt*ddz(i,j))/(1+0.5*dt*ddz(i,j))*Uxz_z(i,j)+dt*C66(i,j)/(1+0.5*dt*ddz(i,j))*(Vx(i,j+1)-Vx(i,j))/dz;
Uxz(i,j)=Uxz_x(i,j)+Uxz_z(i,j);
end
end
for i=N+1:NX-N-1
for j=N+1:NZ-N
Vx_x(i,j)=(1-0.5*dt*ddx(i,j))/(1+0.5*dt*ddx(i,j))*Vx_x(i,j)+dt/Den(i,j)/(1+0.5*dt*ddx(i,j))*(Uxx(i+1,j)-Uxx(i,j))/dx;
Vx_z(i,j)=(1-0.5*dt*ddz(i,j))/(1+0.5*dt*ddz(i,j))*Vx_z(i,j)+dt/Den(i,j)/(1+0.5*dt*ddz(i,j))*(Uxz(i,j)-Uxz(i,j-1))/dz;
Vx(i,j)=Vx_x(i,j)+Vx_z(i,j);
end
end
for i=N+1:NX-N
for j=N+1:NZ-N-1
Vz_x(i,j)=(1-0.5*dt*ddx(i,j))/(1+0.5*dt*ddx(i,j))*Vz_x(i,j)+dt/Den(i,j)/(1+0.5*dt*ddx(i,j))*(Uxz(i,j)-Uxz(i-1,j))/dx;
Vz_z(i,j)=(1-0.5*dt*ddz(i,j))/(1+0.5*dt*ddz(i,j))*Vz_z(i,j)+dt/Den(i,j)/(1+0.5*dt*ddz(i,j))*(Uzz(i,j+1)-Uzz(i,j))/dz;
Vz(i,j)=Vz_x(i,j)+Vz_z(i,j);
end
end
%Uxx=Uxx+Uzz;
mx=0.2*max(max(Uxx));
mn=0.2*min(min(Uxx));
if(mod(k+5,5)==0)
Uxx=Uxx';
imagesc(NZ,NX,Uxx)
colorbar;
colormap(flipud(gray))
axis image %纵、横轴采用等长刻度,且坐标框紧贴数据范围
caxis([mn mx])
set(gcf,'color','w');
string=sprintf('%s%f%s','t=',k*dt ,'s');
title(string,'fontsize',12)
pause(0.0000000000001)
end
end