def analytical_comparison(): '''for the case when tau is deterministic, there is an analytical solution. The differences are caused by the additional matrix stiffness due to broken fibers, which are in the CB model added to matrix stiffness. As the matrix E grows and the V_f decreases, the solutions tend to get closer''' tau, E_f, E_m, V_f = 0.2, 200e3, 25e3, 0.3 r, shape, scale = 0.00345, 5., 0.02 # analytical solution for damage controlled test ctrl_damage = np.linspace(0.0, .99, 100) def crackbridge(w, tau, E_f, E_m, V_f, r, omega): Kf = E_f * V_f * (1 - omega) Km = E_m * (1 - V_f) + E_f * V_f * omega Kc = Kf + Km T = 2. * tau * V_f * (1. - omega) / r c = np.sqrt(Kc * T / Km / Kf) return c * np.sqrt(w) * (1 - omega) def w_omega(tau, E_f, E_m, V_f, r, omega, shape, scale): Kf = E_f * V_f * (1 - omega) Km = E_m * (1 - V_f) + E_f * V_f * omega Kc = Kf + Km T = 2. * tau * V_f * (1. - omega) / r return (-np.log(1. - omega)) ** (2. / shape) \ * scale ** 2 * Km * Kf / Kc / T w_lst = [w_omega(tau, E_f, E_m, V_f, r, omega, shape, scale) for omega in ctrl_damage] epsf = crackbridge(np.array(w_lst), tau, E_f, E_m, V_f, r, ctrl_damage) plt.plot(np.array(w_lst), epsf * E_f, color='red', lw=4, ls='dashed', label='analytical') reinf = Reinforcement(r=r, tau=tau, V_f=V_f, E_f=E_f, xi=RV('weibull_min', shape=shape, scale=scale), n_int=20) ccb = CompositeCrackBridge(E_m=E_m, reinforcement_lst=[reinf], Ll=1000., Lr=1000.) stress = [] w_arr = np.linspace(0.0, np.max(w_lst), 100) for w in w_arr: ccb.w = w stress.append(ccb.max_norm_stress) plt.plot(w_arr, stress, color='blue', lw=2, label='CB model') plt.legend(loc='best')
def bundle_comparison(w_arr, L, shape, scale, E): '''bundle (Weibull fibers) response for comparison with the CB model''' from scipy.stats import weibull_min eps = w_arr / L * (1. - weibull_min(shape, scale=scale).cdf(w_arr / L)) plt.plot(w_arr / L, eps * E, lw=4, color='red', ls='dashed', label='FB model') bundle = Reinforcement(r=0.13, tau=0.00001, V_f=0.9999, E_f=E, xi=RV('weibull_min', shape=shape, scale=scale), n_int=50) ccb = CompositeCrackBridge(E_m=25e3, reinforcement_lst=[bundle], Ll=L / 2., Lr=L / 2.) eps = [] for w in w_arr: ccb.w = w eps.append(ccb.max_norm_stress / E) plt.plot(w_arr / L, np.array(eps) * E, color='blue', lw=2, label='CB model') plt.legend(loc='best')