aol=specimen.a_ol_applied, rol=plz_ol, c=c_ca, m=m_ca, eta=0) dadn_wheeler2, dk_wheeler2, a_wheeler2, cp_wheeler2 = \ overload_analysis.WheelerCalculatingBaseParis(a_wheeler=np.arange(specimen.a_dadn_min, specimen.a_alpha_end, 0.02), b=specimen.thickness, w=specimen.width, ys=specimen.yield_stress, pmax=specimen.maxload, r=specimen.stress_ratio, aol=specimen.a_ol_applied, rol=plz_ol, plasticzonefactor=plz_factor, m1=m1_2, c=c_ca, m=m_ca, eta=0) # 2/PI法: # dkeff计算 dkeff_Manual_2pi = closureanalysis.dKeffCalculation( kmax=specimen.dk / (1 - specimen.stress_ratio), kclose=specimen.kc, kmin=specimen.dk * (specimen.stress_ratio / (1 - specimen.stress_ratio)), method='2/PI') dkeff_2pi, dk_2pi = \ closureanalysis.DoubleDataSelectMovingAverage(data=dkeff_Manual_2pi, reference=specimen.dk, ratio=0.2, numofaverage=7) _, a_2pi = \ closureanalysis.DoubleDataSelectMovingAverage(data=dkeff_Manual_2pi, reference=specimen.a, ratio=0.2, numofaverage=7) dadn_2pi = mts_analysis.ParisCalculating(c=c_ca, m=m_ca, dk=dkeff_2pi) # Try: mix try 1 # 采用logistic sigmoid函数分配两种 # logistic sigmoid单调递增,表征crack closure sigmas = 1 / (1 + np.exp(-kappa * betas)) dadn_mixed_1 = dadn_wheeler * (1 - sigmas) + dadn_alpha_e * sigmas
aol_end = a_range[1] # alpha模型拟合终点,可通过该值筛除后段不稳定的数据 # 材料Paris参数和Walker参数 c_w, m_w, gamma = paris_and_walker.WalkerParameter() c_p, m_p = paris_and_walker.ParisParameter(r=r) # 基本数据读取和计算 dadn_Manual, n_Manual, dk_Manual, a_Manual, kc_Manual = closureanalysis.BasicDataDispose( sequence=sequence, r=r) ''' 2pi法 ''' # dkeff计算 dkeff_Manual_2pi = closureanalysis.dKeffCalculation(kmax=dk_Manual / (1 - r), kclose=kc_Manual, kmin=dk_Manual * (r / (1 - r)), method='2/PI') # 移动平均 dkeff_Manual_averaged0, dk_Manual_averaged0 = \ closureanalysis.DoubleDataSelectMovingAverage(data=dkeff_Manual_2pi, reference=dk_Manual, ratio=ratio, numofaverage=numofaverage) _, a_Manual_averaged0 = \ closureanalysis.DoubleDataSelectMovingAverage(data=dkeff_Manual_2pi, reference=a_Manual, ratio=ratio, numofaverage=numofaverage) # 计算基于裂纹闭合效应的dadn(2/PI法) dadn_paris_dkeff_2pi = mts_analysis.ParisCalculating(c=c_p, m=m_p, dk=dkeff_Manual_averaged0) ''' 传统dkeff法(basic)
pmax=specimen.maxload, pmin=specimen.maxload * specimen.stress_ratio) kop_a_retard_end_cal = dk_a_retard_end * (specimen.stress_ratio / (1 - specimen.stress_ratio)) dk_4 = np.array([dk_a_kc_max_cal[0], dk_a_retard_end]) kc_4 = np.array([kop_a_kc_max_cal[0], kop_a_retard_end_cal]) k_kopfit_cal, b_kopfit_cal = mixed_model.LogLinearFit(y=kc_4, x=dk_4) kc_cal = mixed_model.LogLinearFittedCalculate(k=k_kopfit_cal, b=b_kopfit_cal, x=dk_3) # 校对: 用拟合结果计算2/Pi法(检验用,与模型无关),与实验给出的Kop对应的计算结果进行对比 dkeff_Manual_2pi_cal = closureanalysis.dKeffCalculation( kmax=dk_3 / (1 - specimen.stress_ratio), kclose=kc_cal, kmin=dk_3 * (specimen.stress_ratio / (1 - specimen.stress_ratio)), method='2/PI') dkeff_2pi_cal, dk_2pi_cal = \ closureanalysis.DoubleDataSelectMovingAverage(data=dkeff_Manual_2pi_cal, reference=dk_3, ratio=0.2, numofaverage=7) dadn_2pi_cal = mts_analysis.ParisCalculating(c=c_ca, m=m_ca, dk=dkeff_2pi_cal) # step7: 用计算版的Kop和主导位置进行Alpha模型计算 a_alpha_e = np.arange(specimen.a_dadn_min - bias, specimen.a_retard_end, 0.02) dk_alpha_e, dkeff_alpha_e, dadn_alpha_e, alpha_e, betas =\ closureanalysis.AlphaModifiedCalculate(alpha_fade_rate=7.2, alpha_amplitude=2/np.pi, pmax=specimen.maxload, stress_ratio=specimen.stress_ratio, thickness=specimen.thickness, width=specimen.width, a_amplitude=a_kc_max_calculate, a_list=a_alpha_e, c_ca=c_ca, m_ca=m_ca, a_start=a_kc_max_calculate,