OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
law36_upd.F File Reference
#include "implicit_f.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine law36_upd (iout, titr, mat_id, nuparam, uparam, nfunc, ifunc, func_id, npc, pld, mtag, nfunct)

Function/Subroutine Documentation

◆ law36_upd()

subroutine law36_upd ( integer, intent(in) iout,
character(len=nchartitle) titr,
integer, intent(in) mat_id,
integer, intent(in) nuparam,
uparam,
integer, intent(in) nfunc,
integer, dimension(nfunc) ifunc,
integer, dimension(nfunct) func_id,
integer, dimension(*) npc,
pld,
type(mlaw_tag_), intent(inout) mtag,
integer, intent(in) nfunct )

Definition at line 35 of file law36_upd.F.

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
#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
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