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,594 @@
<!-- source-page: 251 -->
INVR 19 Compute, $(J_{2}^{\prime})^{\dagger}$ .
INVR 20-26 Evaluate sin 3θ according to (7.61).
INVR 27 Then compute, $\theta$ . Note that the principal value is obtained as required in Section 7.4.
INVR 28 Branch according to the yield criterion being employed.
INVR 30 Evaluate the yield function in Column 3, Table 7.2 for the Tresca criterion.
INVR 33 Evaluate the yield function in Column 3, Table 7.2 for the Von Mises criterion.
INVR 3638 Evaluate the yield function in Column 3, Table 7.2 for the MohrCoulomb criterion.
INVR 41-43 Evaluate the yield function in Column 3, Table 7.2 for the Drucker-Prager criterion.
# 7.8.4.1 Subroutine YIELDF
The function of this subroutine is to determine the flow vector a defined in (7.74). Vector a is given by (7.69) where $C_{1}$ , $C_{2}$ and $C_{3}$ are given in Table 7.1 for the various yield criteria considered and the vectors $a_{1}$ , $a_{2}$ and $a_{3}$ are given by (7.75) for two dimensional applications. For the Tresca and MohrCoulomb yield surfaces which have singular points at $\theta = \pm30^{\circ}$ the alternative values of $C_{1}$ , $C_{2}$ and $C_{3}$ given respectively in (7.80) and (7.82) must be employed.
Subroutine YIELDF is now presented and described.
```csv
SUBROUTINE YIELDF(AVECT,DEVIA,LPROP,MMATS,NCRIT,NSTR1,
PROPS,SINT3,STEFF,THETA,VARJ2)
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
```
<!-- source-page: 252 -->
```csv
C
C*** CALCULATE VECTOR A3
C
VECA3(1)=DEVIA(2)*DEVIA(4)+VARJ2/3.0
VECA3(2)=DEVIA(1)*DEVIA(4)+VARJ2/3.0
VECA3(3)=-2.0*DEVIA(3)*DEVIA(4)
VECA3(4)=DEVIA(1)*DEVIA(2)-DEVIA(3)*DEVIA(3)+VARJ2/3.0
GO TO (1,2,3,4) NCRIT
C
C*** TRESCA
C
1 CONS1=0.0
ABTHE=ABS(THETA*57.29577951308)
IF(ABTHE.LT.29.0) GO TO 20
CONS2=ROOT3
CONS3=0.0
GO TO 40
20 CONS2=2.0*(COSTH+SINTH*TANT3)
CONS3=ROOT3*SINTH/(VARJ2*COST3)
GO TO 40
C
C*** VON MISES
C
2 CONS1=0.0
CONS2=ROOT3
CONS3=0.0
GO TO 40
C
C*** MOHR-COULOMB
C
3 CONS1=SIN(FRICT*0.017453292)/3.0
ABTHE=ABS(THETA*57.29577951308)
IF(ABTHE.LT.29.0) GO TO 30
CONS3=0.0
PLUMI=1.0
IF(THETA.GT.0.0) PLUMI=-1.0
CONS2=0.5*(ROOT3+PLUMI*CONS1*ROOT3)
GO TO 40
30 CONS2=COSTH*((1.0+TANTH*TANT3)+CONS1*(TANT3-TANTH)*ROOT3)
CONS3=(ROOT3*SINTH+3.0*CONS1*COSTH)/(2.0*VARJ2*COST3)
GO TO 40
C
C*** DRUCKER-PRAGER
C
4 SNPHI=SIN(FRICT*0.017453292)
CONS1=2.0*SNPHI/(ROOT3*(3.0-SNPHI))
CONS2=1.0
CONS3=0.0
40 CONTINUE
DO 50 ISTR1=1,NSTR1
50 AVECT(ISTR1)=CONS1*VECA1(ISTR1)+CONS2*VECA2(ISTR1)+CONS3*
. VECA3(ISTR1)
RETURN
END
YLDF 31
YLDF 32
YLDF 33
YLDF 34
YLDF 35
YLDF 36
YLDF 37
YLDF 38
YLDF 39
YLDF 40
YLDF 41
YLDF 42
YLDF 43
YLDF 44
YLDF 45
YLDF 46
YLDF 47
YLDF 48
YLDF 49
YLDF 50
YLDF 51
YLDF 52
YLDF 53
YLDF 54
YLDF 55
YLDF 56
YLDF 57
YLDF 58
YLDF 59
YLDF 60
YLDF 61
YLDF 62
YLDF 63
YLDF 64
YLDF 65
YLDF 66
YLDF 67
YLDF 68
YLDF 69
YLDF 70
YLDF 71
YLDF 72
YLDF 73
YLDF 74
YLDF 75
YLDF 76
YLDF 77
YLDF 78
YLDF 79
YLDF 80
YLDF 81
YLDF 82
YLDF 83
YLDF 84
```
YLDF 10 For the (unlikely) case of a Gauss point with zero stress (identified by $J_{2}^{\prime}=J_{3}^{\prime}=0$ ) avoid evaluation of the flow vector.
YLDF 11 Identify FRICT as the friction angle $\phi$ for Mohr-Coulomb and Drucker-Prager materials.
<!-- source-page: 253 -->
YLDF 12-13 Evaluate $\tan \theta$ and $\tan 3\theta$ .
YLDF 14-16 Evaluate $\sin \theta$ , $\cos \theta$ and $\cos 3\theta$ .
YLDF 17 Compute $\sqrt{(3)}$ .
YLDF 21-24 Evaluate $a_1$ according to (7.75).
YLDF 2830 Evaluate $a_{2}$ according to (7.75). Note that STEFF and DEVIA are transferred via the argument list from subroutine INVAR.
YLDF 34-37 Evaluate $a_{3}$ according to (7.75).
YLDF 38 Branch according to the yield criterion being employed.
YLDF 4149 Compute the constants $C_{1}$ , $C_{2}$ and $C_{3}$ for a Tresca material according to Table 7.1. In the vicinity of a singular point, identified by $|\theta|>29.0^{\circ}$ evaluate $C_{1}$ , $C_{2}$ and $C_{3}$ according to (7.80).
YLDF 5355 Compute $C_{1}$ , $C_{2}$ and $C_{3}$ for a Von Mises material according to Table 7.1.
YLDF 6167 Compute $C_{1}$ , $C_{2}$ and $C_{3}$ for the MohrCoulomb criterion. In the vicinity of a singular point defined by $|\theta|>29.0^{\circ}$ evaluate $C_{1}$ , $C_{2}$ and $C_{3}$ according to (7.82).
YLDF 7578 Calculate $C_{1}$ , $C_{2}$ and $C_{3}$ for the DruckerPrager yield criterion.
YLDF 8082 Evaluate a according to (7.69).
# 7.8.4.2 Subroutine FLOWPL
The main purpose of this subroutine is to determine the vector $d_{D}$ according to either (7.77) or (7.78) depending on the type of analysis being undertaken. In the program presented in this chapter only a linear form of strain hardening is explicitly considered, with the coding of alternative models being left as an exercise for the reader. In this case the term $H'$ in (7.37) becomes a constant and is specified as a material property.
Subroutine FLOWPL is now listed and described.
<table><tr><td>SUBROUTINE FLOWPL(AVECT,ABETA,DVECT,NTYPE,PROPS,LPROP,NSTR1,MMATS)FLPL</td><td>1</td></tr><tr><td>C***************</td><td>FLPL 2</td></tr><tr><td>C</td><td>FLPL 3</td></tr><tr><td>C**** THIS SUBROUTINE EVALUATES THE PLASTIC D VECTOR</td><td>FLPL 4</td></tr><tr><td>C</td><td>FLPL 5</td></tr><tr><td>C***************</td><td>FLPL 6</td></tr><tr><td>DIMENSION AVECT(4),DVECT(4),PROPS(MMATS,7)</td><td>FLPL 7</td></tr><tr><td>YOUNG=PROPS(LPROP,1)</td><td>FLPL 8</td></tr><tr><td>POISS=PROPS(LPROP,2)</td><td>FLPL 9</td></tr><tr><td>HARDS=PROPS(LPROP,6)</td><td>FLPL 10</td></tr><tr><td>FMUL1=YOUNG/(1.0+POISS)</td><td>FLPL 11</td></tr><tr><td>IF(NTYPE.EQ.1) GO TO 60</td><td>FLPL 12</td></tr><tr><td>FMUL2=YOUNG*POISS*(AVECT(1)+AVECT(2)+AVECT(4))/(1.0+POISS)*</td><td>FLPL 13</td></tr><tr><td>.(1.0-2.0*POISS))</td><td>FLPL 14</td></tr><tr><td>DVECT(1)=FMUL1*AVECT(1)+FMUL2</td><td>FLPL 15</td></tr><tr><td>DVECT(2)=FMUL1*AVECT(2)+FMUL2</td><td>FLPL 16</td></tr><tr><td>DVECT(3)=0.5*AVECT(3)*YOUNG/(1.0+POISS)</td><td>FLPL 17</td></tr><tr><td>DVECT(4)=FMUL1*AVECT(4)+FMUL2</td><td>FLPL 18</td></tr><tr><td>GO TO 70</td><td>FLPL 19</td></tr></table>
<!-- source-page: 254 -->
<table><tr><td>60 FMUL3=YOUNG*POISS*(AVECT(1)+AVECT(2))/(1.0-POISS*POISS)</td><td>FLPL</td><td>20</td></tr><tr><td>DVECT(1)=FMUL1*AVECT(1)+FMUL3</td><td>FLPL</td><td>21</td></tr><tr><td>DVECT(2)=FMUL1*AVECT(2)+FMUL3</td><td>FLPL</td><td>22</td></tr><tr><td>DVECT(3)=0.5*AVECT(3)*YOUNG/(1.0+POISS)</td><td>FLPL</td><td>23</td></tr><tr><td>DVECT(4)=FMUL1*AVECT(4)+FMUL3</td><td>FLPL</td><td>24</td></tr><tr><td>70 DENOM=HARDS</td><td>FLPL</td><td>25</td></tr><tr><td>DO 80 ISTR1=1,NSTR1</td><td>FLPL</td><td>26</td></tr><tr><td>80 DENOM=DENOM+AVECT(ISTR1)*DVECT(ISTR1)</td><td>FLPL</td><td>27</td></tr><tr><td>ABETA=1.0/DENOM</td><td>FLPL</td><td>28</td></tr><tr><td>RETURN</td><td>FLPL</td><td>29</td></tr><tr><td>END</td><td>FLPL</td><td>30</td></tr></table>
FLPL 8 Identify YOUNG as the elastic modulus, E.
FLPL 9 Identify POISS as the Poisson's ratio, $\nu$ .
FLPL 10 Identify HARDS as $H'$ for linear strain hardening.
FLPL 13-18 Evaluate $d_D$ according to (7.77) for plane strain and axisymmetric situations.
FLPL 20-24 Evaluate $d_D$ according to (7.78) for plane stress problems.
FLPL 26-28 Compute $1 / (H' + d_D^T a)$ for later evaluation of the elastoplastic matrix $D_{ep}$ in (7.47).
# 7.8.5 Subroutine STIFFP
This subroutine evaluates the stiffness matrix for each element in turn and differs from the linear elastic version, described in Section 6.3.2, only in that the elasticity matrix D is replaced (for the tangential stiffness approach at least) by the elasto-plastic matrix $D_{ep}$ defined in (7.47). This subroutine is called only when the element stiffnesses are to be reformulated as controlled by variable KRESL defined in subroutine ALGOR. Obviously the element stiffnesses must be calculated for the first iteration of the first load increment and elastic behaviour must be assumed. Every other time this subroutine is accessed the stiffnesses are to be recalculated to account for any plastic deformation of the material and consequently the $D_{ep}$ matrix must be employed. Apart from this change the element stiffness formulation process is identical to that for elastic materials as described in Section 6.3.2.
Subroutine STIFFP will now be described and explanatory notes provided.
<table><tr><td>SUBROUTINE STIFFP(COORD,EPSTN,IINCS,LNODS,MATNO,MEVAB,MMATS,</td><td>STFP</td><td>1</td></tr><tr><td>. MPOIN,MTOTV,NELEM,NEVAB,NGAUS,NNODE,NSTRE,</td><td>STFP</td><td>2</td></tr><tr><td>. NSTR1,POSGP,PROPS,WEIGP,MELEM,MTOTG,</td><td>STFP</td><td>3</td></tr><tr><td>. STRSG,NTYPE,NCRIT)</td><td>STFP</td><td>4</td></tr><tr><td>C**********</td><td>STFP</td><td>5</td></tr><tr><td>C</td><td>STFP</td><td>6</td></tr><tr><td>C**** THIS SUBROUTINE EVALUATES THE STIFFNESS MATRIX FOR EACH ELEMENT</td><td>STFP</td><td>7</td></tr><tr><td>C IN TURN</td><td>STFP</td><td>8</td></tr><tr><td>C</td><td>STFP</td><td>9</td></tr><tr><td>C**********</td><td>STFP</td><td>10</td></tr><tr><td>DIMENSION BMATX(4,18),CARTD(2,9),COORD(MPOIN,2),DBMAT(4,18),</td><td>STFP</td><td>11</td></tr><tr><td>. DERIV(2,9),DEVIA(4),DMATX(4,4),</td><td>STFP</td><td>12</td></tr><tr><td>. ELCOD(2,9),EPSTN(MTOTG),ESTIF(18,18),LNODS(MELEM,9),</td><td>STFP</td><td>13</td></tr><tr><td>. MATNO(MELEM),POSGP(4),PROPS(MMATS,7),SHAPE(9),</td><td>STFP</td><td>14</td></tr><tr><td>. WEIGP(4),STRES(4),STRSG(4,MTOTG),</td><td>STFP</td><td>15</td></tr><tr><td>. DVECT(4),AVECT(4),GPCOD(2,9)</td><td>STFP</td><td>16</td></tr><tr><td>TWOPI=6.283185308</td><td>STFP</td><td>17</td></tr><tr><td>REWIND 1</td><td>STFP</td><td>18</td></tr></table>
<!-- source-page: 255 -->
```csv
KGAUS=0
STFP 19
C
C*** LOOP OVER EACH ELEMENT
STFP 20
C
DO 70 IELEM=1,NELEM
STFP 21
LPROP=MATNO(IELEM)
STFP 22
STFP 23
STFP 24
C
C*** EVALUATE THE COORDINATES OF THE ELEMENT NODAL POINTS
STFP 25
C
DO 10 INODE=1,NNODE
STFP 26
LNODE=IABS(LNODS(IELEM,INODE))
STFP 27
IPOSN=(LNODE-1)*2
STFP 28
DO 10 IDIME=1,2
STFP 29
IPOSN=IPOSN+1
STFP 30
STFP 31
STFP 32
10 ELCOD(IDIME,INODE)=COORD(LNODE,IDIME)
STFP 33
THICK=PROPS(LPROP,3)
STFP 34
C
C*** INITIALIZE THE ELEMENT STIFFNESS MATRIX
STFP 35
C
DO 20 IEVAB=1,NEVAB
STFP 36
DO 20 JEVAB=1,NEVAB
STFP 37
20 ESTIF(IEVAB,JEVAB)=0.0
STFP 38
KGASP=0
STFP 39
KGASP=0
STFP 40
STFP 41
C
C*** ENTER LOOPS FOR AREA NUMERICAL INTEGRATION
STFP 42
C
DO 50 IGAUS=1,NGAUS
STFP 43
EXISP=POSGP(IGAUS)
STFP 44
DO 50 JGAUS=1,NGAUS
STFP 45
ETASP=POSGP(JGAUS)
STFP 46
KGASP=KGASP+1
STFP 47
KGASP=KGASP+1
STFP 48
STFP 49
STFP 50
C
C*** EVALUATE THE D-MATRIX
STFP 51
C
CALL MODPS(DMATX,LPROP,MMATS,NTYPE,PROPS)
STFP 52
C
C*** EVALUATE THE SHAPE FUNCTIONS,ELEMENTAL VOLUME,ETC.
STFP 53
C
CALL SFR2(DERIV,ETASP,EXISP,NNODE,SHAPE)
STFP 54
CALL JACOB2(CARTD,DERIV,DJACB,ELCOD,GPCOD,IELEM,KGASP,
NNODE,SHAPE)
STFP 55
DVOLU=DJACB*WEIGP(IGAUS)*WEIGP(JGAUS)
STFP 56
IF(NTYPE.EQ.3) DVOLU=DVOLU*TWOPI*GPCOD(1,KGASP)
STFP 57
IF(THICK.NE.0.0) DVOLU=DVOLU*THICK
STFP 58
C
C*** EVALUATE THE B AND DB MATRICES
STFP 59
STFP 60
STFP 61
STFP 62
STFP 63
C
C*** EVALUATE THE B AND DB MATRICES
STFP 64
C
CALL BMATPS(BMATX,CARTD,NNODE,SHAPE,GPCOD,NTYPE,KGASP)
STFP 65
IF(IINCS.EQ.1) GO TO 80
STFP 66
IF(EPSTN(KGAUS),EQ.0.0) GO TO 80
STFP 67
DO 90 ISTR1=1,NSTR1
STFP 68
STFP 69
STFP 70
90 STRES(ISTR1)=STRSG(ISTR1,KGAUS)
STFP 71
CALL INVAR(DEVIA,LPROP,MMATS,NCRIT,PROPS,SINT3,STEFF,STRES,
THETA,VARJ2,YIELD)
STFP 72
CALL YIELDF(AVECT,DEVIA,LPROP,MMATS,NCRIT,NSTR1,
PROPS,SINT3,STEFF,THETA,VARJ2)
STFP 73
CALL FLOWPL(AVECT,ABETA,DVECT,NTYPE,PROPS,LPROP,NSTR1,MMATS)
STFP 74
DO 100 ISTRE=1,NSTRE
STFP 75
DO 100 JSTRE=1,NSTRE
STFP 76
STFP 77
100 DMATX(ISTRE,JSTRE)=DMATX(ISTRE,JSTRE)-ABETA*DVECT(ISTRE)
STFP 78
DVECT(JSTRE)
STFP 79
STFP 80
80 CONTINUE
STFP 81
CALL DBE(BMATX,DBMAT,DMATX,MEVAB,NEVAB,NSTRE,NSTR1)
STFP 82
```
<!-- source-page: 256 -->
<table><tr><td>C</td><td>STFP</td><td>83</td></tr><tr><td>C*** CALCULATE THE ELEMENT STIFFNESSES</td><td>STFP</td><td>84</td></tr><tr><td>C</td><td>STFP</td><td>85</td></tr><tr><td>DO 30 IEVAB=1,NEVAB</td><td>STFP</td><td>86</td></tr><tr><td>DO 30 JEVAB=IEVAB,NEVAB</td><td>STFP</td><td>87</td></tr><tr><td>DO 30 ISTRE=1,NSTRE</td><td>STFP</td><td>88</td></tr><tr><td>30 ESTIF(IEVAB,JEVAB)=ESTIF(IEVAB,JEVAB)+BMATX(ISTRE,IEVAB)*</td><td>STFP</td><td>89</td></tr><tr><td>. DBMAT(ISTRE,JEVAB)*DVOLU</td><td>STFP</td><td>90</td></tr><tr><td>50 CONTINUE</td><td>STFP</td><td>91</td></tr><tr><td>C</td><td>STFP</td><td>92</td></tr><tr><td>C*** CONSTRUCT THE LOWER TRIANGLE OF THE STIFFNESS MATRIX</td><td>STFP</td><td>93</td></tr><tr><td>C</td><td>STFP</td><td>94</td></tr><tr><td>DO 60 IEVAB=1,NEVAB</td><td>STFP</td><td>95</td></tr><tr><td>DO 60 JEVAB=1,NEVAB</td><td>STFP</td><td>96</td></tr><tr><td>60 ESTIF(JEVAB,IEVAB)=ESTIF(IEVAB,JEVAB)</td><td>STFP</td><td>97</td></tr><tr><td>C</td><td>STFP</td><td>98</td></tr><tr><td>C*** STORE THE STIFFNESS MATRIX,STRESS MATRIX AND SAMPLING POINT</td><td>STFP</td><td>99</td></tr><tr><td>C COORDINATES FOR EACH ELEMENT ON DISC FILE</td><td>STFP</td><td>100</td></tr><tr><td>C</td><td>STFP</td><td>101</td></tr><tr><td>WRITE(1) ESTIF</td><td>STFP</td><td>102</td></tr><tr><td>70 CONTINUE</td><td>STFP</td><td>103</td></tr><tr><td>RETURN</td><td>STFP</td><td>104</td></tr><tr><td>END</td><td>STFP</td><td>105</td></tr></table>
STFP 17 Compute the value of $2\pi$ .
STFP 18 Rewind the disc file on which the element stiffness matrices will be stored in turn.
STFP 19 Set to zero the counter which indicates the overall Gauss point location. So KGAUS ranges from 1 to NGAUS\*NGAUS\*NELEM.
STFP 23 Enter the loop over each element in the structure.
STFP 24 Identify the material property type of the current element.
STFP 28-33 Store the element nodal coordinates in the local array ELCOD for convenient use later.
STFP 34 Identify the element thickness.
STFP 3840 Zero the element stiffness array.
STFP 41 Set to zero the element Gauss point counter. So KGASP ranges from 1 to NGAUS\*NGAUS.
STFP 4548 Enter the numerical integration loops and locate the position $(\xi, \eta)$ of the current point.
STFP 4950 Increment the local and global Gauss point counters.
STFP 54 Call subroutine MODPS to evaluate the elasticity matrix, D.
STFP 58 Evaluate the shape functions $N_{i}$ and the derivatives $\partial N_{i}/\partial\xi$ , $\partial N_{i}/\partial\eta$ for the current Gauss point.
STFP 5960 Evaluate the Gauss point coordinates, GPCOD(IDIME, KGASP), the determinant of the Jacobian matrix, $|J|$ and the Cartesian derivatives of the shape functions $\partial N_{i}/\partial x$ , $\partial N_{i}/\partial y$ (or $\partial N_{i}/\partial r$ , $\partial N_{i}/\partial z$ for axisymmetric problems).
STFP 6163 Calculate the elemental volume for numerical integration as $|J|W_{\xi}W_{\eta}$ taking care to multiply by the appropriate thickness or by $2\pi r$ for axisymmetric problems. Note that if a zero thickness is specified it is automatically taken to be unity.
<!-- source-page: 257 -->
STFP 67 Evaluate the B matrix.
STFP 68 For the first time avoid the replacement of D by $D_{ep}$ , as defined in (7.47).
STFP 69 Also for Gauss points at which the behaviour is elastic avoid the replacement of D by $D_{ep}$ .
STFP 70-71 Store the total current stresses in the array STRES.
STFP 72-76 Call subroutines INVAR, YIELDF and FLOWPL to evaluate the vectors $a$ , (AVECT) and $d_{D}$ , (DVECT) and ABETA = $1/(H' + d_{D}^{T}a)$ .
STFP 77-80 Evaluate $D_{ep}$ according to (7.47).
STFP 82 Evaluate $D_{ep}B$ .
STFP 86-90 Compute the upper triangle of the element stiffness matrix as
$$
\int_ {\Omega} \boldsymbol {B} ^ {T} \boldsymbol {D} _ {e p} \boldsymbol {B} d \Omega
$$
STFP 91 End of loop for numerical integration.
STFP 9597 Complete the lower triangle of the element stiffness matrix by symmetry.
STFP 102 Store the element stiffness matrix on disc file 1.
STFP 103 Return to process the next element.
# 7.8.6 Subroutine LINEAR
The purpose of this subroutine is merely to determine the stresses from given displacements assuming linear elastic behaviour. This subroutine is employed in the residual force calculation to be described in the next section. The element displacement components, ELDIS(IDOFN, INODE) are entered into the subroutine, the strain components at the Gauss point under consideration, STRAN(ISTR1) calculated and finally the stress components are evaluated and stored in STRES(ISTR1).
The subroutine is now listed and described.
```csv
SUBROUTINE LINEAR(CARTD,DMATX,ELDIS,LPROP,MMATS,NDOFN,NNODE,NSTRE,LINR 1
NTYPE,PROPS,STRAN,STRES,KGASP,GPCOD,SHAPE) LINR 2
C********** LINR 3
C LINR 4
C**** THIS SUBROUTINE EVALUATES STRESSES AND STRAINS ASSUMING LINEAR LINR 5
C ELASTIC BEHAVIOUR LINR 6
C LINR 7
C********** LINR 8
DIMENSION AGASH(2,2),CARTD(2,9),DMATX(4,4),ELDIS(2,9), LINR 9
PROPS(MMATS,7),STRAN(4),STRES(4), LINR 10
GPCOD(2,9),SHAPE(9) LINR 11
POISS=PROPS(LPROP,2) LINR 12
DO 20 IDOFN=1,NDOFN LINR 13
DO 20 JDOFN=1,NDOFN LINR 14
BGASH=0.0 LINR 15
DO 10 INODE=1,NNODE LINR 16
```
<!-- source-page: 258 -->
10 BGASH=BGASH+CARTD(JDOFN,INODE)*ELDIS(IDOFN,INODE) LINR 17
20 AGASH(IDOFN,JDOFN)=BGASH LINR 18
C LINR 19
C*** CALCULATE THE STRAINS LINR 20
C LINR 21
STRAN(1)=AGASH(1,1) LINR 22
STRAN(2)=AGASH(2,2) LINR 23
STRAN(3)=AGASH(1,2)+AGASH(2,1) LINR 24
STRAN(4)=0.0 LINR 25
DO 30 INODE=1,NNODE LINR 26
30 STRAN(4)=STRAN(4)+ELDIS(1,INODE)*SHAPE(INODE)/GPCOD(1,KGASP) LINR 27
C LINR 28
C*** AND THE CORRESPONDING STRESSES LINR 29
C LINR 30
DO 40 ISTRE=1,NSTRE LINR 31
STRES(ISTRE)=0.0 LINR 32
DO 40 JSTRE=1,NSTRE LINR 33
40 STRES(ISTRE)=STRES(ISTRE)+DMATX(ISTRE,JSTRE)*STRAN(JSTRE) LINR 34
IF(NTYPE.EQ.1) STRES(4)=0.0 LINR 35
IF(NTYPE.EQ.2) STRES(4)=POISS*(STRES(1)+STRES(2)) LINR 36
RETURN LINR 37
END LINR 38
LINR 12 Identify POISS as the Poisson's ratio of the element material.
LINR 13-18 Calculate the Cartesian derivatives of the Gauss point displacement components $\partial u / \partial x$ , $\partial u / \partial y$ , $\partial v / \partial x$ , $\partial v / \partial y$ .
LINR 22-27 Evaluate the strain components at the Gauss point according to
$$
\epsilon = \left\{ \begin{array}{l} \epsilon_ {x} \\ \epsilon_ {y} \\ \gamma_ {x y} \\ \epsilon_ {z}. \end{array} \right\} = \left\{ \begin{array}{c} \frac {\partial u}{\partial x} \\ \frac {\partial v}{\partial y} \\ \frac {\partial u}{\partial y} + \frac {\partial v}{\partial x} \\ 0 \end{array} \right\} \text { for plane problems },
$$
$$
\epsilon = \left\{ \begin{array}{l} \epsilon_ {r} \\ \epsilon_ {z} \\ \gamma_ {r z} \\ \epsilon_ {\theta} \end{array} \right\} = \left\{ \begin{array}{c} \frac {\partial u}{\partial r} \\ \frac {\partial w}{\partial z} \\ \frac {\partial u}{\partial z} + \frac {\partial w}{\partial r} \\ \frac {u}{r} \end{array} \right\} \text { for axisymmetric problems. }
$$
LINR 31-34 Calculate the stress components, assuming elastic behaviour, according to $\sigma = D\epsilon$ .
<!-- source-page: 259 -->
LINR 35-36 For a plane stress problem set $\sigma_z = 0$ and set $\sigma_z = \nu(\sigma_x + \sigma_y)$ for plane strain situations.
# 7.8.7 Subroutine RESIDU
The function of this subroutine is to evaluate the nodal forces which are statically equivalent to the stress field satisfying elasto-plastic conditions. Comparison of these equivalent nodal forces with the applied loads gives the residual forces, according to (2.4), and this operation is carried out in subroutine CONVER. Therefore RESIDU performs the same task for two-dimensional continua as subroutine REFOR3 undertook for uniaxial situations, and the reader is urged to review Section 3.12.2 before proceeding further. The logic applied in this subroutine is almost identical to that applied in Section 3.12.2. Below we reproduce the essential steps in an abbreviated form and expand only the steps which pertain to the case of two dimensional solids.
During the application of an increment of load an element, or part of an element, may yield. All stress and strain quantities are monitored at each Gaussian integration point and therefore we can determine whether or not plastic deformation has occurred at such points. Consequently an element can behave partly elastically and partly elasto-plastically if some, but not all, Gauss points indicate plastic yielding. For any load increment it is necessary to determine what proportion is elastic and which part produces plastic deformation and then adjust the stress and strain terms until the yield criterion and the constitutive laws are satisfied. The procedure adopted is as follows.
Step a. The applied loads for the $r^{\text{th}}$ iteration are the residual forces $\psi^{r-1}$ , given by (2.4) which give rise to displacement increments $dd^{r}$ , according to (2.12), and strain increments $d\epsilon^{r}$ .
Step b. Compute the incremental stress changes, $d\sigma_{e}^{r}$ as $d\sigma_{e}^{r} = Dd\varepsilon^{r}$ where the subscript e denotes that we are assuming elastic behaviour.
Step c. Accumulate the total stress for each element Gauss point as $\sigma_{e}^{r} = \sigma^{r-1} + d\sigma_{e}^{r}$ where $\sigma^{r-1}$ are the converged stresses for iteration r-1.
Step d. The next step depends on whether or not yielding took place at the Gauss point during the $(r-1)^{\text{th}}$ iteration. Therefore we check if $\bar{\sigma}^{r-1} > \sigma_{Y} = \sigma_{Y}^{\circ} + H' \bar{\epsilon}_{p}^{r-1}$ , where $\bar{\sigma}^{r-1}$ is the effective stress given by Column 3, Table 7.2, $\sigma_{Y}$ is the uniaxial yield stress, (Column 4, Table 7.2), $H'$ is the linear strain hardening parameter and $\bar{\epsilon}_{p}^{r-1}$ is the effective plastic strain existing at the end of the $(r-1)^{\text{th}}$ iteration. This expression is identical to the uniaxial case, Section 3.12.2, with all quantities replaced by the effective or equivalent values. If the answer is:
<!-- source-page: 260 -->
# YES
The Gauss point had previously yielded. Now check to see if $\bar{\sigma}_{e}^{r} > \bar{\sigma}^{r-1}$ where $\bar{\sigma}_{e}^{r}$ is the effective stress, Col. 3, Table 7.2 based on stresses $\sigma_{e}^{r}$ . If the answer is:
NO
YES
The Gauss point is unloading elastically and therefore go directly to Step g.
The Gauss point had yielded previously and the stress is still increasing. Therefore all the excess stress $\sigma_{e}^{r}-\sigma^{r-1}$ must be reduced to the yield surface as indicated in
Fig. 7.10(a). Therefore the factor R which defines the portion of stress which must be modified to satisfy the yield criterion is equal to 1.
# NO
Which implies that the Gauss point had not previously yielded. Now check to see if $\bar{\sigma}_{e}^{r} > \sigma_{Y}^{0}$ . If the answer is:
NO
YES
The Gauss point is still elastic and therefore go directly to Step g.
The Gauss point has yielded during application of load corresponding to this iteration as shown in
Fig. 7.10(b). The portion of the stress greater than the yield value must be reduced to the yield surface. The reduction factor R is given from
Fig. 7.10(b) to be
$$
R = \frac {A B}{A C} = \frac {\bar {\sigma} _ {e} ^ {r} - \sigma_ {Y}}{\bar {\sigma} _ {e} ^ {r} - \bar {\sigma} ^ {r - 1}}.
$$
![](images/page-260_3115adacbb056a4c2f3c30be94f5c9db6bebf2cbbec0f7ed62db8d1087a57621.jpg)
<details>
<summary>text_image</summary>
F=0
r dσP^r = dσe^r = Ddε^r
Ddλa = dλd_D
σ^r-1
σ_2
σ_1
σ_3
σ^r = σ^r \left( \frac{\sigma_1^0 + H' \bar{\epsilon}_p^r}{\bar{\sigma}^r} \right)
σ_3
σ^r
σ^r
Ddλa = Ddε_p^r
</details>
Fig. 7.10(a) Incremental stress changes in an already yielded point in an elastoplastic continuum.