| 1 | [wiki:Documentation] |
| 2 | | [wiki:Documentation/NodeHandler NodeHandler] |
| 3 | | [wiki:Documentation/NodeHandler/Commands Commands] |
| 4 | | defTopology |
| 5 | |
| 6 | = defTopology: Define a Topology = |
| 7 | |
| 8 | This command defines a topology consisting of a set of nodes and noise injection settings to configure a specific topology. An experiment can normally only contain a single topology with noise settings, but may create additional topology declarations which are a sub set of the 'base' topology. |
| 9 | |
| 10 | == Syntax: defTopology(name, nodeArray = nil, &block = nil) == |
| 11 | |
| 12 | * '''name:''' Name of the defined topology. |
| 13 | * '''nodeArray:''' Selects the nodes used in this topology. |
| 14 | * '''block:''' Additional modifications on the create topology. |
| 15 | |
| 16 | The 'name' is a uri string identifying the topology. For instance, it can be used in 'defNodes' commands. The following naming convention is encouraged: ''projectName'':'''topo''':''topologyName'' |
| 17 | |
| 18 | The 'nodeArray' defines which nodes are in the topology. The following array patterns are supported: |
| 19 | |
| 20 | * [x,y]: Describes a single node at location x@y |
| 21 | * [x1..x2, y]: Describes a set of nodes along a line starting at x1@y and ending at x2@y. For instance, [2..4, 5] defines the nodes [2,5], [3,5], [4,5]. |
| 22 | * [x, y1..y2]: Same as previous, but for the y coordinate. |
| 23 | * [x1..x2, y1..y2]: This defines a rectangle area of nodes within the grid. |
| 24 | * [[x1,y1], [x2,y2], [x3,y3]]: An arbitrary long list of single nodes. Obvioulsy, any entry in this list can also use any of the above defined syntaxes. |
| 25 | |
| 26 | The optional 'block' allows the experimenter to further configure the topology. The following commands are defined inside the block: |
| 27 | |
| 28 | # * [wiki:Documentation/NodeHandler/Commands/NodeSet/image image=] |
| 29 | |
| 30 | == Usage == |
| 31 | |
| 32 | {{{ |
| 33 | # topology contains 1 node |
| 34 | defTopology('test:topo:origin', [1, 1]) |
| 35 | |
| 36 | # nodes arranged in a circle |
| 37 | defTopology('test:topo:circle') { |t| |
| 38 | # use simple 4-way algorithm |
| 39 | radius = 8 |
| 40 | xCenter = 10 |
| 41 | yCenter = 10 |
| 42 | |
| 43 | r2 = radius * radius |
| 44 | t.addNode(xCenter, yCenter + radius) |
| 45 | t.addNode(xCenter, yCenter - radius) |
| 46 | (1..radius).each { |x| |
| 47 | y = (Math.sqrt(r2 - x*x) + 0.5).to_i |
| 48 | t.addNode(xCenter + x, yCenter + y) |
| 49 | t.addNode(xCenter + x, yCenter - y) |
| 50 | t.addNode(xCenter - x, yCenter + y) |
| 51 | t.addNode(xCenter - x, yCenter - y) |
| 52 | } |
| 53 | } |
| 54 | }}} |
| 55 | |
| 56 | == See Also == |