OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
law36_upd.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| law36_upd ../starter/source/materials/mat/mat036/law36_upd.F
25!||--- called by ------------------------------------------------------
26!|| updmat ../starter/source/materials/updmat.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| func_inters ../starter/source/tools/curve/func_inters.F
30!||--- uses -----------------------------------------------------
31!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
32!|| message_mod ../starter/share/message_module/message_mod.F
33!|| table_mod ../starter/share/modules1/table_mod.F
34!||====================================================================
35 SUBROUTINE law36_upd(IOUT ,TITR ,MAT_ID ,NUPARAM,UPARAM ,
36 . NFUNC ,IFUNC ,FUNC_ID,NPC ,PLD ,
37 . MTAG ,NFUNCT )
38C-----------------------------------------------
39C M o d u l e s
40C-----------------------------------------------
41 USE message_mod
42 USE table_mod
43 USE elbuftag_mod
45C-----------------------------------------------
46C I m p l i c i t T y p e s
47C-----------------------------------------------
48#include "implicit_f.inc"
49C-----------------------------------------------
50C C o m m o n B l o c k s
51C-----------------------------------------------
52C-----------------------------------------------
53C D u m m y A r g u m e n t s
54C-----------------------------------------------
55 INTEGER ,INTENT(IN) :: MAT_ID,IOUT,NUPARAM
56 INTEGER ,INTENT(IN) :: NFUNC ! number of functions defined in the law
57 INTEGER ,INTENT(IN) :: NFUNCT ! total number of functions in the system
58 INTEGER, DIMENSION(NFUNC) :: IFUNC
59 INTEGER, DIMENSION(NFUNCT) :: FUNC_ID
60 INTEGER NPC(*)
61 my_real uparam(nuparam),pld(*)
62 CHARACTER(LEN=NCHARTITLE) :: TITR
63 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
64C-----------------------------------------------
65C L o c a l V a r i a b l e s
66C-----------------------------------------------
67 INTEGER :: I,J,IFE,IE,IX1,IX2,IY1,IY2,NRATE,IYLD,IFAIL,FUNC1,FUNC2
68 my_real :: EPSMAX,EPSLAST,X1,X2,Y1,Y2,FAC1,FAC2,XINT,YINT
69C====================================================================
70c Check if scale factor function of Young modulus is decreasing with plastic strain
71c
72 ife = ifunc(nfunc)
73 IF (ife > 0) THEN
74 ie = npc(ife)
75 iy2 = npc(ife+1)
76 DO i = ie+1,iy2-3,2
77 IF (pld(i) < pld(i+2)) THEN
78 CALL ancmsg(msgid=975, msgtype=msgerror, anmode=aninfo,
79 . i1 = func_id(nfunc),
80 . c1 = titr )
81 EXIT
82 ENDIF
83 ENDDO
84 ENDIF
85c
86c Check if static yield function decreases to zero (last point or negative slope)
87c In this case we introduce failure at the plastic strain corresponding to sig_yld=0
88c
89 nrate = nint(uparam(1))
90 epsmax = uparam(2*nrate + 7)
91 ifail = nint(uparam(2*nrate + 27))
92 iyld = ifunc(1)
93 ix1 = npc(iyld+1) - 4
94 iy1 = npc(iyld+1) - 3
95 iy2 = npc(iyld+1) - 1
96 ix2 = npc(iyld+1) - 2
97 x1 = pld(ix1)
98 x2 = pld(ix2)
99 y1 = pld(iy1)
100 y2 = pld(iy2)
101 IF (ix2 > zero .and. y2 == zero) THEN ! last value of yield curve is 0
102 epslast = x2
103 epsmax = uparam(7+2*nrate)
104 IF (epslast < epsmax) uparam(2*nrate + 7 ) = epslast
105 IF (ifail == 0) uparam(2*nrate + 27) = 1 ! IFAIL
106 uparam(2*nrate + 28) = 1 ! YLDCHECK
107 mtag%G_DMG = 1
108 mtag%L_DMG = 1
109 ELSE IF (y1 > y2) THEN ! yield function slope is negative
110 epslast = (x2*y1 - x1*y2) / (y1 - y2)
111 IF (epslast < epsmax) uparam(2*nrate + 7 ) = epslast
112 IF (ifail == 0) uparam(2*nrate + 27) = 1 ! IFAIL
113 uparam(2*nrate + 28) = 1 ! YLDCHECK
114 mtag%G_DMG = 1
115 mtag%L_DMG = 1
116 ENDIF
117c-----------------------------------------------------------------------
118c Check if yield curves for different strain rates do not intersect
119c-----------------------------------------------------------------------
120 DO i = 1,nrate
121 func1 = ifunc(i)
122 fac1 = uparam(nrate + 6 + i)
123 DO j = i+1,nrate
124 func2 = ifunc(j)
125 fac2 = uparam(nrate + 6 + j)
126 IF (func1 > 0 .and. func2 > 0 .and. func1 /= func2) THEN
127 CALL func_inters(titr,mat_id,func1 ,func2 ,fac1 ,fac2 ,
128 . npc ,pld ,xint ,yint )
129c
130 IF (xint > zero .and. yint > zero) THEN
131 CALL ancmsg(msgid=2064, msgtype=msgwarning, anmode=aninfo,
132 . i1 = mat_id,
133 . i2 = func_id(func1),
134 . i3 = func_id(func2),
135 . c1 = titr )
136 END IF
137 END IF
138 END DO
139 END DO
140c--------------------------------------------------------
141 RETURN
142 END
#define my_real
Definition cppsort.cpp:32
subroutine func_inters(titr, mat_id, func1, func2, fac1, fac2, npc, pld, xint, yint)
Definition func_inters.F:32
subroutine law36_upd(iout, titr, mat_id, nuparam, uparam, nfunc, ifunc, func_id, npc, pld, mtag, nfunct)
Definition law36_upd.F:38
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889