Simech Fatigue文档

Simech Fatigue软件的开发和使用说明。

1. 关于SIMECH Fatigue

SIMECH Fatigue是一个结构疲劳寿命计算软件(以下简称Fatigue)。它基于结构有限元分析得到的应力/应变数据,结合载荷谱和材料疲劳寿命性能来计算结构疲劳寿命。软件采用C++开发,为配合高性能计算,以命令行和脚本文件的形式进行输入控制,主要特点有:

1.1 关于开发

Fatigue是在中国科学院力学研究所非线性国家重点实验室(LNM)的资助下开发的。LNM和Fatigue的开发者不保证Fatigue程序包或其衍生程序是没有错误的,同时也不对Fatigue中错误引起的损失负责。

目前,Fatigue的开发和维护者为:

2. 疲劳寿命计算理论简介

Fatigue是用于结构疲劳寿命分析的程序,它是基于传统的疲劳寿命计算理论开发。

2.1 引言

美国材料与试验协会(American Society for Testing and Materials, ASTM)将疲劳寿命(Nf)定义为材料在发生特定的疲劳破坏前所经历的应力循环数。对于一些材料,例如钢和钛,存在一个理论应力值(SNf),当应力小于SNf,材料可以承受无限次数的应力循环,该应力值通常被称为疲劳极限或疲劳强度。

工程上常用的材料疲劳寿命预测方法有:

  1. 应力-寿命方法
  2. 应变-寿命方法
  3. 裂纹扩展方法
  4. 基于寿命或裂纹扩展的随机概率方法

不管采用上面哪一种预测方法,结构所受的复杂变化载荷最后一般都采用雨流计数等技术手段将其转换成等效的简单加载情况来处理。Fatigue目前主要采用的是应力-寿命计算方法,由于其它计算方法的基本流程和技术手段类似,后期将继续扩展Fatigue,增加其计算功能。

该部分内容的理论参考资料:

2.2 疲劳载荷类型与基本术语

使零件或构件发生疲劳破坏的动载荷称为疲劳载荷,可分为为两类:一类是其大小和正负方向随时间周期性地变化的交变载荷,另一类是大小和正负方向随时间随机变化的随机载荷。交变载荷又称为循环载荷,是最为简单和基本的疲劳载荷形式。所研究结构部位因交变载荷引起的应力称为交变应力。

图 2.1 对称循环交变载荷

图 2.1是一个典型的交变应力一时间的变化历程。图中循环应力的大小和正负方(拉压)向随着时间的变化而作周期性的变化。一个周期的应力变化过程称为一个应力循环。应力循环特点可用循环中的最大应力σmax、最小应力σmin和周期来描述。因为最大应力和最小应力的绝对值相等而正负号相反,故称这种交变载荷为对称循环应力。典型的循环载荷如圆轴类杆件的旋转弯曲、轴向拉压和平板零件的双向弯曲等,都可以在零件的表面或内部产生这样的交变应力。另外,轴类零件的双向扭转也可以产生类似的交变应力。

在疲劳载荷的描述中经常使用应力幅σa。和应力范围Δσ。(也称为应力振幅、应力幅度)的概念,定义如下: $$ \sigma_a=\frac{\sigma_{max}-\sigma_{min}}{2} $$ 应力幅σa反映了交变应力在一个应力循环中变化大小的程度,它是使金属构件发生疲劳的根本原因。

当研究的部位除承受有动载荷外,还有静载分量荷时,动静载荷的共同作用下的应力-时间变化曲线如图2.2所示。

图 2.2 非对称循环交变载荷

此时的载荷时间-变化曲线相当于把图2.1的对称循环应力曲线向上平移一个了静应力分量。这种循环载荷称为非对称循环载荷,并用最小应力与最大应力的比值R来描述循环应力的不对称程度,R称为应力比,有时又称为不对称系数,即: $$ R=\frac{\sigma_{min}}{\sigma_{max}} $$ 由定义可知,当R=−1时的循环应力即为对称循环应力,当R≠0时统称不对称循环应力。其中,R=0时为拉伸脉动应力,R=−∞为压缩脉动循环。循环应力中的静载分量通常称为平均应力,用σm表示,可由下式求出: $$ \sigma_m=\frac{\sigma_{max}+\sigma_{min}}{2} $$ 静载分量或平均应力对构件的疲劳强度有一定的影响。压缩平均应力往往提高构件的疲劳强度,拉伸平均应力往往降低构件的疲劳强度。因此,在疲劳强度和疲劳寿命的研究中, 给定一个循环应力水平时,需要同时给出应力幅σa和应力比R、或者同时给出最大应力σmax和平均应力σm,也有时直接给出最大应力σmax和最小应力σmin来表示循环应力水平。

由以上各式可知,在应力幅、平均应力、应力比、最大应力和最小应力的参数中,只要已知其中的两个便可求出其它。

2.3 材料的S-N曲线与基本术语

一般情况下,材料所承受的循环载荷的应力幅越小,到发生疲劳破断时所经历的应力循环次数越长。S-N曲线就是材料所承受的应力幅水平与该应力幅下发生疲劳破坏时所经历的应力循环次数的关系曲线。S-N曲线一般是使用标准试样进行疲劳试验获得的。如图2.3所示,纵坐标表示试样承受的应力幅,有时也表示为最大应力,但二者一般都用$\sigma$表示;横坐标表示应力循环次数,常用$N_f$表示。为使用方便,在双对数坐标系下S-N曲线被近似简化成两条直线。但也有很多情况只对横坐标取对数,此时也常把S-N曲线近似简化成两条直线。

图 2.3 S-N曲线

S-N曲线中的水平直线部分对应的应力水平就是材料的疲劳极限,其原意为材料经受无数次应力循环都不发生破坏的应力极限,对钢铁材料此“无限”的定义一般为$10^7$次应力循环。但现代高速疲劳试验机的研究成果表明,即使应力循环次数超过$10^7$材料仍然有可能发生疲劳断裂。不过$10^7$次的应力循环次数,对于实际的工程中的疲劳强度设计已经完全能够满足需要。疲劳极限又称持久极限,对于无缺口的光滑试样,多用$\sigma_{w0}$表示,而应力比$R=-1$时的疲劳极限常用$\sigma_{-1}$来表示。某些不锈钢和有色金属的S-N中没有水平直线部分,此时的疲劳极限都一般定义为$10^8$次应力循环下对应的应力幅水平。疲劳极限是材料抗疲劳能力的重要性能指标,也是进行疲劳强度的无限寿命设计的主要依据。

计算中的S-N曲线参数

在实际Fatigue计算中,会用如图2.4中的参数来定义SN曲线。其中红色的虚线是用户输入的实际SN曲线,而红色实线表示计算中实际用到的SN曲线。虚线和实线的区别在于,实线在虚线的基础上加了一个安全系数($\gamma_{Mf}$),导致实线相对于虚线向下有一个平移量,但两条曲线的直线段曲率是一样的。为便于计算,材料的疲劳性能SN曲线可拟合成图中的形式,计算中需要给定的参数包括,两个斜线段的斜率m1和m2,疲劳强度$\Delta\sigma_{R1}$,疲劳强度对应的循环次数$N_{R1}$,以及通过安全系数修正后的拐点循环次数$N_{R2}$。另外,可以定义SN曲线的应力截断范围$\Delta\sigma_{Rmin}$和$\Delta\sigma_{Rmax}$,低于$\Delta\sigma_{Rmin}$的应力水平将被忽略掉,应力水平高于$\Delta\sigma_{Rmax}$时,损伤将设置为$D\ge1$。其中$\Delta\sigma_{R2}$可通过其它参数计算得到,不需要给定。这些参数可以通过SN曲线文件格式提交到Fatigue程序进行分析。

图 2.4 计算用到的S-N曲线参数定义

2.4 平均应力修正

产生疲劳破坏的根本原因是动应力分量,但静应力分量即平均应力对疲劳极限也有一定的影响。在一定的静应力范围内,压缩的静应力提高疲劳极限,拉伸的静应力降低疲劳极限。一般认为,残余应力对疲劳极限的作用同平均应力的作用相同。对一种材料,可根据它在各种平均应力或应力比$R$下的疲劳极限结果画出疲劳极限图。

平均应力的影响可以通过不同的方式来对SN曲线进行修改,修正的方式和参数可以通过材料疲劳参数文件来指定。如果定义$\sigma_{a,-1}$为对称循环应力下应力幅值,平均应力为$\sigma_m$,应力比为$R$,通过平均应力修正后的应力幅值为$\sigma_{a,R}$,那么可以通过不同方式来确定$\sigma_{R,-1}$来用于疲劳寿命的计算。Fatigue中支持的平均应力修正方式有:不修正、线性修正、双线性修正、Modified Goodman修正、Soderberg修正、Gerber parabola修正、Smith-Watson-Topper修正、60%压缩准则、IIW中低残余应力修正、FKM参考线修正。下面是各种修正形式的公式和参数说明。

不修正

即不对平均应力进行修正处理。对于一些焊接或铆钉连接推荐采用这种方式,因为平均应力效应已经包含在相应的SN曲线中了。

线性修正

线性修正的关系式为: $$ \sigma_{a,R}=\sigma_{a,-1}-M\sigma_{m} $$ 其中$M$为平均应力灵敏度,可能通过实验数据得到,定义为: $$ M=\frac{\sigma_{a,-1}}{\sigma_{a,0}}-1 $$ 其中$\sigma_{a,0}$是$R=0$时的疲劳强度,$M$值的范围一般为0.2到0.4。

双线性修正

当$R<0$时,双线性修正与线性修正是一样的。当$R>0$时,它的修正方式与Goodman修正类似,具体形式为: $$ {\sigma_{a,R}} = \left\{ \begin{array}{l} {\sigma_{a, - 1}} - M{\sigma_m}, {\sigma_m} \le {\sigma_{a,0}} \\ \frac {\sigma_{a,0}(\sigma_u - \sigma_m)} {\sigma_u - \sigma_{a,0}}, {\sigma_m} > \sigma_{a,0} \end{array} \right. $$ 其中$\sigma_{a,0}=\frac{\sigma_{a,-1}}{M+1}$,$\sigma_u$为拉伸强度极限。

Modified Goodman修正

Modified Goodman修正的关系式为: $$ \sigma_{a,R}=\sigma_{a,-1}(1-\frac{\sigma_{m}}{\sigma_u}) $$ 对于一些高强度或者低韧性的材料推荐采用这种修正方式。

Soderberg修正

Soderberg修正的关系式为: $$ \sigma_{a,R}=\sigma_{a,-1}(1-\frac{\sigma_{m}}{\sigma_y}) $$ 其中$\sigma_y$屈服极限。

Gerber parabola修正

Gerber parabola修正与Modified Goodman修正类似,只是第二项采用的是平方形式: $$ \sigma_{a,R}=\sigma_{a,-1}(1-\frac{\sigma _m^2}{\sigma _u^2}) $$

Smith-Watson-Topper修正

Smith、Watson和Topper所定义的修正关系式为: $$ \sigma_{a,R}=-\frac {1}{2} \left( {\sigma _m} - \sqrt {\sigma _m^2 + 4 \sigma _{a, - 1}^2} \right) $$ 这一修正只适用于拉伸区域。

60%压缩准则

在有的程序中允许只使用压缩部分应力来做修正:

其中$\sigma_{c,R}=\sigma_{a,-1}/0.6$是压缩载荷下获得的最大疲劳强度。

IIW中/低残余应力修正

根据残余应力值的大小,对压缩载荷下的疲劳强度进行一定的放大:

采用该方法,请参考:Hobbacher A., IIW recommendations for fatigue design of welded joints and components, IIW-doc. XIII-2460-13, 2013.

FKM参考线修正

根据FKM参考线,平均应力修正分为4个区域:

其中$\sigma_{a, - \infty } = \frac{ \sigma_a} {1 - M}$,$\sigma_{a,0} = \frac{M + 3} {M + 1}$。

采用该方法,请参考: FKM-Richtlinie: Rechnerischer Festigkeitsnachweis für Maschinenbauteile aus Stahl, Eisenguß- und Aluminiumwerkstoffe, 4. Ausgabe. VDMA-Verlag, Frankfurt/M. 2002

2.5 应力时间历程

结构的疲劳是由于动载荷的作用导致的,但一个结构在服役过程中可能同时受多个复杂载荷的作用。如图2.5所示结构,该结构同时受重力、F1、F2的作用。重力是不随时间变化的,而F1、F2是随时间变化的。为了获得结构在当前工况下每个位置的应力历程,需要开展有限元计算。计算的方式一般有两种:

图2.5 同时受重力、F1、F2作用的结构

采用直接法计算的应力历程是最精确的,但其计算量大。而且当结构的单元数目较多,计算时间步较长时,需要存储巨大的应力历程数据。所以,实际计算中采用叠加法。

在叠加法中,可以根据载荷特征分成几个独立的载荷工况(Load Cases)。例如,图2.5中有3个载荷工况:重力(G)、F1和F2。如果在真实情况中,F1和F2的载荷历程是完全一致的,可以将F1+F2合并为一个载荷工况。

若一个结构同时受到N个载荷工况,基对应的载荷历程为$F_i(t)$,采用叠加法计算结构的应力时间历程时,首先,针对每一个载荷,在其加载位置施加单位载荷$f_i^1$,计算得到在该单位载荷作用下结构的应力分布$\sigma_i^1$。则结构在所有载荷工况下的应力时间历程可以通过叠加得到: $$ \sigma (t) = \sum {\sigma _i^1{F_i}(t)} $$ 叠加法只需要计算和存储每个载荷工况单位载荷下的应力分布即可,而载荷时间历程$F_i(t)$可根据实际情况变化,因此其计算量和存储量更加小,更加灵活。但叠加法的前提是各个载荷工况得到的单位载荷应力分布是可以叠加的,但对于一些非线性材料或结构响应而言,这一条件不一定能得到满足。例如,如果材料是拉压不对称的,当$F_i(t)$为正时,应力如果为$\sigma _i^1{F_i}(t)$;但当$F_i(t)$为负时,其应力结果可能变化为$c\sigma _i^1{F_i}(t)$。另外,也存在不同载荷之间需要进行非线性叠加的情况,针对这些非线性叠加的要求,可以通过不同的非线性模型来近似处理。Fatigue中支持的非线性叠加方式有双线性叠加、一维插值、二维插值,如图2.6所示。

图2.6 非线性叠加方式

双线性叠加

为进行双线性叠加,需要先计算结构分别在单位载荷为正和为负的情况下的应力分布,然后判断载荷在不同时间步的正负情况,采用不同的应力分布进行计算。

一维插值

当分析的问题是大变形问题,或者材料的非线性响应很强是时,可以采用一维插值方式。采用一维插值时,需要提前计算结构在几个插值点载荷作用下的应力分布,然后再根据真实载荷所处的区间来插值得到对应的应力分布。

二维插值

与一维插值类似,如果应力分布是与2个参数相关的,需要提前计算结构在几个二维插值点载荷作用下的应力分布,然后再根据真实载荷所处的区间来插值得到对应的应力分布。

2.6 疲劳应力计算

在运用SN曲线进行疲劳分析时,计算所需要的应力幅值$\sigma_a$、平均应力$\sigma_m$都是标量。但应力时间历程计算得到的应力是一个张量,因此需要基于应力张量计算一个标量值,用于疲劳应力分析。计算得到的这个标量值称为疲劳应力,根据材料和结构的不同,疲劳应力的计算方式也有所不同。常用的疲劳应力计算方法有:Von Mises应力、含符号的Von Mises应力、主应力、最大拉应力、最大剪应力等。

Von Mises应力

Von Mises应力的计算公式为: $$ \sigma_{vm}=\sqrt {\frac {1}{2}((\sigma_x-\sigma_y)^2+(\sigma_y-\sigma_z)^2+(\sigma_z-\sigma_x)^2+6(\tau_{xy}^2+\tau_{yz}^2+\tau_{xz}^2))} $$ 如果采用含符号的Von Mises应力: $$ \sigma_{svm}=sign(\sigma_x+\sigma_y+\sigma_z) \cdot \sigma_{vm} $$

主应力

应力张量的三个主应力可以通过求解其特征值获得:$\boldsymbol{\sigma}_p=eig(\sigma(t))$,按照大小有:$\sigma_1>\sigma_2>\sigma_3$。在疲劳应力计算中,可以选取不同的主应力作为疲劳应力。通常选取数值最大的主应力$\sigma_{pnmax}$,这也是疲劳应力计算中默认方式: $$ \sigma_{pnmax}=\left\{ \begin{array}{l} \sigma_1, for \left| \sigma_1 \right| \ge \left| \sigma_3 \right| \\ \sigma_2, for \left| \sigma_3 \right| < \left| \sigma_3 \right| \end{array} \right. $$

临界面分析

临界损伤平面法它考虑了应力应变张量,以顾及到应力应变张量时程,并以此确定其最大损伤平面。临界损伤平面法适用于对比例及非比例两种加载情形进行寿命计算,反映了多轴疲劳危险面的物理意义。临界面方法是找出最有可能发生裂纹的平面,判断裂纹发生可能性采用的是损伤参数。在对结构表面某一点的应力做临界面分析时,会寻找该点处不同平面的损伤参数值,其中损伤参数值最大的平面称为临界平面。但实际计算中不可能遍历所有的平面,只能取有限个平面进行分析,因此需要用户指定平面数目。程序会根据平面数,构造在空间均匀分布的平面集,然后在每个平面上计算损伤参数值,最后确定出面最大损伤的平面作为临界面,以临界面上的应力作为疲劳应力进行下一步的求解。

图2.7 临界面分析

为了进行临界面分析,人们定义了多种损伤参数,常用的有正应力准则、IIW等效应力、Findley准则等,目前Fatigue支持正应力准则的临界面分析,它常用于半韧性的材料,其定义为: $$ \Delta \sigma_{CP-N} = \mathop {\max } \limits_{0 \leqslant \theta \leqslant \pi } \Delta {\sigma _n} $$ 在单轴加载时,正应力准则与主应力准则是相对应的。但在非单轴加载时,采用正应力准则避免了不同方向上的损伤累积计算。

2.7 循环计数

结构在实际工况下承受的交变载荷其载荷幅值往往是不规则变化的,称为变幅载荷或不规则载荷。为了能应用S一N曲线和累计损伤理论进行疲劳分析,首先要把实测载荷历史简化为等效的由恒幅载荷块组成的载荷谱,这类处理方法称为“循环计数方法”(简称“计数法”)。循环计数是对疲劳应力历程与标准应力循环相连接的一个操作。目前Fatigue支持的循环计数方式包括:

不同方法的操作过程可参考:陆明万, 寿比南, 杨国义. 疲劳分析中变幅载荷的循环计数方法. 压力容器, 9(11), 2012

2.8 累积损伤

1924年,Palmgren在估算滚动轴承的寿命时,假设损伤累积与转动次数成线性关系,首先提出疲劳损伤的累积为线性的假设。1945年,Miner结合铝合金的疲劳累积损伤问题,提出了相同的假设并将其公式化,形成著名Palmgren-Miner线性累积损伤准则。Fatigue中也是采用的Palmgren-Miner线性累积损伤准则。

对于一个给定的应力水平$\Delta\sigma_i$,经过循环计数得到其循环次数为$n_i$,而根据SN曲线,在当前应力水平下对应的循环次数为$N_i$,那么根据Palmgren-Miner线性累积损伤准则,结构在所有应力水平循环下的损伤为: $$ D = \sum\limits_i^q {\frac{{{n_i}}}{{{N_i}}}} \leqslant {D_{al}} $$ 当累积损伤$D=1.0$时,认为结构发生了疲劳破坏。但实际的损伤值变化范围很大(在0.1-10)之间变化,因此,不同软件对于发生疲劳破坏的损伤值不一样。

2.9 疲劳计算结果

Fatigue的计算结果输出中,除了上面所提到的累积损伤之外,还有一些其它物理量可以用于疲劳寿命分析和判断。

疲劳寿命

疲劳寿命通过疲劳损伤和施加载荷循环次数计算得到: $$ N_{life}=\frac {N_{applied}} {D} $$ 它是结构疲劳寿命最直接的反映,表示在当前加载条件下,结构各表面结点处可承受的循环次数,一般它的值比较大,在云图时建议取对数再作图。

等效损伤应力水平

对照S-N曲线中双斜线段的不同斜率,等效损伤应力水平的计算公式为: $$ \Delta {\sigma_{eq}} = {\left( {\frac{1}{{{D_{al}}}}\frac{{\sum {{n_i}\Delta \sigma_{i,{\sigma_m} = 0}^{m1}} + \sigma_{R1}^{m1 - m2} \cdot \sum {{n_j}\Delta \sigma_{j,{\sigma_m} = 0}^{m2}} }}{{\sum {{n_i}} + \sum {{n_j}} }}} \right)^{1/{m_1}}} $$ 式中的$i$和$j$分别表示处于SN曲线中的$m1$和$m2$段。容许损伤$D_{al}$默认为1.0。但在SN曲线输入文件中可以改变。

它代表的是在当前的加载循环条件下,相当于S-N曲线中何等应力水平。

利用率 (Utilization Ratio)

利用率的计算公式为: $$ UR = \frac{{\Delta {\sigma _{eq}}}}{{\Delta {\sigma _{R2}}}} $$ 即等效损伤应力水平与S-N曲线中拐点处应力水平的比值,用于判断材料在这一点的疲劳利用率。

3. 使用Fatigue

3.1 Fatigue计算流程和文件组成

Fatigue的计算流程

一般情况下,用户无需了解内部的具体计算过程,只需要了解计算过程中所涉及的文件所起作用,以及在实际计算过程中应如何准备这些文件。Fatigue进行疲劳寿命分析的计算流程与疲劳寿命计算理论相对应,包含以下步骤:

  1. 运行Fatigue程序,读入控制命令
  2. 模型处理:读入不同格式的有限元网格文件
  3. 模型处理:建立有限元模型的结点拓扑关系
  4. 载荷处理:读入载荷工况定义数据
  5. 载荷处理:读入有限元计算得到的应力数据
  6. 载荷处理:对不同载荷历程数据与应力文件数据进行关联
  7. 载荷处理:建立和检查应力数据与模型数据对应关系
  8. 应力计算:组合应力和模型数据计算各个结点应力历程
  9. 应力计算:计算各结点在不同加载条件下的等效疲劳应力
  10. 疲劳计算:采用不同方式对疲劳应力历程进行雨流计数
  11. 疲劳计算:读入SN数据,采用不同疲劳模型计算累积损伤
  12. 结果输出:输出各种计算结果、便于疲劳寿命显示

Fatigue计算的文件组成

图3.1展示了运行Fatigue进行疲劳寿命分析所需要的输入文件以及计算输出文件。下面将分别介绍各个文件的内容和格式,以及Faigue软件的运行方式。

这些文件的准备方式不一样,其中模型文件和应力文件可以通过有限元软件生成;载荷文件需要用户根据实际情况用MATLAB或自编程序基于实验数据生成;SN文件可基于已有了文件模板和实验数据进行修改得到;命令流文件需要用户根据实际计算需求和命令流格式进行编辑生成。这些文件一般都是文本格式的,可以采用文本编辑器打开编辑。

图3.1 Fatigue运行的文件组成

3.2 模型文件

模型文件给出有限元离散后的结构数据,包括结点和单元定义、结点和单元分组等。该数据一般由有限元计算软件输出,目前支持ANSYS的mesh格式文件或CDB文件、ABAQUS的inp格式文件。支持输入的单元类型包括:

Fatigue可以识别文件中的以上单元类型,但并不是所有单元类型都将用于疲劳寿命计算,用于计算的主要是三维体单元和二维面单元。如果需要支持其它单元,可与开发者联系添加。ANSYS和ABAQUS单元类型的对应关系可参考以下链接:

3.3 应力文件

应力文件给出模型中结点处的应力分量值。三维和二维情况下,应力分量都包括:$\sigma_{xx}$,$\sigma_{yy}$,$\sigma_{zz}$,$\sigma_{xy}$,$\sigma_{yz}$,$\sigma_{xz}$。目前支持的输入格式为ANSYS的应力文件格式,用其它软件输出的数据可按算例文件格式进行调整,具体格式为:

COMMENTS LINE
    NODE    SX          SY          SZ          SXY         SYZ         SXZ
       1   3.7834     0.26638      0.0000    -0.3E-01  0.0000      0.0000    
       2  0.44745E-02-0.13820E-01  0.0000     0.1E-01  0.0000      0.0000  

应力文件的准备应注意以下几点:

3.4 载荷文件

载荷文件给出各单位载荷的作用历程。为让用户更灵活地编辑和控制载荷文件,载荷文件以JSON形式给出,具体数据格式为:

{
    "LoadCase1": {
        "repeats": 2000.0,
        "components": {
            "Fx": {
                "scale": 1.0,
                "data": [50.0, 52.5, 54.9, ... ],
                "unit": "N",
                "offset": 0.0
            },
            "Time": {
                "scale": 1.0,
                "data": [0.0, 0.1, 0.2, ... ],
                "unit": "s",
                "offset": 0.0
            }
        }
    },
    "LoadCase2": {
        "repeats": 2000000.0,
        "components": {
            "Fx": {
                "scale": 1.0,
                "data": [50.0, 52.5, 54.9, ... ],
                "unit": "N",
                "offset": 0.0
            },
            "Time": {
                "scale": 1.0,
                "data": [0.0, 0.1, 0.2, ... ],
                "unit": "s",
                "offset": 0.0
            }
        }
    }
}

具体说明如下:

3.5 材料S-N性能文件

材料性能文件给出材料的力学性能,如弹性常数、疲劳性能数据S-N曲线等,文件格式为JSON。下面是一个典型的材料性能文件:

{
    "Header": {
        "author": "Pan Xiao",
        "description": "default test material"
    },

    "Density": {
        "value": 7800.0
    },

    "Elasticity": {
        "youngthModulus": 200.0,
        "poissonRatio": 0.3
    },

    "Fatigue": {
        "style": "custom",
        "comments": "default SN curve from fatlab",
        "sn": {
            "slope1": 3.0,
            "slope2": 5.0,
            "fatigueStrength": 100.0,
            "associatedCycles": 2000000,
            "kneePointStress": 43.3188,
            "kneePointCycles": 10000000,
            "stressMin": 0.0,
            "stressMax": 1000.0,
            "safetyFactor": 1.35,
            "allowableDamage": 1.0
        },
        "meanStress": {
            "mode": "None",
            "sensitivity": 0.2,
            "yieldStrength": 235.0,
            "tensileStrength": 370.0,
            "avoidYielding": 0,
            "extrapolateInCompression": 0
        }
    }
}

以上参数可参考疲劳寿命计算理论简介2.3 计算中的SN曲线参数一节中的相关参数。具体含义如下表所示。

数据位置 参数名称 参数说明
Header/author 作者 用于记录数据或修改数据的人员
Header/description 描述 用于描述这个文件的一些基本信息
Density/value 密度 材料的密度(一般疲劳计算中没有用到)
Elasticity/youngthModulus $E$ 材料的杨氏模量
Elasticity/poissonRatio $\mu$ 材料的泊松比
Fatigue/style 格式 用于表示采用何种疲劳数据格式,一般为custom
Fatigue/comments 描述 用于对当前疲劳数据的说明文字
Fatigue/sn sn SN数据块
sn/slope1 $m_1$ SN曲线第一斜线段的斜率
sn/slope2 $m_2$ SN曲线第二斜线段的斜率
sn/fatigueStrength $\Delta \sigma_{R1}$ 疲劳强度,单位为MPa
sn/associatedCycles $N_{R1}$ 疲劳强度对应的循环次数
sn/kneePointStress $\Delta \sigma_{R2}$ 拐点应力(m1和m2段的分隔点,单位为MPa,可以不提供,程序会根据参数$N_{k1}$和其它参数计算得到)
sn/kneePointCycles $N_{R2}$ 拐点处的循环次数
sn/stressMin $\Delta \sigma_{Rmin}$ 最小截断应力,单位为MPa
sn/stressMax $\Delta \sigma_{Rmax}$ 最大截断应力,单位为MPa
sn/safetyFactor $\gamma_{Mf}$ 安全系数($\ge 1$)
sn/allowableDamage $D_a$ 容许的疲劳损伤值($\ge 1$)
Fatigue/meanStress 平均应力修正数据块
meanStress/mode 方法 平均应力修正方式,可选的参数为:none, linear, bilinear, soderberg, modified-goodman, gerber-parabola, smith-watson-topper, 60-compression, iiw-low-rs, iiw-medium-rs, fkm,具体修正方式及其对应的参数请见平均应力修正部分。
sensitivity $M$ 平均应力灵敏度
yieldStrength $\sigma_{y}$ 屈服极限
tensileStrength $\sigma_{u}$ 拉伸强度极限
avoidYielding 避免屈服,取值为0或者1
extrapolateInCompression 采用压缩外推,取值为0或者1

3.6 运行Fatigue

Fatigue通过用户所给的命令来完成计算任务。有以下三种方法可以向Fatigue中输入命令:

每一个命令对应于一个特定的设置或动作,对于一些比较重要的命令,Fatigue会对执行结果给出一些状态信息。若遇到错误,Fatigue将给出相应的错误信息并且退出运行。Fatigue通常会将这些状态和错误信息输出到屏幕和日志文件。建议对每一个计算任务都通过“input log”命令指定一个日志文件,这样便于跟踪Fatigue的运行状态和错误信息。

命令行参数

当向并行机或远程计算机提交Fatigue计算任务时,向Fatigue传入命令行参数非常重要,比如指定脚本文件。运行形式为:

Fatigue [options]

Fatigue接收以下几个命令行参数:

3.7 命令流文件

Fatigue可以从屏幕或脚本文件中读入命令。但在批处理或并行计算环境中,一般采用脚本文件来控制Fatigue的计算、输入输出过程。将脚本文件作为Fatigue的命令行参数输入形式为:

脚本文件编写规则

Fatigue的脚本文件和命令行有以下几个规则:

  1. Fatigue的每个命令占一行,可以通过“&”符号来继行,Fatigue一次只读入条命令,只有当前命令正确地执行完了,它才读入下一条命令。
  2. Fatigue的注释符号是“#”,所有出现在“#”后的字符都将视为注释。
  3. Fatigue包含以下几个主命令:input, output, mesh, material, loads, life,每个主命令包含有一些动作命令(Action)和可选参数(Options),一般情况下,不同动作命令的执行和可选参数的设置是有顺序的。
  4. 命令的名称是大小写敏感的。主命令可以采用缩写形式,可取主命令的前几个字母(不少于3个)来代替主命令,例如:out、outp、outpu、都被视为output命令,但动作命令和可选参数不能支持缩写形式。
  5. 每个命令行需要以Fatigue的主命令作为开始,包含“=”号的变量赋值行除外。每个命令的各个参数之间通过空格符分开,一个主命令后可以跟多个动作命令和可选参数。
  6. 每个主命令和动作命令的参数可以用变量名代替(关于变量见下文的说明)。

脚本文件的内容

对于一个典型的Fatigue计算分析,在脚本文件中应该有以下几个命令段:

定义脚本中需要用到的相关变量,可以包括数值型变量和字符型变量等。用于命令中需要用到的参数或文件名设置,详见主命令:variable部分。

指定脚本文件,日志信息的输出形式等,详见主命令:input, output部分。

读入指定的模型数据文件,并对模型数据的处理设置可选操作,也可对模型数据进行输出,以检查数据读入的正确性,详见主命令:mesh部分。

控制读入材料性能数据,用于疲劳寿命计算,详见主命令:material部分。

设置载荷历程和应力数据,建立载荷和应力文件之间的对应关系,详见主命令:loads部分。

设置寿命计算所采用的算法、针对的结点集,对计算结果进行输出,控制计算过程中的输出信息等,详见主命令:life部分。

脚本文件示例

下面是一个采用Fatigue方法计算结构的疲劳寿命控制脚本示例。

# output settings Definition

title       = "${Script}" 
input       -echo both
output      log ${title}.log -debug yes

# model data

mesh read model Bolted_joint/model.txt -style ansys -surface 3d
mesh write model Bolted_joint/model -style tetgen

# material data

mater read steel0 sn-steel0.json

# loads data

loads read cases Bolted_joint/loads.json -style json
loads read stress sPret 1d-linear Pret 1.0 Bolted_joint/Pret.fes -style ansys
loads read stress sF5 1d-bilinear F5 -1.0 Bolted_joint/F5-100kN.fes -style ansys
loads read stress sF5 1d-bilinear F5  1.0 Bolted_joint/F5+100kN.fes -style ansys
loads read stress sF6 1d-bilinear F6 -1.0 Bolted_joint/F6-100kN.fes -style ansys
loads read stress sF6 1d-bilinear F6  1.0 Bolted_joint/F6+100kN.fes -style ansys

# life run

life  set surface -mat steel0 -smode pnmax -cmode rainflow
life  run -report 10
life  export Bolted_joint/result-pnmax.txt -style text
life  export Bolted_joint/result-pnmax -style tetgen

3.8 疲劳结果文件

为便于结果显示,Fatigue计算结果文件可以输出成不同的格式,目前支持TEXT和TET两种格式的文件,下面是一个TEXT格式的Fatigue计算结果文件内容片段:

Number Node Dtot UR Napplied Nendurable dSeq dSmax Smax Smin
1 8509 0.000163   0.0547 8.25e+06 5.034e+10  2.527  11.041  5.828  -5.2134
2 8510 7.9972e-06 0.0199 3.75e+06 4.6892e+11 1.2013 6.0441 -8.2466 -14.291
......

文件中各参数的含义为:

变量名 名称 说明
Number 序号 数据行序号
Node 结点编号 对应模型文件中的单元结点编号
Dtot 累积损伤 计算得到的累积损伤
UR 利用率 计算得到的累积损伤
Napplied 载荷循环次数 累积的载荷循环次数
Nendurable 疲劳寿命 疲劳寿命,请见理论说明2.9部分
dSeq 等效应力水平 请见理论说明2.9部分
dSmax 最大应力水平 应力历程中的最大应力水平
Smax 最大应力 应力历程中的最大应力
Smin 最小应力 应力历程中的最小应力

4. 算例分析

下面采用Fatigue对以图4.1中所示铆接连接结构进行疲劳寿命分析为例,介绍如何使用Fatigue程序。该结构在服役过程中受到三个载荷:螺栓预紧力,两个连接口的动载荷F5、F6,分析在这三个载荷作用下结构的疲劳寿命。

图4.1 铆接连接结构

4.1 模型文件

根据Fatigue计算程序的要求,需要提供该结构的有限元网格文件,文件内容参见example/bolted-joint/fem-model.txt,该结构的网格划分如图4.2所示。这是一个由ANSYS生成的网格文件,包含模型的结点和单元信息。Fatigue程序将分析单元和结点之间的拓扑关系,并找出所有的表面结点用于疲劳寿命计算。

图4.2 铆接连接结构的有限元模型

对于该模型文件的读入,可采用以下Fatigue程序的命令:

mesh read model fem-model.txt -style ansys -surface 3d
mesh write model fem-model.tet -style tetgen

第一行命令表示以ANSYS文件格式读入fem-model.txt文件,并告知Fatigue程序这是一个三维体系,需要识别三维模型的表面结点。

第二行命令表示将读入的模型以TETGEN格式输出到文件fem-model.tet,该文件类型可以通过开发者的Moleshow软件进行可视化。

4.2 载荷工况文件

文件内容参见example/bolted-joint/load-cases.json。下面是该文件的内容结构:

{
    "A": {
        "repeats": 750000.0,
        "components": {
            "Pret": {
                "scale": 1.0,
                "data": [ ... ],
                "unit": "x143kN",
                "offset": 0.0
            },
            "F5": {
                "scale": 1.0,
                "data": [ ... ],
                "unit": "x100kN",
                "offset": 0.0
            },
            "F6": {
                "scale": 1.0,
                "data": [ ... ],
                "unit": "x100kN",
                "offset": 0.0
            },
            "Time": {
                "scale": 1.0,
                "data": [ ... ],
                "unit": "s",
                "offset": 0.0
            }
        }
    },
    "B": {
        "repeats": 750000.0,
        "components": {
            "Pret": {
                "scale": 1.0,
                "data": [ ... ],
                "unit": "x143kN",
                "offset": 0.0
            },
            ......
    },
    ......

首先,该载荷文件中包含了4个工况:A、B、C、D,表示该结构将先后经历这4个工况的作用,计算疲劳损伤时,是这4个工况所产生的损伤之和。

4个工况的数据内容都是类似的,以工况A的数据展开说明。其中repeats变量表示A工况会重复750000.0次。例如,如果A工况重复一次表示外部某一旋转部件旋转一圈所造成的载荷-时间数据,那么旋转750000次的情况就可以通过repeats来表示而不需要将数据复制750000次。

A工况包含有4个数据定义:Pret、F5、F6以及Time。其中Time表示载荷数据点对应的时间,而其它3个数据分别表示不同时间点对应的载荷大小。Pret表示预紧载荷,由于预紧载荷是结构在初始状态就存在的,而且后面不随时间变化,所以所有时间点的数据都是1.0。而F5、F6的载荷是随时间变化的。每个数据定义的格式和含义请参见3.4节。

对于该载荷文件的读入,可采用以下Fatigue程序的命令:

loads read cases load-cases.json -style json

该命令表示以JSON数据格式读入载荷工况数据文件。

4.3 应力数据文件

由于结构受到三个载荷作用:螺栓预紧力(Pretension),两个连接口的动载荷F5、F6,需要提前针对每个载荷产生对应的应力文件。

其中螺栓预紧力的应力文件example/bolted-joint/stress-Pretension.fes是通过在结构施加单位螺栓预紧力,开展有限元计算得到的结构应力分布数据。在有限元计算中预紧力的大小不一定要设为1.0,也可以是比较大的载荷。例如,如果真实工况下预紧力为10.0,那么既可以在有限元计算施加1.0的作用力,在载荷定义中Pret的数据值设为10.0;也可以在有限元计算施加2.0的作用力,而在载荷定义中Pret的数据值设为5.0,两者的效果是一样的(也可能通过修改Pret数据的scale值来调整)。其它载荷应力的计算也是类型的。

由于动载荷F5和F6在正和负值条件下产生的应力是不一样的,即存在拉压不对称的情况。因此,针对F5和F6,分别用有限元计算了正负100 kN两种情况下的应力分布数据。这样在进行应力组合时,如果F5在某个时间点为负,则采用负载荷的应力进行计算,反之采用正载荷的应力数据。F5、F6对应的应力文件内容参见example/bolted-joint目录下的stress-F5+100kN.fes、stress-F5-100kN.fes、stress-F6+100kN.fes、stress-F6-100kN.fes。

为了将这些应力文件与载荷工况文件相联系起来,可采用以下Fatigue程序的命令:

loads read stress sPret 1d-linear Pret 1.0 stress-Pretension.fes -style ansys
loads read stress sF5 1d-bilinear F5 -1.0 stress-F5-100kN.fes -style ansys
loads read stress sF5 1d-bilinear F5  1.0 stress-F5+100kN.fes -style ansys
loads read stress sF6 1d-bilinear F6 -1.0 stress-F6-100kN.fes -style ansys
loads read stress sF6 1d-bilinear F6  1.0 stress-F6+100kN.fes -style ansys

第一行命令表示,以ANSYS格式读入stress-Pretension.fes应力文件数据,并与载荷工况文件中的载荷名称“Pret”相关联起来,sPret是对该应力数据给一个名字;1d-linear表示在应力计算中采用线性插值;1.0表示这个应力文件是在螺栓预紧力为1.0的状态下计算得到的。

第二行命令表示,以ANSYS格式读入stress-F5-100kN.fes应力文件数据,并与载荷工况文件中的载荷名称“F5”相关联起来,1d-bilinear表示在应力计算中用一维双线性插值; -1.0表示这个应力文件是在螺栓预紧力为-1.0的状态下计算得到的(这里没有与-100 kN对应,是因为在载荷工况数据中进行了对应的缩放,这里需要用一个负数表示负加载即)。

后面几行的命令功能与第二行的类似。通过这几行命令,Fatigue程序会将应力文件和载荷工况数据联系起来。对于不同的需求,可以对各个载荷文件和应力文件进行不同组合。

4.4 SN数据文件

SN数据文件内容参见example/bolted-joint/sn-steel0.json。文件中变量的具体参数可以参见3.5节说明。SN数据文件的读入采用以下Fatigue程序的命令:

mater read steel0 sn-steel0.json

第一行命令表示读入材料文件sn-steel0.json,并将材料命名为steel0,在后面的疲劳寿命计算中可以针对不同的结构指定不同的材料名称,从面实现采用不同的材料进行计算。

4.5 疲劳寿命计算设置

在疲劳寿命计算中有许多不同的方法可以采用,这些方法的选择可以通过类似以下命令来实现:

life  set surface -mat steel0 -smode pnmax -cmode rainflow
life  run -report 10
life  export result.txt -style text

第一行命令表示,将surface结点集的材料设置为steel0的SN数据,疲劳应力计算方法采用最大主应力方式(pnmax),循环计算采用雨流计数方法(rainflow)。

第二行命令表示开始进行疲劳寿命计算,在计算过程中的输出频率为10。

第三行命令表示将疲劳寿命计算结果以TEXT格式输出到results.txt文件。

图4.3是计算得到的疲劳寿命云图,该云图是采用Moleshow进行显示。

图4.3 计算得到的疲劳寿命云图

4.6 命令流文件

以上计算过程的命令流文件参见example/bolted-joint/script-run.scp

5. 命令参考

本章主要给出Fatigue中所用到的主命令及参数设置。

5.1 input主命令

作用

用于设置脚本文件相关的选项。

形式

input a.scp
      sub b.scp
      -echo [none|screen|logfile|both]

说明

示例

input a.scp –echo both

5.2 output主命令

作用

用于设置Fatigue运行信息输出的相关的选项。

形式

output log aa.log
       -debug [yes|no]

说明

示例

output log ${Title}.log –debug yes

5.3 variable主命令

用户变量

Fatigue可以在脚本文件中定义用户变量,用于做一些初步的计算和设置。Variable命令主要用于在Fatigue脚本中定义、删除、更新用户变量。Fatigue的变量类型分为数值型和字符型两种。变量名只能是字母、数字或下划线的组合,每个变量名要以字母开头,变量名的长度没有限制,变量名是大小写敏感的。

数值型变量

字符型变量

Fatigue系统变量

为了便于计算和输出,Fatigue定义了一些系统变量,可在脚本文件中使用:

变量名 类型 维度 变量含义
Pi 数值 1 x 1 3.1415926
Unit 数值 1024 x 1024 单位对称阵,用于生成不同大小的矩阵
Ones 数值 1024 x 1024 由1组成的矩阵,用于生成不同大小的矩阵
Inf 数值 1 x 1 无限大(实际上是一个很大的浮点数)
Title 字符 动态 项目名称(可更改)
Script 字符 动态 脚本文件名称
Time 数值/字符 1 x 1 数值表示运行时间, 字符表示当前日期时间

variable命令的使用

作用

设置和使用变量。

形式
variable a value
         b @Reduce …
         delete a b c
         print a b c
s1 = “hello ${a}”
s2 = “hello ${&b}”
d = [1.1, 1.2; 2.1, 2.2]
h = { X[2][1] + Pi }
h = []
说明
示例
var a1 sqrt(2)
a = 1.2 + a1
b = Ones[:3][:4]
b = "This is a test matrix"
c = a + b + sqrt(3)
d = [1.1, 1.2; 2.1, 2.2]
e = "Hello Fatigue"
f = "a = ${a}, c = [${c}]."
g = @Reduce –mode max X[:][1]
h = { X[2][1] + Pi }

5.4 mesh主命令

作用

控制模型单元和结点数据的读入和输出。

形式

mesh read model fileName options
     write model fileName options
     select node selName [box, bool] parameters

说明

示例

mesh read model Bolted_joint/model.txt -style ansys -surface 3d
mesh write model Bolted_joint/model -style tetgen
mesh write model frame_part1s.tet -style tet -select part1s
mesh select node part1 box 0.0 2000.0 -400.0 400.0 0.0 2000.0
mesh select node part1s bool intersect part1 surface

5.5 material主命令

作用

读入材料性能数据

形式

material read matname filename

说明

示例

mater read steel0 sn-steel0.json

5.6 loads主命令

作用

用于读入载荷历程文件、应力文件、关联载荷历程数据与应力文件数据、对载荷进行编辑。

形式

loads read cases fileName -style [json] 
      read stress stressName interpType loadName coordinate fileName -style [ansys]

说明

示例

loads read cases Bolted_joint/loads.json -style json
loads read stress sPret 1d-linear Pret 1.0 Bolted_joint/Pret.fes -style ansys
loads read stress sF5 1d-bilinear F5 -1.0 Bolted_joint/F5-100kN.fes -style ansys
loads read stress sF5 1d-bilinear F5  1.0 Bolted_joint/F5+100kN.fes -style ansys
loads read stress sF6 1d-bilinear F6 -1.0 Bolted_joint/F6-100kN.fes -style ansys
loads read stress sF6 1d-bilinear F6  1.0 Bolted_joint/F6+100kN.fes -style ansys
loads read stress sDyn 1d-timestep Dyna 10 frame_step10.tab -style tet -select part1s

5.7 life主命令

作用

用于控制结构疲劳寿命计算。

形式

life  set nodeSet -mat matName -smode stressMode -cmode rainflowMode
      run -report n
      export fileName -style styleName

说明

示例

life  set surface -mat steel0 -smode pnmax -cmode rainflow
life  run -report 10
life  export Bolted_joint/result-pnmax.txt -style text
life  export Bolted_joint/result-pnmax -style tet