add documents
This commit is contained in:
+577
@@ -0,0 +1,577 @@
|
||||
<!-- source-page: 341 -->
|
||||
|
||||
In this application we recommended the following convergence criteria. Let
|
||||
|
||||
$$
|
||||
E _ {\delta} = \frac {[ \sum_ {j} (\Delta \delta_ {j} ^ {(i)}) ^ {2} ] ^ {1 / 2}}{[ \sum_ {j} (\delta_ {j} ^ {(i + 1)}) ^ {2} ] ^ {1 / 2}} \tag {9.29}
|
||||
$$
|
||||
|
||||
where $\delta_j$ may equal $w_j$ , $\theta_{xj}$ or $\theta_{yj}$ . We take in any combination
|
||||
|
||||
$$
|
||||
E _ {w}, E _ {\theta x}, E _ {\theta y}, \left(E _ {w} + E _ {\theta x} + E _ {\theta y}\right) \leqslant \text { TOLER } \tag {9.30}
|
||||
$$
|
||||
|
||||
where TOLER is a specified tolerance. We can also take the residual force equivalents of $w_{j}$ , $\theta_{xj}$ or $\theta_{yj}$ in (9.29) and (9.30).
|
||||
|
||||
# 9.5 Software for the non-layered approach
|
||||
|
||||
# 9.5.1 Overall program structure
|
||||
|
||||
The overall program structure for the elasto-plastic Mindlin plate bending analysis program MINDLIN using a nonlayered approach is given in Fig. 9.2.
|
||||
|
||||
The dimensions given in subroutine FEMP agree with those given in subroutine DIMMP and limit the program to the following maximum size problems in the present form
|
||||
|
||||
$$
|
||||
\begin{array}{l} \text { MELEM - maximum number of elements } = 2 5 \\ \text { MEVAB } - \text { maximum number of variables per element } = 2 7 \\ \text { MFRON - maximum front width } = 4 0 \\ \text { MMATS - maximum number of material sets } = 1 0 \\ \text { MPOIN } - \text { maximum number of nodal points } = 8 0 \\ \text { MTOTV } - \text { maximum total number of degrees of freedom } = 2 4 0 \\ \text { MVFIX } - \text { maximum number of prescribed boundary nodes } = 4 0 \\ \end{array}
|
||||
$$
|
||||
|
||||
To modify these values the DIMENSION statement in FEMP and the appropriate statements in DIMMP should be carefully changed and checked. All new routines are now documented and these include: FEMP, CONVMP, DIMMP, FLOWMP, GRADMP, INVMP, MINDPB, OUTMP, SFR2,\* RESMP, STIFMP, STRMP, SUBMP, VZERO and ZEROMP. The other routines, which have been described earlier, include ALGOR, BMATPB, CHECK1,† CHECK2, ECHO, FRONT, INCREM, INPUT, JACOB2, MODPB and NODEXY.\*
|
||||
|
||||
The files which are used in the program are 5 (cardreader), 6 (lineprinter) and 1, 2, 3, 4, 8 (scratch files).
|
||||
|
||||
\- Note we include the modified versions of SFR2 and NODEXY to allow for hierarchical representation.
|
||||
|
||||
† We include a very slightly modified version of CHECK 1. Note also that for 4-node Mindlin plate elements, GAUSSQ is modified to allow for a single point Gauss rule. See Section 6.4.2.
|
||||
|
||||
<!-- source-page: 342 -->
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>flowchart</summary>
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["START"] --> B["DIMMP<br>Presents the variables associated with the dynamic dimensioning process"]
|
||||
B --> C["INPUT<br>Inputs data defining geometry, boundary conditions and material properties"]
|
||||
C --> D["ZEROMP<br>Sets to zero arrays required for accumulation of data"]
|
||||
D --> E["MINDPB<br>Inputs additional data required for Mindlin plate analysis"]
|
||||
E --> F["LOADPB<br>Reads loading data and evaluates the equivalent nodal forces for distributed loading"]
|
||||
F --> G["INCREM<br>Increments the applied load according to specified load factors"]
|
||||
G --> H["ALGOR<br>Sets indicator to identify the type of solution algorithm, i.e., initial or tangential stiffness etc."]
|
||||
H --> I["A"]
|
||||
```
|
||||
</details>
|
||||
|
||||
<!-- source-page: 343 -->
|
||||
|
||||

|
||||
|
||||
<details>
|
||||
<summary>flowchart</summary>
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["A"] --> B{Is it necessary to recalculate stiffness matrix with present algorithm?}
|
||||
B -->|Yes| C["STIFMP<br>Calculate element stiffness matrices for nonlayered elastoplastic Mindlin plate"]
|
||||
B -->|No| D["END"]
|
||||
C --> E["FRONT<br>Solve the simultaneous equation system by the frontal method"]
|
||||
E --> F["RESMP<br>Evaluate the residual force vector for the nonlayered elastoplastic Mindlin plate"]
|
||||
F --> G["CONVMP<br>Check whether solution has converged using a residual force or displacement norm"]
|
||||
G --> H["OUTMP<br>Prints out the displacements, reactions and stress resultants for the current load increment"]
|
||||
H --> I["END"]
|
||||
J["LOAD INCREMENT LOOP"] --> C
|
||||
K["LOAD ITERATION LOOP"] --> C
|
||||
```
|
||||
</details>
|
||||
|
||||
Fig. 9.2 Overall structure of program MINDLIN.
|
||||
|
||||
<!-- source-page: 344 -->
|
||||
|
||||
# 9.5.2 Subroutine FEMP
|
||||
|
||||
This routine controls the calling sequence of all of the other main routines as indicated in Fig. 9.2.
|
||||
|
||||
```csv
|
||||
PROGRAM FEMP(INPUT, OUTPUT, TAPE5=INPUT, TAPE6=OUTPUT, FEMP 1
|
||||
.TAPE1, TAPE2, TAPE3, TAPE4, TAPE8, TAPE9) FEMP 2
|
||||
C
|
||||
C*** ELASTO-PLASTIC ANALYSIS OF NON-LAYERED MINDLIN PLATES USING FEMP 3
|
||||
C*** 4-, 8-, 9-NODED OR HETEROSIS ISOPARAMETRIC QUADRILATERALS FEMP 4
|
||||
C
|
||||
C
|
||||
DIMENSION ASDIS(240), COORD(80, 2), EFFST(225), ELOAD(25, 27), FEMP 9
|
||||
EPSTN(225), ESTIF(27, 27), FEMP 10
|
||||
EQRHS(10), EQUAT(40, 10), FIXED(240), FEMP 11
|
||||
IFFIX(240), GLOAD(40), GSTIF(860), LNODS(25, 9), LOCEL(27), FEMP 12
|
||||
MATNO(25), NACVA(40), NAMEV(10), NCDIS(4), NCRES(4), FEMP 13
|
||||
NDEST(27), NDFRO(25), NOFIX(40), NOUTP(2), NPIVO(10), FEMP 14
|
||||
POSGP(4), PRESC(40, 3), PROPS(10, 8), REFOR(240), FEMP 15
|
||||
RLOAD(25, 27), STRSG(5, 225), TOFOR(240), FEMP 16
|
||||
TDISP(240), TLOAD(25, 27), TREAC(40, 3), VECRV(40), FEMP 17
|
||||
WEIGP(4) FEMP 18
|
||||
C
|
||||
PRESET VARIABLES ASSOCIATED WITH DYNAMIC DIMENSIONS FEMP 19
|
||||
C
|
||||
CALL DIMMP (MBUFA, MELEM, MEVAB, MFRON, MMATS, MPOIN, FEMP 20
|
||||
MSTIF, MTOTG, MTOTV, MVFIX, NDIME, NDOFN, FEMP 21
|
||||
NPROP, NSTRE) FEMP 21
|
||||
C
|
||||
CALL THE SUBROUTINE WHICH READS MOST OF THE PROBLEM DATA FEMP 22
|
||||
C
|
||||
CALL INPUT (COORD, IFFIX, LNODS, MATNO, MELEM, MEVAB, FEMP 23
|
||||
MFRON, MMATS, MPOIN, MTOTV, MVFIX, NALGO, FEMP 24
|
||||
NCRIT, NDFRO, NDIME, NDOFN, NELEM, NEVAB, FEMP 25
|
||||
NGAUS, NLAPS, NINCS, NMATS, NNODE, NOFIX, FEMP 26
|
||||
NPOIN, NPROP, NSTRE, NSTR1, NSWIT, NTOTG, FEMP 27
|
||||
NTOTV, NTYPE, NVFIX, POSGP, PRESC, PROPS, FEMP 28
|
||||
WEIGP) FEMP 28
|
||||
C
|
||||
INITIALIZE ARRAYS TO ZERO FEMP 29
|
||||
C
|
||||
CALL ZEROMP (EFFST, ELOAD, EPSTN, MELEM, MEVAB, MTOTG, FEMP 30
|
||||
MTOTV, MVFIX, NDOFN, NELEM, NEVAB, NGAUS, FEMP 31
|
||||
NTOTG, NTOTV, NVFIX, STRSG, TDISP, TFACT, FEMP 32
|
||||
TLOAD, TREAC) FEMP 33
|
||||
C
|
||||
CALL MINDPB (IFDIS, IFFIX, IFRES, LNODS, MELEM, MTOTV, FEMP 34
|
||||
NCDIS, NCRES, NELEM, NTYPE) FEMP 35
|
||||
C
|
||||
COMPUTE LOAD AFTER READING RELEVANT EXTRA DATA FEMP 36
|
||||
C
|
||||
CALL LOADPB (COORD, LNODS, MATNO, MELEM, MMATS, MPOIN, FEMP 37
|
||||
NELEM, NEVAB, NGAUS, NNODE, NPOIN, PROPS, FEMP 38
|
||||
RLOAD) FEMP 39
|
||||
C
|
||||
LOOP OVER EACH INCREMENT FEMP 40
|
||||
C
|
||||
```
|
||||
|
||||
<!-- source-page: 345 -->
|
||||
|
||||
```asm
|
||||
DO 70 IINCS=1,NINCS
|
||||
FEMP 58
|
||||
C
|
||||
FEMP 59
|
||||
C*** READ DATA FOR CURRENT INCREMENT
|
||||
FEMP 60
|
||||
C
|
||||
FEMP 61
|
||||
CALL INCREM (ELOAD,FIXED,IINCS,MELEM,MEVAB,MITER, MTOTV,MVFIX,NDOFN,NELEM,NEVAB,NOUTP, NOFIX,NTOTV,NVFIX,PRES,RCLOAD,TFACT, TLOAD,TOLER)
|
||||
FEMP 62
|
||||
FEMP 63
|
||||
FEMP 64
|
||||
FEMP 65
|
||||
C
|
||||
FEMP 66
|
||||
C*** LOOP OVER EACH ITERATION
|
||||
FEMP 67
|
||||
C
|
||||
FEMP 68
|
||||
DO 90 IITER=1,MITER
|
||||
FEMP 69
|
||||
C
|
||||
FEMP 70
|
||||
C*** CALL ROUTINE WHICH SELECTS SOLUTION ALGORITHM VARIABLE KRESL
|
||||
FEMP 71
|
||||
C
|
||||
FEMP 72
|
||||
CALL ALGOR (FIXED,IINCS,IITER,KRESL,MTOTV,NALGO, NTOTV)
|
||||
FEMP 73
|
||||
FEMP 74
|
||||
C
|
||||
FEMP 75
|
||||
C*** CHECK WHETHER A NEW EVALUATION OF THE STIFFNESS MATRICES IS NEEDED
|
||||
FEMP 76
|
||||
C
|
||||
FEMP 77
|
||||
IF(KRESL.EQ.1)
|
||||
FEMP 78
|
||||
.CALL STIFMP (COORD,EPSTN,IINCS,LNODS,MATNO,MELEM, MEVAB,MMATS,MPOIN,MTOTG,NCRIT,NELEM, NEVAB,NGAUS,NNODE,PROPS,STRSG)
|
||||
FEMP 79
|
||||
FEMP 80
|
||||
FEMP 81
|
||||
C
|
||||
FEMP 82
|
||||
C*** SOLVE EQUATIONS
|
||||
FEMP 83
|
||||
C
|
||||
FEMP 84
|
||||
CALL FRONT (ASDIS,ELOAD,EQRHS,EQUAT,ESTIF,FIXED, IFFIX,IINCS,IITER,GLOAD,GSTIF,KRESL, LNODS,LOCEL,MBUFA,MELEM,MEVAB,MFRON, MSTIF,MTOTV,MVFIX,NACVA,NAMEV,NDEST, NDOFN,NELEM,NEVAB,NNODE,NOFIX,NPIVO, NPOIN,NTOTV,TDISP,TLOAD,TREAC,VECRV)
|
||||
FEMP 85
|
||||
FEMP 86
|
||||
FEMP 87
|
||||
FEMP 88
|
||||
FEMP 89
|
||||
FEMP 90
|
||||
C
|
||||
FEMP 91
|
||||
C*** CALCULATE RESIDUAL FORCES
|
||||
FEMP 92
|
||||
C
|
||||
FEMP 93
|
||||
CALL RESMP (ASDIS,COORD,EFFST,ELOAD,EPSTN,LNODS, MATNO,MELEM,MMATS,MPOIN,MTOTG,MTOTV, NCRIT,NELEM,NEVAB,NGAUS,NNODE,PROPS, STRSG)
|
||||
FEMP 94
|
||||
FEMP 95
|
||||
FEMP 96
|
||||
FEMP 97
|
||||
C
|
||||
FEMP 98
|
||||
C*** CHECK FOR CONVERGENCE
|
||||
FEMP 99
|
||||
C
|
||||
FEMP 100
|
||||
CALL CONVMP (ASDIS,ELOAD,IITER,IFDIS,IFRES,LNODS, MELEM,MEVAB,MTOTV,NCHEK,NCDIS,NCRES, NDOFN,NELEM,NEVAB,NNODE,NPOIN,NTOTV, REFOR,TOFOR,TDISP,TLOAD,TOLER)
|
||||
FEMP 101
|
||||
FEMP 102
|
||||
FEMP 103
|
||||
FEMP 104
|
||||
C
|
||||
FEMP 105
|
||||
C*** OUTPUT RESULTS IF REQUIRED
|
||||
FEMP 106
|
||||
C
|
||||
FEMP 107
|
||||
C
|
||||
FEMP 108
|
||||
IF(IITER.EQ.1.AND.NOUTP(1).GT.0)
|
||||
FEMP 109
|
||||
.CALL OUTMP (EPSTN,IITER,MTOTG,MTOTV,MVFIX,NELEM, NGAUS,NOFIX,NUOTP,NPOIN,NVFIX,STRSG, TDISP,TREAC)
|
||||
FEMP 110
|
||||
FEMP 111
|
||||
FEMP 112
|
||||
C
|
||||
FEMP 113
|
||||
C*** IF SOLUTION HAS CONVERGED STOP ITERATING AND OUTPUT RESULTS
|
||||
FEMP 114
|
||||
C
|
||||
FEMP 115
|
||||
IF(NCHEK.EQ.0) GO TO 100
|
||||
FEMP 116
|
||||
90 CONTINUE
|
||||
FEMP 117
|
||||
C
|
||||
FEMP 118
|
||||
C***
|
||||
FEMP 119
|
||||
C
|
||||
FEMP 120
|
||||
IF(NALGO.EQ.2) GO TO 100
|
||||
FEMP 121
|
||||
```
|
||||
|
||||
<!-- source-page: 346 -->
|
||||
|
||||
<table><tr><td colspan="4">STOP</td><td>FEMP 122</td></tr><tr><td>100 CALL</td><td>OUTMP</td><td colspan="2">(EPSTN,IITER,MTOTG,MTOTV,MVFIX,NELEM,NGAUS,NOFIX,NOUTP,NPOIN,NVFIX,STRSG,TDISP,TREAC)</td><td>FEMP 123</td></tr><tr><td>.</td><td></td><td></td><td></td><td>FEMP 124</td></tr><tr><td>.</td><td></td><td></td><td></td><td>FEMP 125</td></tr><tr><td>70 CONTINUE</td><td></td><td></td><td></td><td>FEMP 126</td></tr><tr><td>20 CONTINUE</td><td></td><td></td><td></td><td>FEMP 127</td></tr><tr><td>10 CONTINUE</td><td></td><td></td><td></td><td>FEMP 128</td></tr><tr><td>STOP</td><td></td><td></td><td></td><td>FEMP 129</td></tr><tr><td>END</td><td></td><td></td><td></td><td>FEMP 130</td></tr></table>
|
||||
|
||||
# 9.5.3 Subroutine CONVMP
|
||||
|
||||
This routine establishes whether a solution has converged with reference to some displacement or residual force norm.
|
||||
|
||||
<table><tr><td></td><td>SUBROUTINE CONVMP</td><td>(ASDIS,ELOAD,IITER,IFDIS,IFRES,LNODS,</td><td>CONV</td><td>1</td></tr><tr><td></td><td>.</td><td>MELEM,MEVAB,MTOTV,NCHEK,NCDIS,NCRES,</td><td>CONV</td><td>2</td></tr><tr><td></td><td>.</td><td>NDOFN,NELEM,NEVAB,NNODE,NPOIN,NTOTV,</td><td>CONV</td><td>3</td></tr><tr><td></td><td>.</td><td>REFOR,TOFOR,TDISP,TLOAD,TOLER)</td><td>CONV</td><td>4</td></tr><tr><td colspan="3">C**********</td><td>CONV</td><td>5</td></tr><tr><td>C</td><td></td><td></td><td>CONV</td><td>6</td></tr><tr><td>C***</td><td colspan="2">ESTABLISHES WHETHER A SOLUTION HAS CONVERGED WITH</td><td>CONV</td><td>7</td></tr><tr><td>C***</td><td colspan="2">REFERENCE TO SOME DISPLACEMENT OR RESIDUAL FORCE NORM</td><td>CONV</td><td>8</td></tr><tr><td>C</td><td></td><td></td><td>CONV</td><td>9</td></tr><tr><td colspan="3">C**********</td><td>CONV</td><td>10</td></tr><tr><td></td><td colspan="3">DIMENSION ADIDF(3),ASDIS(MTOTV),ELOAD(MELEM,MEVAB),LNODS(MELEM,9),CONV</td><td>11</td></tr><tr><td></td><td>.</td><td>NCDIS(4),NCRES(4),REFDF(3),REFOR(MTOTV),TDIDF(3),</td><td>CONV</td><td>12</td></tr><tr><td></td><td>.</td><td>TDISP(MTOTV),TLOAD(MELEM,MEVAB),TOFDF(3),TOFOR(MTOTV)</td><td>CONV</td><td>13</td></tr><tr><td></td><td colspan="2">WRITE(6,606) IITER</td><td>CONV</td><td>14</td></tr><tr><td>606</td><td colspan="2">FORMAT(///,' IN CONVER',10X,'ITERATION NUMBER',I3,/)</td><td>CONV</td><td>15</td></tr><tr><td>C***</td><td colspan="2">COMPUTE ELEMENT RESIDUAL FORCES</td><td>CONV</td><td>16</td></tr><tr><td></td><td colspan="2">DO 10 IELEM=1,NELEM</td><td>CONV</td><td>17</td></tr><tr><td></td><td colspan="2">DO 10 IEVAB=1,NEVAB</td><td>CONV</td><td>18</td></tr><tr><td>10</td><td colspan="2">ELOAD(IELEM,IEVAB)=TLOAD(IELEM,IEVAB)-ELOAD(IELEM,IEVAB)</td><td>CONV</td><td>19</td></tr><tr><td>C***</td><td colspan="2">SET CONVERGENCE CODE TO ZERO</td><td>CONV</td><td>20</td></tr><tr><td></td><td colspan="2">NCHEK=0</td><td>CONV</td><td>21</td></tr><tr><td>C***</td><td colspan="2">DISPLACEMENT CONVERGENCE CHECK</td><td>CONV</td><td>22</td></tr><tr><td></td><td colspan="2">IF(IFDIS.EQ.0) GOTO 1000</td><td>CONV</td><td>23</td></tr><tr><td>C***</td><td colspan="2">COMPUTE TOTAL AND DIRECTIONAL NORMS OF DISPLACEMENTS</td><td>CONV</td><td>24</td></tr><tr><td></td><td colspan="2">ADITO=0.0</td><td>CONV</td><td>25</td></tr><tr><td></td><td colspan="2">TDITO=0.0</td><td>CONV</td><td>26</td></tr><tr><td></td><td colspan="2">CALL VZERO (NDOFN,ADIDF)</td><td>CONV</td><td>27</td></tr><tr><td></td><td colspan="2">CALL VZERO (NDOFN,TDIDF)</td><td>CONV</td><td>28</td></tr><tr><td></td><td colspan="2">NPOSI=0</td><td>CONV</td><td>29</td></tr><tr><td></td><td colspan="2">DO:20 IPOIN=1,NPOIN</td><td>CONV</td><td>30</td></tr><tr><td></td><td colspan="2">DO^20 IDOFN=1,NDOFN</td><td>CONV</td><td>31</td></tr><tr><td></td><td colspan="2">NPOSI=NPOSI+1</td><td>CONV</td><td>32</td></tr><tr><td></td><td colspan="2">ADIDF(IDOFN)=ADIDF(IDOFN)+ASDIS(NPOSI)*ASDIS(NPOSI)</td><td>CONV</td><td>33</td></tr><tr><td>20</td><td colspan="2">TDIDF(IDOFN)=TDIDF(IDOFN)+TDISP(NPOSI)*TDISP(NPOSI)</td><td>CONV</td><td>34</td></tr><tr><td></td><td colspan="2">DO 30 IDOFN=1,NDOFN</td><td>CONV</td><td>35</td></tr><tr><td></td><td colspan="2">ADITO=ADITO+ADIDF(IDOFN)</td><td>CONV</td><td>36</td></tr><tr><td></td><td colspan="2">TDITO=TDITO+TDIDF(IDOFN)</td><td>CONV</td><td>37</td></tr><tr><td></td><td colspan="2">ADIDF(IDOFN)=SQRT(ADIDF(IDOFN))</td><td>CONV</td><td>38</td></tr><tr><td>30</td><td colspan="2">TDIDF(IDOFN)=SQRT(TDIDF(IDOFN))</td><td>CONV</td><td>39</td></tr><tr><td></td><td colspan="2">ADITO=SQRT(ADITO)</td><td>CONV</td><td>40</td></tr><tr><td></td><td colspan="2">TDITO=SQRT(TDITO)</td><td>CONV</td><td>41</td></tr><tr><td>C***</td><td colspan="2">CHECK FOR CONVERGENCE AND PRINT ERRORS PER CENT</td><td>CONV</td><td>42</td></tr><tr><td></td><td colspan="2">DO 40 IDOFN=1,NDOFN</td><td>CONV</td><td>43</td></tr><tr><td></td><td colspan="2">IF(TDIDF(IDOFN).EQ.0.0) GOTO 40</td><td>CONV</td><td>44</td></tr></table>
|
||||
|
||||
<!-- source-page: 347 -->
|
||||
|
||||
```csv
|
||||
TDIDF(IDOFN)=100.*ADIDF(IDOFN)/TDIDF(IDOFN) CONV 45
|
||||
IF(NCDIS(IDOFN).NE.0.AND.TDIDF(IDOFN).GT.TOLER) NCHEK=1 CONV 46
|
||||
IF(NCDIS(IDOFN).EQ.0) TDIDF(IDOFN)=-TDIDF(IDOFN) CONV 47
|
||||
40 CONTINUE CONV 48
|
||||
IF(TDITO.EQ.0.0) GOTO 50 CONV 49
|
||||
TDITO=100.*ADITO/TDITO CONV 50
|
||||
IF(NCDIS(4).NE.0.AND.TDITO.GT.TOLER) NCHEK=1 CONV 51
|
||||
IF(NCDIS(4).EQ.0) TDITO=-TDITO CONV 52
|
||||
50 CONTINUE CONV 53
|
||||
WRITE(6,600) CONV 54
|
||||
WRITE(6,601) (TDIDF(IDOFN), IDOFN=1, NDOFN) CONV 55
|
||||
600 FORMAT(1X,'DISPLACEMENT CHANGE NORM',//) CONV 56
|
||||
601 FORMAT(1X,5(E10.3,5X)) CONV 57
|
||||
WRITE(6,602) CONV 58
|
||||
602 FORMAT(5X,'TOTAL') CONV 59
|
||||
WRITE(6,603) TDITO CONV 60
|
||||
603 FORMAT(3X,E10.3) CONV 61
|
||||
C*** RESIDUAL CONVERGENCE CHECK CONV 62
|
||||
1000 IF(IFRES.EQ.0) GOTO 2000 CONV 63
|
||||
C*** ASSEMBLE TOTAL AND RESIDUAL FORCE VECTORS CONV 64
|
||||
DO 1 ITOTV=1,NTOTV CONV 65
|
||||
REFOR(ITOTV)=0.0 CONV 66
|
||||
1 TOFOR(ITOTV)=0.0 CONV 67
|
||||
DO 60 IELEM=1,NELEM CONV 68
|
||||
KEVAB=0 CONV 69
|
||||
DO 60 INODE=1,NNODE CONV 70
|
||||
LOCNO=IABS(LNODS(IELEM,INODE)) CONV 71
|
||||
DO 60 IDOFN=1,NDOFN CONV 72
|
||||
KEVAB=KEVAB+1 CONV 73
|
||||
NPOSI=(LOCNO-1)*NDOFN+IDOFN CONV 74
|
||||
TOFOR(NPOSI)=TOFOR(NPOSI)+TLOAD(IELEM,KEVAB) CONV 75
|
||||
60 REFOR(NPOSI)=REFOR(NPOSI)+ELOAD(IELEM,KEVAB) CONV 76
|
||||
C*** COMPUTE TOTAL AND DIRECTIONAL NORMS OF RESIDUAL AND TOTAL FORCE CONV 77
|
||||
REFTO=0.0 CONV 78
|
||||
TOFTO=0.0 CONV 79
|
||||
CALL VZERO (NDOFN,REFDF) CONV 80
|
||||
CALL VZERO (NDOFN,TOFDF) CONV 81
|
||||
NPOSI=0 CONV 82
|
||||
DO 70 IPOIN=1,NPOIN CONV 83
|
||||
DO 70 IDOFN=1,NDOFN CONV 84
|
||||
NPOSI=NPOSI+1 CONV 85
|
||||
REFDF(IDOFN)=REFDF(IDOFN)+REFOR(NPOSI)*REFOR(NPOSI) CONV 86
|
||||
70 TOFDF(IDOFN)=TOFDF(IDOFN)+TOFOR(NPOSI)*TOFOR(NPOSI) CONV 87
|
||||
DO 80 IDOFN=1,NDOFN CONV 88
|
||||
REFTO=REFTO+REFDF(IDOFN) CONV 89
|
||||
TOFTO=TOFTO+TOFDF(IDOFN) CONV 90
|
||||
REFDF(IDOFN)=SQRT(REFDF(IDOFN)) CONV 91
|
||||
80 TOFDF(IDOFN)=SQRT(TOFDF(IDOFN)) CONV 92
|
||||
REFTO=SQRT(REFTO) CONV 93
|
||||
TOFTO=SQRT(TOFTO) CONV 94
|
||||
C*** CHECK FOR CONVERGENCE AND PRINT ERRORS PER CENT CONV 95
|
||||
DO 90 IDOFN=1,NDOFN CONV 96
|
||||
IF(TOFDF(IDOFN).EQ.0.0) GOTO 90 CONV 97
|
||||
TOFDF(IDOFN)=100.*REFDF(IDOFN)/TOFDF(IDOFN) CONV 98
|
||||
IF(NCRES(IDOFN).NE.0.AND.TOFDF(IDOFN).GT.TOLER) NCHEK=1 CONV 99
|
||||
IF(NCRES(IDOFN).EQ.0) TOFDF(IDOFN)=-TOFDF(IDOFN) CONV 100
|
||||
90 CONTINUE CONV 101
|
||||
IF(TOFTO.EQ.0.0) GOTO 100 CONV 102
|
||||
TOFTO=100.*REFTO/TOFTO CONV 103
|
||||
IF(NCRES(4).NE.0.AND.TOFTO.GT.TOLER) NCHEK=1 CONV 104
|
||||
IF(NCRES(4).EQ.0) TOFTO=-TOFTO CONV 105
|
||||
100 CONTINUE CONV 106
|
||||
WRITE(6,604) CONV 107
|
||||
WRITE(6,601) (TOFDF(IDOFN), IDOFN=1, NDOFN) CONV 108
|
||||
```
|
||||
|
||||
<!-- source-page: 348 -->
|
||||
|
||||
```txt
|
||||
WRITE(6,602) CONV 109
|
||||
WRITE(6,603) TOFTO CONV 110
|
||||
604 FORMAT(1X,'RESIDUAL NORM',//) CONV 111
|
||||
C*** PRINT CONVERGENCE CODE CONV 112
|
||||
2000 WRITE(6,605) NCHEK CONV 113
|
||||
605 FORMAT(1X,'CONVERGENCE CODE',I4,//) CONV 114
|
||||
RETURN CONV 115
|
||||
END CONV 116
|
||||
```
|
||||
|
||||
# 9.5.4 Subroutine DIMMP
|
||||
|
||||
This subroutine sets up the dimensions which must agree with the size of the arrays in subroutine FEMP.
|
||||
|
||||
```asm
|
||||
SUBROUTINE DIMMP (MBUFA,MELEM,MEVAB,MFRON,MMATS,MPOIN, DIMP 1
|
||||
. MSTIF,MTOTG,MTOTV,MVFIX,NDIME,NDOFN, DIMP 2
|
||||
. NPROP,NSTRE) DIMP 3
|
||||
C**********DIMP 4
|
||||
C DIMP 5
|
||||
C*** SETS UP DYNAMIC DIMENSIONS - MUST AGREE WITH DIMENSIONS DIMP 6
|
||||
C*** IN FEMP DIMP 7
|
||||
C DIMP 8
|
||||
C**********DIMP 9
|
||||
MBUFA = 10 DIMP 10
|
||||
MELEM = 25 DIMP 11
|
||||
MFRON = 40 DIMP 12
|
||||
MMATS = 10 DIMP 13
|
||||
MPOIN = 80 DIMP 14
|
||||
MSTIF=(MFRON*MFRON-MFRON)/2.0+MFRON DIMP 15
|
||||
MTOTG = MELEM*9 DIMP 16
|
||||
NDOFN = 3 DIMP 17
|
||||
MTOTV = MPOIN*NDOFN DIMP 18
|
||||
MVFIX = 40 DIMP 19
|
||||
NDIME=2 DIMP 20
|
||||
NPROP = 8 DIMP 21
|
||||
NSTRE = 5 DIMP 22
|
||||
MEVAB = NDOFN*9 DIMP 23
|
||||
RETURN DIMP 24
|
||||
END DIMP 25
|
||||
```
|
||||
|
||||
# 9.5.5 Subroutine FLOWMP
|
||||
|
||||
This subroutine determines the yield function derivatives $[\partial F/\partial M_{x}, \partial F/\partial M_{y}, \partial F/\partial M_{xy}]^{T}$ for nonlayered Mindlin plates of Von Mises or Tresca material. This routine is almost identical to the corresponding one given in Chapter 7 for plane stress, plane strain and axisymmetric problems.
|
||||
|
||||
```c
|
||||
SUBROUTINE FLOWMP (ABETA, AVECT, DEVIA, DMATX, DVECT, HARDS, NCRIT, SINT3, STEFF, THETA, VARJ2) FLOW 1
|
||||
C**********FLOW 3
|
||||
C FLOW 4
|
||||
C*** DETERMINES YIELD FUNCTION DERIVATIVES FOR MINDLIN PLATES FLOW 5
|
||||
C*** 1 VON MISES FLOW 6
|
||||
C*** 2 TRESCA FLOW 7
|
||||
C FLOW 8
|
||||
C**********FLOW 9
|
||||
```
|
||||
|
||||
<!-- source-page: 349 -->
|
||||
|
||||
```csv
|
||||
C
|
||||
DIMENSION AVECT(5),DEVIA(4),DMATX(3,3),DVECT(5),
|
||||
VECA1(3),VECA2(3),VECA3(3)
|
||||
C
|
||||
C*** DETERMINE THE VECTOR DERIVATIVE OF F FOR VON-MISES
|
||||
SINTH=SIN(THETA)
|
||||
COSTH=COS(THETA)
|
||||
ROOT3=1.73205080757
|
||||
C
|
||||
C*** CALCULATE VECTOR A1
|
||||
VECA1(1)=0.333333333333
|
||||
VECA1(2)=0.333333333333
|
||||
VECA1(3)=0.0
|
||||
C
|
||||
C*** CALCULATE VECTOR A2
|
||||
DO 10 ISTRE=1,3
|
||||
10 VECA2(ISTRE)=DEVIA(ISTRE)/(2.0*STEFF)
|
||||
VECA2(3)=DEVIA(3)/STEFF
|
||||
C
|
||||
C*** CALCULATE VECTOR A3
|
||||
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)
|
||||
GO TO (1,2) NCRIT
|
||||
C
|
||||
C*** VON MISES
|
||||
1 CONS1=0.0
|
||||
CONS2=ROOT3
|
||||
CONS3=0.0
|
||||
GO TO 40
|
||||
C
|
||||
C*** TRESCA
|
||||
2 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*SINT3/SQRT(1.0-SINT3*SINT3))
|
||||
CONS3=ROOT3*SINTH/(VARJ2*SQRT(1.0-SINT3*SINT3))
|
||||
40 CONTINUE
|
||||
DO 50 ISTRE=1,3
|
||||
50 AVECT(ISTRE)=CONS1*VECA1(ISTRE)+CONS2*VECA2(ISTRE)+CONS3*
|
||||
.VECA3(ISTRE)
|
||||
C
|
||||
C*** DETERMINE THE VECTOR D
|
||||
DENOM=HARDS
|
||||
DO 120 ISTRE=1,3
|
||||
DVECT(ISTRE)=0.0
|
||||
DO 110 JSTRE=1,3
|
||||
110 DVECT(ISTRE)=DVECT(ISTRE)+DMATX(ISTRE,JSTRE)*AVECT(JSTRE)
|
||||
120 DENOM=DENOM+AVECT(ISTRE)*DVECT(ISTRE)
|
||||
ABETA=1.0 DENOM
|
||||
RETURN
|
||||
END
|
||||
FLOW 10
|
||||
FLOW 11
|
||||
FLOW 12
|
||||
FLOW 13
|
||||
FLOW 14
|
||||
FLOW 15
|
||||
FLOW 16
|
||||
FLOW 17
|
||||
FLOW 18
|
||||
FLOW 19
|
||||
FLOW 20
|
||||
FLOW 21
|
||||
FLOW 22
|
||||
FLOW 23
|
||||
FLOW 24
|
||||
FLOW 25
|
||||
FLOW 26
|
||||
FLOW 27
|
||||
FLOW 28
|
||||
FLOW 29
|
||||
FLOW 30
|
||||
FLOW 31
|
||||
FLOW 32
|
||||
FLOW 33
|
||||
FLOW 34
|
||||
FLOW 35
|
||||
FLOW 36
|
||||
FLOW 37
|
||||
FLOW 38
|
||||
FLOW 39
|
||||
FLOW 40
|
||||
FLOW 41
|
||||
FLOW 42
|
||||
FLOW 43
|
||||
FLOW 44
|
||||
FLOW 45
|
||||
FLOW 46
|
||||
FLOW 47
|
||||
FLOW 48
|
||||
FLOW 49
|
||||
FLOW 50
|
||||
FLOW 51
|
||||
FLOW 52
|
||||
FLOW 53
|
||||
FLOW 54
|
||||
FLOW 55
|
||||
FLOW 56
|
||||
FLOW 57
|
||||
FLOW 58
|
||||
FLOW 59
|
||||
FLOW 60
|
||||
FLOW 61
|
||||
FLOW 62
|
||||
FLOW 63
|
||||
FLOW 64
|
||||
FLOW 65
|
||||
FLOW 66
|
||||
FLOW 67
|
||||
FLOW 68
|
||||
FLOW 69
|
||||
FLOW 70
|
||||
```
|
||||
|
||||
<!-- source-page: 350 -->
|
||||
|
||||
# 9.5.6 Subroutine GRADMP
|
||||
|
||||
This subroutine evaluates displacement gradients $\partial w/\partial x$ , $\partial w/\partial y$ , $\partial \theta_{x}/\partial x$ , $\partial \theta_{x}/\partial y$ , $\partial \theta_{y}/\partial x$ and $\partial \theta_{y}/\partial y$ .
|
||||
|
||||
```fortran
|
||||
SUBROUTINE GRADMP (CARTD,DGRAD,ELDIS,NDOFN,NNODE) GRAD 1
|
||||
C**************************GRAD 2
|
||||
C GRAD 3
|
||||
C*** FORM TOTAL DISPLACEMENTS GRADIENTS GRAD 4
|
||||
C GRAD 5
|
||||
C**************************GRAD 6
|
||||
DIMENSION CARTD(2,9),DGRAD(6),ELDIS(3,9) GRAD 7
|
||||
C*** ZERO DGRAD GRAD 8
|
||||
CALL VZERO(6,DGRAD) GRAD 9
|
||||
C*** FORM TOTAL DISPLACEMENTS GRADIENTS GRAD 10
|
||||
DO 10 INODE=1,NNODE GRAD 11
|
||||
DNIDX=CARTD(1,INODE) GRAD 12
|
||||
DNIDY=CARTD(2,INODE) GRAD 13
|
||||
DO 10 IDOFN=1,NDOFN GRAD 14
|
||||
IPOSN=NDOFN+IDOFN GRAD 15
|
||||
CONST=ELDIS(IDOFN,INODE) GRAD 16
|
||||
DGRAD(IDOFN)=DGRAD(IDOFN)+DNIDX*CONST GRAD 17
|
||||
10 DGRAD(IPOSN)=DGRAD(IPOSN)+DNIDY*CONST GRAD 18
|
||||
RETURN GRAD 19
|
||||
END GRAD 20
|
||||
```
|
||||
|
||||
# 9.5.7 Subroutine INVMP
|
||||
|
||||
This subroutine evaluates the Mindlin plate bending moment invariants. It also evaluates the effective moment for the Tresca and Von Mises materials.
|
||||
|
||||
```txt
|
||||
SUBROUTINE INVMP (DEVIA, NCRIT, SINT3, STEFF, STEMP, THETA, INVR 1
|
||||
. VARJ2, YIELD) INVR 2
|
||||
C************************** INVR 3
|
||||
C INVR 4
|
||||
C*** CALCULATE MINDLIN PLATE STRESS RESULTANT INVARIANTS INVR 5
|
||||
C INVR 6
|
||||
C************************** INVR 7
|
||||
DIMENSION STEMP(5), DEVIA(4) INVR 8
|
||||
SMEAN=(STEMP(1)+STEMP(2))/3.0 INVR 9
|
||||
DEVIA(1)=STEMP(1)-SMEAN INVR 10
|
||||
DEVIA(2)=STEMP(2)-SMEAN INVR 11
|
||||
DEVIA(3)=STEMP(3) INVR 12
|
||||
DEVIA(4)=-SMEAN INVR 13
|
||||
VARJ2=DEVIA(3)*DEVIA(3)+0.5*(DEVIA(1)*DEVIA(1)+DEVIA(2)*DEVIA(2) INVR 14
|
||||
.+DEVIA(4)*DEVIA(4)) INVR 15
|
||||
VARJ3=DEVIA(4)*(DEVIA(4)*DEVIA(4)-VARJ2) INVR 16
|
||||
STEFF=SQRT(VARJ2) INVR 17
|
||||
SINT3=-2.5980762113*VARJ3/(VARJ2*STEFF) INVR 18
|
||||
THETA=ASIN(SINT3)/3.0 INVR 19
|
||||
GO TO (1,2) NCRIT INVR 20
|
||||
C*** VON MISES INVR 21
|
||||
1 YIELD=1.73205080757*STEFF INVR 22
|
||||
RETURN INVR 23
|
||||
C*** TRESCA INVR 24
|
||||
2 YIELD=2.0*COS(THETA)*STEFF INVR 25
|
||||
RETURN INVR 26
|
||||
END INVR 27
|
||||
```
|
||||
Reference in New Issue
Block a user