Exemple #1
0
                                                  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,