Versions Compared

Key

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


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/ecFlow+variables
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+Trigger


In the previous chapter, we saw how to define a variable for a task.
When all the tasks of the same family share the same variable value,
the value could be defined at the family level.
This is termed variable inheritance
In the examples below the variable could have been defined at the
level of the suite, achieving the same results.
Variables are inherited from the parent node.
If a variable is redefined lower in the tree, it is said to be overridden.
In this case, the new definition is the one being used.
It is possible to override the generated variables.
This is not recommended and you should understand all the consequences
if you decide to do so.
  

Text

Code Block
# 

...

Definition of the suite test.

...

suite test

...


   edit ECF_INCLUDE "$HOME/course"

...

   # replace '$HOME' with the path to your home directory
   edit ECF_HOME    "$HOME/course"

...

   family f1

...

      edit SLEEP 20

...

      task t1

...

      task t2

...

   endfamily

...

endsuite


Python

Code Block
languagepy
title$HOME/course/test.py
import os
from ecflow import Defs,Suite,Family,Task,Edit

def create_family_f1():
    return Family("f1",
            Edit(SLEEP=20),
                Task("t1"),
                

...

Task("t2"))
      

...

 

...

 

...

 

...

 

...

 

...

 

...

 
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"), "course")
defs = Defs(
        Suite("test",
            Edit(ECF_INCLUDE=home,ECF_HOME=home),
            create_family_f1()))
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")

Quiz

Let us have a quiz. Consider the following suite:

Code Block
suite test
   edit SLEEP 100

...

   family f1

...

      edit SLEEP 80

...

      task t1

...


      task t2

...


         edit SLEEP 9

...

      family g1

...

          edit SLEEP 89

...

          task x1

...

              edit SLEEP 10

...

          task x2

...

      endfamily

...

   endfamily

...

   family f2

...

     task t1

...

     task t2

...

         edit SLEEP 77

...


     family g2

...


          task x1

...

              edit SLEEP 12

...

          task x2

...

      endfamily

...


   endfamily
endsuite

Here is the value for SLEEP for the above suite. Make sure you understand this.


SLEEP
/test/f1/t180
/test/f1/t29
/test/f1/g1/x110
/test/f1/g1/x289
/test/f2/t1100
/test/f2/t277
/test/f2/g2/x112
/test/f2/g2/x2100


What to do

  1. Do the modifications
  2. Replace the suite
    python: python3 test.py
                 python3 client.py
    text:      ecflow_client --suspend=/test; ecflow_client --replace=/test test.def
  3. Watch in ecflow_ui .
Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/ecFlow+variables
Button Hyperlink
titleUp
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://confluence.ecmwf.int/display/ECFLOW/Add+Trigger

endsuite</pre> </div> <p>What is the value of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> SLEEP for:</p> <blockquote> <div><table border="1" class="docutils"> <colgroup> <col width="70%" /> <col width="30%" /> </colgroup> <thead valign="bottom"> <tr><th class="head"><a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-node"><em class="xref std std-term">node</em></a></th> <th class="head">SLEEP</th> </tr> </thead> <tbody valign="top"> <tr><td>test/f1/t1</td> <td>?</td> </tr> <tr><td>/test/f1/t2</td> <td>?</td> </tr> <tr><td>/test/f1/g1/x1</td> <td>?</td> </tr> <tr><td>/test/f1/g1/x2</td> <td>?</td> </tr> <tr><td>/test/f2/t1</td> <td>?</td> </tr> <tr><td>/test/f2/t2</td> <td>?</td> </tr> <tr><td>/test/f2/g2/x1</td> <td>?</td> </tr> <tr><td>/test/f2/g2/x2</td> <td>?</td> </tr> </tbody> </table> </div></blockquote> </div>