MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 二维浅水方程HLL格式黎曼求解器

二维浅水方程HLL格式黎曼求解器

资 源 简 介

该项目提供了一个采用MATLAB语言编写的高效Riemann求解器,核心算法基于Harten-Lax-van Leer(HLL)近似格式,专门用于求解二维浅水方程(SWE)在有限体积法框架下的边界数值通量。该求解器通过估算波速下界与上界来逼近非线性黎曼问题的解,能够准确捕捉溃坝波、液压跳跃等复杂水动力现象。 针对实际工程中常见的干河床(Dry Bed)演进问题,代码内部集成了严谨的干湿边界判定与处理机制,确保在极小水深或零水深极端工况下的计算稳定性和物理量守恒。该工具的设计具有高度的通用性,完全摆脱了对网格拓扑结构的依赖,不仅适用于规则的笛卡尔网格,也完美支持复杂地形下的非结构化三角形或多边形网格。 在实现上,算法将物理量统一投影至界面的法线方向进行一维黎曼问题求解,再将通量结果映射回全局坐标系。用户仅需在计算循环中传入界面左右两侧的原始变量状态及界面几何法向量即可完成计算,是开发高精度城市内涝模型、河流动力学仿真及洪水演进系统的核心底层组件。

详 情 说 明

二维浅水方程HLL Riemann求解器项目自述文件

项目介绍

本项目实现了一个基于 Harten-Lax-van Leer (HLL) 近似格式的二维浅水方程(Shallow Water Equations, SWE)数值通量求解器。该求解器采用 MATLAB 编写,旨在为有限体积法(FVM)框架提供核心的界面通量计算单元。通过精确估算 Riemann 问题的波速边界,该工具能够稳定地模拟包括溃坝波演进、水跃现象以及复杂地形下的干湿边界变换等水动力学过程。

功能特性

  1. 高适应性 HLL 格式:核心算法能够自动识别超临界流、次临界流及跨临界流状态,根据波速估算值选取最优的通量计算路径。
  2. 严谨的干湿边界处理:内置水深阈值判定逻辑,专门针对干河床(Dry Bed)演进进行了优化,有效避免了零水深附近可能出现的数值不稳定和除零错误。
  3. 坐标旋转不变性:算法通过将物理量投影至界面法线与切线方向,将复杂的二维 Riemann 问题简化为局部一维问题求解,使其能够完美支持正交网格、非结构化三角形网格或任意多边形网格。
  4. 物理量守恒:采用严格的保守型格式更新,确保在长时段模拟中质量与动量的守恒性。
  5. 实时动态可视化:主程序集成了动态绘图模块,可直观观测水深分布与流速场的演进过程。

系统要求

  • MATLAB R2016b 或更高版本。
  • 基本数学工具箱(用于向量化计算与绘图)。

使用方法

  1. 参数配置:在主程序开头设置物理常数(如重力加速度 $g$)和干湿判定阈值 $eps_h$。
  2. 初始状态定义:根据算例需求设置计算域长度、单元数量及初始时刻的空间水深和动量分布。
  3. 时间步长控制:程序内置了基于 CFL 条件的自适应时间步长计算逻辑,用户可通过调整 CFL 数(建议在 0.45 以下)来平衡计算效率与稳定性。
  4. 运行模拟:直接运行主程序,系统将首先输出单次界面通量的测试结果,随后开启动态数值模拟。

核心实现逻辑说明

主程序及内部函数严格遵循以下逻辑流程:

1. 坐标投影与旋转

为了处理二维空间中的任意走向界面,程序首先获取界面的法向量 $(nx, ny)$。利用旋转矩阵将全局坐标系下的速度分量 $(u, v)$ 投影为界面法向速度 $un$ 和切向速度 $ut$。后续的所有 Riemann 状态解析均在局部坐标系下进行。

2. 波速估算 (Wave Speed Estimation)

波速的准确估算决定了 HLL 格式的数值耗散水平:
  • 湿-湿界面:结合左、右两侧的特征速度及基于平均水深的波速,通过取极小/极大值的方式确定波速下界 $SL$ 和上界 $SR$。
  • 干-湿界面:对于一侧为干床的特殊情况,采用解析解析关系(如 $SL = unL - cL, SR = unL + 2cL$)来估算波阵面扩散速度。
  • 全干界面:若两侧水深均低于阈值,则直接判定通量为零,不执行后续计算。

3. HLL 通量组合

根据估算的波速区间进行分类讨论:
  • 左侧超临界 ($SL ge 0$):界面通量完全取决于左侧状态。
  • 右侧超临界 ($SR le 0$):界面通量完全取决于右侧状态。
  • 星区/次临界 ($SL < 0 < SR$):利用 HLL 经典公式,通过左右侧通量向量与状态向量的线性组合,计算出跨越界面产生的数值通量。

4. 逆旋转与全局映射

将局部坐标系下计算得到的质量通量、法向动量通量和切向动量通量,通过逆旋转操作映射回全局坐标系,得到最终用于更新单元状态的 $fluxH, fluxHU, fluxHV$。

5. 时间演进与后期修正

采用一阶前向 Euler 方案进行保守型变量更新。在每个时间步结束时,程序会执行强制性的干边界后处理,将水深小于阈值的单位及其动量强行归零,以保证物理上的真实性并防止负水深的产生。

关键算法与细节分析

  • 自适应时间步长:算法在每一轮迭代前,通过全局搜索最大特征波速(流速与静水波速之和),动态计算满足 CFL 条件的 $dt$,确保了计算过程的震荡抑制。
  • 切向动量传输:在二维框架下,HLL 格式不仅处理了法向的质量和动量交换,还通过 $FL_ut$ 和 $FR_ut$ 考虑了切向动量的输运,这是维持复杂流场环流结构的关键。
  • 保守变量更新:程序通过维护 $h, hu, hv$ 三个守恒量来描述流动状态,通过通量在单元边界的进出实现物理量的精确演化。