各向异性VTI介质地震波场模拟,速度-应力弹性波方程交错网格有限差分法,PML吸收边界(C++和MATLAB两种语言的代码都有)

参考各向同性的程序,进一步修改为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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值