交错网格与完全匹配层:提升波场模拟效果的双剑合璧

news/2024/11/7 20:39:12/

目录

交错网格(Staggered Grid)

完全匹配层(Perfectly Matched Layer)


大家好,欢迎来到这次的博客文章。今天我们将介绍在波场模拟中应用的两个关键技术:交错网格(Staggered Grid)和完全匹配层(Perfectly Matched Layer,PML)。我们将尽力将复杂的理论知识用简洁明了的语言呈现,同时穿插一些代码片段帮助理解。

源码下载

交错网格(Staggered Grid)

交错网格方法是有限差分法的一种改进形式,使得不同的物理量在不同的网格位置被定义。这种方式在处理某些偏微分方程时更为精确,尤其是在计算物理中模拟波动方程时。我们来看一个更详细的例子,这次我们将模拟一维波动方程。

首先,定义一些参数:

import numpy as np
import matplotlib.pyplot as plt# 定义参数
N = 200  # 网格数
c = 1.0  # 波速
dt = 0.01  # 时间步长
dx = 0.1  # 空间步长
t_steps = 100  # 时间步数

创建交错网格:

# 创建网格
x = np.arange(N)*dx
pressure = np.zeros(N)  # 在整数点定义压力
velocity = np.zeros(N+1)  # 在半整数点定义速度

进行模拟:

for t in range(t_steps):# 更新速度velocity[:-1] -= dt * (pressure[1:] - pressure[:-1]) / dx# 更新压力pressure -= dt * (velocity[1:] - velocity[:-1]) / dx# 制图if t % 10 == 0:plt.plot(x, pressure)
plt.show()

完全匹配层(Perfectly Matched Layer)

完全匹配层是一种用于处理模拟区域边界的技术。它能有效地吸收边界上的波动,从而减少反射波对模拟结果的影响。我们接下来将完全匹配层加入到我们的波动方程模拟中。

定义一些新的参数:

# 定义新的参数
pml_width = 20  # PML的宽度
sigma_max = 0.1  # 最大的吸收系数

创建吸收函数:

# 创建吸收函数
sigma = np.zeros(N)
sigma[:pml_width] = sigma_max * ((pml_width - np.arange(pml_width)) / pml_width) ** 2
sigma[-pml_width:] = sigma_max * ((pml_width - np.arange(pml_width)[::-1]) / pml_width) ** 2

将吸收函数加入到模拟中:

pressure_previous = np.copy(pressure)
for t in range(t_steps):# 更新速度velocity[:-1] -= dt * (pressure[1:] - pressure[:-1]) / dx# 保存旧的压力pressure_old = np.copy(pressure)# 更新压力pressure -= dt * (velocity[1:] - velocity[:-1]) / dx# 添加PMLpressure += dt * sigma * (pressure_previous - 2*pressure + pressure_old)# 更新压力历史pressure_previous = pressure_old# 制图if t % 10 == 0:plt.plot(x, pressure)
plt.show()

在这个代码片段中,我们添加了一个额外的步骤来更新压力历史,并在更新压力时加入了一个由吸收函数sigma决定的额外项。这个额外项就是PML的实现,它使得在PML层中的波动会被逐渐吸收掉。

在这两个例子中,我们展示了如何在Python中实现交错网格和完全匹配层。这两种技术都可以大大提高波动方程模拟的准确性和稳定性。希望这些内容能帮助您理解这两种技术的基本概念,并能将它们应用到实际的问题中。


http://www.ppmy.cn/news/74419.html

相关文章

微软收购暴雪战未结束;迪士尼流失 4 百万用户;苹果 iPhone 销量增长;国际旅行回暖机票订单火爆;美国年通胀率再次下降 | 经济学人第 20 周

文章目录 苹果 iPhone 销量增长,但总体收入下降微软收购暴雪战未结束迪士尼流失 4 百万用户美国年通胀率再次下降国际旅行回暖,机票订单火爆瑞银认命首席执行官,完成对瑞士信贷的最终收购最后 苹果 iPhone 销量增长,但总体收入下降…

IMU和GPS融合定位(ESKF)

说明 1.本文理论部分参考文章https://zhuanlan.zhihu.com/p/152662055和https://blog.csdn.net/brightming/article/details/118057262 ROS下的实践参考https://blog.csdn.net/qinqinxiansheng/article/details/107108475和https://zhuanlan.zhihu.com/p/163038275 理论 坐标…

springboot+jsp+javaweb学生信息管理系统 05hs

springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是目前最火热的java开发框架 (1)管理员模块:系统中的核心用户是管…

20.04Ubuntu换源:提升软件下载速度和更新效率

在使用Ubuntu操作系统时,一个常见的优化措施是更改软件源,以提高软件下载速度和更新效率。软件源是指存储软件包的服务器,通过更换软件源,你可以选择更靠近你所在地区的服务器,从而加快软件下载速度,并减少…

活字印刷。

题目描述 你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。 注意:本题中,每个活字字模只能使用一次。 示例 1: 输入:“AAB” 输出:8 解释&#x…

2023-5-22第二十二天

回家一天,单词学习了但是没有记载 intergrate合并,整合 applied应用的,实用的 explicit明确的 modifier修饰语 customize定制 partition隔板,分隔,分裂 potentially潜在的 subset子集,分组&#xf…

ThreadLocal为什么容易内存泄露?

文章目录 一、Java的四种引用二、ThreadLocal为什么容易内存泄露?三、源码 一、Java的四种引用 1、强引用:强引用在程序内存不足(OOM)的时候也不会被回收 2、软引用:软引用在程序内存不足时,会被回收 3、弱…

日用行业外贸ERP软件系统,提高工作效率降低成本

日用行业是一个广泛的行业,包括了许多不同的产品,如家居用品、化妆品、个人护理用品、厨房用具等等。日用行业产品出口,也是我国传统外贸产业之一,在外贸市场来说相对有竞争力优势,在国际贸易中具有很大的需求和市场潜…