# implicit_adv1d **Repository Path**: jhaoli/implicit_adv1d ## Basic Information - **Project Name**: implicit_adv1d - **Description**: 1D 线性平流方程的隐式求解 - **Primary Language**: FORTRAN - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-05-29 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # implicit_adv1d #### 介绍 这里本来想通过WENO5实现一维线性平流的隐式求解,然而发现用WENO5不能完全保证Newton迭代一直收敛的问题。然后,将之前的中央差分格式以新的构造flux Jacobian matrix的方式引入进来,同时将Wicker and Skamarock (2002)的三阶迎风,四阶差分格式加入。WENO5不收敛的原因可能和WENO采用非线性重构通量有关,这样计算的flux Jacobian是非线性的,而其它空间重构算法属于线性重构,即单元界面通量时通过积分平均值的线性组合构成,这样flux Jacobian是线性的。 #### 安装教程 1. ``` mkdir implicit_1D/build ``` 2. ``` cd build & FC=gfortran cmake .. && make ``` #### 使用说明 1. ``` cd implicit_1D/run ``` 2. ``` ../build/main.exe namelist.input ``` namelist.input 样例如下: ``` ¶ms nt = 41, nx = 50, ncell = 25, ! used in MCV: nx = 2 * ncell + 1 dt = 0.05, Riemann_solver = 'LLF', ! used in weno5 output_interval = 1, test_case = 'sine', case_name = 'test_2', time_scheme = 'Backward_Euler', ! ERK_FE, ERK3_WRF, ERK4, Backward_Euler, Crank_Nicolson, implicit_midpoint, ssp2, ssp3 space_scheme = 'finite_diff_2nd', !weno5, finite_diff_2nd/4th, upwind1, upwind3, MCV, TVD flux_limiter = 'vanleer', ! minmod, superbee, vanleer, MC ! TVD method 1 / ``` #### 时间积分方法 1. 显式: 前向欧拉(ERK_FE, Forward Euler)、WRF的RK3(ERK3_WRF)、4阶Runge-Kutta (ERK4) 2. 隐式:后向欧拉(Backward Euler)、隐式中点(implicit midpoint)、Crank-Nicolson、SSP2和SSP3(Weller et al 2003) #### 空间离散方法 1. 2阶/4阶中央差分 2. 1阶/3阶迎风 3. weno5 4. MCV 5. TVD : 1st upwind + Lax-Wendroff #### Ax=b solver 目前采用LAPACK的dgesv,属于general solver, works for any matrix. 当矩阵比较大时(N>1000),计算效率将很慢,应改用针对带状矩阵的求解器,