定义一个工作流#

下面首先创建只有一个任务的工作流,在 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