定义一个工作流
Contents
定义一个工作流#
下面首先创建只有一个任务的工作流,在 ecFlow 中工作流被称为 suite。
创建 python 文件#
在 ${TUTORIAL_HOME}/def
目录中创建文件 cma_tym.py:
1import os
2
3import ecflow
4
5
6current_path = os.path.dirname(__file__)
7tutorial_base = os.path.abspath(os.path.join(current_path, "../"))
8def_path = os.path.join(tutorial_base, "def")
9ecfout_path = os.path.join(tutorial_base, "ecfout")
10program_base_dir = os.path.join(tutorial_base, "program/grapes-tym-program")
11run_base_dir = os.path.join(tutorial_base, "workdir")
12
13defs = ecflow.Defs()
14
15with defs.add_suite("cma_tym") as suite:
16 suite.add_variable("PROGRAM_BASE_DIR", program_base_dir)
17 suite.add_variable("RUN_BASE_DIR", run_base_dir)
18
19 suite.add_variable("ECF_INCLUDE", os.path.join(def_path, "include"))
20 suite.add_variable("ECF_FILES", os.path.join(def_path, "ecffiles"))
21
22 suite.add_variable("USE_GRAPES", ".false.")
23 suite.add_variable("FORECAST_LENGTH", 120)
24 suite.add_variable("GMF_TINV", 3)
25 suite.add_variable("RMF_TINV", 3)
26 suite.add_variable("USE_GFS", 12)
27
28 suite.add_variable("ECF_DATE", "20220704")
29 suite.add_variable("HH", "00")
30
31 with suite.add_task("copy_dir") as tk_copy_dir:
32 pass
33
34print(defs)
35def_output_path = str(os.path.join(def_path, "cma_tym.def"))
36defs.save_as_defs(def_output_path)
上述脚本主要完成如下操作:
15 行:定义名为
cma_tym
的工作流 (suite)16-29 行:为 suite 定义多个变量 (variable),包括目录、模式配置、运行日期和时次等
31-32 行:定义名为
copy_dir
的任务 (task)35-36 行:将工作流定义写入到文件 cma_tym.def 中
生成 def 文件#
运行 Python 脚本 cma_tym.py,生成工作流定义文件 cma_tym.def:
cd ${TUTORIAL_HOME}/def
python cma_tym.py
cma_tym.def 文件是纯文本格式描述的工作流定义,文件内容如下:
# 4.11.1
suite cma_tym
edit PROGRAM_BASE_DIR '/g8/JOB_TMP/wangdp/tutorial/ecflow/program/grapes-tym-program'
edit RUN_BASE_DIR '/g8/JOB_TMP/wangdp/tutorial/ecflow/workdir'
edit ECF_INCLUDE '/g8/JOB_TMP/wangdp/tutorial/ecflow/def/include'
edit ECF_FILES '/g8/JOB_TMP/wangdp/tutorial/ecflow/def/ecffiles'
edit USE_GRAPES '.false.'
edit FORECAST_LENGTH '120'
edit GMF_TINV '3'
edit RMF_TINV '3'
edit USE_GFS '12'
edit ECF_DATE '20220704'
edit HH '00'
task copy_dir
endsuite
# enddef