不定方程求解c语言_编写自己的求解器

e2557e3ef45989fa3477ac41e21df941.png

原文链接:

作业部落 Cmd Markdown 编辑阅读器​www.zybuluo.com

0.0 目的

如果不写自己的求解器,那么学这个软件将毫无意义。而写自己的求解器,常见的,无外乎几种目的:

  • 不是通用方程。比如多孔介质流动,里面的速度压力方程其实是个能量方程(darcy可由伯努利方程导出);
  • 系数不是常数,而是根据变量变化的。比如超临界二氧化碳换热,传热系数、比热等跟随温度变化明显;
  • 存在源项。比如蒸发沸腾,相函数存在源项,而且源项是温度的函数;
  • 要额外计算一些通用求解器不知道的量,比如气固流动的沉积问题,沉积量可能需要单独计算;

这些需求里面,其实除了第一条是需要改动求解器框子的,剩下的无非是在一般计算的中间插入一些计算步骤罢了。所以下面写的时候我先从最简单的求解器(简单方程、没有源项、常系数)开始写起,然后单独处理上述若干种不同情况。

ps 还有一种高级情况需要修改求解器,那就是不同的离散格式。这个我不太懂,感觉比较高端,以后再慢慢考虑吧。。 pps 这个笔记局限在不可压粘性流体里面。可压缩和欧拉方程我基本不懂。。。

0.1 顺序

所谓顺序,就是一个求解器从头到尾要干的事情。初学者对这个往往没概念导致看求解器代码的时候云山雾罩的。这里写清楚一点:

  • 第一步是创建一个网格,实际上是根据生成的网格创建一个对象。一般不需要自己搞,只要一句话:
#include "createMesh.H"
  • 接下来是往这个网格上放变量和系数,就是指定每个cv里的变量是多少。在求解器里也只是一句话:
#include "createFields.H"

但实际上没那么easy,因为具体要读取什么变量和系数每个求解器不太一样,有的时候所以要自己修改一些内容。

  • 第三步就是离散方程组啦。具体怎么离散,取决于方程是怎么求解的。就我目前的了解,常见的方程无非是两种:压力速度耦合方程组,和被动标量方程。
    • 前者就是质量守恒+ns方程,一般可以写成:
      这个是用来求解p和u的,虽然是非常基础的方程,但是处理起来其实有点难。。那些最难学的部分,什么simple族算法,piso,棋盘分布,rei-chow插值还有各类乱七八糟的对流项离散格式,基本都是用在这个上边了。因为这个比较成熟一般没啥改动,这个笔记就先掠过这部分,单独到simple族算法的时候再说。至于现在,我们只需要知道这个方程组的任务就是为下面的求解提供一个速度场(或者phi场,按照of的说法)就足够了。
    • 剩下的就是我比较喜欢的被动标量方程了。很多方程都是这个类别,比如能量方程(T),vof方法的相方程,level-set方法的f方程,rans族里面的各种湍动能什么的方程,这些不影响流动的,单纯只是被速度输运的量都可以归到被动标量方程里。这类方程的特点是:只依赖于速度,所以求解前需要知道速度;不作用于速度,所以不需要和ns方程联合求解。举个例子,在多孔介质的流体输运中有如下方程:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值