def ansys_remesh(mesh, output_path, filename, size=None): s = Structure() s.add_nodes_elements_from_mesh(mesh, 'ShellElement') s = areas_from_mesh(s, mesh) write_preprocess(output_path, filename) write_request_mesh_areas(s, output_path, filename, size=size, smart_size=None, div=None) ansys_launch_process(s, output_path, filename) mesh = mesh_from_ansys_results(output_path) return mesh
def weld_meshes_from_layer(layer_input, layer_output): """ Grab meshes on an input layer and weld them onto an output layer. Parameters ---------- layer_input : str Layer containing the Blender meshes to weld. layer_output : str Layer to plot single welded mesh. Returns ------- None """ print('Welding meshes on layer:{0}'.format(layer_input)) S = Structure(path=' ') add_nodes_elements_from_layers(S, mesh_type='ShellElement', layers=layer_input) faces = [] for element in S.elements.values(): faces.append(element.nodes) try: clear_layer(layer_output) except: create_layer(layer_output) vertices = S.nodes_xyz() xdraw_mesh(name='welded_mesh', vertices=vertices, faces=faces, layer=layer_output)
def ansys_remesh_3d(mesh, output_path, name, size=None, hex=False, div=None): s = Structure(output_path, name=name) s.add_nodes_elements_from_mesh(mesh, 'ShellElement') s = areas_from_mesh(s, mesh) filename = name + '.txt.' ansys_open_pre_process(output_path, filename) write_request_mesh_volume(s, output_path, name, size=size, hex=hex, div=div) ansys_launch_process(output_path, name, cpus=4, license='teaching', delete=True) mesh = volmesh_from_ansys_results(output_path, name) return mesh
def weld_meshes_from_layer(layer_input, layer_output): """ Grab meshes on an input layer and weld them onto an output layer. Parameters ---------- layer_input : str Layer containing the Rhino meshes to weld. layer_output : str Layer to plot single welded mesh. Returns ------- None """ print('Welding meshes on layer:{0}'.format(layer_input)) mdl = Structure(path=' ') add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers=layer_input) faces = [] for element in mdl.elements.values(): enodes = element.nodes if len(enodes) == 3: enodes.append(enodes[-1]) if len(enodes) == 4: faces.append(enodes) rs.DeleteObjects(rs.ObjectsByLayer(layer_output)) rs.CurrentLayer(layer_output) rs.AddMesh(mdl.nodes_xyz(), faces)
__author__ = ['Andrew Liew <*****@*****.**>'] __copyright__ = 'Copyright 2018, BLOCK Research Group - ETH Zurich' __license__ = 'MIT License' __email__ = '*****@*****.**' # Local ex for line in rs.ObjectsByLayer('elset_lines'): ez = subtract_vectors(rs.CurveEndPoint(line), rs.CurveStartPoint(line)) ex = normalize_vector(cross_vectors(ez, [0, 0, 1])) rs.ObjectName(line, json.dumps({'ex': ex})) # Structure mdl = Structure(name='beam_bathe', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, line_type='BeamElement', layers='elset_lines') # Sets rhino.add_sets_from_layers(mdl, layers=['nset_support', 'nset_load']) # Materials mdl.add_material(ElasticIsotropic(name='mat_elastic', E=10**7, v=0.0001, p=1)) # Sections
from compas_fea.cad import rhino from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralStep from compas_fea.structure import PointLoad from compas_fea.structure import PinnedDisplacement from compas_fea.structure import RollerDisplacementX from compas_fea.structure import ShellSection from compas_fea.structure import Structure # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='mesh_plate', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers='elset_mesh') # Sets rhino.add_sets_from_layers(mdl, layers=['nset_load', 'nset_left', 'nset_right']) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=75 * 10**9, v=0.3, p=2700))
from compas_fea.structure import PointLoad from compas_fea.structure import Structure from compas_fea.structure import Set from math import pi import compas_vibro from compas.datastructures import Network for i in range(60): print() # Structure mdl = Structure(name='beam_simple', path=compas_vibro.TEMP + '/') # Elements filepath = os.path.join(compas_vibro.DATA, 'network_10x10.json') network = Network.from_json(filepath) mdl.add_nodes_elements_from_network(network=network, element_type='BeamElement', elset='elset_lines', axes={'ex': [0, 0, 1]}) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=20 * 10**9, v=0.3, p=1500))
from compas_fea.cad import rhino from compas_fea.structure import Structure from compas_fea.structure import ElasticIsotropic from compas_fea.structure import SolidSection from compas_fea.structure import ElementProperties from compas_fea.structure import PinnedDisplacement from compas_fea.structure import PointLoad from compas_fea.structure import GeneralStep import rhinoscriptsyntax as rs # Author(s): Andrew Liew (github.com/andrewliew) mdl = Structure(name='example_tets', path='C:/Temp/') # Triangles guid = rs.ObjectsByLayer('mesh')[0] rhino.discretise_mesh(mesh=guid, layer='mesh_discretised', target=0.300, min_angle=15) # Weld rhino.weld_meshes_from_layer(layer_input='mesh_discretised', layer_output='mesh_welded') # Tetrahedrons mesh = rs.ObjectsByLayer('mesh_welded')[0]
from compas_fea.cad import rhino from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralStep from compas_fea.structure import PinnedDisplacement from compas_fea.structure import PointLoad from compas_fea.structure import SolidSection from compas_fea.structure import Structure import rhinoscriptsyntax as rs # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='block_tets', path='C:/Temp/') # Tetrahedrons mesh = rs.ObjectsByLayer('base_mesh')[0] rhino.add_tets_from_mesh(mdl, name='elset_tets', mesh=mesh, volume=10**(-4)) # Sets rhino.add_sets_from_layers(mdl, layers=['nset_base', 'nset_top']) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=10 * 10**9, v=0.3, p=1)) # Sections
from compas_fea.structure import CircularSection from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralDisplacement from compas_fea.structure import GeneralStep from compas_fea.structure import PinnedDisplacement from compas_fea.structure import PointLoad from compas_fea.structure import Structure from math import pi # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='beam_simple', path='C:/Temp/') # Elements network = rhino.network_from_lines(layer='elset_lines') mdl.add_nodes_elements_from_network(network=network, element_type='BeamElement', elset='elset_lines', axes={'ex': [0, -1, 0]}) # Sets rhino.add_sets_from_layers(mdl, layers=['nset_left', 'nset_right', 'nset_weights']) # Materials
from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralStep from compas_fea.structure import PointLoad from compas_fea.structure import GravityLoad from compas_fea.structure import PinnedDisplacement from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ShellSection from compas_fea.structure import Structure import rhinoscriptsyntax as rs # Author(s): Tomas Mendez Echenagucia (github.com/tmsmendez) # Structure mdl = Structure(name='meshpillow_from_rhino', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers=['mesh']) # Sets rhino.add_sets_from_layers(mdl, layers=['supports', 'lpts1', 'lpts2']) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=20 * 10**9, v=0.3, p=1500))
import rhinoscriptsyntax as rs import json # Author(s): Andrew Liew (github.com/andrewliew) # Local ex for i in rs.ObjectsByLayer('elset_beams'): ez = subtract_vectors(rs.CurveEndPoint(i), rs.CurveStartPoint(i)) ex = normalize_vector(cross_vectors(ez, [0, 0, 1])) rs.ObjectName(i, '_{0}'.format(json.dumps({'ex': ex}))) # Structure mdl = Structure(name='beam_bathe', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, line_type='BeamElement', layers='elset_beams') # Sets rhino.add_sets_from_layers(mdl, layers=['nset_support', 'nset_load']) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=10**7, v=10**(-5), p=1))
for element in S.elements.values(): faces.append(element.nodes) try: clear_layer(layer_output) except: create_layer(layer_output) vertices = S.nodes_xyz() xdraw_mesh(name='welded_mesh', vertices=vertices, faces=faces, layer=layer_output) # ============================================================================== # Debugging # ============================================================================== if __name__ == "__main__": from compas_fea.structure import Structure # mdl = Structure.load_from_obj(filename='/home/al/compas/compas_fea/data/_workshop/example_tets.obj') # plot_voxels(mdl, step='step_load', field='smises', vdx=0.100) mdl = Structure.load_from_obj(filename='C:/Temp/block_tets.obj') plot_voxels(mdl, step='step_load', field='um', vdx=0.010)
from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import FixedDisplacement from compas_fea.structure import GeneralStep from compas_fea.structure import GravityLoad from compas_fea.structure import PointLoad from compas_fea.structure import ShellSection from compas_fea.structure import Steel from compas_fea.structure import Structure import rhinoscriptsyntax as rs # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='mesh_mould', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers=['elset_wall', 'elset_plinth']) # Sets rhino.add_sets_from_layers(mdl, layers=['nset_fixed', 'nset_loads']) # Materials mdl.add([ Concrete(name='mat_concrete', fck=40),
from compas_fea.cad import rhino from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralDisplacement from compas_fea.structure import GeneralStep from compas_fea.structure import GravityLoad from compas_fea.structure import PinnedDisplacement from compas_fea.structure import RollerDisplacementX from compas_fea.structure import ShellSection from compas_fea.structure import Structure # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='mesh_strip', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers='elset_mesh') # Sets rhino.add_sets_from_layers(mdl, layers=['nset_left', 'nset_right', 'nset_middle']) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=75 * 10**9, v=0.3, p=2700))
from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralStep from compas_fea.structure import FixedDisplacement from compas_fea.structure import ShellSection from compas_fea.structure import PointLoad from compas_fea.structure import Steel from compas_fea.structure import Structure __author__ = ['Tomas Mendez Echenagucia <*****@*****.**>'] __copyright__ = 'Copyright 2017, BLOCK Research Group - ETH Zurich' __license__ = 'MIT License' __email__ = '*****@*****.**' # Structure mdl = Structure(name='shell_bench', path=compas_fea.TEMP) # Nodes and Elements xyz = [[0, 0, 0], [1, 0, 0], [2, 0, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], [0, 2, 0], [1, 2, 0], [2, 2, 0]] nodes = mdl.add_nodes(xyz) shells = [[0, 1, 4, 3], [1, 2, 5, 4], [3, 4, 7, 6], [4, 5, 8, 7]] shells = [mdl.add_element(shell, 'ShellElement') for shell in shells] # Sets elset_shells = mdl.add_set('elset_shells', 'element', shells)
from compas_fea.structure import ElementProperties from compas_fea.structure import GravityLoad from compas_fea.structure import GeneralStep from compas_rhino.helpers import mesh_from_guid # Author(s): Tomás Méndez Echenagucia (github.com/tmsmendez) # get mesh from rhino layer ---------------------------------------------------- mesh = mesh_from_guid(Mesh, rs.ObjectsByLayer('mesh')[0]) # add shell elements from mesh ------------------------------------------------- name = 'shell_example' s = Structure(name=name, path=compas_fea.TEMP) shell_keys = s.add_nodes_elements_from_mesh(mesh, element_type='ShellElement') s.add_set('shell', 'element', shell_keys) # add supports from rhino layer------------------------------------------------- pts = rs.ObjectsByLayer('pts') pts = [rs.PointCoordinates(pt) for pt in pts] nkeys = [] for pt in pts: nkeys.append(s.check_node_exists(pt)) s.add_set(name='support_nodes', type='NODE', selection=nkeys) supppots = FixedDisplacement(name='supports', nodes='support_nodes') s.add_displacement(supppots) # add materials and sections -----------------------------------------------
from compas_fea.structure import GravityLoad from compas_fea.structure import PointLoad from compas_fea.structure import RollerDisplacementY from compas_fea.structure import ShellSection from compas_fea.structure import SolidSection from compas_fea.structure import Steel from compas_fea.structure import Structure from compas_fea.structure import TrussSection from compas_blender.utilities import get_object_by_name # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='block_bridge', path='C:/Temp/') # Tetrahedrons blender.add_tets_from_mesh(mdl, name='elset_tets', mesh=get_object_by_name('elset_tets')) # Elements blender.add_nodes_elements_from_layers( mdl, layers=['elset_top_plate', 'elset_bot_plate'], mesh_type='ShellElement') blender.add_nodes_elements_from_layers(mdl, layers='elset_ties',
from compas_fea.structure import PipeSection from compas_fea.structure import PointLoad from compas_fea.structure import RollerDisplacementXZ from compas_fea.structure import Steel from compas_fea.structure import Structure __author__ = ['Andrew Liew <*****@*****.**>'] __copyright__ = 'Copyright 2018, BLOCK Research Group - ETH Zurich' __license__ = 'MIT License' __email__ = '*****@*****.**' # Structure mdl = Structure(name='beam_frame', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, line_type='BeamElement', layers='elset_lines') # Sets layers = ['nset_pins', 'nset_load_v', 'nset_load_h', 'nset_rollers', 'elset_top'] rhino.add_sets_from_layers(mdl, layers=layers) # Materials mdl.add_material(Steel(name='mat_steel')) # Sections
from compas_fea.structure import GeneralStep from compas_fea.structure import GravityLoad from compas_fea.structure import PinnedDisplacement from compas_fea.structure import RectangularSection from compas_fea.structure import RollerDisplacementZ from compas_fea.structure import Structure from compas_fea.structure import TrapezoidalSection __author__ = ['Andrew Liew <*****@*****.**>'] __copyright__ = 'Copyright 2018, BLOCK Research Group - ETH Zurich' __license__ = 'MIT License' __email__ = '*****@*****.**' # Structure mdl = Structure(name='beam_tree', path='C:/Temp/') # Elements layers = [ 'struts_mushroom', 'struts_bamboo', 'joints_mushroom', 'joints_bamboo', 'joints_grid' ] rhino.add_nodes_elements_from_layers(mdl, line_type='BeamElement', layers=layers) # Sets rhino.add_sets_from_layers(mdl, layers=['supports_bot', 'supports_top'])
result = postprocess(self.nodes, self.elements, self.ux, self.uy, self.uz, data, 'element', 1, cbar, 255, iptype, nodal) toc, _, cnodes, *_ = result self.update_vertices_colors( {i: j for i, j in enumerate(cnodes)}) self.update_statusbar('Plotting: {0:.3f} s'.format(toc)) except: pass # ============================================================================== # Main # ============================================================================== if __name__ == "__main__": from compas_fea.structure import Structure # fnm = '/home/al/compas/compas_fea/data/_workshop/example_truss.obj' # fnm = '/home/al/compas/compas_fea/data/_workshop/example_shell.obj' fnm = '/home/al/compas/compas_fea/data/_workshop/example_tets.obj' mdl = Structure.load_from_obj(fnm) mdl.view()
(max_ - min_)) + minthick mesh.set_face_attribute(fkey, 'thick', thick) def assign_structure_property_to_mesh_faces(mesh, name, value): for fkey in mesh.faces(): mesh.set_face_attribute(fkey, name, value) if __name__ == '__main__': filename = 'example_From_mesh' path = os.path.dirname(os.path.abspath(__file__)) + '/' mesh = Mesh.from_obj('../data/quadmesh_planar.obj') minthick = .002 maxthick = .01 load = (0, 0, -2000) E35 = 35 * 10**9 v = 0.2 p = 2400 pin_all_boundary_vertices(mesh) applly_uniform_point_load(mesh, load) create_variable_thick_shell(mesh, minthick, maxthick) assign_structure_property_to_mesh_faces(mesh, 'E', E35) assign_structure_property_to_mesh_faces(mesh, 'v', v) assign_structure_property_to_mesh_faces(mesh, 'p', p) s = Structure.from_mesh(mesh) fnm = path + filename ansys.inp_generate(s, filename=fnm, out_path=path) print s
from compas_fea.structure import PointLoads from compas_fea.structure import PinnedDisplacement from compas_fea.structure import PrestressLoad from compas_fea.structure import RollerDisplacementX from compas_fea.structure import ShellSection from compas_fea.structure import Steel from compas_fea.structure import TrussSection from compas_fea.structure import Structure import rhinoscriptsyntax as rs # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='mesh_planar', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers=['elset_mesh', 'elset_plates']) rhino.add_nodes_elements_from_layers(mdl, line_type='TrussElement', layers=['elset_tie']) # Sets rhino.add_sets_from_layers(mdl, layers=['nset_pin', 'nset_roller']) # Materials
from compas_fea.structure import GeneralStep from compas_fea.structure import ModalStep from compas_fea.structure import PinnedDisplacement from compas_fea.structure import ShellSection from compas_fea.structure import MassSection from compas_fea.structure import Structure # Author(s): # Francesco Ranaudo (github.com/nefelogeta) # Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='mesh_modal_from_mesh', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers='elset_concrete', pA=100) rhino.add_nodes_elements_from_layers(mdl, mesh_type='MassElement', layers='elset_mass',pA=1000) # Sets rhino.add_sets_from_layers(mdl, layers='nset_pins') # Materials mdl.add(ElasticIsotropic(name='mat_concrete', E=40*10**9, v=0.2, p=2400)) # Sections
from compas_fea.cad import rhino from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralStep from compas_fea.structure import PinnedDisplacement from compas_fea.structure import PointLoad from compas_fea.structure import SolidSection from compas_fea.structure import Structure import rhinoscriptsyntax as rs # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='block_deepbeam', path='C:/Temp/') # Extrude nz = 20 rhino.mesh_extrude(mdl, guid=rs.ObjectsByLayer('base_mesh'), layers=nz, thickness=1. / nz, blocks_name='elset_blocks') # Sets rhino.add_sets_from_layers(mdl, layers=['nset_load', 'nset_supports']) # Materials
from compas_fea.structure import CircularSection from compas_fea.structure import ElasticIsotropic from compas_fea.structure import ElementProperties as Properties from compas_fea.structure import GeneralStep from compas_fea.structure import GravityLoad from compas_fea.structure import PinnedDisplacement from compas_fea.structure import PointLoad from compas_fea.structure import ShellSection from compas_fea.structure import Structure # Author(s): Andrew Liew (github.com/andrewliew) # Create empty Structure object mdl = Structure(name='introduction', path='C:/temp/') # Add nodes mdl.add_node(xyz=[-5., -5., 0.]) mdl.add_nodes(nodes=[[5., -5., 0.], [5., 5., 0.], [-5., 5., 0.], [0., 0., 5.]]) # print('Node number 3:', mdl.nodes[3]) # print('Node number 3 xyz:', mdl.node_xyz(3)) # print('Node count: ', mdl.node_count()) # print('Node index: ', mdl.node_index) # print('Check node at [0, 0, 0]: ', mdl.check_node_exists([0, 0, 0])) # print('Check node at [5, 5, 0]: ', mdl.check_node_exists([5, 5, 0])) # print('Node bounds: ', mdl.node_bounds()) # Add elements
import rhinoscriptsyntax as rs import json # Author: Aryan R. Rad # Local Coordinate System per each element for i in rs.ObjectsByLayer('elset_beams'): ez = subtract_vectors(rs.CurveEndPoint(i), rs.CurveStartPoint(i)) ex = normalize_vector(cross_vectors(ez, [0, 0, 1])) rs.ObjectName(i, '_{0}'.format(json.dumps({'ex': ex}))) #------------------------------------------------------------------------------- # Structure # For the path in the command below, select the location you prefer mdl = Structure(name='Nexorades', path='C:/TEMP/') #------------------------------------------------------------------------------- # Elements rhino.add_nodes_elements_from_layers(mdl, line_type='BeamElement', layers='elset_beams') #------------------------------------------------------------------------------- # Sets rhino.add_sets_from_layers(mdl, layers=['nset_support', 'nset_load']) #------------------------------------------------------------------------------- # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=11000000, v=10**(-5), p=0.01)) #-------------------------------------------------------------------------------
from compas_fea.structure import RectangularSection from compas_fea.structure import RollerDisplacementY from compas_fea.structure import ShellSection from compas_fea.structure import Steel from compas_fea.structure import Structure from compas_fea.structure import TrussSection from math import pi import rhinoscriptsyntax as rs # Author(s): Andrew Liew (github.com/andrewliew) # Structure mdl = Structure(name='mesh_bridge', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers='elset_mesh') rhino.add_nodes_elements_from_layers(mdl, line_type='TrussElement', layers='elset_ties') rhino.add_nodes_elements_from_layers(mdl, line_type='BeamElement', layers='elset_ends') # Sets
from compas_fea.cad import rhino from compas_fea.structure import Structure from compas_fea.structure import Concrete from compas_fea.structure import ShellSection from compas_fea.structure import ElementProperties from compas_fea.structure import PinnedDisplacement from compas_fea.structure import GravityLoad from compas_fea.structure import PointLoad from compas_fea.structure import AreaLoad from compas_fea.structure import GeneralStep from compas_fea.structure import BucklingStep from compas_fea.structure import ModalStep # Author(s): Andrew Liew (github.com/andrewliew) mdl = Structure(name='example_shell', path='C:/Temp/') rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers='mesh') rhino.add_sets_from_layers(mdl, layers=['loads', 'supports', 'area']) #print(mdl.sets['loads']) #print(mdl.sets['supports']) #print(mdl.sets['area']) mdl.add(Concrete(name='concrete', fck=50)) #print(mdl.materials['concrete']) mdl.add(ShellSection(name='shell', t=0.100))
from compas_fea.structure import ShellSection from compas_fea.structure import Steel from compas_fea.structure import Structure import rhinoscriptsyntax as rs __author__ = ['Andrew Liew <*****@*****.**>'] __copyright__ = 'Copyright 2018, BLOCK Research Group - ETH Zurich' __license__ = 'MIT License' __email__ = '*****@*****.**' # Structure mdl = Structure(name='mesh_mould', path='C:/Temp/') # Elements rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers=['elset_wall', 'elset_plinth']) # Sets rhino.add_sets_from_layers(mdl, layers=['nset_fixed']) # Materials mdl.add_materials([ Concrete(name='mat_concrete', fck=40), Steel(name='mat_rebar', fy=500, id='r')])