在考察了OverBlown和AMROC的求解部分的结构之后,我觉得AMROC的结构时可取的。不过由于AMROC只针对单块或者多块矩形网格,因此它没有单独的网格类。我的程序时针对任意几何形状的,必须有网格,因此在借鉴AMROC结构的同时,必须考虑网格及其有关类加入后的影响。
初步设计的类图如下
Solver包含NumericalBoundaryCondition、InitialCondition、Integrator三个关键部分,利用一个封装的数组类DataFunction处理求解过程中用到的数组,同时还相识Case对象传递给它的Mesh对象。NumericalBoundaryCondition由BoundaryCondition衍生,是包含特定边界条件数值方法的基类,针对具体的算法和边界类型会有不同的子类实现。NumericalBoundaryCondition也需要和Mesh对象关联,因为边界条件与计算区域几何形状相关,而网格对象包含了几何形状。DataFunction也需要和网格关联,不过只是在特定的DataFunction对象构造时候需要以一个Mesh对象作为参考。不过对于象Solver和NumericalBoundaryCondition对于以DataFunction对象为操作“数”的对象来说,必须知道两者之间的联系。