跳转至

高级

这里会介绍一些 Prothod 拓展的高级概念,可以帮助你理解 Prothod 的计算功能,以检查计算过程中的遇到的问题。本章节主要针对高级用户,一般用户可以跳过此部分。

函数式

Prothod 模块的使用方式是函数式的,模块是一台 输入 -> 答案 的求解机器,Prothod 可以视作模块的求解引擎。只需要编写输入请求,Prothod 解决余下的所有工作。

模块(或称 cookbook)的本质是一种带有输入选项的计算/算法工作流。一个模块被设计成一个带有选项的输入输出,可以执行计算并返回相应的结果。

Prothod 是多种预制模块的算法功能的集合。

Recipe 文件

Recipe,即计算描述。对于用户来说,相当于一种中间计算模型,可以直接转化为计算的执行。

Recipe 类似于食谱,记载了计算的执行和调用过程(Workflow),recipe 等价于一个未实现的计算,有了 recipe 就可以进行自动计算(类似食谱自动做菜)。

更高层面的,实际上它是 Prothod 后台模块和前台模块的交互标准。

recipe 文件的一个格式例子如下:

#------------------- dftb OPT --------------------
# 1. 生成dftb 初始文件
- sh_map: {cmd: single_file.sh }
- sh: { cmd: out-dftb }

# 2.1 dftb优化
- sh_map: {cmd: single_dftb_opt.sh }

# 2.2 重新优化dftb出错文件
- sh: { cmd: "mkdir result_good; mv *.out result_good; mv result_good/*err* .; ls *.out > list; mout-xyz list; ls *.xyz > list; mxyz-dftbin list; rm *.out *.xyz; rename _err.txt .txt *_err.txt; rm *err*" }
- sh_map: {cmd: single_dftb_opt.sh }

提交计算的方式

Prothod 有两种方式执行计算:

一种是 sub 命令,生成 recipe 并提交计算,对于大部分模块是如此。在 sub 前,也可以使用 gen 命令进行检查,gen 命令会校验 option.txt 的格式是否正确,并生成 recipe 文件可供进一步高级检查。直接运行 sub 命令将会自动执行 gen 的检查操作并立即提交任务执行计算。

sub 命令的格式如下,其中 sub 后面的参数依次是队列名,使用计算节点数目,每节点使用核数。

prothod sub test 2 20

一种是 run 命令,有些模块用了自定义流程和自定义的输入输出格式,有自己的命令调用方式,这时候就用 option.txt 文件内的 run 字段指定自定义的执行命令。这些模块一般 init 并修改输入选项之后,直接 run 就可以了。

prothod run

计算中间过程文件

计算执行的时候会生成很多数字序号开头的中间文件,数字序号表示计算发生的顺序。后面名称仅取命令行的首单词作为标识,如果数字后的名称为空白也不用担心,这只是因为调用命令的所在行以空格开头了。

下面是一个计算中间过程文件的例子:

├── 10.mkdir
├── 11.single_orca.sh
├── 12.rm
├── 1.ls
├── 2.single_file.sh
├── 3.rm
├── 4.ls
├── 5.single_orca.sh
├── 6.mkdir
├── 7.single_orca.sh
├── 8.mkdir
├── 9.single_orca.sh
├── HOSTFILE
├── result
├── recipe.yml
├── option.txt
└── start

一般来讲,用户不需要关注中间过程文件,只需要等待计算完成查看结果即可(结果一般放在 result 文件夹内)。中间过程文件一般用于出现问题的时候检查调试或者获取技术支持。如果不需要保留中间过程文件可以设置选项 clean = true