ecFlow's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

<style type="text/css">
.highlight .hll

Unknown macro: { background-color}

.highlight

Unknown macro: { background}

.highlight .c

Unknown macro: { color}

/* Comment */
.highlight .err

Unknown macro: { border}

/* Error */
.highlight .k

Unknown macro: { color}

/* Keyword */
.highlight .o

Unknown macro: { color}

/* Operator */
.highlight .cm

Unknown macro: { color}

/* Comment.Multiline */
.highlight .cp

Unknown macro: { color}

/* Comment.Preproc */
.highlight .c1

Unknown macro: { color}

/* Comment.Single */
.highlight .cs

Unknown macro: { color}

/* Comment.Special */
.highlight .gd

Unknown macro: { color}

/* Generic.Deleted */
.highlight .ge

Unknown macro: { font-style}

/* Generic.Emph */
.highlight .gr

Unknown macro: { color}

/* Generic.Error */
.highlight .gh

Unknown macro: { color}

/* Generic.Heading */
.highlight .gi

Unknown macro: { color}

/* Generic.Inserted */
.highlight .go

Unknown macro: { color}

/* Generic.Output */
.highlight .gp

Unknown macro: { color}

/* Generic.Prompt */
.highlight .gs

Unknown macro: { font-weight}

/* Generic.Strong */
.highlight .gu

Unknown macro: { color}

/* Generic.Subheading */
.highlight .gt

Unknown macro: { color}

/* Generic.Traceback */
.highlight .kc

Unknown macro: { color}

/* Keyword.Constant */
.highlight .kd

Unknown macro: { color}

/* Keyword.Declaration */
.highlight .kn

Unknown macro: { color}

/* Keyword.Namespace */
.highlight .kp

Unknown macro: { color}

/* Keyword.Pseudo */
.highlight .kr

Unknown macro: { color}

/* Keyword.Reserved */
.highlight .kt

Unknown macro: { color}

/* Keyword.Type */
.highlight .m

Unknown macro: { color}

/* Literal.Number */
.highlight .s

Unknown macro: { color}

/* Literal.String */
.highlight .na

Unknown macro: { color}

/* Name.Attribute */
.highlight .nb

Unknown macro: { color}

/* Name.Builtin */
.highlight .nc

Unknown macro: { color}

/* Name.Class */
.highlight .no

Unknown macro: { color}

/* Name.Constant */
.highlight .nd

Unknown macro: { color}

/* Name.Decorator */
.highlight .ni

Unknown macro: { color}

/* Name.Entity */
.highlight .ne

Unknown macro: { color}

/* Name.Exception */
.highlight .nf

Unknown macro: { color}

/* Name.Function */
.highlight .nl

Unknown macro: { color}

/* Name.Label */
.highlight .nn

Unknown macro: { color}

/* Name.Namespace */
.highlight .nt

Unknown macro: { color}

/* Name.Tag */
.highlight .nv

Unknown macro: { color}

/* Name.Variable */
.highlight .ow

Unknown macro: { color}

/* Operator.Word */
.highlight .w

Unknown macro: { color}

/* Text.Whitespace */
.highlight .mf

Unknown macro: { color}

/* Literal.Number.Float */
.highlight .mh

Unknown macro: { color}

/* Literal.Number.Hex */
.highlight .mi

Unknown macro: { color}

/* Literal.Number.Integer */
.highlight .mo

Unknown macro: { color}

/* Literal.Number.Oct */
.highlight .sb

Unknown macro: { color}

/* Literal.String.Backtick */
.highlight .sc

Unknown macro: { color}

/* Literal.String.Char */
.highlight .sd

Unknown macro: { color}

/* Literal.String.Doc */
.highlight .s2

Unknown macro: { color}

/* Literal.String.Double */
.highlight .se

Unknown macro: { color}

/* Literal.String.Escape */
.highlight .sh

Unknown macro: { color}

/* Literal.String.Heredoc */
.highlight .si

Unknown macro: { color}

/* Literal.String.Interpol */
.highlight .sx

Unknown macro: { color}

/* Literal.String.Other */
.highlight .sr

Unknown macro: { color}

/* Literal.String.Regex */
.highlight .s1

Unknown macro: { color}

/* Literal.String.Single */
.highlight .ss

Unknown macro: { color}

/* Literal.String.Symbol */
.highlight .bp

Unknown macro: { color}

/* Name.Builtin.Pseudo */
.highlight .vc

Unknown macro: { color}

/* Name.Variable.Class */
.highlight .vg

Unknown macro: { color}

/* Name.Variable.Global */
.highlight .vi

Unknown macro: { color}

/* Name.Variable.Instance */
.highlight .il

Unknown macro: { color}

/* Literal.Number.Integer.Long */
</style>

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.
There are three kinds of data you can loop on:
  • strings
  • integers
  • dates
Integers and dates are specified as a range, with an optional increment (the default is one).
Let us modify the suite definition file again
# Definition of the suite test.
suite test
 edit ECF_INCLUDE "$HOME/course"
 edit ECF_HOME    "$HOME/course"
 family f1
     edit SLEEP 20
     task t1
         meter progress 1 100 90
     task t2
         trigger t1 eq complete
         event a
         event b
     task t3
         trigger t2:a
     task t4
         trigger t2 eq complete
         complete t2:b
     task t5
         trigger t1:progress ge 30
     task t6
         trigger t1:progress ge 60
     task t7
         trigger t1:progress ge 90
 endfamily
 family f2
     edit SLEEP 20
     task t1
         time 00:30 23:30 00:30
     task t2
         day  sunday
     task t3
         date 01.*.*
         time 12:00
     task t4
         time +00:02
     task t5
         time 00:02
 endfamily
 family f3
     task t1
         label info ""
 endfamily
 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 19991230 20000105
             label info ""
     endfamily
 endfamily
endsuite

In python this would be:

#!/usr/bin/env python2.5
import os
import ecflow  
    
def list_to_str_vec( theList ):
    """Converts a python list to a C++ StrVec"""
    strvec = ecflow.StrVec()
    for theStr in theList:
        ecflow.StrVec.append(strvec,theStr)
    return strvec; 

def create_family_f4():
    f4 = ecflow.Family("f4")
    f4.add_variable("SLEEP",2)
    f4.add_repeat( ecflow.RepeatString("NAME", list_to_str_vec( ["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","")
    return f4
    
defs = ecflow.Defs()
suite = defs.add_suite("test")
suite.add_variable("ECF_INCLUDE",os.getenv("HOME") + "/course")
suite.add_variable("ECF_HOME   ",os.getenv("HOME") + "/course")

suite.add_family( create_family_f4() )
The name of the repeat defines an ECF variable.
We can write a ecf script /test/f4/f5/t1.ecf to use these variables
%include <head.h>
ecflow_client --label=info "My name is %NAME%" "My value is %VALUE%" "My date is %DATE%"
sleep %SLEEP%
%include <tail.h>

What to do:

  1. Type in the changes
  2. Load and begin the suite
  3. How many times will /test/f4/f5/t1 run?
  4. In ecflowview, try to modify the values of a repeat
  • No labels