|  | 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 == |