Public Function ValorBeta1(fc_MPa) As Double Dim Beta1 As Double Beta1 = 0.85 - 0.05 / 7 * (fc_MPa - 28) If Beta1 < 0.65 Then 'Beta1 según NSR-10 Beta1 = 0.65 'C.10.2.7.3 End If If Beta1 > 0.85 Then Beta1 = 0.85 End If ValorBeta1 = Beta1 End Function '---------------------------------------------------------------- ' CALCULO DEL COEFICIENTE DE REDUCCION DE RESISTENCIA '---------------------------------------------------------------- Public Function ValorPhi(Def_Unitaria_EPSt) As Single Dim et As Double, Phi As Double et = Def_Unitaria_EPSt Phi = 250 / 3 * et + 29 / 60 'Según NSR-10 C.9.3.2 If Phi > 0.9 Then Phi = 0.9 End If If Phi < 0.65 Then Phi = 0.65 End If ValorPhi = Phi End Function '---------------------------------------------------------------- ' CALCULO DEL ESFUERZO EN REFUERZO SEGUN MODELO BI-LINEAL '---------------------------------------------------------------- Public Function Esfuerzo_fsMPa(Def_Unitaria_EPSt, fy_MPa) As Single Dim et As Double, fs As Double, fy As Double fy = fy_MPa et = Def_Unitaria_EPSt fs = 200000 * et If Abs(fs) > fy Then fs = fy * Sgn(et) End If Esfuerzo_fsMPa = fs End Function '---------------------------------------------------------------- ' FUNCION DE ERROR PARA RESISTENCIA NOMINAL A FLEXION EN VIGAS '---------------------------------------------------------------- Public Function fMn(c, b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) As Double Dim Beta1 As Double, a As Double, Cc As Double Dim et As Double, fs As Double, Ts As Double Dim b As Double, d As Double, At As Double Const eu = 0.003 'Según NSR-10 C.10.3.3 Const Es = 200000 'Según NSR-10 C.8.5.2 b = b_cm * 10 'Cambio de unidades cm a mm d = d_cm * 10 At = As_cm2 * 100 'Cambio de unidades cm2 a mm2 Beta1 = ValorBeta1(fc_MPa) 'a=beta1·c a = Beta1 * c Cc = 0.85 * fc_MPa * a * b 'Cc=0.85f'c*ab et = (d - c) / c * eu fs = Esfuerzo_fsMPa(et, fy_MPa) 'Ts=fs*As Ts = fs * At fMn = Cc - Ts 'Cc-Ts->0? End Function '---------------------------------------------------------------- ' CALCULO DEL EJE NEUTRO '---------------------------------------------------------------- Public Function cViga(b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) As Double Dim i As Integer, d As Double Dim x() As Double, f() As Double Dim Dy As Double, Dx As Double d = d_cm * 10 ReDim x(3), f(2) x(1) = 1 / 7 * d x(2) = 3 / 7 * d Do For i = 1 To 2 f(i) = fMn(x(i), b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) Next i Dy = f(2) - f(1) 'Método de Newton Dx = x(2) - x(1) 'Algoritmo secante x(3) = x(2) - f(2) / Dy * Dx 'x=x-f(x)/dy*dx x(1) = x(2) x(2) = x(3) Loop While Abs(f(2)) > 1 'Se acepta error=Cc-Ts<1N cViga = x(2) End Function '---------------------------------------------------------------- ' RESISTENCIA NOMINAL A LA FLEXION EN VIGAS RECTANGULARES '---------------------------------------------------------------- Public Function MnViga(b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) As Double Dim b As Double, d As Double Dim c As Double, a As Double, Cc As Double Const g = 9.80665 'Aceleración g en [m/s²] b = b_cm * 10 d = d_cm * 10 c = cViga(b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) a = ValorBeta1(fc_MPa) * c 'a=beta1*c Cc = 0.85 * fc_MPa * a * b 'Cc=0.85*f'c*a*b MnViga = Cc * (d - a / 2) 'Mn=Cc*(d-a/2) MnViga = MnViga * 1 / ((10) ^ 6 * g) 'Cambio N·mm a [ton·m] End Function '---------------------------------------------------------------- ' RESISTENCIA DE DISEÑO A LA FLEXION EN VIGAS RECTANGULARES '---------------------------------------------------------------- Public Function PhiMnViga(b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) As Double Dim b As Double, d As Double Dim c As Double, a As Double, Cc As Double Dim et As Double, Phi As Double Const g = 9.80665 'Aceleración g en [m/s²] Const eu = 0.003 'Segun NSR-10 C.10.3.3 b = b_cm * 10 d = d_cm * 10 c = cViga(b_cm, d_cm, As_cm2, fc_MPa, fy_MPa) a = ValorBeta1(fc_MPa) * c 'a=beta1*c Cc = 0.85 * fc_MPa * a * b 'Cc=0.85*f'c*a*b et = (d - c) / c * eu Phi = ValorPhi(et) PhiMnViga = Phi * Cc * (d - a / 2) 'Mn=Cc*(d-a/2) PhiMnViga = PhiMnViga * 1 / ((10) ^ 6 * g) 'Cambio N·mm a [ton·m] End Function