We note in passing that expressions (4.24) and (4.25) could be written in the standard finite element form $$ \Delta V ^ {n} = \int_ {V} \boldsymbol {B} ^ {T} \boldsymbol {D} \epsilon d V + \Delta \boldsymbol {f} ^ {n} $$ $$ \boldsymbol {K} ^ {(e)} = \int_ {V} \boldsymbol {B} ^ {T} \boldsymbol {D} \boldsymbol {B} d V, \tag {4.26} $$ since for the linear element considered $$ \boldsymbol {B} = \left[ - \frac {1}{L}, \frac {1}{L} \right] $$ $$ \boldsymbol {D} = \boldsymbol {E} $$ $$ \int_ {V} d V = A L. \tag {4.27} $$ The displacements at time $t_{n+1}$ are then obtained by simple accumulation as $$ \varphi^ {n + 1} = \varphi^ {n} + \Delta \varphi^ {n}. \tag {4.28} $$ The stress increment is given from (4.1) and (4.7) to be $$ \Delta \sigma^ {n} = E \Delta \epsilon_ {e} ^ {n} = E \left(\Delta \epsilon^ {n} - \Delta \epsilon_ {v p} ^ {n}\right), \tag {4.29} $$ or $$ \Delta \sigma^ {n} = E \left(\frac {\Delta \phi_ {1} ^ {n} - \Delta \phi_ {2} ^ {n}}{L} - \dot {\epsilon} _ {v p} ^ {n} \Delta t _ {n}\right), \tag {4.30} $$ where $\Delta\phi_{1}^{n}$ and $\Delta\phi_{2}^{n}$ are the displacement changes at the nodes of the element. The stress at time $t_{n+1}$ is then given by $$ \sigma^ {n + 1} = \sigma^ {n} + \Delta \sigma^ {n}. \tag {4.31} $$ The total viscoplastic strain at time $t_{n+1}$ is $$ \epsilon_ {v p} ^ {n + 1} = \epsilon_ {v p} ^ {n} + \Delta \epsilon_ {v p} ^ {n}, \tag {4.32} $$ and finally the viscoplastic strain rate at $t_{n+1}$ is given, from (4.14) as $$ \dot {\epsilon} _ {v p} ^ {n + 1} = \gamma \left[ \sigma^ {n + 1} - \left(\sigma_ {Y} + H ^ {\prime} \epsilon_ {v p} ^ {n + 1}\right) \right]. \tag {4.33} $$ In employing the Euler scheme for time-stepping, we are effectively linearising the variation of quantities over the increment. Therefore the total stresses $\sigma^{n+1}$ obtained by accumulating all such stress increments may not be in exact equilibrium with the applied forces. It is therefore necessary to introduce an equilibrium correction procedure into the numerical solution algorithm. The simplest approach is to evaluate the out-of-balance nodal forces at the end of each time step and consider these forces as additional forces to be applied at the beginning of the next time increment. The out-of-balance or residual forces, $\psi$ , for the general element are given as the algebraic sum of the applied nodal loads and the nodal forces equivalent to the element stress, so that $$ \psi^ {n + 1} = A \sigma^ {n + 1} \left[ \begin{array}{c} 1 \\ - 1 \end{array} \right] + f ^ {n + 1}, \tag {4.34} $$ in which $\sigma^{n+1}$ is the element stress and $f^{n+1}$ are the total applied forces at time $t_{n+1}$ . These residual forces are then added to the pseudo forces to give for the next time increment $$ \Delta V ^ {n + 1} = A E \dot {\epsilon} _ {v p} ^ {n + 1} \Delta t _ {n + 1} \left[ \begin{array}{c} 1 \\ - 1 \end{array} \right] + \Delta f ^ {n + 1} + \psi^ {n + 1}. \tag {4.35} $$ This sequence is repeated for each time step until solution is either obtained for the desired time duration or until steady state conditions are achieved. Steady state conditions are deemed to have been achieved when the viscoplastic strain rate, $\dot{\epsilon}_{vp}^{n}$ , becomes tolerably small. # 4.4 Limiting time-step length The critical time-step length for viscoplastic solution using the Euler time marching scheme has been established by Cormeau. $^{(1)}$ For the uniaxial case considered in this chapter the limiting value is $$ \Delta t \leqslant \frac {\sigma_ {Y}}{\gamma E}. \tag {4.36} $$ Alternatively the time-step length can be limited according to a semi-empirical relationship. Such an approach is essential for some general continuum problems where a theoretical value of the critical time-step length may not exist. The most obvious procedure is to limit the viscoplastic strain increment to be some specified factor, $\tau$ , of the total current strain, $$ \dot {\epsilon} _ {v p} ^ {n} \Delta t _ {n} \leqslant \tau \epsilon^ {n}. \tag {4.37} $$ Since each element generally has a different strain level, expression (4.37) will yield a different limiting step value when applied to each element in turn. Therefore the limiting value is restricted according to $$ \Delta t _ {n} \leqslant \tau \left[ \frac {\epsilon^ {n}}{\dot {\epsilon} _ {v p} {} ^ {n}} \right] _ {\min}, \tag {4.38} $$ where the minimum value of $\Delta t_{n}$ obtained after considering each element is taken. Stability of the solution process is also aided by restricting the length of successive time steps according to $$ \Delta t _ {n + 1} \leqslant k \Delta t _ {n}, \tag {4.39} $$ where k is a specified constant generally chosen in the range 1·5–2·0. # 4.5 Computational procedure Before proceeding with the development of a computer code for the solution of one-dimensional viscoplastic problems we will first summarise the essential steps of the computation. Solution to the problem must commence from the known initial conditions at time t = 0 which of course correspond to the initial elastic response. At this stage $\varphi^{0}, f^{0}, \epsilon^{0}, \sigma^{0}$ are known and $\epsilon_{vp}^{0} = 0$ . The general procedure for advancing the solution from a time $t_{n}$ to time $t_{n+1}$ is the following. Stage I At time $t = t_{n}$ the values of $\sigma^{n}$ , $\epsilon^{n}$ , $\epsilon_{vp}^{n}$ and $f^{n}$ are known for each element and the nodal displacements are also known. The viscoplastic strain rate for each element is then evaluated according to (4.14) as $$ \dot {\epsilon} _ {v p} ^ {n} = \gamma \left[ \sigma^ {n} - \left(\sigma_ {Y} + H ^ {\prime} \epsilon_ {v p} ^ {n}\right) \right]. \tag {4.40} $$ Stage 2 (a) Compute the displacement increments, $\Delta \varphi^n$ , according to (4.22)-(4.25), as $$ \Delta \varphi^ {n} = [ K ] ^ {- 1} \Delta V ^ {n}, $$ where $$ \Delta V ^ {n} = A E \dot {\epsilon} _ {v p} ^ {n} \Delta t _ {n} \left[ \begin{array}{c} 1 \\ - 1 \end{array} \right] + \Delta f ^ {n}, $$ and the stiffness matrix for an individual element is $$ \boldsymbol {K} ^ {(e)} = \frac {E A}{L} \left[ \begin{array}{c c} 1 & - 1 \\ - 1 & 1 \end{array} \right]. $$ (b) Calculate the stress increment $\Delta\sigma^{n}$ and the viscoplastic strain increment $\Delta\epsilon_{vp}^{n}$ for each element as $$ \Delta \sigma^ {n} = E \left(\frac {\Delta \phi_ {1} ^ {n} - \Delta \phi_ {2} ^ {n}}{L} - \dot {\epsilon} _ {v p} ^ {n} \Delta t _ {n}\right), $$ $$ \Delta \epsilon_ {v p} ^ {n} = \dot {\epsilon} _ {v p} ^ {n} \Delta t _ {n}. $$ Stage 3 Determine the total displacements, stresses and viscoplastic strain $$ \varphi^ {n + 1} = \varphi^ {n} + \Delta \varphi^ {n}, $$ $$ \sigma^ {n + 1} = \sigma^ {n} + \Delta \sigma^ {n}, $$ $$ \epsilon_ {v p} ^ {n + 1} = \epsilon_ {v p} ^ {n} + \Delta \epsilon_ {v p} ^ {n}. $$ Stage 4 Calculate the viscoplastic strain rate for each element $$ \dot {\epsilon} _ {v p} ^ {n + 1} = \gamma [ \sigma^ {n + 1} - (\sigma_ {Y} + H ^ {\prime} \epsilon_ {v p} ^ {n + 1}) ]. $$ Stage 5 Apply the equilibrium correction. Evaluate the residual forces, for each element, as $$ \psi^ {n + 1} = A \sigma^ {n + 1} \left[ \begin{array}{c} 1 \\ - 1 \end{array} \right] + f ^ {n + 1}. $$ Add these into the vector of incremental pseudo loads for use in the next time step $$ \Delta V ^ {n + 1} = A E \dot {\epsilon} _ {v p} ^ {n + 1} \Delta t _ {n + 1} \left[ \begin{array}{c} 1 \\ - 1 \end{array} \right] + \Delta f ^ {n + 1} + \psi^ {n + 1}. $$ Stage 6 Check to see if the viscoplastic strain rate $\dot{\epsilon}_{vp}^{n+1}$ in each element has become tolerably small. If so, steady state conditions have been reached and the solution is either terminated or the next load increment is applied. If $\dot{\epsilon}_{vp}^{n+1}$ is non-zero return to Stage 1 and repeat the entire procedure for the next time step. # 4.6 Program structure The organisation of the one-dimensional viscoplastic program is shown in Fig. 4.4 where, in particular, the order in which subroutines are accessed is indicated. The operations undertaken by the program are those described in Section 4.5. Many of the subroutines employed are common to the one-dimensional plasticity application described in Chapter 3 and, since they are used in the present program without modification, the reader will be referred to the appropriate section for details. Only the additional subroutines necessary to complete the computer package will be described in this chapter. With reference to Fig. 4.4 the following subroutines have been already described where indicated below: Subroutine ASSEMB —Section 3.4.2 Subroutine GREDUC—Section 3.4.3 Subroutine BAKSUB —Section 3.4.4 Subroutine RESOLV —Section 3.4.5 Subroutine RESULT —Section 3.5 Subroutine INITIAL —Section 3.6\* Also, Subroutine DATA described in Section 3.2 is used with some minor modifications. A viscoplastic material in one dimension requires five individual quantities to describe it completely. Thus NPROP becomes 5 and the following quantities must be specified as material properties. PROPS (NUMAT, 1)—The elastic modulus, E, of the material PROPS (NUMAT, 2)—The cross-sectional area, A, of the element PROPS (NUMAT, 3)—The uniaxial yield stress, $\sigma_{Y}$ , of the material PROPS (NUMAT, 4)—The linear strain hardening parameter, $H'$ , for the material PROPS (NUMAT, 5)—The fluidity parameter, $\gamma$ , controlling the viscoplastic strain rate. \* Subroutine NONAL, described in Section 3.3, is also employed but with IITER now replaced by the time step index, ISTEP. ![](images/page-115_f42e61708dc6ef92588fcf0e5382f1942a78c61947d1e760ed792a6bb99722ed.jpg)
flowchart ```mermaid graph TD A["START"] --> B["DATA\nInput data defining geometry, loading, boundary conditions, material properties, etc."] B --> C["STUNVP\nCalculate the stiffness matrix for each element"] C --> D["ASSEMB\nAssemble the element loads and stiffnesses to give the global stiffness matrix and load vector"] D --> E["GREDUC, BAKSUB & RESOLV\nSolve the resulting system of simultaneous equations for the displacements φ"] E --> F["INCVP\na) Evaluate quantities at the end of the timestep\nb) Calculate the pseudo loads for application during the next time step"] F --> G["CONVP\nCheck for convergence of the time stepping process to steady state conditions"] G --> H["RESULT\nPrint the results for the current timestep"] H --> I["END"] I --> J["LOAD INCREMENT LOOP"] J --> K["TIME STEPPING LOOP"] K --> A ```
Fig. 4.4 Operational sequence for the one-dimensional viscoplastic stress analysis program. Input data are also received by this segment which controls the time-stepping algorithm. The following information is input: TAUFT The parameter $\tau$ discussed in Section 4.4 DTINT The time-step length for the first time step FTIME The factor k defined in (4.39) which limits the relative length of successive time steps The additional subroutines which are required will now be described in turn. # 4.7 Element stiffness subroutine STUNVP In all stages of the viscoplastic solution the elastic element stiffness matrix is employed, as indicated in (4.25). Consequently the structure of subroutine STUNVP, which evaluates the stiffness matrix for each element in turn, is straightforward and can be presented without further comment. ```fortran SUBROUTINE STUNVP SNVP 1 C**************************SNVP 2 C SNVP 3 C *** CALCULATES ELEMENT STIFFNESS MATRICES SNVP 4 C SNVP 5 C**************************SNVP 6 COMMON/UNIM1/NPOIN,NELEM,NBOUN,NLOAD,NPROP,NNODE,IINCS,ISTEP, SNVP 7 . KRESL,NCHEK,TOLER,NALGO,NSVAB,NDOFN,NINCS,NEVAB, SNVP 8 . NSTEP,NOUTP,FACTO,TAUFT,DTINT,FTIME,FIRST,PVALU, SNVP 9 . DTIME,TTIME SNVP 10 COMMON/UNIM2/PROPS(5,5),COORD(26),LNODS(25,2),IFPRE(52), SNVP 11 . FIXED(52),TLOAD(25,4),RLOAD(25,4),ELOAD(25,4), SNVP 12 . MATNO(25),STRES(25,2),PLAST(25),XDISP(52), SNVP 13 . TDISP(26,2),TREAC(26,2),ASTIF(52,52),ASLOD(52), SNVP 14 . REACT(52),FRESV(1352),PEFIX(52),ESTIF(4,4),VIVEL(25) SNVP 15 REWIND 1 SNVP 16 DO 10 IELEM=1,NELEM SNVP 17 LPROP=MATNO(IELEM) SNVP 18 YOUNG=PROPS(LPROP,1) SNVP 19 XAREA=PROPS(LPROP,2) SNVP 20 NODE1=LNODS(IELEM,1) SNVP 21 NODE2=LNODS(IELEM,2) SNVP 22 ELENG=ABS(COORD(NODE1)-COORD(NODE2)) SNVP 23 FMULT=YOUNG*XAREA/ELENG SNVP 24 ESTIF(1,1)=FMULT SNVP 25 ESTIF(1,2)=-FMULT SNVP 26 ESTIF(2,1)=-FMULT SNVP 27 ESTIF(2,2)=FMULT SNVP 28 WRITE(1) ESTIF SNVP 29 10 CONTINUE SNVP 30 RETURN SNVP 31 END SNVP 32 ``` SNVP 16 Rewind the file on which the stiffness matrix of each element will be stored. SNVP 17 Loop over each element. SNVP 18 Identify the material property of the current element. SNVP 19–20 Set YOUNG equal to the material elastic modulus and XAREA equal to the cross-sectional area. SNVP 21–22 Identify the node numbers of the element. SNVP 23 Calculate the element length. SNVP 24 Compute EA/L as FMULT. SNVP 25-28 Evaluate the components of the element stiffness matrix according to (4.25). SNVP 29 Write the element stiffness matrix on to disc file. SNVP 30 End of loop over each element. # 4.8 Subroutine INCVP for the evaluation of end of time-step quantities and equilibrium correction terms This subroutine evaluates quantities such as stresses and viscoplastic strains at the end of the current time step and also calculates the loading to be applied during the next time step. Essentially it undertakes Stages 3–5 described in Section 4.5. All quantities at the end of time step n are calculated as $()^{n+1}$ . The program presented is restricted to loading which is applied in discrete increments and is assumed to remain constant during the time-stepping process for any given increment. Thus in (4.35) $\Delta f^{n} = 0$ for all stages other than the first time step of a particular load increment. Subroutine INCVP is now presented and described. ```fortran SUBROUTINE INCVP INVP 1 C********** INVP 2 C INVP 3 C *** CALCULATES INTERNAL EQUIVALENT NODAL FORCES INVP 4 C INVP 5 C********** INVP 6 COMMON/UNIM1/NPOIN,NELEM,NBOUN,NLOAD,NPROP,NNODE,IINCS,ISTEP, INVP 7 . KRESL,NCHEK,TOLER,NALGO,NSVAB,NDOFN,NINCS,NEVAB, INVP 8 . NSTEP,NOUTP,FACTO,TAUFT,DTINT,FTIME,FIRST,PVALU, INVP 9 . DTIME,TTIME INVP 10 COMMON/UNIM2/PROPS(5,5),COORD(26),LNODS(25,2),IFPRE(52), INVP 11 . FIXED(52),TLOAD(25,4),RLOAD(25,4),ELOAD(25,4), INVP 12 . MATNO(25),STRES(25,2),PLAST(25),XDISP(52), INVP 13 . TDISP(26,2),TREAC(26,2),ASTIF(52,52),ASLOD(52), INVP 14 . REACT(52),FRESV(1352),PEFIX(52),ESTIF(4,4),VIVEL(25) INVP 15 DO 10 IELEM=1,NELEM INVP 16 DO 10 IEVAB=1,NEVAB INVP 17 10 ELOAD(IELEM,IEVAB)=0.0 INVP 18 DNEXT=FTIME*DTIME INVP 19 DO 30 IELEM=1,NELEM INVP 20 LPROP=MATNO(IELEM) INVP 21 YOUNG=PROPS(LPROP,1) INVP 22 XAREA=PROPS(LPROP,2) INVP 23 YIELD=PROPS(LPROP,3) INVP 24 HARDS=PROPS(LPROP,4) INVP 25 GAMMA=PROPS(LPROP,5) INVP 26 NODE1=LNODS(IELEM,1) INVP 27 NODE2=LNODS(IELEM,2) INVP 28 ELENG=ABS(COORD(NODE1)-COORD(NODE2)) INVP 29 IF(COORD(NODE2).GT.COORD(NODE1)) STRAN=(XDISP(NODE2)-XDISP(NODE1)) INVP 30 ./ELENG INVP 31 IF(COORD(NODE2).LT.COORD(NODE1)) STRAN=(XDISP(NODE1)-XDISP(NODE2)) INVP 32 ./ELENG INVP 33 STRES(IELEM,1)=STRES(IELEM,1)+(STRAN-VIVEL(IELEM)*DTIME)*YOUNG INVP 34 PLAST(IELEM)=PLAST(IELEM)+VIVEL(IELEM)*DTIME INVP 35 IF(STRES(IELEM,1).LT.0.0) YIELD=-YIELD INVP 36 PREYS=YIELD+HARDS*PLAST(IELEM) INVP 37 IF(ABS(STRES(IELEM,1)).LE.ABS(PREYS)) GO TO 20 INVP 38 VIVEL(IELEM)=GAMMA*(STRES(IELEM,1)-(YIELD+HARDS*PLAST(IELEM))) INVP 39 SNTOT=(TDISP(NODE2,1)-TDISP(NODE1,1))/ELENG INVP 40 DELTM=TAUFT*ABS(SNTOT/VIVEL(IELEM)) INVP 41 IF(DELTMLT.DNEXT) DNEXT=DELTM INVP 42 GO TO 30 INVP 43 20 VIVEL(IELEM)=0.0 INVP 44 ```
30 CONTINUEINVP45
DTIME=DNEXTINVP46
IF(ISTEP.EQ.1) DTIME=DTINTINVP47
DO 50 IELEM=1,NELEMINVP48
LPROP=MATNO(IELEM)INVP49
YOUNG=PROPS(LPROP,1)INVP50
XAREA=PROPS(LPROP,2)INVP51
FACTR=(YOUNG*VIVEL(IELEM)*DTIME-STRES(IELEM,1))*XAREAINVP52
IF(COORD(NODE2).GT.COORD(NODE1)) GO TO 40INVP53
ELOAD(IELEM,1)= FACTRINVP54
ELOAD(IELEM,2)=-FACTRINVP55
GO TO 50INVP56
40 ELOAD(IELEM,1)=-FACTRINVP57
ELOAD(IELEM,2)= FACTRINVP58
50 CONTINUEINVP59
DO 60 IELEM=1,NELEMINVP60
DO 60 IEVAB=1,NEVABINVP61
60 ELOAD(IELEM,IEVAB)=ELOAD(IELEM,IEVAB)+TLOAD(IELEM,IEVAB)INVP62
RETURNINVP63
ENDINVP64
INVP 16–18 Zero the array in which the pseudo loads for the next time step will be stored. INVP 20 Loop over each element. INVP 21 Identify the element material property number. INVP 22–26 Store the elastic modulus as YOUNG, the cross-sectional area as XAREA, the uniaxial yield stress as YIELD, the uniaxial hardening parameter as HARDS and the fluidity parameter as GAMMA. INVP 27–28 Identify the element node numbers. INVP 29 Evaluate the length of the element. INVP 30–33 Calculate the element strain so that a tensile strain is positive. INVP 34 Evaluate the total current stress $\sigma^{n+1}$ according to (4.30) and (4.31). INVP 35 Evaluate the total viscoplastic strain $\epsilon_{vp}^{n+1}$ , according to (4.32). INVP 36 For a compressive stress take a negative value of the initial yield stress. INVP 37 Compute the current yield level $\sigma_{Y} + H^{\prime}\epsilon_{vp}^{n + 1}$ INVP 38 If the current stress is less than the current yield stress, avoid evaluation of the viscoplastic strain rate. INVP 39 Otherwise evaluate the viscoplastic strain rate according to (4.33). INVP 40–42 Evaluate the next time-step length according to (4.38). INVP 44 For elastic elements set the viscoplastic strain rate to zero. INVP 45 End of element loop. INVP 47 For the first timestep of a load increment choose the timestep as the initial value. INVP 48 Enter element loop to evaluate pseudo loads, $\Delta V^{n+1}$ , for the next time step. INVP 49 Identify the element material property number. INVP 50–51 Store the elastic modulus as YOUNG and the cross-sectional area as XAREA. INVP 52 Evaluate the factor $AE \dot{\epsilon}_{vp}^{n+1} \Delta t_{n+1} + A \sigma^{n+1}$ . INVP 53–62 Evaluate $\Delta V^{n+1}$ according to (4.34) and (4.35), taking the appropriate signs for tensile or compressive stresses and strains. Note that $f^{n+1} + \Delta f^{n+1}$ is the total load applied for time step $n+1$ which is stored as TLOAD. # 4.9 Convergence monitoring subroutine, CONVP Convergence of the numerical process to the steady state solution must be monitored by comparing, in some way, the values of the viscoplastic strain rate determined during each time step. This can be done in several ways and in this section we describe a procedure based on a global convergence check only. In particular we will assume that steady state conditions have been achieved if $$ \frac {\sum_ {i = 1} ^ {M} \left| \left(\Delta \epsilon_ {v p} {} ^ {n}\right) _ {i} \right|}{\sum_ {i = 1} ^ {M} \left| \left(\Delta \epsilon_ {v p} {} ^ {1} {} _ {i}\right) \right|} \times 1 0 0 \leqslant \text { TOLER }, \tag {4.41} $$ where M denotes the total number of elements in the problem and || denotes the absolute value. The multiplication factor of 100 on the left-hand side allows the specified tolerance factor TOLER to be considered as a percentage term. Equation (4.41) states that steady state conditions are deemed to have been achieved if the sum of the absolute values of the strain increment for any time step is less than or equal to TOLER times the corresponding value for the first time step. For practical purposes a value of TOLER $\leqslant 1\cdot0$ (i.e. 1%) is generally adequate. Parameter NCHEK indicates convergence of the solution to steady state, where; NCHEK = 1 indicates that the solution is converging to steady state, with the viscoplastic strain increment reducing between two successive time steps. NCHEK = 999 indicates a divergence, with the viscoplastic strain increment increasing between two successive time steps. NCHEK = 0 indicates that steady state conditions have been achieved. Subroutine CONVP is now presented and described. SUBROUTINE CONVP CNVP 1 C*******************************CNVP 2 C CNVP 3 C *** CHECKS FOR SOLUTION CONVERGENCE CNVP 4 C . CNVP 5 C*******************************CNVP 6 COMMON/UNIM1/NPOIN, NELEM, NBOUN, NLOAD, NPROP, NNODE, IINCS, ISTEP, CNVP 7 KRESL, NCHEK, TOLER, NALGO, NSVAB, NDOFN, NINCS, NEVAB, CNVP 8 NSTEP, NOUTP, FACTO, TAUFT, DTINT, FTIME, FIRST, PVALU, CNVP 9 DTIME, TTIME CNVP 10 COMMON/UNIM2/PROPS(5,5), COORD(26), LNODS(25,2), IFPRE(52), CNVP 11 FIXED(52), TLOAD(25,4), RLOAD(25,4), ELOAD(25,4), CNVP 12 MATNO(25), STRES(25,2), PLAST(25), XDISP(52), CNVP 13 TDISP(26,2), TREAC(26,2), ASTIF(52,52), ASLOD(52), CNVP 14 REACT(52), FRESV(1352), PEFIX(52), ESTIF(4,4), VIVEL(25) CNVP 15 NCHEK=1 CNVP 16 TOTAL=0.0 CNVP 17 DO 10 IELEM=1, NELEM CNVP 18 TOTAL=TOTAL+ABS(VIVEL(IELEM))*DTIME CNVP 19 IF(ISTEP.EQ.1) FIRST=TOTAL CNVP 20 IF(FIRST.EQ.0.0) GO TO 20 CNVP 21 RATIO=100.0*TOTAL/FIRST CNVP 22 GO TO 30 CNVP 23 20 RATIO=0.0 CNVP 24 30 CONTINUE CNVP 25 IF(RATIO.LE.TOLER) NCHEK=0 CNVP 26 IF(RATIO.GT.PVALU) NCHEK=999 CNVP 27 40 PVALU=RATIO CNVP 28 WRITE(6,900) TTIME CNVP 29 900 FORMAT(1H0,5X,12HTOTAL TIME =,E17.6) CNVP 30 WRITE(6,910) NCHEK,RATIO CNVP 31 910 FORMAT(1H0,5X,18HCONVERGENCE CODE =,I4,3X,28HNORM OF RESIDUAL SUM CNVP 32 .RATIO =,E14.6) CNVP 33 RETURN CNVP 34 END CNVP 35 CNVP 16 Set the indicator monitoring convergence to 1. This will be reset later in the subroutine if necessary. CNVP 17-19 Compute $$ \sum_ {i = 1} ^ {M} \left| \left(\Delta \epsilon_ {v p} ^ {n}\right) _ {i} \right| $$ for the current time step as required in (4.41). CNVP 20 For the first time step evaluate the denominator in (4.41). CNVP 21–25 Evaluate the left-hand side in (4.41). If the denominator is zero there is no viscoplastic flow for the particular load increment, therefore set RATIO = 0 indicating a steady state condition. CNVP 26 If (4.41) is satisfied, set NCHEK = 0 indicating a steady state condition. CNVP 27 If the viscoplastic increment has increased from the value obtained on the previous time step set NCHEK = 999. CNVP 28 Store the current value of the left-hand side of (4.41) for use in Statement CNVP 27 during the next time step. CNVP 29-30 Output the current time. CNVP 31–33 Output the value of NCHEK and the left-hand side of (4.41). # 4.10 Subroutine INCLOD Subroutine INCLOD described in Section 3.7 is employed for this application with one minor change: The iteration limit NITER is now replaced by the time-step limit NSTEP.