第一步,分析问题,确定背后的物理机制和过程,即确定应力应变,能量迁移,流体动力学,波,电磁场还是其中某些的共同作用,这决定了有哪些物理场,物理量,和物理性质要被考虑进来。
第二步,根据物理机制和过程建立数学模型。这个数学模型说白了就是一堆方程和公式,其中有以偏微分方程为代表的控制方程和其他表达状态量之间,状态量和材料性质之间关系的附加公式。另外,初始和边界条件也要确定下来,因为我们研究的问题总是对应有限时间和有限空间大小的。
第三步,上述数学模型除非特别简单的方程和边界和初始条件,一般没有解析解(也就是用初等数学函数表达的解)。于是乎,数值离散方法就上场了,常见有有限单元法,有限体积法,和有限差分法等。这些方法所做的,就是把上建立在连续空间和时间之上的数学方程们离散成一个代数方程,一般有A*X=B的形式。X是一个矩阵。如在有限元法中,X就是在有限单元的顶点上的待求函数(因变量)的值,点的数量决定了X的矩阵大小。这里,在离散中又涉及了空间离散(网格划分)和方程离散(转连续方程为代数方程)。有些方法如有限元法者上述过程中还会附加要求推导弱形式等。
第四步,有代数方程以后,我们还需要求解它。这里面就有很多方法可供选择,比如直接法如高斯法和各种不同的迭代方法。一般除非我们是做求解器的,我们可以用很多现成的工具去求解这个代数方程,而不用再写一个求解器来求解。比如,在MATLAB中就可以使用一个再简单不过的X=A\B命令来求解。
第五步,求出了解之后,取决于你想要做什么,一般我会想知道解在某一时刻在空间内如何分布的。比如,如果我们做热传导分析,我们想到温度这个因变量是如何分布的。当然,我们也可能会想知道其他依赖于温度的材料性质如热传导系数和比热容的值,分布或者变化等。这些通过简单的计算都可以得到。一般的数值软件都提供至少基本的后处理用于显示和处理计算结果。如果自己编程的话,我们也可以使用第三方的后处理程序比如Paraview等。有些偏数学和理论的同学,没准还要做敏感性分析和误差分析,也就是看误差随某些变量和计算过程的变化,以此来推断模型,离散方法,求解器等中的错误,误差,或者性能。