Example #1
0
def network_dr(network, kmax=100, callback=None):
    """"""
    vertices = network.get_vertices_attributes(('x', 'y', 'z'))
    edges = list(network.edges())
    fixed = network.vertices_where({'is_fixed': True})
    loads = network.get_vertices_attributes(('px', 'py', 'pz'),
                                            (0.0, 0.0, 0.0))
    qpre = network.get_edges_attribute('qpre', 1.0)
    fpre = network.get_edges_attribute('fpre', 0.0)
    lpre = network.get_edges_attribute('lpre', 0.0)
    linit = network.get_edges_attribute('linit', 0.0)
    E = network.get_edges_attribute('E', 0.0)
    radius = network.get_edges_attribute('radius', 0.0)

    xyz, q, f, l, r = dr(vertices,
                         edges,
                         fixed,
                         loads,
                         qpre,
                         fpre,
                         lpre,
                         linit,
                         E,
                         radius,
                         kmax=kmax,
                         callback=callback)

    for index, key in enumerate(network.vertices()):
        network.set_vertex_attributes(key, 'xyz', xyz[index])
        network.set_vertex_attributes(key, ('rx', 'ry', 'rz'), r[index])

    for index, (u, v, attr) in enumerate(network.edges(True)):
        attr['f'] = f[index]
        attr['l'] = l[index]
Example #2
0
fixed = list(network.nodes_where({'is_anchor': True}))
free = list(network.nodes_where({'is_anchor': False}))

fixed[:] = [node_index[node] for node in fixed]
free[:] = [node_index[node] for node in free]

edges = [(node_index[u], node_index[v]) for u, v in network.edges()]

X = network.nodes_attributes('xyz')
R = network.nodes_attributes(['rx', 'ry', 'rz'])
P = network.nodes_attributes(['px', 'py', 'pz'])
Q = network.edges_attribute('q')

# compute equilibrium

X, Q, F, L, R = dr(X, edges, fixed, P, Q)

# update network

update_network()

# visualize result

artist = CablenetArtist(network, layer="ITA20::L5::FormFinding")
artist.draw_nodes(color={
    node: (255, 0, 0)
    for node in network.nodes_where({'is_anchor': True})
})
artist.draw_edges()
artist.draw_residuals()
artist.draw_reactions()
Example #3
0
free[:] = [node_index[node] for node in free]

edges = [(node_index[u], node_index[v]) for u, v in network.edges()]

X = network.nodes_attributes('xyz')
R = network.nodes_attributes(['rx', 'ry', 'rz'])
P = network.nodes_attributes(['px', 'py', 'pz'])
Q = network.edges_attribute('q')

# create an artist

artist = CablenetArtist(network, layer="ITA20::L5::FormFinding")

# compute equilibrium

X, Q, F, L, R = dr(X, edges, fixed, P, Q, callback=callback)

# update network

update_network()

# visualize result

artist.clear_layer()
artist.draw_nodes(color={
    node: (255, 0, 0)
    for node in network.nodes_where({'is_anchor': True})
})
artist.draw_edges()
artist.draw_residuals()
artist.draw_reactions()
Example #4
0
    plotter.draw_vertices(facecolor={
        key: '#000000'
        for key in network.vertices_where({'is_fixed': True})
    })
    plotter.draw_edges()

    plotter.update(pause=1.0)

    # run the dynamic relaxation

    xyz, q, f, l, r = dr(vertices,
                         edges,
                         fixed,
                         loads,
                         qpre,
                         fpre,
                         lpre,
                         linit,
                         E,
                         radius,
                         kmax=100,
                         callback=callback)

    # update vertices and edges to reflect the end result

    for key, attr in network.vertices(True):
        attr['x'] = xyz[key][0]
        attr['y'] = xyz[key][1]
        attr['z'] = xyz[key][2]

    for index, (u, v, attr) in enumerate(network.edges(True)):
        attr['f'] = f[index]
    plotter.update_vertices()
    plotter.update_edges()

    imagepath = os.path.join(TEMPDIR, "plot_{}.png".format(k))
    plotter.save(imagepath, dpi=150)
    IMAGES.append(imagepath)


# run the DR

dr(vertices,
   edges,
   fixed,
   loads,
   qpre,
   fpre,
   lpre,
   linit,
   E,
   radius,
   kmax=100,
   dt=1.0,
   tol1=1e-3,
   tol2=1e-6,
   c=0.1,
   callback=save_image)

# save the result to a GIF

gif_from_images(IMAGES, FILE_O, fps=5)