public static double BRBNcre_chev( [ExcelArgument(Name = "modeNum", Description = "Mode number")] double modeNum, [ExcelArgument(Name = "Kg1", Description = "Gusset rotational stiffness")] double Kg1, [ExcelArgument(Name = "Kg2", Description = "Gusset rotational stiffness")] double Kg2, [ExcelArgument(Name = "Kr1", Description = "Restrainer end rotational stiffness")] double Kr1, [ExcelArgument(Name = "Kr2", Description = "Restrainer end rotational stiffness")] double Kr2, [ExcelArgument(Name = "ξ1L0", Description = "Connection buckling length")] double ξ1L0, [ExcelArgument(Name = "ξ2L0", Description = "Connection buckling length")] double ξ2L0, [ExcelArgument(Name = "γ1EIr", Description = "Connection flexural stiffness")] double γ1EIr, [ExcelArgument(Name = "γ2EIr", Description = "Connection flexural stiffness")] double γ2EIr, [ExcelArgument(Name = "L0", Description = "Full brace buckling length")] double L0, [ExcelArgument(Name = "EIr", Description = "Restrainer flexural stiffness")] double EIr, [ExcelArgument(Name = "Tolerance", Description = "Load increment [default = 1·force unit]")] object _tol) { // increments are based on N/Ncr0 double tol = Check <double>(_tol, 1); double Ncr0 = BRBNcr0(ξ1L0, γ1EIr); double ke = ElasticBuckling.ke_crit(N => ElasticBuckling.det_chev(N, BRBnorm_K(Kg1, ξ1L0, γ1EIr), BRBnorm_K(Kg2, ξ2L0, γ2EIr), BRBnorm_K(Kr1, ξ1L0, γ1EIr), BRBnorm_K(Kr2, ξ2L0, γ2EIr), ξ1L0 / L0, ξ2L0 / L0, γ1EIr / EIr, γ2EIr / EIr), modeNum, tol / Ncr0, 1); if (double.IsInfinity(ke)) { return(0); } else { return(Ncr0 / Pow(ke, 2)); } }
public static double BRBNcre_one( [ExcelArgument(Name = "Kg", Description = "Gusset rotational stiffness")] double Kg, [ExcelArgument(Name = "Kr", Description = "Restrainer end rotational stiffness")] double Kr, [ExcelArgument(Name = "ξL0", Description = "Connection buckling length")] double ξL0, [ExcelArgument(Name = "γEIr", Description = "Connection flexural stiffness")] double γEIr, [ExcelArgument(Name = "L0", Description = "Full brace buckling length")] double L0, [ExcelArgument(Name = "EIr", Description = "Restrainer flexural stiffness")] double EIr, [ExcelArgument(Name = "Tolerance", Description = "Load increment [default = 1·force unit]")] object _tol) { // increments are based on N/Ncr0 double tol = Check <double>(_tol, 1); double Ncr0 = BRBNcr0(ξL0, γEIr); double ke = ElasticBuckling.ke_crit(N => ElasticBuckling.det_one(N, BRBnorm_K(Kg, ξL0, γEIr), BRBnorm_K(Kr, ξL0, γEIr), ξL0 / L0, γEIr / EIr), 1, tol / Ncr0, 1); if (double.IsInfinity(ke)) { return(0); } else { return(Ncr0 / Pow(ke, 2)); } }
public static double BRBke_asym2( [ExcelArgument(Name = "κg", Description = "Normalized gusset rotational stiffness (Kg·ξL0/γEIr)")] double κg, [ExcelArgument(Name = "κr", Description = "Normalized restrainer end rotational stiffness (Kr·ξL0/γEIr)")] double κr, [ExcelArgument(Name = "ξ", Description = "Ratio of connection to full buckling length (ξL0/L0)")] double ξ, [ExcelArgument(Name = "γ", Description = "Ratio of connection to restrainer flexural stiffness (γEIr/EIr)")] double γ, [ExcelArgument(Name = "Tolerance", Description = "Load increment = tol·Ncr0 [default = 0.0001]")] object _tol, [ExcelArgument(Name = "Mode", Description = "Mode number [default = 1]")] object _mode, [ExcelArgument(Name = "Maximum", Description = "Maximum [default = 2.0]")] object _max) { // increments are based on N/Ncr0 double tol = Check <double>(_tol, 0.0001); double mode = Check <double>(_mode, 1); double max = Check <double>(_max, 2); return(ElasticBuckling.ke_crit(N => ElasticBuckling.det_asym_rigidrest(N, κg, κr, ξ, γ), mode, tol, max)); }
public static double BRBcgSym( [ExcelArgument(Name = "ke", Description = "Effective length factor (NcrB=π²γEIr/(ke·ξL0)²)")] double ke, [ExcelArgument(Name = "κg", Description = "Normalized gusset rotational stiffness (Kg·ξL0/γEIr)")] double κg, [ExcelArgument("Return absolute value [default = true]", Name = "absolute")] object _absolute) { bool absolute = Check <bool>(_absolute, true); if (!absolute) { return(ElasticBuckling.CgSym(ke, κg)); } else { return(Abs(ElasticBuckling.CgSym(ke, κg))); } }
public static double BRBke_chev( [ExcelArgument(Name = "modeNum", Description = "Mode number")] double modeNum, [ExcelArgument(Name = "κg1", Description = "Normalized gusset rotational stiffness (Kg1·ξ1L0/γ1EIr)")] double κg1, [ExcelArgument(Name = "κg2", Description = "Normalized gusset rotational stiffness (Kg2·ξ2L0/γ2EIr)")] double κg2, [ExcelArgument(Name = "κr1", Description = "Normalized restrainer end rotational stiffness (Kr1·ξ1L0/γ1EIr)")] double κr1, [ExcelArgument(Name = "κr2", Description = "Normalized restrainer end rotational stiffness (Kr2·ξ2L0/γ2EIr)")] double κr2, [ExcelArgument(Name = "ξ1", Description = "Ratio of connection to full buckling length (ξ1L0/L0)")] double ξ1, [ExcelArgument(Name = "ξ2", Description = "Ratio of connection to full buckling length (ξ2L0/L0)")] double ξ2, [ExcelArgument(Name = "γ1", Description = "Ratio of connection to restrainer flexural stiffness (γ1EIr/EIr)")] double γ1, [ExcelArgument(Name = "γ2", Description = "Ratio of connection to restrainer flexural stiffness (γ2EIr/EIr)")] double γ2, [ExcelArgument(Name = "Tolerance", Description = "Load increment = tol·Ncr0 [default = 0.0001]")] object _tol, [ExcelArgument(Name = "Maximum", Description = "Maximum [default = 2.0]")] object _max) { // increments are based on N/Ncr0 double tol = Check <double>(_tol, 0.0001); double max = Check <double>(_max, 2); return(ElasticBuckling.ke_crit(N => ElasticBuckling.det_chev(N, κg1, κg2, κr1, κr2, ξ1, ξ2, γ1, γ2), modeNum, tol, max)); }