def _tausmooth(omega, rovert): ptL1 = 9 ptR1 = 11 ptL2 = 8.7 * rovert - 1 ptR2 = 8.7 * rovert + 1 if omega < ptL1: C_tau = sqrt(1.0 + 42.0 / omega**3 - 42.0 / 10**3) elif omega >= ptL1 and omega <= ptR1: fL = sqrt(1.0 + 42.0 / ptL1**3 - 42.0 / 10**3) fR = 1.0 gL = -63.0 / ptL1**4 / fL gR = 0.0 C_tau = cubic_spline_eval(ptL1, ptR1, fL, fR, gL, gR, omega) elif omega > ptR1 and omega < ptL2: C_tau = 1.0 elif omega >= ptL2 and omega <= ptR2: fL = 1.0 fR = 1.0 / 3.0 * sqrt(ptR2 / rovert) + 1 - sqrt(8.7) / 3 gL = 0.0 gR = 1.0 / 6 / sqrt(ptR2 * rovert) C_tau = cubic_spline_eval(ptL2, ptR2, fL, fR, gL, gR, omega) else: C_tau = 1.0 / 3.0 * sqrt(omega / rovert) + 1 - sqrt(8.7) / 3 return C_tau
def _tausmooth(omega, rovert): ptL1 = 9 ptR1 = 11 ptL2 = 8.7*rovert - 1 ptR2 = 8.7*rovert + 1 if omega < ptL1: C_tau = sqrt(1.0 + 42.0/omega**3 - 42.0/10**3) elif omega >= ptL1 and omega <= ptR1: fL = sqrt(1.0 + 42.0/ptL1**3 - 42.0/10**3) fR = 1.0 gL = -63.0/ptL1**4/fL gR = 0.0 C_tau = cubic_spline_eval(ptL1, ptR1, fL, fR, gL, gR, omega) elif omega > ptR1 and omega < ptL2: C_tau = 1.0 elif omega >= ptL2 and omega <= ptR2: fL = 1.0 fR = 1.0/3.0*sqrt(ptR2/rovert) + 1 - sqrt(8.7)/3 gL = 0.0 gR = 1.0/6/sqrt(ptR2*rovert) C_tau = cubic_spline_eval(ptL2, ptR2, fL, fR, gL, gR, omega) else: C_tau = 1.0/3.0*sqrt(omega/rovert) + 1 - sqrt(8.7)/3 return C_tau
def _cxsmooth(omega, rovert): Cxb = 6.0 # clamped-clamped constant = 1 + 1.83/1.7 - 2.07/1.7**2 ptL1 = 1.7-0.25 ptR1 = 1.7+0.25 ptL2 = 0.5*rovert - 1.0 ptR2 = 0.5*rovert + 1.0 ptL3 = (0.5+Cxb)*rovert - 1.0 ptR3 = (0.5+Cxb)*rovert + 1.0 if omega < ptL1: Cx = constant - 1.83/omega + 2.07/omega**2 elif omega >= ptL1 and omega <= ptR1: fL = constant - 1.83/ptL1 + 2.07/ptL1**2 fR = 1.0 gL = 1.83/ptL1**2 - 4.14/ptL1**3 gR = 0.0 Cx = cubic_spline_eval(ptL1, ptR1, fL, fR, gL, gR, omega) elif omega > ptR1 and omega < ptL2: Cx = 1.0 elif omega >= ptL2 and omega <= ptR2: fL = 1.0 fR = 1 + 0.2/Cxb*(1-2.0*ptR2/rovert) gL = 0.0 gR = -0.4/Cxb/rovert Cx = cubic_spline_eval(ptL2, ptR2, fL, fR, gL, gR, omega) elif omega > ptR2 and omega < ptL3: Cx = 1 + 0.2/Cxb*(1-2.0*omega/rovert) elif omega >= ptL3 and omega <= ptR3: fL = 1 + 0.2/Cxb*(1-2.0*ptL3/rovert) fR = 0.6 gL = -0.4/Cxb/rovert gR = 0.0 Cx = cubic_spline_eval(ptL3, ptR3, fL, fR, gL, gR, omega) else: Cx = 0.6 return Cx
def _cxsmooth(omega, rovert): Cxb = 6.0 # clamped-clamped constant = 1 + 1.83 / 1.7 - 2.07 / 1.7**2 ptL1 = 1.7 - 0.25 ptR1 = 1.7 + 0.25 ptL2 = 0.5 * rovert - 1.0 ptR2 = 0.5 * rovert + 1.0 ptL3 = (0.5 + Cxb) * rovert - 1.0 ptR3 = (0.5 + Cxb) * rovert + 1.0 if omega < ptL1: Cx = constant - 1.83 / omega + 2.07 / omega**2 elif omega >= ptL1 and omega <= ptR1: fL = constant - 1.83 / ptL1 + 2.07 / ptL1**2 fR = 1.0 gL = 1.83 / ptL1**2 - 4.14 / ptL1**3 gR = 0.0 Cx = cubic_spline_eval(ptL1, ptR1, fL, fR, gL, gR, omega) elif omega > ptR1 and omega < ptL2: Cx = 1.0 elif omega >= ptL2 and omega <= ptR2: fL = 1.0 fR = 1 + 0.2 / Cxb * (1 - 2.0 * ptR2 / rovert) gL = 0.0 gR = -0.4 / Cxb / rovert Cx = cubic_spline_eval(ptL2, ptR2, fL, fR, gL, gR, omega) elif omega > ptR2 and omega < ptL3: Cx = 1 + 0.2 / Cxb * (1 - 2.0 * omega / rovert) elif omega >= ptL3 and omega <= ptR3: fL = 1 + 0.2 / Cxb * (1 - 2.0 * ptL3 / rovert) fR = 0.6 gL = -0.4 / Cxb / rovert gR = 0.0 Cx = cubic_spline_eval(ptL3, ptR3, fL, fR, gL, gR, omega) else: Cx = 0.6 return Cx
def _sigmasmooth(omega, E, rovert): Ctheta = 1.5 # clamped-clamped ptL = 1.63*rovert*Ctheta - 1 ptR = 1.63*rovert*Ctheta + 1 if omega < 20.0*Ctheta: offset = (10.0/(20*Ctheta)**2 - 5/(20*Ctheta)**3) Cthetas = 1.5 + 10.0/omega**2 - 5/omega**3 - offset sigma = 0.92*E*Cthetas/omega/rovert elif omega >= 20.0*Ctheta and omega < ptL: sigma = 0.92*E*Ctheta/omega/rovert elif omega >= ptL and omega <= ptR: alpha1 = 0.92/1.63 - 2.03/1.63**4 fL = 0.92*E*Ctheta/ptL/rovert fR = E*(1.0/rovert)**2*(alpha1 + 2.03*(Ctheta/ptR*rovert)**4) gL = -0.92*E*Ctheta/rovert/ptL**2 gR = -E*(1.0/rovert)*2.03*4*(Ctheta/ptR*rovert)**3*Ctheta/ptR**2 sigma = cubic_spline_eval(ptL, ptR, fL, fR, gL, gR, omega) else: alpha1 = 0.92/1.63 - 2.03/1.63**4 sigma = E*(1.0/rovert)**2*(alpha1 + 2.03*(Ctheta/omega*rovert)**4) return sigma
def ApiFb(E, fy, D, t): """Allowable axial stress in bending""" #Make sure we can process single floats besides arrays fyy = np.array([fy]) EE = np.array([E]) DD = np.array([D]) tt = np.array([t]) n = len(fyy) Fb = np.zeros(n) for i in range(n): dt = (DD / tt).squeeze()[i] fy2 = fyy.squeeze()[i] E = EE.squeeze()[i] delta = 0.2 * 10340.0 / fy2 x1 = 10340.0 / fy2 x2 = 20680.0 / fy2 if dt < x1 - delta: Fb[i] = 0.75 * fy2 elif dt < x1 + delta: Fb[i] = cubic_spline_eval(x1 - delta, x1 + delta, 0.75 * fy2, (0.84 - 1.74 * fy2 * (x1 + delta) / E) * fy2, 0.0, -1.74 * fy2 / E * fy2, dt) elif dt < x2 - delta: Fb[i] = (0.84 - 1.74 * fy2 * dt / E) * fy2 elif dt < x2 + delta: Fb[i] = cubic_spline_eval( x2 - delta, x2 + delta, (0.84 - 1.74 * fy2 * (x2 - delta) / E) * fy2, (0.72 - 0.58 * fy2 * (x2 + delta) / E) * fy2, -1.74 * fy2 / E * fy2, -0.58 * fy2 / E * fy2, dt) else: Fb[i] = (0.72 - 0.58 * fy2 * dt / E) * fy2 ## Fb=(0.72 - 0.58*fy2*dt/E)*fy2 #initialize ## idx=(DD/tt) < (x1+delta) ## Fb[idx]=(cubic_spline_eval(x1-delta, x1+delta, 0.75*fy2, (0.84 - 1.74*fy2*(x1+delta)/E)*fy2, ## 0.0, -1.74*fy2/E*fy2, dt))[idx] ## idx=(DD/tt) < (x1-delta) ## Fb[idx]=0.75*fy2[idx] ## ## idx=(DD/tt) < (x2+delta) return Fb
def ApiFb(E,fy,D,t): """Allowable axial stress in bending""" #Make sure we can process single floats besides arrays fyy=np.array([fy]) EE=np.array([E]) DD=np.array([D]) tt=np.array([t]) n = len(fyy) Fb = np.zeros(n) for i in range(n): dt = (DD/tt).squeeze()[i] fy2 = fyy.squeeze()[i] E = EE.squeeze()[i] delta = 0.2*10340.0/fy2 x1 = 10340.0/fy2 x2 = 20680.0/fy2 if dt < x1-delta: Fb[i] = 0.75*fy2 elif dt < x1+delta: Fb[i] = cubic_spline_eval(x1-delta, x1+delta, 0.75*fy2, (0.84 - 1.74*fy2*(x1+delta)/E)*fy2, 0.0, -1.74*fy2/E*fy2, dt) elif dt < x2-delta: Fb[i] = (0.84 - 1.74*fy2*dt/E)*fy2 elif dt < x2+delta: Fb[i] = cubic_spline_eval(x2-delta, x2+delta, (0.84 - 1.74*fy2*(x2-delta)/E)*fy2, (0.72 - 0.58*fy2*(x2+delta)/E)*fy2, -1.74*fy2/E*fy2, -0.58*fy2/E*fy2, dt) else: Fb[i] = (0.72 - 0.58*fy2*dt/E)*fy2 ## Fb=(0.72 - 0.58*fy2*dt/E)*fy2 #initialize ## idx=(DD/tt) < (x1+delta) ## Fb[idx]=(cubic_spline_eval(x1-delta, x1+delta, 0.75*fy2, (0.84 - 1.74*fy2*(x1+delta)/E)*fy2, ## 0.0, -1.74*fy2/E*fy2, dt))[idx] ## idx=(DD/tt) < (x1-delta) ## Fb[idx]=0.75*fy2[idx] ## ## idx=(DD/tt) < (x2+delta) return Fb
def _buckling_reduction_factor(alpha, beta, eta, lambda_0, lambda_bar): """ Computes a buckling reduction factor used in Eurocode shell buckling formula. """ lambda_p = sqrt(alpha/(1.0-beta)) ptL = 0.9*lambda_0 ptR = 1.1*lambda_0 if (lambda_bar < ptL): chi = 1.0 elif lambda_bar >= ptL and lambda_bar <= ptR: # cubic spline section fracR = (ptR-lambda_0)/(lambda_p-lambda_0) fL = 1.0 fR = 1-beta*fracR**eta gL = 0.0 gR = -beta*eta*fracR**(eta-1)/(lambda_p-lambda_0) chi = cubic_spline_eval(ptL, ptR, fL, fR, gL, gR, lambda_bar) elif lambda_bar > ptR and lambda_bar < lambda_p: chi = 1.0 - beta*((lambda_bar-lambda_0)/(lambda_p-lambda_0))**eta else: chi = alpha/lambda_bar**2 # if (lambda_bar <= lambda_0): # chi = 1.0 # elif (lambda_bar >= lambda_p): # chi = alpha/lambda_bar**2 # else: # chi = 1.0 - beta*((lambda_bar-lambda_0)/(lambda_p-lambda_0))**eta return chi
def _buckling_reduction_factor(alpha, beta, eta, lambda_0, lambda_bar): """ Computes a buckling reduction factor used in Eurocode shell buckling formula. """ lambda_p = sqrt(alpha / (1.0 - beta)) ptL = 0.9 * lambda_0 ptR = 1.1 * lambda_0 if (lambda_bar < ptL): chi = 1.0 elif lambda_bar >= ptL and lambda_bar <= ptR: # cubic spline section fracR = (ptR - lambda_0) / (lambda_p - lambda_0) fL = 1.0 fR = 1 - beta * fracR**eta gL = 0.0 gR = -beta * eta * fracR**(eta - 1) / (lambda_p - lambda_0) chi = cubic_spline_eval(ptL, ptR, fL, fR, gL, gR, lambda_bar) elif lambda_bar > ptR and lambda_bar < lambda_p: chi = 1.0 - beta * ((lambda_bar - lambda_0) / (lambda_p - lambda_0))**eta else: chi = alpha / lambda_bar**2 # if (lambda_bar <= lambda_0): # chi = 1.0 # elif (lambda_bar >= lambda_p): # chi = alpha/lambda_bar**2 # else: # chi = 1.0 - beta*((lambda_bar-lambda_0)/(lambda_p-lambda_0))**eta return chi
def _sigmasmooth(omega, E, rovert): Ctheta = 1.5 # clamped-clamped ptL = 1.63 * rovert * Ctheta - 1 ptR = 1.63 * rovert * Ctheta + 1 if omega < 20.0 * Ctheta: offset = (10.0 / (20 * Ctheta)**2 - 5 / (20 * Ctheta)**3) Cthetas = 1.5 + 10.0 / omega**2 - 5 / omega**3 - offset sigma = 0.92 * E * Cthetas / omega / rovert elif omega >= 20.0 * Ctheta and omega < ptL: sigma = 0.92 * E * Ctheta / omega / rovert elif omega >= ptL and omega <= ptR: alpha1 = 0.92 / 1.63 - 2.03 / 1.63**4 fL = 0.92 * E * Ctheta / ptL / rovert fR = E * (1.0 / rovert)**2 * (alpha1 + 2.03 * (Ctheta / ptR * rovert)**4) gL = -0.92 * E * Ctheta / rovert / ptL**2 gR = -E * (1.0 / rovert) * 2.03 * 4 * (Ctheta / ptR * rovert)**3 * Ctheta / ptR**2 sigma = cubic_spline_eval(ptL, ptR, fL, fR, gL, gR, omega) else: alpha1 = 0.92 / 1.63 - 2.03 / 1.63**4 sigma = E * (1.0 / rovert)**2 * (alpha1 + 2.03 * (Ctheta / omega * rovert)**4) return sigma