Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Labels
Button Hyperlink
titleUp
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Advanced+Topics
Button Hyperlink
titleNext
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Limits


It is sometimes useful to repeat the same task or family several times,
looping on a specific value. You can do that by defining a repeat attribute.
You can iterate over sequences of:
  • strings
  • integers
  • dates
A sequence of integers or dates is created by specifying the
first and last element, with an optional increment (the default is one).
An ecFlow variable, whose name corresponds to the name of the repeat,
will be generated. This can be used in scripts or trigger expressions.
   

Ecf Script

We will add a new task /test/f4/f5/t1.
Create new ecf script file $HOME/course/test/f4/f5/t1.ecf to use these variables.

 

Code Block
languagebash
title $HOME/course/test/f4/f5/t1.ecf
%include <head.h>
ecflow_client --label=info "My name is %NAME%" "My value is %VALUE%" "My date is %DATE%"
ecflow_client --label=date "year:%DATE_YYYY% month:%DATE_MM% day of month:%DATE_DD% day of week:%DATE_DOW%" # reference repeat date generated variables
sleep %SLEEP%
%include <tail.h>

 

Text

Let us modify the suite definition file again

Code Block
# Definition of the suite test.
suite test
 edit ECF_INCLUDE "$HOME/course"
 edit ECF_HOME    "$HOME/course"

 family f4
     edit SLEEP 2
     repeat string NAME a b c d e f
     family f5
         repeat integer VALUE 1 10
         task t1
             repeat date DATE 20101230 20110105
             label info ""
             label date ""
   endfamily
 endfamily
endsuite

 

Python

#!/usr/bin/env python2.7
import os
import ecflow  
    
def create_family_f4():
    f4 = ecflow.Family("f4")
    f4.add_variable("SLEEP", 2)
    f4.add_repeat( ecflow.RepeatString("NAME", ["a", "b", "c", "d", "e", "f" ] ) )
   
    f5 = f4.add_family("f5")
    f5.add_repeat( ecflow.RepeatInteger("VALUE", 1, 10) )
   
    t1 = f5.add_task("t1")
    t1.add_repeat( ecflow.RepeatDate("DATE", 20101230, 20110105) )
    t1.add_label("info", "")
t1.add_label("date", "")
return f4 print "Creating suite definition" defs = ecflow.Defs() suite = defs.add_suite("test") suite.add_variable("ECF_INCLUDE", os.path.join(os.getenv("HOME"),  "course")) suite.add_variable("ECF_HOME", os.path.join(os.getenv("HOME"),  "course")) suite.add_family( create_family_f4() ) print defs print "Checking job creation: .ecf -> .job0" print defs.check_job_creation() print "Saving definition to file 'test.def'" defs.save_as_defs("test.def")

What to do

  1. Type in the changes
  2. Replace the suite definition
  3. How many times will /test/f4/f5/t1 run?
  4. In ecflow_ui , try to modify the values of a repeat
      
Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Labels
Button Hyperlink
titleUp
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Advanced+Topics
Button Hyperlink
titleNext
typestandard
urlhttps://software.ecmwf.int/wiki/display/ECFLOW/Limits