Set Creation in FDL

It is convenient to group jobs into named sets, because you can use those sets to specify retracing targets, to create High-level flows, and to generate reports.

FDL offers a convenient construct to create sets as part of flow building by means of the procedure S. For example, the following FDL fragment creates a set called "MySet" which contains the jobs specified in the body of the statement.
S "MySet" {
    J vw cp aa bb
    J vw cp bb cc 
} 
The S statements can be nested. In the following example, we create 3 sets:
  • A set called "Block:$block:place" containing 2 jobs
  • A set called "Block:$block:route" containing 3 jobs
  • A set called "Block:$block" containing the union of the above sets, that is 5 jobs
The names of the sets can be anything, as long as you do not use the same name more than once. In this example, however, we use the colon ":" to take advantage of the fact that the FlowTracer interfaces decompose set names on the "colon" boundary to enhance the presentation.
S "Block:$block" {
    S "Block:$block:place" {
        J vw place $block
        J vw postplace $block
    }
    S "Block:$block:route" {
        J vw routeImport $block     
        J vw globalRoute $block    
        J vw detailRoute $block    
    }
} 

Common Mistakes

A common mistake is to use the same set name more than once. The procedure S is used to define exactly the content of the set. Extra elements are eliminated from the set. In the following example, the execution of the FDL fragment terminates with one set called "MySet" which contains the job vw cp xx yy and this job is always going to be "INVALID".
S "MySet" {
    J vw cp aa bb
}
# At this point the set MySet contains "vw cp aa bb"

S "MySet" {
    J vw cp xx yy
}

# At this point the set MySet contains "vw cp xx yy". 
# The job vw cp aa bb is forgotten