二维弹性介质波动方程数值模拟动态图像

/*Forward modeling*/
#include<stdio.h>
#include<math.h>
#include<graphics.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
void fun();
int main (void)
{	
	
	/*Background board*/
	initgraph(600,600);       
	setbkcolor(BLACK);         
	setlinecolor(WHITE);       
	cleardevice();             
	setorigin(2,598);

	fun();
	return 0;
}
void fun()
{
	/*Initializing Variables*/
	int x,y,t;
	double i;
	double j;
	double dx,dy,dt,dh,v;
	double b[179][179];
	double constant;
	double ricker = 100;
	double m,n;
	int m1,n1;
	double (*p)[179][179]=(double(*)[179][179])malloc(sizeof(double)*175*179*179);
	v = 0.5;
	dt = dx = dy = dh = 1;	
	constant = (v*dt/dh)*(v*dt/dh);

	/*Gird depiction*/
	for(j=2.0;j<=587.4;j+=3.3)
	{
		line(2.0,-j,586.1,-j);   
		line(j, -586.1,j,-2.0);       
	}


	/*Boundary initialization*/
	for(t=0;t<175;t++)
	{
		for(x=0;x<179;x++)
		{
			for(y=0;y<179;y++)
			{
				p[t][x][y] = 0;//the value of 'p' is 0 on every moment
			}
		}
	}

	/*Ricker initialization*/
	p[0][89][89] = ricker;//t = -1
	p[1][89][89] = ricker;//t = 0

	/*Propagation of assignment(interation)*/
	for(t=2;t<170;t++)
	{

		/*(89,89)—(177,177)对角线矩形网格区域*/
		for(x=0;x<89;x++)
		{
				for(y=0;y<89;y++)
				{
					p[t+1][x+89][y+89] = (constant/12)*(16*(p[t][(x+89)+1][y+89] + p[t][(x+89)-1][y+89] + p[t][x+89][y+89+1] + p[t][x+89][y+89-1]) - (p[t][(x+89)+2][y+89] + p[t][(x+89)-2][y+89] + p[t][x+89][y+89+2] + p[t][x+89][y+89-2])) + (2-5*constant)*p[t][x+89][y+89] - p[t-1][x+89][y+89];
				}
		}
		/*(89,1)—(177,88)对角线矩形网格区域*/
		for(x=0;x<89;x++)
		{
				for(y=-88;y<0;y++)
				{
					p[t+1][x+89][y+89] = (constant/12)*(16*(p[t][(x+89)+1][y+89] + p[t][(x+89)-1][y+89] + p[t][x+89][y+89+1] + p[t][x+89][y+89-1]) - (p[t][(x+89)+2][y+89] + p[t][(x+89)-2][y+89] + p[t][x+89][y+89+2] + p[t][x+89][y+89-2])) + (2-5*constant)*p[t][x+89][y+89] - p[t-1][x+89][y+89];
				}
		}
		/*(89,89)—(1,1)对角线矩形网格区域*/
		for(x=-88;x<1;x++)
		{
				for(y=-88;y<1;y++)
				{
					p[t+1][x+89][y+89] = (constant/12)*(16*(p[t][(x+89)+1][y+89] + p[t][(x+89)-1][y+89] + p[t][x+89][y+89+1] + p[t][x+89][y+89-1]) - (p[t][(x+89)+2][y+89] + p[t][(x+89)-2][y+89] + p[t][x+89][y+89+2] + p[t][x+89][y+89-2])) + (2-5*constant)*p[t][x+89][y+89] - p[t-1][x+89][y+89];
				}
		}
		/*(89,89)—(1,177)对角线矩形网格区域*/
		for(x=-88;x<1;x++)
		{
				for(y=0;y<89;y++)
				{
					p[t+1][x+89][y+89] = (constant/12)*(16*(p[t][(x+89)+1][y+89] + p[t][(x+89)-1][y+89] + p[t][x+89][y+89+1] + p[t][x+89][y+89-1]) - (p[t][(x+89)+2][y+89] + p[t][(x+89)-2][y+89] + p[t][x+89][y+89+2] + p[t][x+89][y+89-2])) + (2-5*constant)*p[t][x+89][y+89] - p[t-1][x+89][y+89];
				}
		}
	}
	for(t=4;t<170;t++)
	{
		/*Assign a value to a valid point*/
		for(x=0;x<177;x++)
		{
			for(y=0;y<177;y++)
			{
				if(p[t][x][y]<=0)
				{
					b[x][y] = 0;
					/*p[t+1][x][y] = 0;*/
				}
				else
				{
					b[x][y] = y;
					/*p[t+1][x][y] = x;*/
				}
			}
		}
		/*Draw point*/
		for(m=2;m<587.4;m+=3.3)
		{
			for(n=2;n<587.4;n+=3.3)
			{
				m1 = (int)(m-2)/3.3;
				n1 = (int)(n-2)/3.3;
				putpixel(m1*3.3,-3.3*b[m1][n1],WHITE);
			}
		}

		Sleep(60);

		for(m=2;m<587.4;m+=3.3)
		{
			for(n=2;n<587.4;n+=3.3)
			{
				m1 = (int)(m-2)/3.3;
				n1 = (int)(n-2)/3.3;
				putpixel(m1*3.3,-3.3*b[m1][n1],BLACK);
			}
		}
	}
	system("pause");
	free(p);
	/*Yes ! get it.*/
}

弹性波模拟图像

你也可以认为这是水波,总之是二维各向同性介质中的波传播情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值