```csv 540 IFPRE(IDOFN,IPOIN)=0 NPUT 76 DO 550 IVFIX=1,NVFIX NPUT 77 550 READ (5,908) IPOIN,(IFPRE(IDOFN,IPOIN),IDOFN=1,NDOFN) NPUT 78 DO 560 IPOIN=1,NPOIN NPUT 79 560 WRITE(6,909) IPOIN,(IFPRE(IDOFN,IPOIN),IDOFN=1,NDOFN) NPUT 80 908 FORMAT(1X,I4,3X,2I1) NPUT 81 909 FORMAT(6X,I5,3X,2I1) NPUT 82 C NPUT 83 C*** READ THE AVAILABLE SELECTION OF ELEMENT PROPERTIES. NPUT 84 C NPUT 85 WRITE(6,910) NPUT 86 910 FORMAT(//5X,19HATERIAL PROPERTIES) NPUT 87 DO 520 IMATS=1,NMATS NPUT 88 READ(5,900) NUMAT NPUT 89 READ (5,917) (PROPS(NUMAT,IPROP),IPROP=1,NPROP) NPUT 90 WRITE(6,911) NUMAT NPUT 91 911 FORMAT(/5X,11HATERIAL NO,I5) NPUT 92 520 WRITE(6,912) (PROPS(NUMAT,IPROP),IPROP=1,NPROP) NPUT 93 912 FORMAT(/5X,13HYOUNG MODULUS,G12.4/5X,13HPOISSON RATIO,G12.4/5X,13HTHICKNESS ,G12.4/5X,13HMASS DENSITY ,G12.4/5X,13HALPHA TEMPR ,G12.4/5X,13HREFERENCE FO ,G12.4/5X,13HHARDENING PAR,G12.4/5X,13HFRICT ANGLE ,G12.4/5X,13HFLUIDITY PAR ,G12.4/5X,13HEXP DELTA ,G12.4/5X,13HNFLOW CODE ,G12.4) NPUT 99 917 FORMAT(8E10.4) NPUT 100 C NPUT 101 C*** SET UP GAUSSIAN INTEGRATION CONSTANTS NPUT 102 C NPUT 103 CALL GAUSSQ (NGAUS,POSGP,WEIGP) NPUT 104 RETURN NPUT 105 END NPUT 106 ``` # 10.6.11 Subroutine INTIME This routine reads and writes all data required for time integration and plotting stress and displacement histories. ```fortran SUBROUTINE INTIME (AALFA, ACCEH, ACCEV, AFACT, AZERO, BEETA, TIME 1 BZERO, DELTA, DTIME, DTEND, GAAMA, IFIXD, TIME 2 IFUNC, INTGR, KSTEP, MITER, NDOFN, NELEM, TIME 3 NGRQS, NOUTD, NOUTP, NPOIN, NPRQD, NREQD, TIME 4 NREQS, NSTEP, OMEGA, TDISP, TOLER, VELOC, TIME 5 IPRED) TIME 6 C******************************************************************************************TIME 7 C TIME 8 C ** INITIAL VALUES AND TIME INTEGRATION DATA TIME 9 C TIME 10 C******************************************************************************************TIME 11 DIMENSION TDISP(1), ACCEH(1), NPRQD(1), INTGR(1), TIME 12 VELOC(1), ACCEV(1), NGRQS(1) TIME 13 C TIME 14 C*** READ TIME STEPPING AND SELECTIVE OUTPUT PARAMETERS TIME 15 C TIME 16 READ (5,902) NSTEP, NOUTD, NOUTP, NREQD, NREQS, NACCE, IFUNC, TIME 17 IFIXD, MITER, KSTEP, IPRED TIME 18 READ (5,190) DTIME, DTEND, DTREC, AALFA, BEETA, DELTA, GAAMA, TIME 19 AZERO, BZERO, OMEGA, TOLER TIME 20 WRITE(6,950) NSTEP, NOUTD, NOUTP, NREQD, NREQS, NACCE, IFUNC, TIME 21 IFIXD, MITER, KSTEP, IPRED TIME 22 WRITE(6,960) DTIME, DTEND, DTREC, AALFA, BEETA, DELTA, GAAMA, TIME 23 AZERO, BZERO, OMEGA, TOLER TIME 24 950 FORMAT(/5X, 'TIME STEPPING PARAMETERS'/ TIME 25 /5X, 'NSTEP=', I5, 12X, 'NOUTD=', I5, 12X, 'NOUTP=', I5,/ /5X, 'NREQD=', I5, 12X, 'NREQS=', I5, 12X, 'NACCE=', I5,/ /5X, 'IFUNC=', I5, 12X, 'IFIXD=', I5, 12X, 'MITER=', I5,/ /5X, 'KSTEP=', I5, 12X, 'IPRED=', I5) TIME 29 ``` ```csv 960 FORMAT(/5X,'DTIME=',G12.4,5X,'DTEND=',G12.4,5X,'DTREC=',G12.4,/ /5X,'AALFA=',G12.4,5X,'BEETA=',G12.4,5X,'DELTA=',G12.4,/ /5X,'GAAMA=',G12.4,5X,'AZERO=',G12.4,5X,'BZERO=',G12.4,/ /5X,'OMEGA=',G12.4,5X,'TOLER=',G12.4) C C*** SELECTED NODES AND GAUSS POINTS FOR OUTPUT C READ(5,902) (NPRQD(IREQD),IREQD=1,NREQD) READ(5,902) (NGRQS(IREQS),IREQS=1,NREQS) WRITE(6,909) 909 FORMAT(/5X,41H SELECTIVE OUTPUT REQUESTED FOR FOLLOWING ) WRITE(6,910) (NPRQD(IREQD),IREQD=1,NREQD) 910 FORMAT(/,5X,6H NODES,10I5) WRITE(6,911) (NGRQS(IREQS),IREQS=1,NREQS) 911 FORMAT(5X,6H G.P.,10I5) 902 FORMAT(16I5) 190 FORMAT(8F10.4) C C*** READ THE INDICATOR FOR EXPLICIT OR IMPLICIT ELEMENT C READ (5,902) (INTGR(IELEM),IELEM=1,NELEM) WRITE(6,930) WRITE(6,902) (INTGR(IELEM),IELEM=1,NELEM) 930 FORMAT(/5X,'TYPE OF ELEMENT, IMPLICIT=1,EXPLICIT=2 '/) C C*** INITIAL DISPLACEMENTS C JPOIN=0 DO 500 IPOIN=1,NPOIN DO 500 IDOFN=1,NDOFN JPOIN=JPOIN+1 TDISP(JPOIN)=0. 500 VELOC(JPOIN)=0. WRITE(6,903) 200 READ(5,904) NGASH,XGASH,YGASH NPOSN=(NGASH-1)*NDOFN+1 TDISP(NPOSN)=XGASH NPOSN=NPOSN+1 TDISP(NPOSN)=YGASH WRITE(6,905) NGASH,XGASH,YGASH IF(NGASH.NE.NPOIN) GO TO 200 C C*** INITIAL VELOCITIES C WRITE(6,906) 210 READ(5,904) NGASH,XGASH,YGASH NPOSN=(NGASH-1)*NDOFN+1 VELOC(NPOSN)=XGASH NPOSN=NPOSN+1 VELOC(NPOSN)=YGASH WRITE(6,905) NGASH,XGASH,YGASH IF(NGASH.NE.NPOIN) GO TO 210 904 FORMAT(I5,2F10.5) 903 FORMAT(/5X,5H NODE,2X,16H INITIAL X-DISP.,2X, .16H INITIAL Y-DISP./) 905 FORMAT(I10,2E18.5) 906 FORMAT(/5X,5H NODE,2X,16H INITIAL X-VELO.,2X, .16H INITIAL Y-VELO./) IF (IFUNC.NE.0) GO TO 250 C C*** READ ACCELEROGRAM DATA ,X-DIREC FROM TAPE 7,Y-DIREC FROM TAPE 12 C AFACT=DTREC/DTIME IF(IFIXD-1) 220,230,240 220 READ (7,907)(ACCEH(I),I=1,NACCE) ```
WRITE(6,912) DTRECTIME 95
WRITE(6,907)(ACCEH(I),I=1,NACCE)TIME 96
READ(12,907)(ACCEV(I),I=1,NACCE)TIME 97
WRITE(6,913) DTRECTIME 98
WRITE(6,907)(ACCEV(I),I=1,NACCE)TIME 99
GO TO 250TIME 100
230READ(12,907)(ACCEV(I),I=1,NACCE)TIME 101
WRITE(6,913) DTRECTIME 102
WRITE(6,907)(ACCEV(I),I=1,NACCE)TIME 103
GO TO 250TIME 104
240READ(7,907)(ACCEH(I),I=1,NACCE)TIME 105
WRITE(6,912)TIME 106
WRITE(6,907)(ACCEH(I),I=1,NACCE)TIME 107
907FORMAT(7F10.3)TIME 108
912FORMAT(/5X,'HORIZONTAL ACCELERATION ORDINATES AT',F9.4,2X,'SEC')TIME 109
913FORMAT(/5X,'VERTICAL ACCELERATION ORDINATES AT',F9.4,2X,'SEC')TIME 110
250CONTINUETIME 111
RETURNTIME 112
ENDTIME 113
TIME 14-33 Read and write most of the control time integration data. TIME 34–46 Read the selective nodal points and integration points for displacement and stress history. TIME 54–70 Read initial displacement. TIME 71-87 Read initial velocities. TIME 89-111 Read appropriate acceleration data. # 10.6.12 Subroutine INVAR This routine calculates the stress invariants and yield values for the various yield criteria. The choice of yield criterion is governed by the parameter NCRIT. A similar routine was described in Section 7.8.3. ```fortran SUBROUTINE INVAR (DEVIA, LPROP, NCRIT, NMATS, PROPS, SINT3, STEFF, STEMP, THETA, VARJ2, YIELD) INVR 1 C********** INVR 2 C INVR 3 C INVR 4 C** STRESS INVARIANTS INVR 5 C INVR 6 C********** INVR 7 DIMENSION DEVIA(4), PROPS(NMATS, 1), STEMP(4) INVR 8 C INVR 9 C*** INVARIANTS INVR 10 C INVR 11 ROOT3=1.73205080757 INVR 12 SMEAN=(STEMP(1)+STEMP(2)+STEMP(4))/3.0 INVR 13 DEVIA(1)=STEMP(1)-SMEAN INVR 14 DEVIA(2)=STEMP(2)-SMEAN INVR 15 DEVIA(3)=STEMP(3) INVR 16 DEVIA(4)=STEMP(4)-SMEAN INVR 17 VARJ2=DEVIA(3)*DEVIA(3)+0.5*(DEVIA(1)*DEVIA(1)+ DEVIA(2)*DEVIA(2)+DEVIA(4)*DEVIA(4)) INVR 18 VARJ3=DEVIA(4)*(DEVIA(4)*DEVIA(4)-VARJ2) INVR 19 STEFF=SQRT(VARJ2) INVR 20 IF (VARJ2.EQ.0.0.OR.STEFF.EQ.0.0) GO TO 5 INVR 21 SINT3=-2.5980762113*VARJ3/(VARJ2*STEFF) INVR 22 GO TO 6 INVR 23 5 SINT3=0.0 INVR 24 6 CONTINUE INVR 25 IF(SINT3.LT.-1.0) SINT3=-1.0 INVR 26 INVR 27 ``` ```csv IF(SINT3.GT. 1.0) SINT3= 1.0 INVR 28 THETA=ASIN(SINT3)/3.0 INVR 29 GO TO (1,2,3,4) NCRIT INVR 30 C*** TRESCA INVR 31 1 YIELD=2.0*COS(THETA)*STEFF INVR 32 RETURN INVR 33 C*** VON MISES INVR 34 2 YIELD=ROOT3*STEFF INVR 35 RETURN INVR 36 C*** MOHR-COULOMB INVR 37 3 PHIRA=PROPS(LPROP,8)*0.017453292 INVR 38 SNPHI=SIN(PHIRA) INVR 39 YIELD=SMEAN*SNPHI+STEFF*(COS(THETA)-SIN(THETA)*SNPHI/ROOT3) INVR 40 RETURN INVR 41 C*** DRUCKER-PRAGER INVR 42 4 PHIRA=PROPS(LPROP,8)*0.017453292 INVR 43 SNPHI=SIN(PHIRA) INVR 44 YIELD=6.0*SMEAN*SNPHI/(ROOT3*(3.0-SNPHI))+STEFF INVR 45 RETURN INVR 46 END INVR 47 ``` # 10.6.13 Subroutine JACOBD This subroutine evaluates the deformation Jacobian matrix $[J_{D}]_{n}$ for a particular sampling point within an element. ```fortran SUBROUTINE JACOBD (CARTD, DLCOD, DJACM, NDIME, NLAPS, NNODE) JACD 1 C******************************* C******************************* C*** DEFORMATION JACOBIAN JACD 2 C JACD 3 C******************************* DIMENSION CARTD(2,9), DLCOD(2,9), DJACM(2,2) JACD 4 IF(NLAPS.GT.1) GO TO 10 JACD 5 C JACD 6 C*** FOR SMALL DISPLACEMENT JACD 7 C JACD 8 C JACD 9 DJACM(1,1)=1.0 JACD 10 DJACM(2,2)=1.0 JACD 11 DJACM(1,2)=0.0 JACD 12 DJACM(2,1)=0.0 JACD 13 RETURN JACD 14 RETURN JACD 15 RETURN JACD 16 C JACD 17 C*** FOR LARGE DISPLACEMENT JACD 18 C JACD 19 10 CONTINUE JACD 20 DO 20 IDIME=1, NDIME JACD 21 DO 20 JDIME=1, NDIME JACD 22 DJACM(IDIME, JDIME)=0.0 JACD 23 DO 20 INODE=1, NNODE JACD 24 DJACM(IDIME, JDIME)=DJACM(IDIME, JDIME) JACD 25 .+DLCOD(IDIME, INODE)*CARTD(JDIME, INODE) JACD 26 20 CONTINUE JACD 27 RETURN JACD 28 END JACD 29 ``` # 10.6.14 Subroutine LINGNL This routine calculates the total elastic strain and corresponding elastic stresses at a particular integration point. In this calculation the strains are evaluated using the deformation Jacobian matrix if geometric nonlinear behaviour is to be taken into account. ```fortran SUBROUTINE LINGNL (CARTD, DJACM, DMATX, ELDIS, GPCOD, KGASP, LINR 1 KGAUS, NDOFN, NLAPS, NNODE, NSTRE, NTYPE, LINR 2 POISS, SHAPE, STRAN, STRES, STRIN) LINR 3 C**************************************************************************************** C C*** ELASTIC STRAIN AND STRESSES C C**************************************************************************************** DIMENSION CARTD(2,9), STRAN(4), DMATX(4,4), STRIN(4,1), LINR 9 ELDIS(2,9), STRES(4), DJACM(2,2), AGASH(2,2), LINR 10 GPCOD(2,9), SHAPE(9) LINR 11 C C*** CALCULATE STRAINS FROM DEFORMATION JACOBIAN C IF(NLAPS.LT.2) GO TO 15 STRAN(1)=0.5*(DJACM(1,1)*DJACM(1,1)+DJACM(2,1)*DJACM(2,1)-1.) STRAN(2)=0.5*(DJACM(1,2)*DJACM(1,2)+DJACM(2,2)*DJACM(2,2)-1.) STRAN(3)=DJACM(1,1)*DJACM(1,2)+DJACM(2,1)*DJACM(2,2) LINR 18 C C *** FOR SMALL DISPLACEMENTS C GO TO 25 15 CONTINUE DO 10 IDOFN=1, NDOFN DO 10 JDOFN=1, NDOFN BGASH=0.0 DO 20 INODE=1, NNODE 20 BGASH=BGASH+CARTD(JDOFN, INODE)*ELDIS(IDOFN, INODE) LINR 28 10 AGASH(IDOFN, JDOFN)=BGASH STRAN(1)=AGASH(1,1) LINR 29 STRAN(2)=AGASH(2,2) LINR 30 STRAN(3)=AGASH(1,2)+AGASH(2,1) LINR 31 25 CONTINUE IF(NTYPE.LT.3) GO TO 90 STRAN(4)=0.0 DO 70 INODE=1, NNODE 70 STRAN(4)=STRAN(4)+ELDIS(1, INODE)*SHAPE(INODE)/GPCOD(1, KGASP) LINR 32 EXTRA=0.0 DO 80 INODE=1, NNODE 80 EXTRA=EXTRA+ELDIS(1, INODE)*SHAPE(INODE)/GPCOD(1, KGASP) LINR 33 STRAN(4)=STRAN(4)+0.5*EXTRA*EXTRA LINR 34 90 DO 50 ISTRE=1,4 STRAN(ISTRE)=STRAN(ISTRE)-STRIN(ISTRE, KGAUS) LINR 35 50 CONTINUE C C*** AND THE CORRESPONDING STRESSES C DO 30 ISTRE=1, NSTRE STRES(ISTRE)=0.0 DO 30 JSTRE=1, NSTRE 30 STRES(ISTRE)=STRES(ISTRE)+DMATX(ISTRE, JSTRE)*STRAN(JSTRE) LINR 40 IF(NTYPE.EQ.1) STRES(4)=0.0 IF(NTYPE.EQ.2) STRES(4)=POISS*(STRES(1)+STRES(2)) LINR 41 RETURN END LINR 42 LINR 43 LINR 44 LINR 45 LINR 46 LINR 47 LINR 48 LINR 49 LINR 50 LINR 51 LINR 52 LINR 53 LINR 54 LINR 55 ``` # 10.6.15 Subroutine LOADPL This routine reads load data and evaluates the consistent nodal forces associated with thermal loading. A similar routine was described in Section 6.4.5. The additions which are included here have been discussed in detail in the authors' earlier text Finite Element Programming. $^{(7)}$ ```csv SUBROUTINE LOADPL (COORD, FORCE, LNODS, MATNO, NDIME, NDOFN, LOAD 1 NELEM, NGAUS, NMATS, NNODE, NPOIN, NSTRE, LOAD 2 NTYPE, POSGP, PROPS, RLOAD, STRIN, TEMPE, LOAD 3 WEIGP) LOAD 4 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 TWOPI=6.283185307179586 NEVAB=NNODE*NDOFN DO 10 IELEM=1,NELEM DO 10 IEVAB=1,NEVAB 10 RLOAD(IELEM,IEVAB)=0.0 READ(5,901) TITLE 901 FORMAT (10A4) WRITE(6,903) TITLE 903 FORMAT(/5X,17HLOAD CASE TITLE -,10A4) 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 ``` ```txt THETA=THETA/57.295779514 LOAD 65 C DO 90 IELEM=1,NELEM LOAD 66 C C*** SET UP PRELIMINARY CONSTANTS LOAD 69 C LPROP=MATNO(IELEM) LOAD 70 THICK=PROPS(LPROP,3) LOAD 71 DENSE=PROPS(LPROP,4) LOAD 72 IF(DENSE.EQ.0.0) GO TO 90 LOAD 73 GXCOM=DENSE*GRAVY*SIN(THETA) LOAD 74 GYCOM=-DENSE*GRAVY*COS(THETA) LOAD 75 C C*** COMPUTE COORDINATES OF THE ELEMENT NODAL POINTS LOAD 76 C DO 60 INODE=1,NNODE LOAD 77 LNODE=IABS(LNODS(IELEM,INODE)) LOAD 78 DO 60 IDIME=1,NDIME LOAD 80 60 ELCOD(IDIME,INODE)=COORD(LNODE,IDIME) LOAD 81 C C*** ENTER LOOPS FOR AREA NUMERICAL INTEGRATION LOAD 82 C KGASP=0 LOAD 83 DO 80 IGAUS=1,NGAUS LOAD 84 DO 80 JGAUS=1,NGAUS LOAD 85 KGASP=KGASP+1 LOAD 86 EXISP=POSGP(IGAUS) LOAD 87 ETASP=POSGP(JGAUS) LOAD 88 C C*** COMPUTE THE SHAPE FUNCTIONS AT THE SAMPLING POINTS AND ELEMENTAL C VOLUME LOAD 89 C CALL SFR2 (DERIV,NNODE,SHAPE,EXISP,ETASP) LOAD 90 CALL JACOB2 (CARTD,DERIV,DJACB,ELCOD,GPCOD,IELEM, KGASP,NNODE,SHAPE) LOAD 91 DVOLU=DJACB*WEIGP(IGAUS)*WEIGP(JGAUS) LOAD 92 IF(NTYPE.EQ.1) DVOLU=DVOLU*THICK LOAD 93 IF(NTYPE.EQ.3) DVOLU=DVOLU*TWOPI*GPCOD(1,KGASP) LOAD 94 C C*** CALCULATE LOADS AND ASSOCIATE WITH ELEMENT NODAL POINTS LOAD 95 C DO 70 INODE=1,NNODE LOAD 96 NGASH=(INODE-1)*NDOFN+1 LOAD 97 MGASH=(INODE-1)*NDOFN+2 LOAD 98 RLOAD(IELEM,NGASH)=RLOAD(IELEM,NGASH)+GXCOM*SHAPE(INODE)*DVOLU LOAD 100 70 RLOAD(IELEM,MGASH)=RLOAD(IELEM,MGASH)+GYCOM*SHAPE(INODE)*DVOLU LOAD 101 80 CONTINUE LOAD 102 90 CONTINUE LOAD 103 600 CONTINUE LOAD 104 IF(IEDGE.EQ.0) GO TO 700 LOAD 105 C C*** DISTRIBUTED EDGE LOADS SECTION LOAD 106 C READ(5,932) NEDGE LOAD 107 932 FORMAT(I5) LOAD 108 WRITE(6,912) NEDGE LOAD 109 912 FORMAT(1H0,5X,21HNO. OF LOADED EDGES =,I5) LOAD 110 WRITE(6,915) LOAD 111 915 FORMAT(1H0,5X,38HLIST OF LOADED EDGES AND APPLIED LOADS) LOAD 112 NODEG=3 LOAD 113 NCODE=NNODE LOAD 114 IF(NNODE.EQ.4) NODEG=2 LOAD 115 IF(NNODE.EQ.9) NCODE=8 LOAD 116 C LOAD 117 LOAD 118 LOAD 119 LOAD 120 LOAD 121 LOAD 122 LOAD 123 LOAD 124 LOAD 125 LOAD 126 LOAD 127 C LOAD 128 ``` ```csv C*** LOOP OVER EACH LOADED EDGE C DO 160 IEDGE=1,NEDGE C C*** READ DATA LOCATING THE LOADED EDGE AND APPLIED LOAD C READ (5,902) NEASS,(NOPRS(IODEG),IODEG=1,NODEG) 902 FORMAT(4I5) WRITE(6,913) NEASS,(NOPRS(IODEG),IODEG=1,NODEG) 913 FORMAT(I10,5X,3I5) READ (5,914)((PRESS(IODEG,IDOFN),IODEG=1,NODEG),IDOFN=1,NDOFN) WRITE(6,914)((PRESS(IODEG,IDOFN),IODEG=1,NODEG),IDOFN=1,NDOFN) 914 FORMAT(6F10.3) ETASP=-1.0 C C*** CALCULATE THE COORDINATES OF THE NODES OF THE ELEMENT EDGE C DO 100 IODEG=1,NODEG LNODE=NOPRS(IODEG) DO 100 IDIME=1,NDIME 100 ELCOD(IDIME,IODEG)=COORD(LNODE,IDIME) C C*** ENTER LOOP FOR LINEAR NUMERICAL INTEGRATION DO 150 IGAUS=1,NGAUS EXISP=POSGP(IGAUS) C C*** EVALUATE THE SHAPE FUNCTIONS AT THE SAMPLING POINTS C CALL SFR2 (DERIV,NNODE,SHAPE,EXISP,ETASP) C C*** CALCULATE COMPONENTS OF THE EQUIVALENT NODAL LOADS C DO 110 IDOFN=1,NDOFN PGASH(IDOFN)=0.0 DGASH(IDOFN)=0.0 DO 110 IODEG=1,NODEG PGASH(IDOFN)=PGASH(IDOFN)+PRESS(IODEG,IDOFN)*SHAPE( IODEG) 110 DGASH(IDOFN)=DGASH(IDOFN)+ELCOD(IDOFN,IODEG)*DERIV(1,IODEG) DVOLU=WEIGP(IGAUS) PXCOM=DGASH(1)*PGASH(2)-DGASH(2)*PGASH(1) PYCOM=DGASH(1)*PGASH(1)+DGASH(2)*PGASH(2) IF(NTYPE.NE.3) GO TO 115 RADUS=0.0 DO 125 IODEG=1,NODEG 125 RADUS=RADIUS+SHAPE(IODEG)*ELCOD(1,IODEG) DVOLU=DVOLU*TWOPI*RADIUS 115 CONTINUE C C*** ASSOCIATE THE EQUIVALENT NODAL EDGE LOADS WITH AN ELEMENT C DO 120 INODE=1,NNODE NLOCA=IABS(LNODS(NEASS,INODE)) 120 IF(NLOCA.EQ.NOPRS(1)) GO TO 130 130 JNODE=INODE+NODEG-1 KOUNT=0 DO 140 KNODE=INODE,JNODE KOUNT=KOUNT+1 NGASH=(KNODE-1)*NDOFN+1 MGASH=(KNODE-1)*NDOFN+2 IF(KNODE.GT.NCODE) NGASH=1 IF(KNODE.GT.NCODE) MGASH=2 RLOAD(NEASS,NGASH)=RLOAD(NEASS,NGASH)+SHAPE(KOUNT)*PXCOM*DVOLU 140 RLOAD(NEASS,MGASH)=RLOAD(NEASS,MGASH)+SHAPE(KOUNT)*PYCOM*DVOLU 150 CONTINUE 160 CONTINUE LOAD 129 LOAD 130 LOAD 131 LOAD 132 LOAD 133 LOAD 134 LOAD 135 LOAD 136 LOAD 137 LOAD 138 LOAD 139 LOAD 140 LOAD 141 LOAD 142 LOAD 143 LOAD 144 LOAD 145 LOAD 146 LOAD 147 LOAD 148 LOAD 149 LOAD 150 LOAD 151 LOAD 152 LOAD 153 LOAD 154 LOAD 155 LOAD 156 LOAD 157 LOAD 158 LOAD 159 LOAD 160 LOAD 161 LOAD 162 LOAD 163 LOAD 164 LOAD 165 LOAD 166 LOAD 167 LOAD 168 LOAD 169 LOAD 170 LOAD 171 LOAD 172 LOAD 173 LOAD 174 LOAD 175 LOAD 176 LOAD 177 LOAD 178 LOAD 179 LOAD 180 LOAD 181 LOAD 182 LOAD 183 LOAD 184 LOAD 185 LOAD 186 LOAD 187 LOAD 188 LOAD 189 LOAD 190 LOAD 191 LOAD 192 LOAD 193 ``` ```fortran 700 CONTINUE IF(ITEMP.EQ.0) GO TO 800 C C*** INITIALIZE AND INPUT THE NODAL TEMPERATURES C DO 170 IPOIN=1,NPOIN 170 TEMPE(IPOIN)=0.0 WRITE(6,917) 917 FORMAT(1HO,5X,29HPREScribed NODAL TEMPERATURES) 180 READ (5,916) NODPT,TEMPE(NODPT) WRITE(6,916) NODPT,TEMPE(NODPT) 916 FORMAT(I5,F10.3) IF(NODPT.LT.NPOIN) GO TO 180 KGAST=0 C C*** LOOP OVER EACH ELEMENT C DO 280 IELEM=1,NELEM LPROP=MATNO(IELEM) DO 200 INODE=1,NNODE LNODE=IABS(LNODS(IELEM,INODE)) C C*** IDENTIFY THE COORDINATES AND TEMPERATURE OF EACH ELEMENT NODE POINTLOAD C DO 190 IDIME=1,NDIME 190 ELCOD(IDIME,INODE)=COORD(LNODE,IDIME) 200 ELCOD(2,INODE)=TEMPE(LNODE) C C*** SET UP MATERIAL PROPERTIES C CALL MODPS (DMATX,LPROP,NMATS,NSTRE,NTYPE,PROPS) YOUNG=PROPS(LPROP,1) POISS=PROPS(LPROP,2) THICK=PROPS(LPROP,3) ALPHA=PROPS(LPROP,5) C C*** ENTER LOOPS FOR AREA NUMERICAL INTEGRATION C KGASP=0 DO 270 IGAUS=1,NGAUS DO 270 JGAUS=1,NGAUS KGAST=KGAST+1 KGASP=KGASP+1 EXISP=POSGP(IGAUS) ETASP=POSGP(JGAUS) C C*** EVALUATE THE SHAPE FUNCTIONS AND TEMPERATURE AT THE SAMPLING POINTSLOAD C ,ELEMENTAL VOLUME AND CARTESIAN DERIVATIVES C CALL SFR2 (DERIV,NNODE,SHAPE,EXISP,ETASP) CALL JACOB2 (CARTD,DERIV,DJACB,ELCOD,GPCOD,IELEM, KGASP,NNODE,SHAPE) THERM=0.0 DO 210 INODE=1,NNODE 210 THERM=THERM+ELCOD(2,INODE)*SHAPE(INODE) DVOLU=DJACB*WEIGP(IGAUS)*WEIGP(JGAUS) IF(NTYPE.EQ.1) DVOLU=DVOLU*THICK IF(NTYPE.EQ.3) DVOLU=DVOLU*TWOPI*GPCOD(1,KGASP) C C*** EVALUATE THE INITIAL THERMAL STRAINS C EIGEN=THERM*ALPHA IF(NTYPE.EQ.2) GO TO 220 STRAN(1)=-EIGEN STRAN(2)=-EIGEN LOAD 194 LOAD 195 LOAD 196 LOAD 197 LOAD 198 LOAD 199 LOAD 200 LOAD 201 LOAD 202 LOAD 203 LOAD 204 LOAD 205 LOAD 206 LOAD 207 LOAD 208 LOAD 209 LOAD 210 LOAD 211 LOAD 212 LOAD 213 LOAD 214 LOAD 215 LOAD 216 LOAD 217 LOAD 218 LOAD 219 LOAD 220 LOAD 221 LOAD 222 LOAD 223 LOAD 224 LOAD 225 LOAD 226 LOAD 227 LOAD 228 LOAD 229 LOAD 230 LOAD 231 LOAD 232 LOAD 233 LOAD 234 LOAD 235 LOAD 236 LOAD 237 LOAD 238 LOAD 239 LOAD 240 LOAD 241 LOAD 242 LOAD 243 LOAD 244 LOAD 245 LOAD 246 LOAD 247 LOAD 248 LOAD 249 LOAD 250 LOAD 251 LOAD 252 LOAD 253 LOAD 254 LOAD 255 LOAD 256 LOAD 257 LOAD 258 ``` ```csv STRAN(3)=0.0 GO TO 230 220 STRAN(1)=-(1.0+POISS)*EIGEN STRAN(2)=-(1.0+POISS)*EIGEN STRAN(3)=0.0 C C*** AND THE CORRESPONDING INITIAL STRESSES C 230 DO 250 ISTRE=1,NSTRE STRES(ISTRE)=0.0 DO 240 JSTRE=1,NSTRE 240 STRES(ISTRE)=STRES(ISTRE)+DMATX(ISTRE,JSTRE)*STRAN(JSTRE) 250 STRIN(ISTRE,KGAST)=STRES(ISTRE) IF(NTYPE.EQ.2) STRIN(4,KGAST)=-YOUNG*EIGEN IF(NTYPE.EQ.1) STRIN(4,KGAST)=0.0 C C*** CALCULATE THE EQUIVALENT NODAL FORCES AND ASSOCIATE WITH THE C ELEMENT NODES C EXTRA=0.0 DO 260 INODE=1,NNODE IF(NTYPE.EQ.3) EXTRA=DVOLU*SHAPE(INODE)*STRES(4)/GPCOD(1,KGASP) NGASH=(INODE-1)*NDOFN+1 MGASH=(INODE-1)*NDOFN+2 RLOAD(IELEM,NGASH)=RLOAD(IELEM,NGASH)+EXTRA -(CARTD(1,INODE)*STRES(1)+CARTD(2,INODE)*STRES(3))*DVOLU 260 RLOAD(IELEM,MGASH)=RLOAD(IELEM,MGASH) -(CARTD(1,INODE)*STRES(3)+CARTD(2,INODE)*STRES(2))*DVOLU 270 CONTINUE 280 CONTINUE 800 CONTINUE C WRITE(6,907) C 907 FORMAT(1H0,5X,36H TOTAL NODAL FORCES FOR EACH ELEMENT) C DO 290 IELEM=1,NELEM C 290 WRITE(6,905) IELEM,(RLOAD(IELEM,IEVAB),IEVAB=1,NEVAB) C 905 FORMAT(1X,14,5X,8E12.4/(10X,8E12.4)) DO 5 IELEM=1,NELEM KEVAB=0 DO 5 INODE=1,NNODE LNODE=LNODS(IELEM,INODE) NPOSN=(LNODE-1)*NDOFN DO 5 IDOFN=1,NDOFN KEVAB KEVAB+1 NPOSN=NPOSN+1 FORCE(NPOSN)=FORCE(NPOSN)+RLOAD(IELEM,KEVAB) 5 CONTINUE RETURN END LOAD 259 LOAD 260 LOAD 261 LOAD 262 LOAD 263 LOAD 264 LOAD 265 LOAD 266 LOAD 267 LOAD 268 LOAD 269 LOAD 270 LOAD 271 LOAD 272 LOAD 273 LOAD 274 LOAD 275 LOAD 276 LOAD 277 LOAD 278 LOAD 279 LOAD 280 LOAD 281 LOAD 282 LOAD 283 LOAD 284 LOAD 285 LOAD 286 LOAD 287 LOAD 288 LOAD 289 LOAD 290 LOAD 291 LOAD 292 LOAD 293 LOAD 294 LOAD 295 LOAD 296 LOAD 297 LOAD 298 LOAD 299 LOAD 300 LOAD 301 LOAD 302 LOAD 303 LOAD 304 LOAD 305 LOAD 306 ``` # 10.6.16 Subroutine LUMASS This subroutine evaluates the lumped mass vector and consistent mass matrix for the finite element mesh. If INTGR(I)=1, it generates the consistent mass matrix and if INTGR(I)=2, it generates a special lumped mass vector. In the special mass lumping scheme which is employed, the diagonal terms of the consistent mass matrix are scaled to preserve the total mass. The element consistent mass matrices are written on tape 3. The consistent mass matrix is not used in DYNPAK. This subroutine also reads concentrated masses and assembles them into the global diagonal mass vector.