Advertisement
Guest User

concrete_column_with_rebars.py

a guest
Nov 29th, 2018
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.00 KB | None | 0 0
  1. import math
  2. import numpy as np
  3.  
  4. Ned = -500
  5. fcd = 20
  6. fyd = 435
  7. E = 2e5
  8. h = 200
  9. cb = 35
  10. ct = 35
  11. ca = 35
  12. b = 150
  13. y = 12
  14. d = h - cb
  15. ds = ct
  16. a = 25
  17. yb = 8
  18. ecu = 0.0035
  19. rebarnumber = math.floor((b-(2*cb+2*yb+y))/a)
  20. PI_Y2_4 = int(math.pi/4*(y)**2)
  21. disc = []
  22. dis = []
  23. Asi = []
  24. Asci = []
  25. Esc = []
  26. Esci = []
  27. Sc = []
  28. Sci = []
  29. #############################
  30. # Calculation starts here
  31. #############################
  32.  
  33. for n in range(0, 10):         # <------- First for-loop
  34.     cbb = cb + yb + y/2
  35.     ctt = ct + yb + y/2
  36.  
  37.     # ----REFACTORED----
  38.     k = (n-1)//rebarnumber
  39.     # this implies k*rebarnumber <= n-1 < (k+1)*rebarnumber
  40.     # so k*rebarnumber < n <= (k+1)*rebarnumber
  41.     if 0 <= k <= 7:
  42.         Asi.append(PI_Y2_4)
  43.         dis.append(h - cbb - k*ca)
  44.         Asci.append(PI_Y2_4)
  45.         if k == 0:
  46.             disc.append(ctt)
  47.         else:
  48.             disc.append(cbb + k*ca)
  49.     # ----REFACTORED----
  50.  
  51.     for i in range(0, len(dis)):
  52.         Esc.insert(i, dis[i])
  53.         Esci.insert(i, disc[i])
  54.         Sc.insert(i, dis[i])
  55.         Sci.insert(i, disc[i])
  56.  
  57.         for x in np.linspace(1, h, 10000):    # <-------- Second for-loop
  58.             # Why use enumerate here? Use
  59.             # for k in range(len(Esc))
  60.             for k, _ in enumerate(Esc):  
  61.                 try:
  62.                     # ----REFACTORED----
  63.                     # because the outcome is always the same, no if statements
  64.                     # are needed: dis[k] - x = -(x - dis[k])
  65.                     Esc[k] = ecu/x * (dis[k]-x)
  66.                     Esci[k] = ecu/x * (disc[k]-x)
  67.                     # ----REFACTORED----
  68.                 except (ZeroDivisionError, RuntimeWarning):
  69.                     Esc[k] = (0)  # No parenthesis needed
  70.                     Esci[k] = (0)
  71.  
  72.             for k, _ in enumerate(Sc):       # <-------- Third for-loop
  73.                 ss = Esc[k]*E
  74.                 if ss <= -fyd:
  75.                     Sc[k] = -fyd
  76.                 elif ss >= -fyd and ss < 0:
  77.                     Sc[k] = ss
  78.                 else:
  79.                     Sc[k] = min(ss, fyd)
  80.  
  81.             for k, _ in enumerate(Sci):
  82.                 sci = Esci[k]*E
  83.                 if sci <= -fyd:
  84.                     Sci[k] = -fyd
  85.                 elif sci >= -fyd and sci < 0:
  86.                     Sci[k] = sci
  87.                 else:
  88.                     Sci[k] = min(sci, fyd)
  89.  
  90.             FS = 0
  91.             FSC = 0
  92.             for a, _ in enumerate(Sc):
  93.                 FS += Sc[a]*Asi[a]
  94.                 FSC += Sci[a]*Asci[a]
  95.  
  96.             MS = 0
  97.             MSC = 0
  98.             for m, _ in enumerate(Sc):
  99.                 MS += Sc[a]*Asi[a]*(dis[m]-h/2)
  100.                 MSC += Sci[a]*Asci[a]*(h/2-disc[m])
  101.  
  102.             Nrd = 0 # These assignments are superfluous
  103.             Mrd = 0
  104.             Nrd = int((-0.8*x*b*fcd+FSC+FS)/1000)
  105.             Mrd = (0.8*x*b*fcd*(h/2-0.4*x)+MS-MSC)/1000000
  106.  
  107.             if 0 <= (float(Nrd) - Ned) <= 1:
  108.                 print(Nrd, x, Asi)
  109.                 break
  110. break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement