def S009_EC3(conn): # Report and results manager rp = reports.Report(conn) # Setting up parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.ShearTensionBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) beam_2 = steel.Profile(conn.profiles['ARRIVING'], rp) beam_1 = steel.Profile(conn.profiles['LANDING'], rp) end_plate = steel.BoltedPlate(conn.plates['END_PLATE'], rp) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = end_plate # Solving bolts if all([ bolt_group.check(sls_forces, uls_forces, rp), beam_1.check(rp), beam_2.check(rp), end_plate.check(bolt_group, uls_forces, rp), end_plate.check_collisions(bolt_group, beam_2, rp), end_plate.check_collisions(bolt_group, beam_1, rp), end_plate.check_t_stubs(bolt_group, uls_forces, beam_2, rp), end_plate.check_t_stubs(bolt_group, uls_forces, beam_1, rp), ]): rp.set_safe() else: rp.set_unsafe() return rp
def beams_setup(self): # Columns beam_2 = steel.Profile(self.conn.profiles['ARRIVING'], self.rp) beam_1 = steel.Profile(self.conn.profiles['LANDING'], self.rp) if beam_1.mat_db_profile.h > beam_2.mat_db_profile.h: biggest_beam = beam_1 else: biggest_beam = beam_2 # SOME BACKEND COMPROBATIONS ABOUT PROFILES if beam_1.profile_type != beam_2.profile_type: raise Exception("Bottom beam and top beam must be same type" ", prolly there is a frontend error") if beam_1.profile_type == "U" and\ beam_1.name != beam_2.name: width_diff = beam_1.mat_db_profile.b -\ beam_2.mat_db_profile.b if width_diff > 0: bf = beam_1.bolted_flange bf.e1_main = bf.e1_main - width_diff / 2 # web side bf.e1_other = bf.e1_other + width_diff / 2 # free side else: bf = beam_2.bolted_flange bf.e1_main = bf.e1_main + width_diff / 2 bf.e1_other = bf.e1_other - width_diff / 2 if bf.e1_main != bf_e1_other: bf.is_e1_sym = False self.beam_2 = beam_2 self.beam_1 = beam_1 self.biggest_beam = biggest_beam
def columns_setup(self): # Columns top_column = steel.Profile(self.conn.profiles['ARRIVING'], self.rp) bottom_column = steel.Profile(self.conn.profiles['LANDING'], self.rp) if bottom_column.mat_db_profile.h > top_column.mat_db_profile.h: biggest_column = bottom_column else: biggest_column = top_column # SOME BACKEND COMPROBATIONS ABOUT PROFILES if bottom_column.profile_type != top_column.profile_type: raise Exception("Bottom column and top column must be same type" ", prolly there is a frontend error") if bottom_column.profile_type == "U" and\ bottom_column.name != top_column.name: width_diff = bottom_column.mat_db_profile.b -\ top_column.mat_db_profile.b if width_diff > 0: bf = bottom_column.bolted_flange bf.e1_main = bf.e1_main - width_diff / 2 # web side bf.e1_other = bf.e1_other + width_diff / 2 # free side else: bf = top_column.bolted_flange bf.e1_main = bf.e1_main + width_diff / 2 bf.e1_other = bf.e1_other - width_diff / 2 if bf.e1_main != bf_e1_other: bf.is_e1_sym = False self.top_column = top_column self.bottom_column = bottom_column self.biggest_column = biggest_column
def S099_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_group = bolts.ShearTensionBoltArray( parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) beam_profile = steel.Profile(parts['beam_profile'], rp) column_profile = steel.Profile(parts['column_profile'], rp) end_plate = steel.BoltedPlate(parts['end_plate'], rp) position = steel.SectionPosition(parts['main_position'], rp) position.profile = beam_profile position.bolt_array = bolt_group # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = end_plate # Solving bolts if all([bolt_group.check(sls_forces, uls_forces, rp), beam_profile.check(rp), column_profile.check(rp), end_plate.check(bolt_group, uls_forces, rp), end_plate.check_collisions_legacy(bolt_group, beam_profile, position, rp), end_plate.check_t_stubs_legacy( bolt_group, uls_forces, beam_profile, position, rp)]): rp.set_safe() else: rp.set_unsafe() return rp
def S002_EC3(conn): # Report and results manager rp = reports.Report(conn) # Setting up parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.ShearBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) # Rotated forces to check plates and bolts rot_sls = sls_forces.rot90(2, 1, "SIDE_SLS", rp) rot_uls = uls_forces.rot90(2, 1, "SIDE_ULS", rp) bracing_profile = steel.Profile(conn.profiles['ARRIVING'], rp) landing_profile = steel.Profile(conn.profiles['LANDING'], rp) cover_plates = steel.BoltedPlate(conn.plates['COVER_PLATE'], rp) in_pipe_plate = steel.WeldedBoltedPlate(conn.plates['INPIPE_PLATE'], rp) in_pipe_plate.locked_edges = ['e1_main'] pipe_stiffener = steel.WeldedPlate(conn.plates['PIPE_STIFFENER'], rp) # Solving bolts if all([bolt_group.check(rot_sls, rot_uls, rp), bracing_profile.check(rp), landing_profile.check(rp), cover_plates.check(bolt_group, rot_uls, rp), in_pipe_plate.check(bolt_group, rot_uls, rp), pipe_stiffener.check(rot_uls, rp)]): rp.set_safe() else: rp.set_unsafe() return rp
def S003_EC3(conn): # Report and results manager rp = reports.Report(conn) # Setting up parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.ShearBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) # Rotated forces to check plates and bolts rot_sls = sls_forces.rot90(2, 1, "SIDE_SLS", rp) rot_uls = uls_forces.rot90(2, 1, "SIDE_ULS", rp) bracing_profile = steel.Profile(conn.profiles['ARRIVING'], rp) landing_profile = steel.Profile(conn.profiles['LANDING'], rp) gusset_plate = steel.BoltedPlate(conn.plates['GUSSET_PLATE'], rp) gusset_plate.locked_edges = ['e1_main'] bracing_profile.bolt_the_web(bolt_group, gusset_plate, rp) if all([ bolt_group.check(rot_sls, rot_uls, rp), bracing_profile.check(rp), landing_profile.check(rp), bracing_profile.bolted_web.check(rot_uls, rp), gusset_plate.check(bolt_group, rot_uls, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def S005_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_array = bolts.ShearTensionBoltArray(parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) # Now, computing the resultant forces beam_profile = steel.Profile(parts['beam_profile'], rp) landing_profile = steel.Profile(parts['landing_profile'], rp) end_plate = steel.BoltedPlate(parts['end_plate'], rp) position = steel.SectionPosition(parts['main_position'], rp) position.profile = beam_profile position.bolt_array = bolt_array # set the conected plate so the snug front plate solver can work bolt_array.connected_plate = end_plate # If frontplate connected to U Beam Web: if parts['main_extra_data'].U_beam_position in ['ANY', 'WEB']\ and parts['landing_profile'].profile_type == "U"\ and not parts['main_extra_data'].dont_check_U_web: U_bolted_web = steel.BoltedWeb(landing_profile, bolt_array, parts['end_plate'], rp) U_bolted_web_checked = U_bolted_web.check(uls_forces, rp) else: U_bolted_web_checked = True # Not needed OBVIAMENTE if all([ U_bolted_web_checked, bolt_array.check(sls_forces, uls_forces, rp), beam_profile.check(rp), landing_profile.check(rp), end_plate.check(bolt_array, uls_forces, rp), end_plate.check_collisions_legacy(bolt_array, beam_profile, position, rp), end_plate.check_t_stubs_legacy(bolt_array, uls_forces, beam_profile, position, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def P003_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_group = bolts.ShearBoltArray(parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) profile = steel.Profile(parts['main_profile'], rp) position = steel.SectionPosition(parts['main_position'], rp) position.profile = profile position.bolt_array = bolt_group plate = steel.BoltedPlate(parts['end_plate'], rp) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = plate # Solving bolts if bolt_group.check(sls_forces, uls_forces, rp) and\ plate.check(bolt_group, uls_forces, rp) and\ plate.check_collisions_legacy(bolt_group, profile, position, rp): rp.set_safe() else: rp.set_unsafe() return rp
def S009_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_array = bolts.ShearTensionBoltArray(parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) beam_1 = steel.Profile(parts['beam_1_profile'], rp) beam_2 = steel.Profile(parts['beam_2_profile'], rp) end_plate = steel.BoltedPlate(parts['end_plate'], rp) side_gap = parts['main_extra_data'].side_gap # g1 = plate.h / 2 - beam.h / 2 - side_gap beam1_g1 = end_plate.length.magnitude / 2 - \ beam_1.mat_db_profile.h / 2 - side_gap position1 = steel.SectionPosition.from_g1(beam1_g1, rp) position1.profile = beam_1 position1.bolt_array = bolt_array beam2_g1 = end_plate.length.magnitude / 2 - \ beam_2.mat_db_profile.h / 2 - side_gap position2 = steel.SectionPosition.from_g1(beam2_g1, rp) position2.profile = beam_2 position2.bolt_array = bolt_array # set the conected plate so the snug front plate solver can work bolt_array.connected_plate = end_plate if all([ bolt_array.check(sls_forces, uls_forces, rp), end_plate.check(bolt_array, uls_forces, rp), end_plate.check_collisions_legacy(bolt_array, beam_1, position1, rp), end_plate.check_collisions_legacy(bolt_array, beam_2, position2, rp), end_plate.check_t_stubs_legacy(bolt_array, uls_forces, beam_1, position1, rp), end_plate.check_t_stubs_legacy(bolt_array, uls_forces, beam_2, position2, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def S003_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_group = bolts.ShearBoltArray(parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) # Rotated forces to check plates and bolts rot_sls = sls_forces.rot90(2, 1, "SIDE_SLS", rp) rot_uls = uls_forces.rot90(2, 1, "SIDE_ULS", rp) bracing_profile = steel.Profile(parts['bracing_profile'], rp) landing_profile = steel.Profile(parts['landing_profile'], rp) gusset_plate = steel.BoltedPlate(parts['gusset_plate'], rp) bracing_profile.bolt_the_web(bolt_group, gusset_plate, rp) # e_dict needed to be passed to the web block tearing function. # e_dict = { # "e1_main": gusset_plate.e1_main, # "e2_main": gusset_plate.e2_main, # "e1_other": gusset_plate.e1_other, # "e2_other": gusset_plate.e1_other, # } # in_pipe_plate = steel.WeldedBoltedPlate(parts['in_pipe_plate'], # rp, e_dict=e_dict) # Solving bolts if all([ bolt_group.check(rot_sls, rot_uls, rp), # bracing_profile.check(rp), landing_profile.check(rp), bracing_profile.bolted_web.check(rot_uls, rp), gusset_plate.check(bolt_group, rot_uls, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def S002_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_group = bolts.ShearBoltArray(parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) # Rotated forces to check plates and bolts rot_sls = sls_forces.rot90(2, 1, "SIDE_SLS", rp) rot_uls = uls_forces.rot90(2, 1, "SIDE_ULS", rp) bracing_profile = steel.Profile(parts['bracing_profile'], rp) landing_profile = steel.Profile(parts['landing_profile'], rp) cover_plates = steel.BoltedPlate(parts['cover_plate'], rp) e_dict = { "e1_main": cover_plates.e1_main, "e2_main": cover_plates.e2_main, "e1_other": cover_plates.e1_other, "e2_other": cover_plates.e1_other, } in_pipe_plate = steel.WeldedBoltedPlate(parts['inpipe_plate'], rp, e_dict=e_dict) pipe_stiff = steel.WeldedPlate(parts['stiffener_plate'], rp) # Solving bolts if all([ bolt_group.check(rot_sls, rot_uls, rp), bracing_profile.check(rp), landing_profile.check(rp), cover_plates.check(bolt_group, rot_uls, rp), in_pipe_plate.check(bolt_group, rot_uls, rp), pipe_stiff.check(rot_uls, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def S005_EC3(conn): # Report and results manager rp = reports.Report(conn) # Setting up parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.ShearTensionBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) beam_profile = steel.Profile(conn.profiles['ARRIVING'], rp) landing_profile = steel.Profile(conn.profiles['LANDING'], rp) end_plate = steel.BoltedPlate(conn.plates['END_PLATE'], rp) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = end_plate # If frontplate connected to U Beam Web: if conn.profiles['LANDING']['section_orientation'] in ['ANY', 'WEB']\ and conn.profiles['LANDING']['profile_type'] == "U"\ and not landing_profile.mat_db_profile.is_any_reference: U_bolted_web = steel.BoltedWeb(landing_profile, bolt_group, conn.plates['END_PLATE'], rp) U_bolted_web_checked = U_bolted_web.check(uls_forces, rp) else: U_bolted_web_checked = True # Not needed OBVIAMENTE if all([ U_bolted_web_checked, bolt_group.check(sls_forces, uls_forces, rp), beam_profile.check(rp), landing_profile.check(rp), end_plate.check(bolt_group, uls_forces, rp), end_plate.check_collisions(bolt_group, beam_profile, rp), end_plate.check_t_stubs(bolt_group, uls_forces, beam_profile, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def S004_EC3(conn): # Report and results manager rp = reports.Report(conn) # Setting up parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.ShearTensionBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) bracs_forces = loads.ExtraBracingForces( conn.extra_data['arriving_bracings'], rp) # Now, computing the resultant forces sls_forces = bracs_forces.sum_to_this_sls(sls_forces, rp) uls_forces = bracs_forces.sum_to_this_uls(uls_forces, rp) beam_profile = steel.Profile(conn.profiles['ARRIVING'], rp) column_profile = steel.Profile(conn.profiles['LANDING'], rp) end_plate = steel.BoltedPlate(conn.plates['END_PLATE'], rp) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = end_plate # Solving bolts if all([ bolt_group.check(sls_forces, uls_forces, rp), beam_profile.check(rp), column_profile.check(rp), end_plate.check(bolt_group, uls_forces, rp), end_plate.check_collisions(bolt_group, beam_profile, rp), end_plate.check_t_stubs(bolt_group, uls_forces, beam_profile, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def S007_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts bolt = bolts.EuroBolt(parts['main_bolt'], rp) bolt_array = bolts.ShearTensionBoltArray(parts['main_bolt_array'], bolt, rp) sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) bottom_column = steel.Profile(parts['bottom_column_profile'], rp) top_column = steel.Profile(parts['top_column_profile'], rp) end_plate = steel.BoltedPlate(parts['end_plate'], rp) position = steel.SectionPosition(parts['main_position'], rp) position.profile = top_column position.bolt_array = bolt_array zero_position = steel.SectionPosition.centered() # set the conected plate so the snug front plate solver can work bolt_array.connected_plate = end_plate if all([ bolt_array.check(sls_forces, uls_forces, rp), # bottom_column.check(rp), top_column.check(rp), # NOT NEEDED end_plate.check(bolt_array, uls_forces, rp), end_plate.check_collisions_legacy(bolt_array, top_column, position, rp), end_plate.check_collisions_legacy(bolt_array, bottom_column, zero_position, rp), end_plate.check_t_stubs_legacy(bolt_array, uls_forces, bottom_column, position, rp) ]): rp.set_safe() else: rp.set_unsafe() return rp
def P004_EC3(conn): # Report and results manager rp = reports.Report(conn) # Setting up parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.TensionBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) profile = steel.Profile(conn.profiles['MAIN'], rp) plate = steel.BoltedPlate(conn.plates['END_PLATE'], rp) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = plate # Solving bolts if bolt_group.check(sls_forces, uls_forces, rp) and\ plate.check(bolt_group, uls_forces, rp) and\ plate.check_collisions(bolt_group, profile, rp) and\ plate.check_t_stubs(bolt_group, uls_forces, profile, rp): rp.set_safe() else: rp.set_unsafe() return rp
def S006_EC3(conn): """ Main S006_EC3 Solver """ # Report and results manager rp = reports.Report(conn) # LOS BOLTS DEL ALMA DEL LANDING PROFILE EN EL CASO DE CLIP SE SUPONEN =s # HAY QUE PENSAR QUE SE HACE. SE CALCULA TAMBIEN??? F**K! # Setting up common parts bolt = bolts.EuroBolt(conn.bolts['MAIN'], rp) bolt_group = bolts.ShearTensionBoltArray(conn.bolt_arrays['MAIN'], bolt, rp) sls_forces = loads.ForcesSet(conn.forces['SLS'], rp) uls_forces = loads.ForcesSet(conn.forces['ULS'], rp) beam_profile = steel.Profile(conn.profiles['ARRIVING'], rp) landing_profile = steel.Profile(conn.profiles['LANDING'], rp) # -LA- OBJECTS: # - Beam web * +rp # - Lateral bolts * +rp # - Lateral forces * # - Clip Angle * +rp # - Frontal bolts * +rp # - Frontal forces * # - Landing web * +rp if conn.extra_data['angles'] is "LA": bolted_web = steel.BoltedWeb(beam_profile, bolt_group, conn.plates['DUMMY_PLATE'], rp) bolted_angle = steel.BoltedClipAngle(conn.profiles['CLIP_ANGLE'], conn.plates['DUMMY_PLATE'], rp) # FORCES lat_uls_forces = uls_forces.rot90(2, 3, "SIDE_ULS", None) lat_sls_forces = sls_forces.rot90(2, 3, "SIDE_SLS", None) ec1 = bolted_angle.dist_bolts_to_plate(bolt_group) ec2 = Q(D(0), 'mm') # ec3 = - ec1 asumes a simmetrical boltedclipangle... # let's see what happens with time but this is a f*****g problem ec3 = -ec1 front_uls_forces = uls_forces.from_eccentricity( ec1, ec2, ec3, "FRONT_ULS", None) front_sls_forces = sls_forces.from_eccentricity( ec1, ec2, ec3, "FRONT_SLS", None) # BOLT ARRAYS (SAME BOLT ARRAY TO BE CHECKED WITH BOTH FORCES) # WHY? BECAUSE L ANGLE PROFILE IS SUPOSED SYMMETRICAL !!!! bolt_group.connected_plate = bolted_angle lat_bolt_group = bolt_group front_bolt_group = bolt_group front_bolted_web = steel.BoltedWeb(landing_profile, bolt_group, conn.plates['DUMMY_PLATE'], rp) if all([ bolted_web.check(lat_uls_forces, rp), lat_bolt_group.check(lat_sls_forces, lat_uls_forces, rp), bolted_angle.check(bolt_group, front_uls_forces, rp), front_bolt_group.check(front_sls_forces, front_uls_forces, rp), front_bolted_web.check(front_uls_forces, rp), ]): rp.set_safe() else: rp.set_unsafe() # -RA- OBJECTS: # - Beam web * +rp # - Lateral bolts * +rp # - Lateral forces * # - Clip Angle * +rp # - Frontal bolts * +rp # - Frontal forces * # - Landing web * +rp if conn.extra_data['angles'] is "RA": bolted_web = steel.BoltedWeb(beam_profile, bolt_group, conn.plates['DUMMY_PLATE'], rp) bolted_angle = steel.BoltedClipAngle(conn.profiles['CLIP_ANGLE'], conn.plates['DUMMY_PLATE'], rp) # FORCES lat_uls_forces = uls_forces.rot90(2, 1, "SIDE_ULS", None) lat_sls_forces = sls_forces.rot90(2, 1, "SIDE_SLS", None) ec1 = bolted_angle.dist_bolts_to_plate(bolt_group) ec2 = Q(D(0), 'mm') # ec3 = ec1 asumes a simmetrical boltedclipangle... # let's see what happens with time but this is a f*****g problem ec3 = ec1 front_uls_forces = uls_forces.from_eccentricity( ec1, ec2, ec3, "FRONT_ULS", None) front_sls_forces = sls_forces.from_eccentricity( ec1, ec2, ec3, "FRONT_SLS", None) # BOLT ARRAYS (SAME BOLT ARRAY TO BE CHECKED WITH BOTH FORCES) # WHY? BECAUSE L ANGLE PROFILE IS SUPOSED SYMMETRICAL !!!! bolt_group.connected_plate = bolted_angle lat_bolt_group = bolt_group front_bolt_group = bolt_group front_bolted_web = steel.BoltedWeb(landing_profile, bolt_group, conn.plates['DUMMY_PLATE'], rp) if all([ bolted_web.check(lat_uls_forces, rp), lat_bolt_group.check(lat_sls_forces, lat_uls_forces, rp), bolted_angle.check(bolt_group, front_uls_forces, rp), front_bolt_group.check(front_sls_forces, front_uls_forces, rp), front_bolted_web.check(front_uls_forces, rp), ]): rp.set_safe() else: rp.set_unsafe() # -BA- OBJECTS: # - Beam web +rp * # - Lateral bolts +rp * # - Lateral forces * # - Clip Angle Pair +rp * # - Frontal bolts +rp * # - Frontal forces * # - Landing web +rp * if conn.extra_data['angles'] is "BA": bolted_web = steel.BoltedWeb(beam_profile, bolt_group, conn.plates['DUMMY_PLATE'], rp) bolted_angle_pair = steel.BoltedClipAnglePair( conn.profiles['CLIP_ANGLE'], conn.plates['DUMMY_PLATE'], rp) # FORCES lat_uls_forces = uls_forces.rot90(2, 3, "SIDE_ULS", None)\ .from_factor(D(0.5), "SIDE_ULS", None) lat_uls_forces.P = Q(D(0), "kN") lat_sls_forces = sls_forces.rot90(2, 3, "SIDE_SLS", None)\ .from_factor(D(0.5), "SIDE_ULS", None) lat_sls_forces.P = Q(D(0), "kN") ec1 = bolted_angle_pair.dist_bolts_to_plate(bolt_group) ec2 = Q(D(0), 'mm') # ec3 = - ec1 asumes a simmetrical boltedclipangle... # let's see what happens with time but this is a f*****g problem ec3 = Q(D(0), 'mm') front_uls_forces = uls_forces.from_eccentricity( ec1, ec2, ec3, "FRONT_ULS", None)\ .from_factor(D(0.5), "FRONT_ULS", None) front_sls_forces = sls_forces.from_eccentricity( ec1, ec2, ec3, "FRONT_SLS", None)\ .from_factor(D(0.5), "FRONT_ULS", None) # Ojo aquí, habría que quitar el .form_factor(0.5) y crear una chapa # frontplate con el doble de ancho y tal. ancho de la L mas alma de # la beam. Sería lo apropiado. Y calcular así otros bolts también # creados así. Y la bolted web lo mismo. Más que nada por posibles # comprobaciones a las que les afecte esta interaccion entre tornillos # o simplemente simplificar? # DE MOMENTO SIMPLIFICAR !!! JAJAJA MUAJAJAJA !! bolt_group.connected_plate = bolted_angle_pair lat_bolt_group = bolt_group front_bolt_group = bolt_group front_bolted_web = steel.BoltedWeb( landing_profile, bolt_group, conn.plates['DUMMY_PLATE'], # <- OJO ESTO PUEDE SER UN BUG !!!!!!! rp) if all([ bolted_web.check(lat_uls_forces, rp), lat_bolt_group.check(lat_sls_forces, lat_uls_forces, rp), bolted_angle_pair.check(bolt_group, front_uls_forces, rp), front_bolt_group.check(front_sls_forces, front_uls_forces, rp), front_bolted_web.check(front_uls_forces, rp), ]): rp.set_safe() else: rp.set_unsafe() # -LS- OBJECTS: # - Beam web +rp * # - Lateral bolts +rp * # - Lateral forces * # - Bolted Stiffener +rp * if conn.extra_data['angles'] is "LS": bolted_web = steel.BoltedWeb(beam_profile, bolt_group, conn.plates['BOLTED_STIFFENER'], rp) stiffener = stiffeners.BoltedStiffener(conn.plates['BOLTED_STIFFENER'], landing_profile, bolt_group, rp) # FORCES lat_uls_forces = uls_forces.rot90(2, 3, "SIDE_ULS", None) lat_sls_forces = sls_forces.rot90(2, 3, "SIDE_SLS", None) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = stiffener lat_bolt_group = bolt_group if all([ bolted_web.check(lat_uls_forces, rp), lat_bolt_group.check(lat_sls_forces, lat_uls_forces, rp), stiffener.check(bolt_group, lat_uls_forces, rp), ]): rp.set_safe() else: rp.set_unsafe() # -RS- OBJECTS: # - Beam web +rp # - Lateral bolts +rp # - Lateral forces # - Bolted Stiffener +rp if conn.extra_data['angles'] is "RS": bolted_web = steel.BoltedWeb(beam_profile, bolt_group, conn.plates['BOLTED_STIFFENER'], rp) stiffener = stiffeners.BoltedStiffener(conn.plates['BOLTED_STIFFENER'], landing_profile, bolt_group, rp) # FORCES lat_uls_forces = uls_forces.rot90(2, 1, "SIDE_ULS", None) lat_sls_forces = sls_forces.rot90(2, 1, "SIDE_SLS", None) # set the conected plate so the snug front plate solver can work bolt_group.connected_plate = stiffener lat_bolt_group = bolt_group if all([ bolted_web.check(lat_uls_forces, rp), lat_bolt_group.check(lat_sls_forces, lat_uls_forces, rp), stiffener.check(bolt_group, lat_uls_forces, rp), ]): rp.set_safe() else: rp.set_unsafe() # Finally, we always return a report from a solver return rp
def S010_EC3(parts): # Report and results manager rp = reports.Report(parts['calc']) # Setting up parts flange_bolt = bolts.EuroBolt(parts['flange_bolt'], rp) flange_bolt_array = bolts.ShearBoltArray(parts['flange_bolt_array'], flange_bolt, rp) web_bolt = bolts.EuroBolt(parts['web_bolt'], rp) web_bolt_array = bolts.ShearBoltArray(parts['web_bolt_array'], web_bolt, rp) flange_cover_plate = steel.BoltedPlate(parts['flange_cover_plate'], rp) web_cover_plate = steel.BoltedPlate(parts['web_cover_plate'], rp) bottom_column = steel.Profile(parts['bottom_column_profile'], rp) top_column = steel.Profile(parts['top_column_profile'], rp) if bottom_column.mat_db_profile.h > top_column.mat_db_profile.h: biggest_column = bottom_column else: biggest_column = top_column # SOME BACKEND COMPROBATIONS ABOUT PROFILES if bottom_column.profile_type != top_column.profile_type: raise Exception("Bottom column and top column must be same type" ", prolly there is a frontend error") bottom_column.bolt_the_flange(flange_bolt_array, flange_cover_plate, rp) bottom_column.bolt_the_web(web_bolt_array, web_cover_plate, rp) top_column.bolt_the_flange(flange_bolt_array, flange_cover_plate, rp) top_column.bolt_the_web(web_bolt_array, web_cover_plate, rp) if bottom_column.profile_type == "U" and\ bottom_column.name != top_column.name: width_diff = bottom_column.mat_db_profile.b -\ top_column.mat_db_profile.b if width_diff > 0: bf = bottom_column.bolted_flange bf.e1_main = bf.e1_main - width_diff / 2 # web side bf.e1_other = bf.e1_other + width_diff / 2 # free side else: bf = top_column.bolted_flange bf.e1_main = bf.e1_main + width_diff / 2 bf.e1_other = bf.e1_other - width_diff / 2 if bf.e1_main != bf_e1_other: bf.is_e1_sym = False sls_forces = loads.ForcesSet(parts['sls_force'], rp) uls_forces = loads.ForcesSet(parts['uls_force'], rp) # Generating positioned forces. Needed 4 checkn' that cover plates. joint_gap = Q(parts['main_extra_data'].joint_gap, 'mm') zero = Q(D(0), 'mm') flange_ecc = flange_bolt_array.p2_sum() / 2 +\ flange_cover_plate.e2_other + joint_gap web_ecc = web_bolt_array.p2_sum() / 2 +\ web_cover_plate.e2_other + joint_gap flange_sls, web_sls = sls_forces.from_eccentricity( -flange_ecc, zero, zero, None, None).get_flange_and_web_tuple(biggest_column, rp) flange_uls, web_uls = uls_forces.from_eccentricity( -web_ecc, zero, zero, None, None).get_flange_and_web_tuple(biggest_column, rp) # # set the conected plate so the snug front plate solver can work flange_bolt_array.connected_plate = flange_cover_plate web_bolt_array.connected_plate = web_cover_plate # Solving flange_ok = flange_bolt_array.check(flange_sls, flange_uls, rp) &\ flange_cover_plate.check(flange_bolt_array, flange_uls, rp) web_ok = web_bolt_array.check(web_sls, web_uls, rp) &\ web_cover_plate.check(web_bolt_array, web_uls, rp) if bottom_column.name == top_column.name: # Then we dont need to check both columns columns_ok =\ bottom_column.bolted_flange.check(flange_uls, rp) &\ bottom_column.bolted_web.check(web_uls, rp) else: columns_ok =\ bottom_column.bolted_flange.check(flange_uls, rp) &\ bottom_column.bolted_web.check(web_uls, rp) &\ top_column.bolted_flange.check(flange_uls, rp) &\ top_column.bolted_web.check(web_uls, rp) # Return report print(flange_ok, web_ok, columns_ok) if all([flange_ok, web_ok, columns_ok]): rp.set_safe() else: rp.set_unsafe() return rp