add documents
Tests / Hermetic test suite (push) Has been cancelled
Tests / Skill frontmatter validation (push) Has been cancelled

This commit is contained in:
김경종
2026-06-02 11:38:52 +09:00
parent d0af0c7066
commit bd50e09e36
4470 changed files with 75247 additions and 12 deletions
@@ -0,0 +1,442 @@
<!-- source-page: 61 -->
<table><tr><td>ASEM 21-25</td><td>If only equation resolution is to be performed during this iteration, do not set the global stiffness coefficients to zero.</td></tr><tr><td>ASEM 29</td><td>Loop for each element.</td></tr><tr><td>ASEM 30</td><td>Read ESTIF for the current element.</td></tr><tr><td>ASEM 31</td><td>Loop for each node INODE of current element.</td></tr><tr><td>ASEM 32</td><td>From LNODS array identify node number of current node INODE.</td></tr><tr><td>ASEM 33</td><td>Loop for each degree of freedom of the current node INODE.</td></tr><tr><td>ASEM 34</td><td>Establish the row position in the global stiffness matrix and load vector.</td></tr><tr><td>ASEM 35</td><td>Establish the row position in the element stiffness matrix and load vector.</td></tr><tr><td>ASEM 36</td><td>Add the contribution to the global load vector from the element load vector.</td></tr><tr><td>ASEM 40</td><td>If equation resolution is to be performed, avoid assembling the global stiffness matrix.</td></tr><tr><td>ASEM 41</td><td>Loop for each node JNODE of the current element.</td></tr><tr><td>ASEM 42</td><td>From LNODS array identify node number of current node JNODE.</td></tr><tr><td>ASEM 43</td><td>Loop for each degree of freedom of the current node JNODE.</td></tr><tr><td>ASEM 44</td><td>Establish the column position in the global stiffness matrix.</td></tr><tr><td>ASEM 45</td><td>Establish the column position in the element stiffness matrix.</td></tr><tr><td>ASEM 46</td><td>Add the contribution to the global stiffness matrix from the element stiffness matrix.</td></tr><tr><td>ASEM 48</td><td>End element loop.</td></tr></table>
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.
<!-- source-page: 62 -->
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
```
<!-- source-page: 63 -->
<table><tr><td>C</td><td></td><td>GRED</td><td>42</td></tr><tr><td>40</td><td>DO 50 IROWS=IEQNS,NEQNS</td><td>GRED</td><td>43</td></tr><tr><td></td><td>ASLOD(IROWS)=ASLOD(IROWS)-ASTIF(IROWS,IEQNS)*FIXED(IEQNS)</td><td>GRED</td><td>44</td></tr><tr><td>50</td><td>CONTINUE</td><td>GRED</td><td>45</td></tr><tr><td></td><td>GO TO 70</td><td>GRED</td><td>46</td></tr><tr><td>60</td><td>WRITE(6,900)</td><td>GRED</td><td>47</td></tr><tr><td>900</td><td>FORMAT(5X,15HINCORRECT PIVOT)</td><td>GRED</td><td>48</td></tr><tr><td></td><td>STOP</td><td>GRED</td><td>49</td></tr><tr><td>70</td><td>CONTINUE</td><td>GRED</td><td>50</td></tr><tr><td></td><td>RETURN</td><td>GRED</td><td>51</td></tr><tr><td></td><td>END</td><td>GRED</td><td>52</td></tr></table>
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 2738 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 4345 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]
$$
<!-- source-page: 64 -->
$$
\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
<table><tr><td>ASLOD (MEQNS)</td><td>Reduced load vector.</td></tr><tr><td>ASTIF (MEQNS, MEQNS)</td><td>Reduced global stiffness matrix.</td></tr><tr><td>IEQNS, NEQNS, MEQNS</td><td>Index, Number, Maximum of EQatioNS.</td></tr><tr><td>IFPRE (MEQNS)</td><td>Vector of parameters defining the fixing of a node. 0 free; 1 fixed.</td></tr><tr><td>FIXED (MEQNS)</td><td>Vector of prescribed displacements (zero if not prescribed).</td></tr><tr><td>PIVOT</td><td>Diagonal term of variable currently being evaluated.</td></tr><tr><td>REACT (MEQNS)</td><td>REACTIONS at nodes with prescribed displacements.</td></tr><tr><td>XDISP (MEQNS)</td><td>Displacement at nodes.</td></tr></table>
<!-- source-page: 65 -->
```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 2224 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 2831 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 3641 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:
<!-- source-page: 66 -->
$$
\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 NewtonRaphson, 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 3641 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 4346 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.
<!-- source-page: 67 -->
BAKS 4750 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
```
<!-- source-page: 68 -->
# 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.23.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
```
<!-- source-page: 69 -->
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 1523 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 2431 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
<!-- source-page: 70 -->
<table><tr><td>10</td><td>STRES(IELEM, IDOFN)=0.0</td><td>INTL</td><td>18</td></tr><tr><td></td><td>DO 20 IEVAB=1,NEVAB</td><td>INTL</td><td>19</td></tr><tr><td></td><td>ELOAD(IELEM, IEVAB)=0.0</td><td>INTL</td><td>20</td></tr><tr><td>20</td><td>TLOAD(IELEM, IEVAB)=0.0</td><td>INTL</td><td>21</td></tr><tr><td></td><td>DO 30 IPOIN=1,NPOIN</td><td>INTL</td><td>22</td></tr><tr><td></td><td>DO 30 IDOFN=1,NDOFN</td><td>INTL</td><td>23</td></tr><tr><td></td><td>TDISP(IPOIN, IDOFN)=0.0</td><td>INTL</td><td>24</td></tr><tr><td>30</td><td>TREAC(IPOIN, IDOFN)=0.0</td><td>INTL</td><td>25</td></tr><tr><td></td><td>RETURN</td><td>INTL</td><td>26</td></tr><tr><td></td><td>END</td><td>INTL</td><td>27</td></tr></table>
INTL 1518 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 2225 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