def get_rc_property(fkey, s_sec, m_conc, m_reb, diam, spac, he, ang): pr_n = 'ep_' + str(fkey) rebar = get_rebar(m_reb, diam, spac, he, ang) ep = Properties(name=pr_n, material=m_conc, section=s_sec, elements=[fkey], reinforcement=rebar) if fkey == 0: # print(angle, t, cover, sp_x_b, sp_x_t, diam_x) print(rebar) return ep
rhino.add_sets_from_layers(mdl, layers=['lift_points'] + beams) # Materials mdl.add_material( ElasticIsotropic(name='mat_elastic', E=5 * 10**9, v=0.3, p=1000)) # Sections mdl.add_section(RectangularSection(name='sec_rectangular', h=0.005, b=0.005)) # Properties ep = Properties(name='ep', material='mat_elastic', section='sec_rectangular', elsets=beams) mdl.add_element_properties(ep) # Displacements bc = [] for beam in beams: name = '{0}_ends'.format(beam) if 'X' in beam: mdl.add_displacement( GeneralDisplacement(name=name, nodes=name, y=0, z=0, xx=0)) if 'Y' in beam: mdl.add_displacement( GeneralDisplacement(name=name, nodes=name, x=0, z=0, yy=0)) bc.append(name)
# 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)) #------------------------------------------------------------------------------- # Sections mdl.add(CircularSection(name='sec_beam', r=0.2)) #------------------------------------------------------------------------------- # Properties mdl.add( Properties(name='ep_beam', material='mat_elastic', section='sec_beam', elset='elset_beams')) #------------------------------------------------------------------------------- # Displacements mdl.add(FixedDisplacement(name='disp_fixed', nodes='nset_support')) #------------------------------------------------------------------------------- # Loads mdl.add(PointLoad(name='load_point', nodes='nset_load', z=-1100.99)) #------------------------------------------------------------------------------- # Steps mdl.add([ GeneralStep(name='step_bc', displacements=['disp_fixed']), GeneralStep(name='step_load', loads=['load_point']),
Concrete(name='mat_concrete', fck=50), Steel(name='mat_steel', fy=460), ]) # Sections mdl.add([ ShellSection(name='sec_planar', t=0.050), TrussSection(name='sec_tie', A=0.0001), ]) # Properties mdl.add([ Properties(name='ep_planar', material='mat_concrete', section='sec_planar', elset='elset_mesh'), Properties(name='ep_plate', material='mat_steel', section='sec_planar', elset='elset_plates'), Properties(name='ep_tie', material='mat_steel', section='sec_tie', elset='elset_tie'), ]) # Displacements mdl.add([ PinnedDisplacement(name='disp_pin', nodes='nset_pin'),
mdl.add(ElasticIsotropic(name='mat_elastic', E=20 * 10**9, v=0.3, p=1500)) # Sections _, ekeys, L, Lt = rhino.ordered_network(mdl, network=network, layer='nset_left') for i, Li in zip(ekeys, L): ri = (1 + Li / Lt) * 0.020 sname = 'sec_{0}'.format(i) mdl.add(CircularSection(name=sname, r=ri)) mdl.add( Properties(name='ep_{0}'.format(i), material='mat_elastic', section=sname, elements=[i])) # Displacements mdl.add([ PinnedDisplacement(name='disp_left', nodes='nset_left'), GeneralDisplacement(name='disp_right', nodes='nset_right', y=0, z=0, xx=0), GeneralDisplacement(name='disp_rotate', nodes='nset_left', yy=30 * pi / 180), ]) # Loads mdl.add(PointLoad(name='load_weights', nodes='nset_weights', z=-100))
# 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 mdl.add_section(RectangularSection(name='sec_rect', b=1, h=1)) # Properties ep = Properties(name='ep', material='mat_elastic', section='sec_rect', elsets='elset_lines') mdl.add_element_properties(ep) # Displacements mdl.add_displacement(FixedDisplacement(name='disp_fixed', nodes='nset_support')) # Loads mdl.add_load(PointLoad(name='load_point', nodes='nset_load', z=600)) # Steps mdl.add_steps([ GeneralStep(name='step_bc', displacements=['disp_fixed']), GeneralStep(name='step_load', loads=['load_point'])])
# Properties reb_plinth = { 'p_u1': {'pos': +0.130, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 0}, 'p_u2': {'pos': +0.120, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 90}, 'p_l2': {'pos': -0.120, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 90}, 'p_l1': {'pos': -0.130, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 0}} reb_wall = { 'w_u1': {'pos': +0.055, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 0}, 'w_u2': {'pos': +0.045, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 90}, 'w_l2': {'pos': -0.045, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 90}, 'w_l1': {'pos': -0.055, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.010, 'angle': 0}} mdl.add_element_properties([ Properties(name='ep_plinth', material='mat_concrete', section='sec_plinth', elsets='elset_plinth', reinforcement=reb_plinth), Properties(name='ep_wall', material='mat_concrete', section='sec_wall', elsets='elset_wall', reinforcement=reb_wall)]) # Displacements mdl.add_displacement(FixedDisplacement(name='disp_fixed', nodes='nset_fixed')) # Loads mdl.add_load(GravityLoad(name='load_gravity', elements=['elset_wall', 'elset_plinth'])) components = {} for guid in rs.ObjectsByLayer('nset_loads'): px, py, pz = rs.ObjectName(guid).split(' ') components[mdl.check_node_exists(rs.PointCoordinates(guid))] = {'z': float(pz)*100} mdl.add_load(PointLoads(name='load_points', components=components))
ShellSection(name='sec_shell', t=0.005), ]) # print('Section geometry: ', mdl.sections['sec_circ'].geometry) # Add materials mdl.add(ElasticIsotropic(name='mat_elastic', E=10 * 10**9, v=0.3, p=1500)) # print('Material E: ', mdl.materials['mat_elastic'].E) # Add element properties mdl.add([ Properties(name='ep_circ', material='mat_elastic', section='sec_circ', elset='elset_beams'), Properties(name='ep_shell', material='mat_elastic', section='sec_shell', elset='elset_shell'), ]) # Add loads mdl.add([ PointLoad(name='load_point', nodes='nset_top', x=10000, z=-10000), GravityLoad(name='load_gravity', elements='elset_beams'), ]) # print('load_point components: ', mdl.loads['load_point'].components)
blender.add_nset_from_objects(mdl, layer=1, name='nset_pins') blender.add_nset_from_objects(mdl, layer=2, name='nset_top') # Materials mdl.add_material( ElasticIsotropic(name='mat_elastic', E=200 * 10**9, v=0.3, p=7850)) # Sections mdl.add_section(TrussSection(name='sec_truss', A=0.00010)) # Properties ep = Properties(name='ep_strut', material='mat_elastic', section='sec_truss', elsets='elset_struts') mdl.add_element_properties(ep) # Displacements mdl.add_displacement(PinnedDisplacement(name='disp_pinned', nodes='nset_pins')) # Loads mdl.add_load(PointLoad(name='load_top', nodes='nset_top', z=-100000)) # Steps mdl.add_steps([ GeneralStep(name='step_bc', displacements='disp_pinned'),
# Sets rhino.add_sets_from_layers(mdl, layers=['pins', 'middle']) # Sections mdl.add_section( SpringSection(name='spring_elastic', stiffness={'axial': 10000})) mdl.add_section(SpringSection(name='spring_soft', stiffness={'axial': 1000})) # Properties mdl.add_element_properties([ Properties(name='ep_bl', section='spring_elastic', elsets='spring_bot_left'), Properties(name='ep_br', section='spring_soft', elsets='spring_bot_right'), Properties(name='ep_tl', section='spring_elastic', elsets='spring_top_left'), Properties(name='ep_tr', section='spring_elastic', elsets='spring_top_right') ]) # Displacements mdl.add_displacements([ PinnedDisplacement(name='disp_pins', nodes='pins'), RollerDisplacementXZ(name='disp_roller', nodes='middle')
# 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 mdl.add(ShellSection(name='sec_concrete', t=0.250)) # Properties mdl.add(Properties(name='ep_concrete', material='mat_concrete', section='sec_concrete', elset='elset_concrete')) # Displacements mdl.add(PinnedDisplacement(name='disp_pinned', nodes='nset_pins')) # Steps mdl.add([ GeneralStep(name='step_bc', displacements=['disp_pinned']), ModalStep(name='step_modal', modes=5), ]) mdl.steps_order = ['step_bc', 'step_modal'] # Summary
mdl.add_material( ElasticIsotropic(name='mat_elastic', E=20 * 10**9, v=0.3, p=1500)) # Sections _, ekeys, L, Lt = rhino.ordered_network(mdl, network=network, layer='nset_left') for ekey, Li in zip(ekeys, L): ri = (1 + Li / Lt) * 0.020 sname = 'sec_{0}'.format(ekey) pname = 'ep_{0}'.format(ekey) ename = 'element_{0}'.format(ekey) mdl.add_section(CircularSection(name=sname, r=ri)) ep = Properties(name=pname, material='mat_elastic', section=sname, elsets=ename) mdl.add_element_properties(ep) # Displacements deg = pi / 180 mdl.add_displacements([ PinnedDisplacement(name='disp_bc_left', nodes='nset_left'), GeneralDisplacement(name='disp_bc_right', nodes='nset_right', y=0, z=0, xx=0), GeneralDisplacement(name='disp_left', nodes='nset_left', yy=30 * deg), ])
Concrete(name='mat_concrete', fck=90, fr=[1.16, 0.15]), Steel(name='mat_steel', fy=355), ]) # Sections mdl.add([ ShellSection(name='sec_floor', t=0.050), TrussSection(name='sec_ties', A=pi * 0.25 * 0.030**2), ]) # Properties mdl.add([ Properties(name='ep_floor', material='mat_concrete', section='sec_floor', elset='elset_floor'), Properties(name='ep_ties', material='mat_steel', section='sec_ties', elset='elset_ties'), ]) # Displacements mdl.add([ RollerDisplacementXY(name='disp_edges', nodes='nset_edges'), PinnedDisplacement(name='disp_pinned', nodes='nset_corner1'), GeneralDisplacement(name='disp_xdof', nodes='nset_corner2', x=0), ])
rhino.add_sets_from_layers(mdl, layers=['nset_load', 'nset_supports']) # Materials mdl.add_material(ElasticIsotropic(name='mat_elastic', E=10**(10), v=0.3, p=1)) # Sections mdl.add_section(SolidSection(name='sec_solid')) # Properties mdl.add_element_properties( Properties(name='ep_solid', material='mat_elastic', section='sec_solid', elsets='elset_blocks')) # Displacements mdl.add_displacement( PinnedDisplacement(name='disp_pinned', nodes='nset_supports')) # Loads mdl.add_load(PointLoad(name='load_point', nodes='nset_load', z=-1)) # Steps mdl.add_step(GeneralStep(name='step_bc', displacements=['disp_pinned'])) mdl.add_step(GeneralStep(name='step_load', loads=['load_point']))
'dia': 0.012, 'angle': 90 }, 'w_l1': { 'pos': -0.055, 'spacing': 0.100, 'material': 'mat_rebar', 'dia': 0.012, 'angle': 0 }, } mdl.add([ Properties(name='ep_plinth', material='mat_concrete', section='sec_plinth', elset='elset_plinth', rebar=reb_plinth), Properties(name='ep_wall', material='mat_concrete', section='sec_wall', elset='elset_wall', rebar=reb_wall), ]) # Displacements mdl.add(FixedDisplacement(name='disp_fixed', nodes='nset_fixed')) # Loads
def compute_compas_fea(file_path, load_path, fea_engine='abaqus', recompute=True): """ Use abaqus (via compas_fea) to perform elastic FEA on the given frame under a given load case. If no load path is specified, elemental gravity will be assumbed to be applied. Parameters ---------- file_path : string full path to the frame shape's json file. load_path : type full path to the load case's json file. Returns ------- nD: dict Reactional nodal displacement key is the node id. value is (nodal_id, dx, dy, dz, theta_x, theta_y, theta_z). fR: dict Fixities reaction force, moment. key is the nodal id. value is [Fxyz, Mxyz] in the global axes. eR: dict Element-wise reaction force, moment (two ends). key is the element id. (Fxyz_1, Mxyz_1, Fxyz_2, Mxyz_2) """ root_dir = os.path.dirname(os.path.abspath(__file__)) temp_dir = os.path.join(root_dir, 'compas_fea-temp') if not os.path.exists(temp_dir): os.makedirs(temp_dir) file_json_name = file_path.split(os.sep)[-1] file_name = file_json_name.split('.')[0] print('compas_fea initing: file name {}'.format(file_name)) if not recompute: nD, fR, eR = parse_abaqus_result_json(file_name, temp_dir) return nD, fR, eR with open(file_path, 'r') as f: json_data = json.loads(f.read()) load_json_data = {} if load_path: with open(load_path, 'r') as f: load_json_data = json.loads(f.read()) # init an empty structure mdl = Structure(name=file_name, path=os.path.join(temp_dir, '')) # nodes mdl.add_nodes(nodes=parse_frame_nodes(json_data)) # elements elements = parse_elements(json_data) # align local axes with conmech sc = stiffness_checker(json_file_path=file_path, verbose=False) e_rot_mats = sc.get_element_local2global_rot_matrices() assert len(e_rot_mats) == len(elements) for e, mat in zip(elements, e_rot_mats): # compas_fea local axis convention is differrent to the one used in conmech: # in compas_fea # 'ex' axis represents the cross-section’s major axis # 'ey' is the cross-section’s minor axis # 'ez' is the axis along the element # TODO: this numpy array to list conversion # is essential to make compas_fea work... ez = list(mat[0][0:3]) # conmech longitude axis ex = list(mat[1][0:3]) # conmech cross sec major axis ey = list(mat[2][0:3]) # conmech cross sec minor axis mdl.add_element(nodes=e, type='BeamElement', axes={'ex': ex, 'ey': ey, 'ez': ez}) # print(mdl.elements[mdl.check_element_exists(nodes=e)]) assert_equal(mdl.element_count(), len(elements)) # Sets # just convenient aliases for referring to a group of elements mdl.add_set(name='elset_all', type='element', selection=list(range(mdl.element_count()))) mdl.add_set(name='nset_all', type='node', selection=list(range(mdl.node_count()))) fixities = parse_fixties(json_data) mdl.add_set(name='nset_fix', type='node', selection=[f[0] for f in fixities]) if load_json_data: pt_loads, include_sw = parse_load_case(load_json_data) # mdl.add_set(name='nset_pt_load', type='node', selection=[l[0] for l in pt_loads]) else: pt_loads = [] include_sw = True if pt_loads: mdl.add_set(name='nset_v_load_all', type='node', selection=[pl[0] for pl in pt_loads]) # Materials # Young’s modulus E [in units of Pa] # Poisson’s ratio v and density p [kg per cubic metre]. mat_json = json_data['material_properties'] mat_name = 'mat_' + mat_json['material_name'] E_scale = parse_pressure_scale_conversion(mat_json['youngs_modulus_unit']) p_scale = parse_density_scale_conversion(mat_json['density_unit']) mdl.add(ElasticIsotropic(name=mat_name, E=E_scale * mat_json['youngs_modulus'], v=mat_json['poisson_ratio'], p=p_scale * mat_json['density'])) # G_scale = parse_pressure_scale_conversion(mat_json['shear_modulus_unit']) # print('{}, {}'.format(mdl.materials['mat_' + mat_json['material_name']].G, G_scale * mat_json['shear_modulus'])) # assert_almost_equal(mdl.materials['mat_' + mat_json['material_name']].G['G'], G_scale * mat_json['shear_modulus']) # print('-----------material') # print(mdl.materials[mat_name]) # Sections # SI units should be used, this includes the use of metres m for cross-section dimensions, not millimetres mm. sec_name = 'sec_circ' mdl.add(CircularSection(name=sec_name, r=parse_circular_cross_sec_radius(json_data))) # print('-----------cross section') # print(mdl.sections[sec_name]) # Properties, associate material & cross sec w/ element sets mdl.add(Properties(name='ep_all', material=mat_name, section=sec_name, elset='elset_all')) # Displacements # pin supports for i, fix in enumerate(fixities): f_dof = [] for j in range(6): if fix[j+1] == 1: f_dof.append(0) else: f_dof.append(None) mdl.add(GeneralDisplacement(name='disp_fix_'+str(i), nodes=[fix[0]], x=f_dof[0], y=f_dof[1], z=f_dof[2], xx=f_dof[3], yy=f_dof[4], zz=f_dof[5])) # print('-----------fixities') # for i in range(len(fixities)): # print(mdl.displacements['disp_fix_'+str(i)]) # Loads if pt_loads: mdl.add([PointLoad(name='load_v_'+str(i), nodes=[pl[0]], x=pl[1], y=pl[2], z=pl[3], xx=pl[4], yy=pl[5], zz=pl[6]) for i, pl in enumerate(pt_loads)]) if include_sw: mdl.add(GravityLoad(name='load_gravity', elements='elset_all')) else: mdl.add(GravityLoad(name='load_gravity', elements='elset_all')) # print('-----------loads') # print(mdl.loads['load_gravity']) # for i in range(len(pt_loads)): # print(mdl.loads['load_v_'+str(i)]) # Steps loads_names = [] if pt_loads: loads_names.extend(['load_v_'+str(i) for i in range(len(pt_loads))]) if include_sw: loads_names.append('load_gravity') mdl.add([ GeneralStep(name='step_bc', displacements=['disp_fix_'+str(i) for i in range(len(fixities))]), GeneralStep(name='step_loads', loads=loads_names) ]) # a boundary condition step such as 'step_bc' above, should always be applied as the first step to prevent rigid body motion mdl.steps_order = ['step_bc', 'step_loads'] # Summary mdl.summary() # Run # node # 'u': nodal displacement: ux, uy, uz, um (magnitude) # 'ur': nodal rotation # 'rf': reaction force # 'cf': concentrated force (external load) # 'cm': concentrated moment (external load) # element # 's': beam stress (conmech cannot compute this at # version 0.1.1) # For beam, the following values are evaluated # at the "integration point" 'ip1' (middle point) # and pts along the axis: 'sp3, sp7, sp11, sp15' # sxx: axial # syy: hoop # sxy: torsion # smises: Von Mises # smaxp: max principal # sminp: min principal # 'sf': beam section force # sf1: axial # sf2: shear x # sf3: shear y if fea_engine == 'abaqus': mdl.analyse_and_extract(software='abaqus', fields=['u', 'ur', 'rf', 'rm', 'sf'], ndof=6, output=True) nD, fR, eR = parse_abaqus_result_json(file_name, temp_dir) elif fea_engine == 'opensees': mdl.analyse_and_extract(software='opensees', fields=['u'], exe=OPENSEES_PATH, ndof=6, output=True, save=True) raise NotImplementedError('opensees from compas_fea is not fully supported at this moment...') nD = {} fR = {} eR = {} # nD = mdl.get_nodal_results(step='step_load', field='ux', nodes='nset_all') print(mdl.results) else: raise NotImplementedError('FEA engine not supported!') return nD, fR, eR
# 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 mdl.add([ShellSection(name='sec_concrete', t=0.250), MassSection(name='sec_mass')]) # Properties mdl.add([Properties(name='ep_concrete', material='mat_concrete', section='sec_concrete', elset='elset_concrete'), Properties(name='ep_mass', section='sec_mass', elset='elset_mass')]) # Displacements mdl.add(PinnedDisplacement(name='disp_pinned', nodes='nset_pins')) # Steps mdl.add([ GeneralStep(name='step_bc', displacements=['disp_pinned']), ModalStep(name='step_modal', modes=5), ]) mdl.steps_order = ['step_bc', 'step_modal'] # Summary
# Materials mdl.add_materials([ Concrete(name='mat_concrete', fck=90), Steel(name='mat_steel', fy=355)]) # Sections mdl.add_sections([ ShellSection(name='sec_concrete', t=0.020), TrussSection(name='sec_ties', A=0.0004)]) # Properties mdl.add_element_properties([ Properties(name='ep_concrete', material='mat_concrete', section='sec_concrete', elsets='elset_concrete'), Properties(name='ep_steel', material='mat_steel', section='sec_ties', elsets='elset_ties')]) # Displacements mdl.add_displacements([ RollerDisplacementXY(name='disp_roller', nodes='nset_corners'), PinnedDisplacement(name='disp_pinned', nodes='nset_corner1'), GeneralDisplacement(name='disp_xdof', nodes='nset_corner2', x=0)]) # Loads mesh = mesh_from_guid(Mesh(), rs.ObjectsByLayer('load_mesh')[0]) mdl.add_loads([ GravityLoad(name='load_gravity', elements='elset_concrete'), PrestressLoad(name='load_prestress', elements='elset_ties', sxx=50*10**6),
Steel(name='mat_steel', fy=355), ]) # Sections mdl.add([ ShellSection(name='sec_mesh', t=0.004), TrussSection(name='sec_ties', A=0.25 * pi * 0.010**2), RectangularSection(name='sec_ends', b=0.030, h=0.030), ]) # Properties mdl.add([ Properties(name='ep_mesh', material='mat_concrete', section='sec_mesh', elset='elset_mesh'), Properties(name='ep_ties', material='mat_steel', section='sec_ties', elset='elset_ties'), Properties(name='ep_ends', material='mat_steel', section='sec_ends', elset='elset_ends'), ]) # Displacements mdl.add([ RollerDisplacementY(name='disp_top', nodes='nset_top'),
mdl.add([ SolidSection(name='sec_solid'), ShellSection(name='sec_membrane', t=0.002), RectangularSection(name='sec_rectangle', b=0.002, h=0.002), ]) # Properties rebar = { 'top': {'pos': +0.001, 'spacing': 0.010, 'material': 'mat_3', 'dia': 0.002, 'angle': 0}, 'bot': {'pos': -0.001, 'spacing': 0.010, 'material': 'mat_3', 'dia': 0.002, 'angle': 90}, } mdl.add([ Properties(name='ep_solid_4', material='mat_2', section='sec_solid', elset='elset_blocks_layer_4'), Properties(name='ep_solid_3', material='mat_1', section='sec_solid', elset='elset_blocks_layer_3'), Properties(name='ep_solid_2', material='mat_2', section='sec_solid', elset='elset_blocks_layer_2'), Properties(name='ep_solid_1', material='mat_1', section='sec_solid', elset='elset_blocks_layer_1'), Properties(name='ep_solid_0', material='mat_2', section='sec_solid', elset='elset_blocks_layer_0'), Properties(name='ep_beams', material='mat_3', section='sec_rectangle', elset='elset_beams'), Properties(name='ep_membrane', material='mat_2', section='sec_membrane', elset='elset_membranes', rebar=rebar), ]) # Displacements mdl.add([ PinnedDisplacement(name='disp_pinned', nodes='nset_bot'), RollerDisplacementY(name='disp_roller', nodes='nset_top'), GeneralDisplacement(name='disp_move', nodes='nset_top', y=0.010) ])
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)) # Sections mdl.add(ShellSection(name='sec_plate', t=0.020)) # Properties mdl.add( Properties(name='ep_plate', material='mat_elastic', section='sec_plate', elset='elset_mesh')) # Displacements mdl.add([ PinnedDisplacement(name='disp_left', nodes='nset_left'), RollerDisplacementX(name='disp_right', nodes='nset_right'), ]) # Loads mdl.add(PointLoad(name='load_point', nodes='nset_load', y=100, z=-300)) # Steps
blender.add_nsets_from_layers(mdl, layers=['nset_pins', 'nset_top']) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=200 * 10**9, v=0.3, p=7850)) # Sections mdl.add(TrussSection(name='sec_truss', A=0.0001)) # Properties mdl.add( Properties(name='ep_truss', material='mat_elastic', section='sec_truss', elset='elset_truss')) # Displacements mdl.add(PinnedDisplacement(name='disp_pinned', nodes='nset_pins')) # Loads mdl.add(PointLoad(name='load_top', nodes='nset_top', x=2000, y=1000, z=-100000)) # Steps mdl.add([ GeneralStep(name='step_bc', displacements='disp_pinned'),
# 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 mdl.add_section(PipeSection(name='sec_pipe', r=0.100, t=0.005)) # Properties ep = Properties(name='ep', material='mat_steel', section='sec_pipe', elsets='elset_lines') mdl.add_element_properties(ep) # Displacements mdl.add_displacements([ PinnedDisplacement(name='disp_pins', nodes='nset_pins'), RollerDisplacementXZ(name='disp_rollers', nodes='nset_rollers')]) # Loads mdl.add_loads([ PointLoad(name='load_h', nodes='nset_load_h', x=4000), PointLoad(name='load_v', nodes='nset_load_v', z=-6000), ])
fm = [i * 10000 for i in [5, 9, 12, 14, 16, 18, 19, 20, 21, 22]] em = [0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09] mdl.add_materials([ ElasticIsotropic(name='mat_bamboo', E=20 * 10**9, v=0.35, p=1100), ElasticPlastic(name='mat_mushroom', E=5 * 10**6, v=0.30, p=350, f=fm, e=em) ]) # Properties s1 = ['struts_mushroom', 'joints_mushroom'] s2 = ['struts_bamboo', 'joints_bamboo'] s3 = ['joints_grid'] mdl.add_element_properties([ Properties(name='ep_mushroom', material='mat_mushroom', section='sec_mushroom', elsets=s1), Properties(name='ep_bamboo', material='mat_bamboo', section='sec_bamboo', elsets=s2), Properties(name='ep_joints', material='mat_bamboo', section='sec_joints', elsets=s3) ]) # Displacements mdl.add_displacements([ PinnedDisplacement(name='disp_bot', nodes='supports_bot'),
Concrete(name='mat_concrete', fck=90), ]) # Sections mdl.add([ ShellSection(name='sec_plate', t=0.005), TrussSection(name='sec_tie', A=0.25 * 3.142 * 0.008**2), SolidSection(name='sec_solid'), ]) # Properties mdl.add([ Properties(name='ep_plate1', material='mat_steel', section='sec_plate', elset='elset_top_plate'), Properties(name='ep_plate2', material='mat_steel', section='sec_plate', elset='elset_bot_plate'), Properties(name='ep_ties', material='mat_steel', section='sec_tie', elset='elset_ties'), Properties(name='ep_concrete', material='mat_concrete', section='sec_solid', elset='elset_tets'), ])
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)) # Sections mdl.add(ShellSection(name='sec_shell', t=0.050)) # Properties mdl.add( Properties(name='ep_shell', material='mat_elastic', section='sec_shell', elset='mesh')) # Displacements mdl.add(PinnedDisplacement(name='disp_pin', nodes='supports')) # Loads mdl.add(GravityLoad(name='gravity', elements='all')) mdl.add(PointLoad(name='load_points', nodes='lpts1', x=0, y=0, z=-1000)) # Steps mdl.add([ GeneralStep(name='step_bc', displacements=['disp_pin']),
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 mdl.add(SolidSection(name='sec_solid')) # Properties mdl.add( Properties(name='ep_tets', material='mat_elastic', section='sec_solid', elset='elset_tets')) # Displacementss mdl.add(PinnedDisplacement(name='disp_pinned', nodes='nset_base')) # Loads mdl.add(PointLoad(name='load_top', nodes='nset_top', y=100, z=100)) # Steps mdl.add([ GeneralStep(name='step_bc', displacements=['disp_pinned']), GeneralStep(name='step_load', loads=['load_top']),
elset_shells = mdl.add_set('elset_shells', 'element', shells) # Materials mdl.add(Steel(name='mat_steel')) # Sections mdl.add(ShellSection(name='sec_shell', t=0.01)) # Properties mdl.add( Properties(name='ep_shell', material='mat_steel', section='sec_shell', elset='elset_shells')) # Displacements mdl.add(FixedDisplacement(name='disp_pins', nodes=[0, 2, 8, 6])) # Loads mdl.add(PointLoad(name='load_v', nodes=[4], z=-1000)) # Steps mdl.add( GeneralStep(name='step_bc_loads', displacements=['disp_pins'],
axes={'ex': [0, 0, 1]}) # Materials mdl.add(ElasticIsotropic(name='mat_elastic', E=20 * 10**9, v=0.3, p=1500)) # Sets mdl.add_set(name='load_pts', selection=[15, 14], type='node') # Section mdl.add(CircularSection(name='cirsec', r=.05)) mdl.add( Properties(name='ep', material='mat_elastic', section='cirsec', elset='elset_lines')) # Displacements boundary = network.leaves() mdl.add(PinnedDisplacement(name='disp', nodes=boundary)) # Loads mdl.add(PointLoad(name='load_weights', nodes='load_pts', z=-100)) # Steps mdl.add([ GeneralStep(name='step_bc', displacements=['disp']), GeneralStep(name='step_load', loads='load_weights'),
Steel(name='mat_steel', fy=355), ]) # Sections mdl.add([ ShellSection(name='sec_ribs', t=0.020), ShellSection(name='sec_vault', t=0.050), RectangularSection(name='sec_stiff', b=1, h=1), TrussSection(name='sec_ties', A=pi*0.25*0.030**2), ]) # Properties mdl.add([ Properties(name='ep_ribs', material='mat_concrete', section='sec_ribs', elset='elset_ribs'), Properties(name='ep_vault', material='mat_concrete', section='sec_vault', elset='elset_vault'), Properties(name='ep_stiff', material='mat_stiff', section='sec_stiff', elset='elset_stiff'), Properties(name='ep_ties', material='mat_steel', section='sec_ties', elset='elset_ties'), ]) # Displacements mdl.add([ RollerDisplacementXY(name='disp_edges', nodes='nset_edges'), PinnedDisplacement(name='disp_pinned', nodes='nset_corner1'), GeneralDisplacement(name='disp_xdof', nodes='nset_corner2', x=0), ]) # Loads