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