Skip to content

infinity-07/FD-WENO-EulerEquation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WENO Finite Difference Solver (WENOFD)

🔍 简介

Static Badge 是一个基于 加权本质无振荡有限差分方法(WENO-FD) 的二维双曲守恒律数值求解器。该程序适用于多种测试算例,支持高阶时间推进、边界条件处理及 MPI 并行计算,适合科研与教学使用。

✨ 特点

  • 支持二维带源项欧拉方程组求解并且可以很便捷地推广到其他二维守恒型方程
  • 支持 WENO/WENO-Z 重构(五阶)
  • 支持 RK1/RK2/RK3 时间推进
  • 多种边界条件:周期、对称、滑移、特殊
  • 支持 MPI 并行计算,支持快速切换串行和并行
  • Tecplot 可视化输出
  • 自动误差评估与精度验证
  • 每次运行程序都会把结果输出到一个单独的文件夹,还会复制一份当前的完整代码,便于后期调试

🚧 开发计划

  • 增加二进制格式的 tecplot 文件输出方法
  • 增加 paraview 文件输出方法
  • 增加保正限制器
  • 给通用文件前增加文件信息
  • 每次运行时能够将数据输出到不同的文件夹,并且备份一份代码
  • 给 readme 文件增加算例计算结果图
  • 给出 MPI 加速比,提升并行效率,一个可行的路线是在 MPI 并行的同时完成计算
  • 现在只支持五阶格式重构,三点格式七点格式很不方便
  • 储存一些结果便于对照
  • outputave 增加一个参数,运行输出ghost单元的值用于检查
  • 搞清楚现在的m_Uh是不是连续储存,如果不是,二维可变长数组嵌套一个不可变长数组是不是连续储存
  • WENO5ZPI 等格式有振荡,需要debug
  • 增加一个debug模式,在非debug模式下减少输出,最大化优化计算时间

📁 文件结构

.
├── README.md
├── bin
│   └── program
├── build
│   ├── WENOFD.d
│   ├── WENOFD.o
│   ├── main.d
│   └── main.o
├── docs
│   └── main.tex
├── include
│   ├── Utility.hpp
│   └── WENOFD.hpp
├── input
│   └── config.cfg
├── logfile.log
├── makefile
├── output
├── src
│   ├── WENOFD.cpp
│   └── main.cpp
└── utils
    ├── array.h
    ├── equations.hpp
    ├── newCommon.h
    ├── readConfig.hpp
    ├── scTools.h
    └── timer.hpp

部分计算结果展示

算例0

CFL = 0.05,

N Linf (JS) order (JS) L1 (JS) order (JS) Linf (Z) order (Z) L1 (Z) order (Z)
100 6.42E-07 1.92E-07 1.66E-07 4.21E-08
120 2.56E-07 -5.05 7.58E-08 -5.09 6.64E-08 5.03 1.68E-08 5.04
140 1.17E-07 -5.07 3.45E-08 -5.10 3.06E-08 5.03 7.73E-09 5.03
160 5.81E-08 -5.24 1.74E-08 -5.11 1.56E-08 5.03 3.95E-09 5.03
180 3.12E-08 -5.27 9.53E-09 -5.13 8.65E-09 5.02 2.19E-09 5.03
200 1.78E-08 -5.33 5.55E-09 -5.14 5.10E-09 5.02 1.29E-09 5.02

算例2

CFL = 0.7, NxN = 800x800

WENOJS WENOZ 左图为 WENOJS 格式,右图为 WENOZ 格式

🚀 运行方式

以下运行方式说明均基于 linux 系统

  1. 安装 支持 C++17 的编译器(如 g++
  • MPI 库(如 OpenMPI 或 MPICH)
  1. 修改 input/config.cfg 文件,设置模拟参数:
参数名 含义
TESTCASE 测试算例编号(
SCHEME 重构方案(0=WENO, 1=WENOZ)
CFL CFL 数
RKMETH Runge-Kutta 方法(0,1,2 对应 RK1-3)
ELEMNUMX x 方向网格数
ELEMNUMY y 方向网格数
  1. 编译程序
make clean
make
  1. 运行程序(以 4 个线程为例):
mpirun -np 4 ./bin/program

输出结果储存在 output 文件夹中

📤 输出说明

文件名格式 含义
average_*.plt Tecplot 平均变量输出
error_*.plt 与解析解的误差分布
accuracy_*.csv 误差范数表格(L1, L2, L∞)

🔧 主要函数说明

函数名 功能描述
initializeSolver() 初始化网格、变量、MPI分区等
run() 控制整体模拟流程
calculateDeltaT() 根据 CFL 条件计算时间步长
RunRK1/2/3() 一阶/二阶/三阶 Runge-Kutta 时间推进
getFlux() 使用 WENO 特征分解计算数值通量
MPICommunication() 进行左右子域数据通信
outputAve() 输出平均变量到 Tecplot
outputError() 输出解误差图
outputAccuracy() 误差范数评估并写入 csv 文件

🙋 联系方式

如需协助或合作,请联系作者:

邮箱: cauzhangyang@outlook.com

About

使用 FD-WENO 来求解二维欧拉方程

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages