ASEM 21-25If only equation resolution is to be performed during this iteration, do not set the global stiffness coefficients to zero.
ASEM 29Loop for each element.
ASEM 30Read ESTIF for the current element.
ASEM 31Loop for each node ‘INODE’ of current element.
ASEM 32From LNODS array identify node number of current node ‘INODE’.
ASEM 33Loop for each degree of freedom of the current node ‘INODE’.
ASEM 34Establish the row position in the global stiffness matrix and load vector.
ASEM 35Establish the row position in the element stiffness matrix and load vector.
ASEM 36Add the contribution to the global load vector from the element load vector.
ASEM 40If equation resolution is to be performed, avoid assembling the global stiffness matrix.
ASEM 41Loop for each node ‘JNODE’ of the current element.
ASEM 42From LNODS array identify node number of current node ‘JNODE’.
ASEM 43Loop for each degree of freedom of the current node ‘JNODE’.
ASEM 44Establish the column position in the global stiffness matrix.
ASEM 45Establish the column position in the element stiffness matrix.
ASEM 46Add the contribution to the global stiffness matrix from the element stiffness matrix.
ASEM 48End element loop.
For the problem described in Section 3.4.1, the main variables have the following values $$ \mathrm{NNODE} = 2, \text { NELEM } = 4, \text { NDOFN } = 1, \text { NSVAB } = 5, $$ $$ \text { LNODS } = \left[ \begin{array}{l l} 1 & 3 \\ 2 & 3 \\ 3 & 4 \\ 4 & 5 \end{array} \right] \begin{array}{l} - \text { Element I } \\ - \text { Element II } \\ - \text { Element III } \\ - \text { Element IV }. \end{array} $$ # 3.4.3 Subroutine GREDUC This subroutine undertakes the equation elimination process for equation solution by Gaussian reduction as outlined in Section 3.4.1. The additional variable names employed are defined below. # Dictionary of variable names ASLOD (MEQNS) ASTIF (MEQNS, MEQNS) ASembled LOaD vector. Assembled global STIFFness matrix. IEQNS, NEQNS, MEQNS IFPRE (MEQNS) FIXED (MEQNS) ICOLS IROWS FACTR FRESV ( ) PIVOT Index, Number, Maximum of EQuatioNS. Vector of parameters defining the fixity of a node. 0 - free; 1 - fixed. Vector of prescribed displacements (zero if not prescribed). Index COLumn of Structural stiffness matrix. Index ROW of Structural stiffness matrix. Gaussian reduction FACToR. Stored Gaussian reduction factors. Diagonal term of variable which is currently being eliminated. ```csv SUBROUTINE GREDUC GRED 1 C**************************GRED 2 C GRED 3 C *** GAUSSIAN REDUCTION ROUTINE GRED 4 C GRED 5 C**************************GRED 6 COMMON/UNIM1/NPOIN,NELEM,NBOUN,NLOAD,NPROP,NNODE,IINCS,IITER, GRED 7 . KRESL,NCHEK,TOLER,NALGO,NSVAB,NDOFN,NINCS,NEVAB, GRED 8 . NITER,NOUTP,FACTO,PVALU GRED 9 COMMON/UNIM2/PROPS(5,4),COORD(26),LNODS(25,2),IFPRE(52), GRED 10 . FIXED(52),TLOAD(25,4),RLOAD(25,4),ELOAD(25,4), GRED 11 . MATNO(25),STRES(25,2),PLAST(25),XDISP(52), GRED 12 . TDISP(26,2),TREAC(26,2),ASTIF(52,52),ASLOD(52), GRED 13 . REACT(52),FRESV(1352),PEFIX(52),ESTIF(4,4) GRED 14 C GRED 15 C GAUSSIAN REDUCTION ROUTINE GRED 16 C GRED 17 KOUNT=0 GRED 18 NEQNS=NSVAB GRED 19 DO 70 IEQNS=1,NEQNS GRED 20 IF(IFPRE(IEQNS).EQ.1) GO TO 40 GRED 21 C GRED 22 C REDUCE EQUATIONS GRED 23 C GRED 24 PIVOT=ASTIF(IEQNS,IEQNS) GRED 25 IF(ABS(PIVOT).LT.1.0E-10) GO TO 60 GRED 26 IF(IEQNS.EQ.NEQNS) GO TO 70 GRED 27 IEQN1=IEQNS+1 GRED 28 DO 30 IROWS=IEQN1,NEQNS GRED 29 KOUNT=KOUNT+1 GRED 30 FACTR=ASTIF(IROWS.IEQNS)/PIVOT GRED 31 FRESV(KOUNT)=FACTR GRED 32 IF(FACTR.EQ.0.0) GO TO 30 GRED 33 DO 10 ICOLS=IEQNS,NEQNS GRED 34 ASTIF(IROWS,ICOLS)=ASTIF(IROWS,ICOLS)-FACTR*ASTIF(IEQNS,ICOLS) GRED 35 10 CONTINUE GRED 36 ASLOD(IROWS)=ASLOD(IROWS)-FACTR*ASLOD(IEQNS) GRED 37 30 CONTINUE GRED 38 GO TO 70 GRED 39 C GRED 40 C ADJUST RHS(LOADS) FOR PRESCRIBED DISPLACEMENTS GRED 41 ```
CGRED42
40DO 50 IROWS=IEQNS,NEQNSGRED43
ASLOD(IROWS)=ASLOD(IROWS)-ASTIF(IROWS,IEQNS)*FIXED(IEQNS)GRED44
50CONTINUEGRED45
GO TO 70GRED46
60WRITE(6,900)GRED47
900FORMAT(5X,15HINCORRECT PIVOT)GRED48
STOPGRED49
70CONTINUEGRED50
RETURNGRED51
ENDGRED52
GRED 18 Set the counter over the Gaussian reduction factorisation terms to zero. GRED 19 Set the number of equations to be solved equal to the total number of variables in the structure, NSVAB. GRED 20 Loop for each equation—this equation is associated with the variable about to be eliminated. GRED 21 If this variable is fixed, skip to 40. GRED 25 Extract PIVOT—the leading diagonal term. GRED 26 Check for zero PIVOT in which case write a message and stop the program. GRED 27–38 Alter equations below equation ‘IEQNS’, not those above, according to (3.12). Note that the Gaussian factorisation terms are stored for use during equation resolution. GRED 43–45 For prescribed variables adjust the R.H.S. (or load) terms according to (3.13). GRED 47-49 For an invalid pivot value, write a message and terminate execution of the program. For the problem considered in Section 3.4.1 the main variables have the following values: $$ \mathrm{NEQNS} = 5, \quad \mathrm{ASLOD} = \left[ \begin{array}{l} 1 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{array} \right], \quad \text { modified ASLOD } = \left[ \begin{array}{l} 1 0 \\ - 4 \\ 1 4 \\ 4 2 / 5 \\ 8 4 / 1 3 \end{array} \right] $$ $$ \mathbf {A S T I F} = \left[ \begin{array}{r r r r r} 1 & 0 & - 1 & 0 & 0 \\ 0 & 2 & - 2 & 0 & 0 \\ - 1 & - 2 & 6 & - 3 & 0 \\ 0 & 0 & - 3 & 7 & - 4 \\ 0 & 0 & 0 & - 4 & 4 \end{array} \right], \quad \text {modified} \quad \mathbf {A S T I F} = \left[ \begin{array}{r r r r r} 1 & 0 & - 1 & 0 & 0 \\ 0 & 0 & - 2 & 0 & 0 \\ 0 & 0 & 5 & - 3 & 1 \\ 0 & 0 & 0 & 2 6 / 5 & - 4 \\ 0 & 0 & 0 & 0 & 1 2 / 1 3 \end{array} \right] $$ $$ \text { IFPRE } = \left[ \begin{array}{l} 0 \\ 1 \\ 0 \\ 0 \\ 1 \end{array} \right], \quad \text { FIXED } = \left[ \begin{array}{l} 0 \\ 2 \\ 0 \\ 0 \\ 0 \end{array} \right]. $$ The computational effort in this reduction process is proportional to $n^{3}$ . This can be approximately halved if we take advantage of the symmetry of the stiffness matrices. # 3.4.4 Subroutine BAKSUB The object of this subroutine is to perform the back substitution process required after equation elimination by Gaussian reduction. This results in sequential solution for all the unknowns and reactions at nodal points at which values of the unknown have been prescribed. In the nonlinear solution processes described in Chapter 2, the values of the unknown determined during any iteration may or may not be the total values depending on the solution algorithm being employed. If the method of direct iteration is being used, then, according to equation (2.3), the value of $\varphi$ determined during any iteration is the total value. For all other solution techniques considered the total values of the unknown are accumulated according to the corrections determined during each iteration, as indicated for example by (2.12). Therefore, for the direct iteration process, it is simply necessary to transfer the calculated values of the unknowns and the reactions to the arrays TDISP (ISVAB, IDOFN) and TREAC (ISVAB, IDOFN) for output later. This transfer is only necessary to allow the same subroutine to be employed for output of results for all four programs. Subroutine BAKSUB will now be presented in a form suitable for nonlinear solution dy direct iteration. Dictionary of variable names
ASLOD (MEQNS)Reduced load vector.
ASTIF (MEQNS, MEQNS)Reduced global stiffness matrix.
IEQNS, NEQNS, MEQNSIndex, Number, Maximum of EQatioNS.
IFPRE (MEQNS)Vector of parameters defining the fixing of a node. 0 – free; 1 – fixed.
FIXED (MEQNS)Vector of prescribed displacements (zero if not prescribed).
PIVOTDiagonal term of variable currently being evaluated.
REACT (MEQNS)REACTIONS at nodes with prescribed displacements.
XDISP (MEQNS)Displacement at nodes.
```fortran SUBROUTINE BAKSUB BAKS 1 C***** BAKS 2 C BAKS 3 C *** BACK-SUBSTITUTION ROUTINE BAKS 4 C BAKS 5 C***** BAKS 6 COMMON/UNIM1/NPOIN.NELEM,NBOUN,NLOAD,NPROP,NNODE,IINCS,IITER, BAKS 7 KRESL,NCHEK,TOLER,NALGO,NSVAB,NDOFN,NINCS,NEVAB, BAKS 8 NITER,NOUTP,FACTO,PVALU BAKS 9 COMMON/UNIM2/PROPS(5,4),COORD(26),LNODS(25,2),IFPRE(52), BAKS 10 FIXED(52),TLOAD(25,4),RLOAD(25,4),ELOAD(25,4), BAKS 11 MATNO(25),STRES(25,2),PLAST(25),XDISP(52), BAKS 12 TDISP(26,2),TREAC(26,2),ASTIF(52,52),ASLOD(52), BAKS 13 REACT(52),FRESV(1352),PEFIX(52),ESTIF(4,4) BAKS 14 BAKS 15 C BACK-SUBSTITUTION ROUTINE BAKS 16 C BAKS 17 NEQNS=NSVAB BAKS 18 DO 10 IEQNS=1,NEQNS BAKS 19 REACT(IEQNS)=0.0 BAKS 20 10 CONTINUE BAKS 21 NEQN1=NEQNS+1 BAKS 22 DO 40 IEQNS=1,NEQNS BAKS 23 NBACK=NEQN1-IEQNS BAKS 24 PIVOT=ASTIF(NBACK,NBACK) BAKS 25 RESID=ASLOD(NBACK) BAKS 26 IF(NBACK.EQ.NEQNS) GO TO 30 BAKS 27 NBAC1=NBACK+1 BAKS 28 DO 20 ICOLS=NBAC1,NEQNS BAKS 29 RESID=RESID-ASTIF(NBACK,ICOLS)*XDISP(ICOLS) BAKS 30 20 CONTINUE BAKS 31 30 IF(IFPRE(NBACK).EQ.0) XDISP(NBACK)=RESID/PIVOT BAKS 32 IF(IFPRE(NBACK).EQ.1) XDISP(NBACK)=FIXED(NBACK) BAKS 33 IF(IFPRE(NBACK).EQ.1) REACT(NBACK)=-RESID BAKS 34 40 CONTINUE BAKS 35 KOUNT=0 BAKS 36 DO 50 IPOIN=1,NPOIN BAKS 37 DO 50 IDOFN=1,NDOFN BAKS 38 KOUNT=KOUNT+1 BAKS 39 TDISP(IPOIN,IDOFN)= XDISP(KOUNT) BAKS 40 50 TREAC(IPOIN,IDOFN)= REACT(KOUNT) BAKS 41 RETURN BAKS 42 END BAKS 43 ``` BAKS 19-21 Zero space for reactions. BAKS 22–24 Loop backwards over each equation. BAKS 25 Use the same PIVOT as in subroutine GREDUC. BAKS 27 For the last equation (the first to be solved) we do not have any other variables to substitute (i.e. bypass the loop). BAKS 28–31 Evaluate RESID from previously calculated variables. BAKS 32 If the variable is not prescribed evaluate the variable. BAKS 34 If the variable is prescribed evaluate the R.H.S. reaction. BAKS 36–41 Store the solved variables and reactions in new arrays for output. For the problem described in Section 3.4.1, the arrays employed in addition to those utilised in Subroutine GREDUC have the following values: $$ \mathrm{TDISP} = \mathrm{XDISP} = \left[ \begin{array}{c} 1 7 9 / 1 3 \\ 2 \\ 4 9 / 1 3 \\ 2 1 / 1 3 \\ 0 \end{array} \right], \quad \mathrm{TREAC} = \mathrm{REACT} = \left[ \begin{array}{c} 0 \\ - 4 6 / 1 3 \\ 0 \\ 0 \\ - 8 4 / 1 3 \end{array} \right]. $$ It should be noted that nonzero reactions are obtained only for nodal positions at which the value of the unknown has been prescribed. For the Newton–Raphson, Tangential Stiffness and Initial Stiffness methods, the calculated unknowns and reactions must be accumulated from the values obtained during each iteration. Therefore, for these applications, statements BAKS 36–41 in the above listing must be replaced by $$ \begin{array}{l l l l} \text {KOUNT = 0} & \text {BAKS} & 3 6 \\ \text {DO 50 IPOIN = 1,NPOIN} & \text {BAKS} & 3 7 \\ \text {DO 50 IDOFN = 1,NDOFN} & \text {BAKS} & 3 8 \\ \text {KOUNT = KOUNT + 1} & \text {BAKS} & 3 9 \\ \text {TDISP(IPOIN, IDOFN) = TDISP(IPOIN, IDOFN) + XDISP(KOUNT)} & \text {BAKS} & 4 0 \\ 5 0 \text {TREAC(IPOIN, IDOFN) = TREAC(IPOIN, IDOFN) + REACT(KOUNT)} & \text {BAKS} & 4 1 \end{array} $$ with the arrays TDISP and TREAC being initially set to zero at the beginning of the program. For these three solution algorithms a final further programming addition must be made. When determining the residual forces according to (2.4), the contribution to f of the reactions at nodal points at which the value of the unknown is prescribed must be accounted for, since any reactions can be interpreted as additional applied loads necessary to maintain the prescribed value of the unknown. Therefore, the evaluated reactions must be added into the vector of applied nodal loads at every iteration. This task can be accomplished by the following coding inserted immediately before the RETURN statement: $$ \begin{array}{l l} \text {DO 90 IPOIN = 1,NPOIN} & \text {BAKS 42} \\ \text {DO 60 IELEM = 1,NELEM} & \text {BAKS 43} \\ \text {DO 60 INODE = 1,NNODE} & \text {BAKS 44} \\ \text {NLOCA = LNODS(IELEM,INODE)} & \text {BAKS 45} \\ \text {60 IF(IPOIN.EQ.NLOCA) GO TO 70} & \text {BAKS 46} \\ \text {70 DO 80 IDOFN = 1,NDOFN} & \text {BAKS 47} \\ \text {NPOSN = (IPOIN - 1)*NDOFN+IDOFN} & \text {BAKS 48} \\ \text {IEVAB = (INODE - 1)*NDOFN+IDOFN} & \text {BAKS 49} \\ \text {80 TLOAD(IELEM,IEVAB) = TLOAD(IELEM,IEVAB) + REACT(NPOSN)} & \text {BAKS 50} \\ \text {90 CONTINUE} & \text {BAKS 51} \end{array} $$ BAKS 42 Loop over each nodal point. BAKS 43–46 Search through the element nodal connections until one is found corresponding to the nodal point currently under consideration. As soon as one is found, abandon the search. Note that it is immaterial in which element the node is found since all element contributions will be finally assembled. BAKS 47–50 Add the nodal reaction into the appropriate position in the array of applied element loads. # 3.4.5 Subroutine RESOLV As stated in Section 3.4.1, for equation resolution (indicated by KRESL = 2) only the global load vector need be formed and reduced. Subroutine RESOLV merely reduces the R.H.S. (or load) terms by standard Gaussian elimination using the same operations as employed in Subroutine GREDUC, Section 3.4.3. The Gaussian factorisation terms were evaluated and stored in GREDUC and are now utilised in this subroutine. The programming logic follows that of Subroutine GREDUC and can be readily understood by reference to Section 3.4.3. ```csv SUBROUTINE RESOLV RSLV 1 C************************(RSLV 2 C RSLV 3 C *** RESOLVING GAUSSIAN REDUCTION ROUTINE RSLV 4 C RSLV 5 C************************(RSLV 6 COMMON/UNIM1/NPOIN,NELEM,NBOUN,NLOAD,NPROP,NNODE,IINCS,IITER, RSLV 7 KRESL,NCHEK,TOLER,NALGO,NSVAB,NDOFN,NINCS,NEVAB, RSLV 8 NITER,NOUTP,FACTO,PVALU RSLV 9 COMMON/UNIM2/PROPS(5,4),COORD(26),LNODS(25,2),IFPRE(52), RSLV 10 FIXED(52),TLOAD(25,4),RLOAD(25,4),ELOAD(25,4), RSLV 11 MATNO(25),STRES(25,2),PLAST(25),XDISP(52), RSLV 12 TDISP(26,2),TREAC(26,2),ASTIF(52,52),ASLOD(52), RSLV 13 REACT(52),FRESV(1352),PEFIX(52),ESTIF(4,4) RSLV 14 KOUNT=0 RSLV 15 NEQNS=NSVAB RSLV 16 DO 40 IEQNS=1,NEQNS RSLV 17 IF(IFPRE(IEQNS).EQ.1) GO TO 20 RSLV 18 C RSLV 19 C REDUCE RHS RSLV 20 C RSLV 21 IF(IEQNS.EQ.NEQNS) GO TO 40 RSLV 22 IEQN1=IEQNS+1 RSLV 23 DO 10 IROWS=IEQN1,NEQNS RSLV 24 KOUNT=KOUNT+1 RSLV 25 FACTR=FRESV(KOUNT) RSLV 26 IF(FACTR.EQ.0) GO TO 10 RSLV 27 ASLOD(IROWS)=ASLOD(IROWS)-FACTR*ASLOD(IEQNS) RSLV 28 10 CONTINUE RSLV 29 GO TO 40 RSLV 30 C RSLV 31 C ADJUST RHS TO PRESCRIBED DISPLACEMENTS RSLV 32 C RSLV 33 20 DO 30 IROWS=IEQNS,NEQNS RSLV 34 ASLOD(IROWS)=ASLOD(IROWS)-ASTIF(IROWS,IEQNS)*FIXED(IEQNS) RSLV 35 30 CONTINUE RSLV 36 40 CONTINUE RSLV 37 RETURN RSLV 38 END RSLV 39 ``` # 3.4.6 Improved numerical algorithm for equation solution Substantial economies can be achieved in both core storage requirements and execution times if advantage is taken of the banded symmetric form of the global stiffness matrix. Since: - By recognising that the global stiffness matrix is symmetric, it is necessary only to store the upper (or lower) triangular part of the stiffness matrix. - By noting that all the non-zero coefficients in the global stiffness matrix occur in a band adjacent to the leading diagonal, further reductions in the core storage requirements can be made, as well as a significant reduction in the number of arithmetic operations undertaken in the equation reduction and backsubstitution phases. In order to introduce these enhancements it is convenient to store the global stiffness matrix as a one-dimensional array. The necessary programming changes required to the subroutines presented in Sections 3.4.2–3.4.5 are fully documented in Ref. 5. # 3.5 Output of results The next subroutine common to all four programs presented is subroutine RESULT whose function is to output the results at a frequency governed by a parameter input in Subroutine INCLOD described in Section 3.7. In order to make the subroutine applicable to all four cases, quantities will be output for some situations which are physically meaningless. In particular for quasi-harmonic problems, output items termed stress and plastic or nonlinear strain are output as zero values for this reason. For nonlinear elastic problems the latter term is the total strain, $\epsilon$ , defined in Section 2.4 and for elasto-plastic situations it is the plastic strain component, $\epsilon_{p}$ , defined in Section 2.5. For both cases the stress quantity output is the axial stress existing in each constant stress element employed. Subroutine RESULT will now be listed. [Unreadable] ```txt SUBROUTINE RESULT RSLT 1 C************************(RSLT 2 C RSLT 3 C *** OUTPUTS DISPLACEMENT, REACTIONS AND STRESSES RSLT 4 C RSLT 5 C************************(RSLT 6 COMMON/UNIM1/NPOIN, NELEM, NBOUN, NLOAD, NPROP, NNODE, IINCS, IITER, RSLT 7 . KRESL, NCHEK, TOLER, NALGO, NSVAB, NDOFN, NINCS, NEVAB, RSLT 8 . NITER, NOUTP, FACTO, PVALU RSLT 9 COMMON/UNIM2/PROPS(5,4), COORD(26), LNODS(25,2), IFPRE(52), RSLT 10 . FIXED(52), TLOAD(25,4), RLOAD(25,4), ELOAD(25,4), RSLT 11 . MATNO(25), STRES(25,2), PLAST(25), XDISP(52), RSLT 12 . TDISP(26,2), TREAC(26,2), ASTIF(52,52), ASLOD(52), RSLT 13 . REACT(52), FRESV(1352), PEFIX(52), ESTIF(4,4) RSLT 14 IF(NDOFN.EQ.1) WRITE(6,900) RSLT 15 ``` 900 FORMAT(1H0,5X,'NODE',4X,'DISPL.',12X,'REACTIONS') RSLT 16 IF(NDOFN.EQ.2) WRITE(6.910) RSLT 17 910 FORMAT(1H0,5X,'NODE',4X,'DISPL.',12X,'REACTION', RSLT 18 . 7X,'DISPL.',12X,'REACTION') RSLT 19 DO 10 IPOIN=1,NPOIN RSLT 20 10 WRITE(6,920) IPOIN,(TDISP(IPOIN,IDOFN),TREAC(IPOIN,IDOFN), RSLT 21 .IDOFN=1,NDOFN) RSLT 22 920 FORMAT(I10,2(E14.6,5X,E14.6)) RSLT 23 IF(NDOFN.EQ.2) WRITE(6.930) RSLT 24 930 FORMAT(1H0,2X,'ELEMENT',12X,'STRESSES',12X,'PL.STRAIN') RSLT 25 IF(NDOFN.EQ.1) WRITE(6.940) RSLT 26 940 FORMAT(1H0,2X,'ELEMENT',5X,'STRESSES',5X,'PL.STRAIN') RSLT 27 DO 20 IELEM=1,NELEM RSLT 28 20 WRITE(6,950) IELEM,(STRES(IELEM,IDOFN),IDOFN=1,NDOFN), RSLT 29 . PLAST(IELEM) RSLT 30 950 FORMAT(I10,3E14.6) RSLT 31 RETURN RSLT 32 END RSLT 33 RSLT 15–23 Write titles and output the calculated unknown and reaction at each nodal point. Non-zero reactions are only obtained for nodal points at which the value of the unknown is prescribed. RSLT 24–31 Write titles and output the stress and plastic or nonlinear elastic strain for each element. Note that provision is made for output of results for the beam bending application of Chapter 5. # 3.6 Subroutine INITIAL The function of this subroutine is to initialise to zero some arrays used by other subroutines. SUBROUTINE INITIAL INTL 1 C************************** INTL 2 C INTL 3 C *** INITIALIZES TO ZERO ALL ACCUMULATIVE ARRAYS INTL 4 C INTL 5 C************************** INTL 6 COMMON/UNIM1/NPOIN, NELEM, NBOUN, NLOAD, NPROP, NNODE, IINCS, IITER, INTL 7 . KRESL, NCHEK, TOLER, NALGO, NSVAB, NDOFN, NINCS, NEVAB, INTL 8 . NITER, NOUTP, FACTO, PVALU INTL 9 COMMON/UNIM2/PROPS(5,4), COORD(26), LNODS(25,2), IFPRE(52), INTL 10 . FIXED(52), TLOAD(25,4), RLOAD(25,4), ELOAD(25,4), INTL 11 . MATNO(25), STRES(25,2), PLAST(25), XDISP(52), INTL 12 . TDISP(26,2), TREAC(26,2), ASTIF(52,52), ASLOD(52), INTL 13 . REACT(52), FRESV(1352), PEFIX(52), ESTIF(4,4) INTL 14 DO 20 IELEM=1, NELEM INTL 15 PLAST(IELEM)=0.0 INTL 16 DO 10 IDOFN=1, NDOFN INTL 17
10STRES(IELEM, IDOFN)=0.0INTL18
DO 20 IEVAB=1,NEVABINTL19
ELOAD(IELEM, IEVAB)=0.0INTL20
20TLOAD(IELEM, IEVAB)=0.0INTL21
DO 30 IPOIN=1,NPOININTL22
DO 30 IDOFN=1,NDOFNINTL23
TDISP(IPOIN, IDOFN)=0.0INTL24
30TREAC(IPOIN, IDOFN)=0.0INTL25
RETURNINTL26
ENDINTL27
INTL 15–18 Initialise to zero the plastic or nonlinear strain vector and the stress vector. INTL 20 Initialise the array, ELOAD, which will contain the out of balance loading to be applied in solution for any iteration. For techniques other than the direct iteration method, this vector will contain the residual nodal forces and thus differs from the vector of applied loads. INTL 21 Initialise the vector of applied loads. INTL 22–25 Initialise the vector of total unknowns and total reactions to zero. # 3.7 Load increment subroutine, INCLOD This subroutine controls the incrementing of the applied loads. For each increment of load, data is input to this segment to control the upper limit to the number of iterations, the output frequency, the size of load increment and the convergence tolerance limit. These quantities are specifically input as: NITER Maximum permissible number of iterations. This is a safety measure to cover situations where the solution process does not converge. After performing NITER iteration cycles the program will then stop. NOUTP This parameter controls the frequency of output of results. In order to examine the iterative procedure the user may wish to obtain results at stages other than the converged solution. 0 – Print the results on convergence to the nonlinear solution only, for each load increment. 1 – Print the results after the first iteration and after convergence for each load increment. 2 – Print the results after every iteration for each load increment. FACTO This quantity controls the magnitude of any load increment. The applied loading is input in subroutine DATA into the array RLOAD as described in Section 3.2. The size of any load increment is then defined to be FACTO\*RLOAD