## 2 Method Proposed
### Fatigue Damage Simulation Algorithm (UMAT)  
User-defined material mechanical behavior (UMAT) is a FORTRAN interface program provided by ABAQUS to users to customize material properties, and thus an undefined material modeled in ABAQUS software can be realized by UAMT. The ABAQUS software can call these material  
Figure 3: Cellular transformation rules.  
subroutines and analyze the structure by exchanging data with them. Therefore, in this paper, a UMAT is compiled to simulate the fatigue damage accumulation of steel wires in ABAQUS software according to Equation (3).  
The algorithm of user-defined material subroutine (UMAT) based on the fatigue damage model in Section 2.1 is shown in Figure 4. Four state variables are utilized in the UMAT. STATEV(1) and STATEV(2) store the stress values calculated in the loading analysis and unloading analysis steps, respectively. The role of STATEV(3) is to store the current elastic modulus of the material in each analysis step. STATEV(4) is used to store the accumulated damage in each analysis step.  
Figure 4: Flow chart of user-defined material subroutine (UMAT) algorithm.  
After UMAT is called, it will determine whether the current step inputted from ABAQUS software is the first step. If the step is the first step, which means that there is no damage in each element, then the current elastic modulus is the initial elastic modulus. If the step is not the first step but is an unloading step, then the current elastic modulus equals the elastic modulus of the above step. If the step is not the first step but is a loading step, the damage is calculated by using the fatigue damage model in Section 2.1. Additionally, the current elastic modulus is deducted from the accumulation of damage, i.e.,  
\[E\ =\ E_{0}\times(1-D) \tag{7}\]  
where, \(E\) is the current elastic modulus, \(E_{0}\) is the initial elastic modulus and \(D\) is the accumulated damage variable. Before calculating the damage variable, it is necessary to calculate the stress difference between the previous loading and unloading step, that is, the stress range. Using the calculated stress range, the damage increment is calculated based on Equation (3). The damage increment refers to the damage produced after a cyclic load as follows:  
\[\Delta D_{f}\ =\ D_{f}(S,N-1)-D_{f}(S,N-2) \tag{8}\]  
where, \(N\) is the number of the loading step, \(\Delta D_{f}\) is the damage increment produced after the previous cyclic load, and \(S\) is the stress difference between the previous loading and unloading step. The damage increment is then added into the damage variable that has been stored in the STATEV(4). The calculated damage variable refers to the accumulated damage before the current step.  
Notably, the cycle block used in this paper represents certain times of loading, such as 5000 times, 10,000 times and 20,000 times, namely accuracy in this paper. It is well-grounded that the value of damage is invariable during each cycle block but accumulates and updates in the beginning of the next cycle block on the basis of the state variables. The relationship among the loading number, cyclic block, calculation accuracy and analysis step can be expressed as follows:  
\[N_{cb}\ =\ INT\Big{(}\frac{N}{n}\Big{)} \tag{9}\]  
\[N_{cb}\ =\ (N_{as}+1)/2\ \text{if}\ N_{as}\ \text{is}\ \text{odd} \tag{10}\]  
\[N_{cb}\ =\ N_{as}/2\ \text{if}\ N_{as}\ \text{is}\ \text{even} \tag{11}\]  
where, \(N_{cb}\) is the number of cyclic blocks, \(N\) is the total number of cyclic loads, \(n\) is computational accuracy, \(N_{as}\) is the analysis step and _INT( )_ is the integral function.