summaryrefslogtreecommitdiff
path: root/Connections/Shear/Finplate/finPlateCalc.py
diff options
context:
space:
mode:
Diffstat (limited to 'Connections/Shear/Finplate/finPlateCalc.py')
-rw-r--r--Connections/Shear/Finplate/finPlateCalc.py240
1 files changed, 240 insertions, 0 deletions
diff --git a/Connections/Shear/Finplate/finPlateCalc.py b/Connections/Shear/Finplate/finPlateCalc.py
new file mode 100644
index 0000000..7a8acc9
--- /dev/null
+++ b/Connections/Shear/Finplate/finPlateCalc.py
@@ -0,0 +1,240 @@
+'''
+Created on 07-Aug-2014
+
+@author: subhrajit
+'''
+
+import math
+from model import *
+from PyQt4.Qt import QString
+import logging
+flag = 1
+logger = None
+
+def module_setup():
+
+ global logger
+ logger = logging.getLogger("osdag.finPlateCalc")
+
+module_setup()
+
+def finConn(uiObj):
+ global flag
+ global logger
+ '''(Dictionary) --> Dictionary
+ '''
+
+ beam_sec = uiObj['Member']['beamSection']
+ column_sec = uiObj['Member']['columSection']
+ connectivity = uiObj['Member']['connectivity']
+ f_u = uiObj['Member']['fu(MPa)']
+ f_y = uiObj['Member']['fy(MPa)']
+
+ F = uiObj['Load']['shearForce(kN)']
+
+ bolt_dia = uiObj['Bolt']['diameter(mm)']
+ bolt_type = uiObj["Bolt"]["type"]
+ bolt_grade = uiObj['Bolt']['grade']
+
+ plate_thk = uiObj['Plate']['thickness(mm)']
+ plate_width = uiObj['Plate']['width(mm)']
+ plate_len = uiObj['Plate']['height(mm)']
+
+ weld_thk = uiObj["Weld"]['size(mm)']
+ FOS_u = 1.25
+ FOS_n = 1.1
+ k_b = 0.5
+ dictbeamdata = get_beamdata(beam_sec)
+ print dictbeamdata
+ t_wb = float(dictbeamdata[QString("tw")])
+ d_web_b = float(dictbeamdata[QString("D")])
+ mu_f = 0.55
+
+ #------- tw of beamt_wb = 8.9 # Thickness of web of the connected member ISMB 400
+ #-----D of beam d_web_b = 380 #column Clear depth of web of the connected member ISMB 400
+ no_row_b = 3
+ no_col_b = 1
+#------------------------------------------------------------------------------
+ #---------------------------------------------------------- # Fin plate data
+ #------------------------------------------------------------ plate_thk = 10
+ #--------------------------------------------------------- plate_width = 100
+ #----------------------------------------------------------- plate_len = 300
+#------------------------------------------------------------------------------
+ #------------------------------------------------------------------- F = 140
+ # your calculations
+ '''
+ Design of bolts
+ '''
+ logger.info("Starting Design Calculations ")
+ # Shearing capacity of bolt
+ V_dsb = (0.78*math.pi*bolt_dia**2/4 * math.floor(float(bolt_grade))*100)/(math.sqrt(3)*1000*FOS_u)
+ V_dsb = round(V_dsb,3)
+
+
+ # Bearing capacity of bolt
+ V_dpb = 2.5*k_b*bolt_dia*t_wb*f_u/(FOS_u*1000)
+ V_dpb = round(V_dpb,3)
+ if V_dsb > V_dpb:
+ V_db = V_dpb
+ else:
+ V_db = V_dsb
+
+ #number of bolts
+ no_b = math.ceil(F/V_db)
+ if no_b <= 2:
+ no_b = 3
+
+ # Hole diameter
+ if bolt_dia == 12 or bolt_dia == 14:
+ dia_h = bolt_dia + 1
+ elif bolt_dia == 16 or bolt_dia == 18 or bolt_dia == 20 or bolt_dia == 22 or bolt_dia == 24:
+ dia_h = bolt_dia + 2
+ else:
+ dia_h = bolt_dia + 3
+
+ # End and edge distance
+ d_edge = 2 * dia_h
+ d_end = 2 * dia_h
+ if d_edge < 50 or d_end < 50:
+ d_edge = 50
+ d_end = 50
+ else:
+ d_edge = math.ceil(d_edge)
+ d_end = math.ceil(d_end)
+
+ # Web side plate length and width input
+ if plate_len == 0:
+ plate_len = d_web_b - 60
+ elif plate_len > d_web_b - 60:
+ logger.error("The length of the plate is more than the available depth of %2.2f mm " % (plate_len))
+ print('Re-enter Length')
+ plate_width_min = 2*d_end
+ if plate_width == 0:
+ plate_width_min = 2*d_end
+ if plate_width < plate_width_min:
+ logger.error(" Plate width is less than the minimum width required of %2.2f mm " % (plate_width_min))
+ #print('Re-enter Width')
+ #.......................................................................
+
+ plate_len_b = plate_len - 2*d_edge # Length available for bolt group
+ pitch_min = 1.5*bolt_dia
+ pitch = plate_len_b/(no_b-1)
+ pitch = round(pitch,3)
+ if no_col_b == 1:
+ gauge = 0
+ else:
+ gauge = 50
+
+ # Deciding on arrangement of bolts
+ no_b_oneline = (plate_len_b//pitch_min) + 1
+
+
+
+ if pitch < pitch_min:
+ logger.warning("Pitch distance is less than the minimum required")
+ #print('Pitch distance is insufficient')
+
+
+
+
+ #.......................................................................
+ '''
+ Web side plate design
+ '''
+
+ #if plate_len > d_web_b:
+ #print('Reselect the length of plate less than depth of the connected web')
+
+ thk_min = round((5*F*1000)/(f_y*plate_len),3)
+
+ if thk_min > plate_thk:
+ logger.error("The selected thickness of finplate is less than the minimun required")
+ flag = 0
+ #print('Thickness of fin plate is insufficient')
+
+ #d_clear = 20
+ x = int(no_b//2)
+ M_ext = 0
+ for i in range(1,x+1):
+ if no_b%2 == 1:
+ M_ext += 2*(i*(pitch**2)/pitch)*V_dsb
+ elif no_b%2 == 0:
+ M_ext = i*((pitch/2)**2)/(pitch/2)*V_dsb
+ M_ext = round(M_ext/1000,3)
+ #print(M_ext)
+
+ M_cap = 1.2*(f_y/FOS_n)*(plate_thk*plate_len**2)/(6*1000)
+ M_cap = round(M_cap/(1000),3)
+ #print(M_cap)
+
+ if M_cap < M_ext:
+
+ logger.error("The flexural moment capacity of the finplate is less than the external moment")
+ flag = 0
+ #print('The plate design is OK')
+ #flag = False
+
+ '''
+ Weld Design
+ '''
+ # Resultant shear on weld
+ l_eff_w = plate_len - 2*weld_thk
+ #print(l_eff_w)
+ H_sh = (M_ext*6000)/(2*(l_eff_w**2))
+ #print(H_sh)
+ V_sh = F/float(2*l_eff_w)
+ #print(V_sh)
+ R_sh = math.sqrt(H_sh**2 + V_sh**2)
+ R_sh = round(R_sh,3)
+ #print(R_sh)
+
+ t_w_ductility = 0.6 * plate_thk / 0.7
+ #print(t_w_ductility)
+
+ if weld_thk < t_w_ductility:
+ thk_weld = int(t_w_ductility)
+ else:
+ thk_weld = weld_thk
+
+ #print(weld_thk)
+
+ # Weld strength
+ f_wd = f_u/float(math.sqrt(3)*FOS_u)
+ #print(f_wd)
+ R_nw = f_wd*0.7*weld_thk/1000
+ R_nw = round(R_nw,3)
+ # End of calculation
+
+ outputObj = {}
+ outputObj['Bolt'] ={}
+ outputObj['Bolt']['shearcapacity'] = V_dsb
+ outputObj['Bolt']['bearingcapacity'] = V_dpb
+ outputObj['Bolt']['boltcapacity'] = V_db
+ outputObj['Bolt']['numofbolts'] = no_b
+ outputObj['Bolt']['boltgrpcapacity'] = 0.0
+ outputObj['Bolt']['numofrow'] = no_row_b
+ outputObj['Bolt']['numofcol'] = no_col_b
+ outputObj['Bolt']['pitch'] = pitch
+
+ outputObj['Bolt']['enddist'] = d_end
+
+ outputObj['Bolt']['edge'] = d_edge
+ outputObj['Bolt']['gauge'] = gauge
+
+ outputObj['Weld'] = {}
+ outputObj['Weld']['thickness'] = thk_weld
+ outputObj['Weld']['resultantshear'] = R_sh
+ outputObj['Weld']['weldstrength'] = R_nw
+
+ outputObj['Plate'] = {}
+ outputObj['Plate']['height'] = 0
+ outputObj['Plate']['width'] = 0
+ outputObj['Plate']['externalmoment'] = M_ext
+ outputObj['Plate']['momentcapacity'] = M_cap
+
+ if flag != 0:
+ logger.info("Design is safe")
+ else:
+ logger.error("Design is not safe")
+ return outputObj
+