自从四月七号开始设计单元数据的预存储 (precomputation and storage of cell data used by a BEM bilinear form) ,到现在已将近三周,仍未完成。

一开始想着也许可以不必将已经实现的三种边界元矩阵组装方法的所有逻辑都搞清楚,仅仅围绕涉及数据结构改动的地方,因循局部的逻辑链条一路走下去,就可以实现预存储机制、完成重构工作。这种预想的模式如同提灯走夜路,只要看清手中灯光所能照及的眼前一片范围,专注于脚下的坑坑洼洼,就可以在摸索中走完整个旅程。

然而,这种方法的局限在于路人必须预先知道(哪怕是大致的)正确方向在哪里以及沿途的基本情况,否则在黑暗中乱闯试探的效率极低。虽然这种方法在我以前的代码修改中已被多次验证具有一定的可行性,但曾经的奏效只是因为当时修改的代码耦合度较低。现在我面对的则是涉及边界元矩阵组装的底层数据结构,而且在算法研究与测试、代码的演进过程中还形成了几种不同的实现方法。这些方法以不同的方式共用着一些基本数据,其中存在着冗余的内存开销。如果想要同时维护这几种实现,保留对历史代码的“兼容性”,便会出现“牵一发而动全身”的情况。

最终决定保留三种方法中的两种:

  • 基于生产者-消费者模型的 H-matrix 组装方法。
  • 满阵组装方法:虽然该方法没有工程实用价值,但是可以作为基准,与 H-matrix 方法相互对照。

在代码重构过程中,也咨询了人工智能,但效果不佳。由些得到的经验是:对于真正需要理解的内容与实实在在掌握的逻辑,只有靠人自己的努力和主观能动性。

Backlinks: 《算发开发的两种模式》