0%

检查表

检查表制度

我开始认识到“检查表”(check-list)是源于傅盛的文章,他提到让工作变得可靠高效,检查表是个保障时效的好东西,看似机械但是可靠。随后我在《黑匣子思维》里面读到,进一步了解到纽约哈德孙河上迫降成功的背后(美当局还是对机组进行了详细地调查)起到积极作用的有无数次飞行的经验,过硬的心理素质,还有副机长分担责任在机长思考的同时协力沟通,副机长在短时间内把空客给的双发停车的check-list走完。检查表制度已经完全融入了这些航空工业优秀从业者的工作中,如作者所说:人的因素可能是正面的也可能是负面的,然而可靠性的保证,需要仰仗人训练自己“黑匣子”一般的思维。回到傅盛,自己定下的check-list就一定要严格执行,需要像”黑匣子“一样完全记录,要不然你将看不到当前check-list的缺陷,改进也就无从谈起,低级和已知的错误还是会犯。check-list的存在意义在于,当你头脑不是特别清醒,状态不好的时候,也能给你一个完整严谨的流程,最大程度规避已知的一系列“低级错误”,不单纯依靠记忆和头脑,复杂系统尤为需要如此作业。

为什么我要用在OpenFOAM上?

同fluent或其他CFD软件,OpenFOAM可能更称得上“复杂系统”,初学者容易犯错:不像fluent通过按钮和已经编程的GUI来辅助构建组织求解一个问题的逻辑链,OpenFOAM从边界条件、初始条件、网格文件、流体物性、离散格式、求解器(U求解器,p求解器)还有utility到用到的例如sampleDictchangeDictionaryDictrefineMeshDicttopoSetDict等,里面的逻辑关系通过一系列的文本文件来完成。信息的碎片化很可怕,想想你需要用vim去不同的目录打开这一系列的文本文件来检查,这样的过程费事、费力且艰辛,更重要的是极容易犯错。为什么呢?

  1. 文本文件有特定格式
  2. 打错字
  3. OpenFOAM在tutorial里面给的范本参照并不是MVPMinimum Viable Product),也就是说通常都有不必要的部分,初学者者并不清楚哪些信息必要,哪些重要,哪些完全没用

总之细节很多,细节一旦繁多而又难以从中抽离就难有大局观。而check-list就是提醒自己“从哪里出发”,“现在在哪里”,“还要去往哪里”。举例:像飞机起飞的check-list一样,一个check-list可以是对于某算例从无到有的按步骤一步步的配置。“从哪里出发”包括最基本的0constantsystem的文本文件结构,包括边界条件、初始条件,那么“项目的出发点”就是自己剔除上面提到的不必要部分后得到的MVP case,基于MVP case的基础可以做加密网格或者其他的变式。顾名思义,check-list是地图,“现在在哪里”有check-list指明当前步骤,作为机长,“要去往哪里,飞行姿态如何保持”才是自己心里应该操心的核心的事,换句话说check-list在这里担当了类似副机长的辅助职责。

记录“已知在某个步骤上会出现的问题”,然后据此设计check-list来规避已知问题,这是高于平时“工作的自己”层次的思维方式。工作的时候我要debug,要进入多层嵌套的代码,是细节的把控,而check-list让我跳出来,让我看到自己在地图的哪个地方,在某某步骤上的经验和教训是什么,接下来可能的问题是什么,问自己是主要矛盾吗,时间成本会是多少,应该如何决策,这是做决策的思维层次(《原则》)。因为没有一个流程或者说没有包装好的GUI会告诉你“现在到了哪一步,下一步需要做什么”。这里多说一句,GUI同check-list,也仅仅是辅助驾驶的功能,目前自动驾驶系统也没聪明到跟数千小时飞行经验的飞行员一样,能根据经验快速反应做出正确的决策。

总结一下:相较于fluent,OpenFOAM的劣势是文本文件之间的自然逻辑没有GUI来完成,优势是对一个功能如果充分了解,就可以有很大自由度进行操作,可以按照上面说到的check-list来完成步骤,实现步骤的“自动化”,因而劣势可以弥补; OpenFOAM最大的优势还是完全开源,只有不懂的地方才是黑箱,经手的所有步骤都在掌握,所有的变量都在掌握。

个性化检查表以配合工作需求

要知道,检查表可繁可简,为节约时间成本阿波罗13号出事之后检查表都被大规模简化,也就是“跳步”,而明白跳步的风险是简化的必须。所以检查表到底应该多繁多简,视情况而定。我根据自己的经验制作了一系列检查表,有的是配置算例流程,有的是关于某一个utility,还有NotToDo-list,总之对我怎么有用怎么来,还不止OpenFOAM,因为尤其跟CAE相关的软件都很大型,按钮特别多,记忆是不可靠的。加上如果在不同的计算机群上面计算,队列是不一样的,对用户的要求是不一样的(比如occigen上面对文件个数要求特别苛刻),用户的需求是不一样的(比如考虑到priority的问题,我又时候可能会选择提交一个计算时间较短的算例),情形很多,未必都需要检查表化,但按照自己的逻辑记录下要点,比起每次决策的时候再去网站上找零散的信息来得更高效。