|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
[这个贴子最后由wllee在 2007/08/21 04:51pm 第 3 次编辑]
FDM (Finite Difference Method) 和 FVM (Finite Volume Method) 的其中一个差别是 FDM 直接把方程式分解,例如:
但是 FVM会先把方程式做一次积分,然后才分解.例如:
By Gauss';s divergence theorem (高斯发散定理),
即 FVM (多数)会分解已被积分的方程式,而不是原方程.
所以 FDM 是在domain 上的点正确, FVM 是在一个 region 上正确.
比较:
FDM 结构简单,计算时间少,精度高,稳定程度低.
FVM 结构复杂,计算时间长,精度低,稳定程度高.
现在讲讲1d的CE/SE scheme (时/空守恒元和解元方法)
以Euler equation 做例子:
然后在 Euler equation 做一次积分:
Ω 是一个普通 domain, 将以上方程写法更改为:
where
By Gauss';s divergence theorem (高斯发散定理),
∂Ω 是 domain Ω 的 boundary (边界),而 N 是在 ∂Ω 的 outward normal unit vector (外法线单位向量).如下图:
而我们会主力分解这方程式:
我们会用这个 grid point:
定义:
现在由 time level 0 开始做起, CE/SE scheme 会先输入:
做完1次CE/SE scheme 之后,会得出:
先了解,第一 CE/SE scheme 不光要在 initial condition 输入 u 的值,还要同时输入 u 的 gradient (梯度).但通常开始时把梯度全定为零也可以.
第二,做完一次 CE/SE scheme 会升高半个 time step (∆t),要做二次才升高一个 time step 的.
第三, 做完一次 CE/SE scheme 不会得出原本在 grid point 上的值,而是会算出2个grid point 中中间的点的值.即输入 x(1/2), x(3/2) 在time level 0 的值,会得出 x(1) 在 time level 1/2 的值.
好了,现在由 time level 1/2 再做,输入
然后得出:
也就是说做完一次 time step 之后,会没有了 boundary 两点的值,所以要自己在 boundary condition 输入:
讲讲 SE(i,n) 部分, 假如 (x,t) in SE(i,n), 假定 u(x,t), f(x,t) 由他们的 Taylor 展开 u*(x,t;i,n), f*(x,t;i,n) 来迫近,即:
其中以下全是常数:
由于 h=(f u),所以定义:
现在定义以下3图为
现在是要问,如果已知
要找出
我们先看看 CE(i,n) 正的部分:
如下图:
其中 |l| 是对应 ∂[CE(i,n)] 的长度,这里:
最后,我们得出:
然后,我们再看看 CE(i,n) 负的部分:
得出:
把 CE(i,n) 正和CE(i,n) 负部分合并,得出最重要方程式:
这里
已经成功算出 u, 最后要算出 u 的gradient (梯度).
这里
The re-weighting function (加权平均形式函数) W 是:
α是一个 adjustable constant, 通常 α=1 or α=2, 我用 α=2. e 是一个大于零的数以防止分母变成零, 我用 e=10^-30.
可参考:
http://www.grc.nasa.gov/WWW/microbus/
例子:
http://www.grc.nasa.gov/WWW/microbus/cese/codes.html
code:
http://www.grc.nasa.gov/WWW/microbus/cese/SC_1D_Shock_tube.html
|
|