What does it mean?

The reason they are conservative or non-conservative has to do with the splitting of the derivatives. Consider the conservative derivative:

\[ \frac{\partial \rho u}{\partial x} \]

When we discretize this, using a simple numerical derivative just to highlight the point, we get:

\[ \frac{\partial \rho u}{\partial x} \approx \frac{(\rho u)_i - (\rho u)_{i-1}}{\Delta x} \]

Now, in non-conservative form, the derivative is split apart as:

\[ \rho \frac{\partial u}{\partial x} + u \frac{\partial \rho}{\partial x} \]

Using the same numerical approximation, we get:

\[ \rho \frac{\partial u}{\partial x} + u \frac{\partial \rho}{\partial x} = \rho_i \frac{u_i - u_{i-1}}{\Delta x} + u_i \frac{\rho_i - \rho_{i-1}}{\Delta x} \]

So now you can see (hopefully!) there are some issues. While the original derivative is mathematically the same, the discrete form is not the same. Of particular difficulty is the choice of the terms multiplying the derivative. Here I took it at point \(i\), but is \(i-1\) better? Maybe at \(i-1/2\)? But then how do we get it at \(i-1/2\)? Simple average? Higher order reconstructions?

Those arguments just show that the non-conservative form is different, and in some ways harder, but why is it called non-conservative? For a derivative to be conservative, it must form a telescoping series. In other words, when you add up the terms over a grid, only the boundary terms should remain and the artificial interior points should cancel out.

So let's look at both forms to see how those do. Let's assume a 4 point grid, ranging from \(i=0\) to \(i=3\). The conservative form expands as:

\[ \frac{(\rho u)_1 - (\rho u)_0}{\Delta x} + \frac{(\rho u)_2 - (\rho u)_1}{\Delta x} + \frac{(\rho u)_3 - (\rho u)_2}{\Delta x} \]

You can see that when you add it all up, you end up with only the boundary terms (\(i = 0\) and \(i = 3\)). The interior points, \(i = 1\) and \(i = 2\) have canceled out.

Now let's look at the non-conservative form:

\[ \rho_1 \frac{u_1 - u_0}{\Delta x} + u_1 \frac{\rho_1 - \rho_0}{\Delta x} + \rho_2 \frac{u_2 - u_1}{\Delta x} + u_2 \frac{\rho_2 - \rho_1}{\Delta x} + \rho_3 \frac{u_3 - u_2}{\Delta x} + u_3 \frac{\rho_3 - \rho_2}{\Delta x} \]

So now, you end up with no terms canceling! Every time you add a new grid point, you are adding in a new term and the number of terms in the sum grows. In other words, what comes in does not balance what goes out, so it's non-conservative.

You can repeat the analysis by playing with altering the coordinate of those terms outside the derivative, for example by trying \(i-1/2\) where that is just the average of the value at \(i\) and \(i-1\).

How to choose which to use?

Now, more to the point, when do you want to use each scheme? If your solution is expected to be smooth, then non-conservative may work. For fluids, this is shock-free flows.

If you have shocks, or chemical reactions, or any other sharp interfaces, then you want to use the conservative form.

There are other considerations. Many real world, engineering situations actually like non-conservative schemes when solving problems with shocks. The classic example is the Murman-Cole scheme for the transonic potential equations. It contains a switch between a central and upwind scheme, but it turns out to be non-conservative.

At the time it was introduced, it got incredibly accurate results. Results that were comparable to the full Navier-Stokes results, despite using the potential equations which contain no viscosity. They discovered their error and published a new paper, but the results were much "worse" relative to the original scheme. It turns out the non-conservation introduced an artificial viscosity, making the equations behave more like the Navier-Stokes equations at a tiny fraction of the cost.

Needless to say, engineers loved this. "Better" results for significantly less cost!

最新文章

  1. 用U盘安装Ubuntu系统
  2. 无法启动"D\projects\hello\Debug\hello.exe" 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]
  3. C 指针疑虑
  4. Java魔法堂:类加载机制入了个门
  5. 图像分割之(五)活动轮廓模型之Snake模型简介
  6. CentOS6.6 安装 Tengine 笔记
  7. HTML+CSS3 纯代码实现转盘效果
  8. devexpress中gridcontrol 一些样式改变
  9. 知乎上关于c和c++的一场讨论_看看高手们的想法
  10. 查看LINUX发行商版本与LINUX内核版本
  11. Angular DirtyChecking(脏值检查) $watch, $apply, $digest
  12. jQ实现的一个轮播图
  13. 使用zabbix监控mysql的三种方式
  14. Topshelf:一款非常好用的 Windows 服务开发框架
  15. redis 在 php 中的应用(Sorted-set篇)
  16. Spring的基础注解
  17. log.error("异常:", e);与log.error(e.getMessage());区别
  18. 「PKUSC2018」神仙的游戏
  19. EasyUI 中GridView 满足某条件 改变行的背景色
  20. Shiro的校验Session是否过期处理的过程

热门文章

  1. Linux驱动开发5——同步机制
  2. EDM营销应注意要定期发送邮件
  3. EF2:Entity Mysql Sample
  4. JS 弹出网页 (不显示地址栏,工具栏) 网页去掉地址栏
  5. JDBC 国际标准时间
  6. 1.关于狗书《Flask Web开发 基于Python的web开发应用实战》身份验证的改进
  7. MVC Html.AntiForgeryToken(); 防止跨站伪造请求(建议所有表单提交都加这个)
  8. python+selenium下拉列表option对象操作方法一
  9. web 前端2 CSS
  10. Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'ItemsCustom' in 'class com.pojo.OrderDetailCustom