OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m3law.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!|| m3law ../engine/source/materials/mat/mat003/m3law.F
25!||--- called by ------------------------------------------------------
26!|| mmain ../engine/source/materials/mat_share/mmain.F90
27!||====================================================================
28 SUBROUTINE m3law(
29 1 PM, OFF, SIG, EPSEQ,
30 2 MAT, NGL, SSP, D1,
31 3 D2, D3, D4, D5,
32 4 D6, RHO0, DPDM, IPLA,
33 5 SIGY, DEFP, DPLA1, NEL,
34 6 NFT)
35C-----------------------------------------------
36C I m p l i c i t T y p e s
37C-----------------------------------------------
38#include "implicit_f.inc"
39#include "comlock.inc"
40C-----------------------------------------------
41C G l o b a l P a r a m e t e r s
42C-----------------------------------------------
43#include "mvsiz_p.inc"
44C-----------------------------------------------
45C C o m m o n B l o c k s
46C-----------------------------------------------
47#include "com08_c.inc"
48#include "param_c.inc"
49#include "units_c.inc"
50#include "scr17_c.inc"
51C-----------------------------------------------
52C D u m m y A r g u m e n t s
53C-----------------------------------------------
54 INTEGER, INTENT(IN) :: NFT
55 INTEGER MAT(MVSIZ),NGL(MVSIZ),NEL
56 my_real
57 . PM(NPROPM,*), OFF(MVSIZ), SIG(NEL,6), EPSEQ(MVSIZ),
58 . SSP(MVSIZ), D1(MVSIZ), D2(MVSIZ), D3(MVSIZ), D4(MVSIZ),
59 . D5(MVSIZ), D6(MVSIZ), RHO0(MVSIZ), DPDM(MVSIZ),
60 . sigy(mvsiz), defp(mvsiz), dpla1(mvsiz)
61 INTEGER IPLA
62C-----------------------------------------------
63C L o c a l V a r i a b l e s
64C-----------------------------------------------
65 INTEGER I, MX, II, LIST(MVSIZ), K
66 my_real
67 . g(mvsiz), g1(mvsiz), g2(mvsiz), qs(mvsiz), yld(mvsiz),
68 . qh(mvsiz), aj2(mvsiz), dav(mvsiz), sj2(mvsiz), p(mvsiz),
69 . epmx(mvsiz), ca(mvsiz), cb(mvsiz), cn(mvsiz), sigmx(mvsiz),
70 . scale, dpla, g11, ca11, cb11, cn11, epmx11,gdt,ggdt,
71 . sigmx11
72C-----------------------------------------------
73C
74 mx=mat(1)
75 g11=pm(22,mx)
76 ca11=pm(38,mx)
77 cb11=pm(39,mx)
78 cn11=pm(40,mx)
79 epmx11=pm(41,mx)
80 sigmx11=pm(42,mx)
81
82 gdt=dt1*g11
83 ggdt=two*gdt
84
85 ! [D] = [EPS_DOT]
86 ! D1 = EPS_DOT(x,x)
87 ! D2 = EPS_DOT(y,y)
88 ! D3 = EPS_DOT(z,z)
89 ! D4 = EPS_DOT(x,y) + EPS_DOT(y,x)
90 ! D5 = EPS_DOT(y,z) + EPS_DOT(z,y)
91 ! D6 = EPS_DOT(x,z) + EPS_DOT(z,x)
92 DO i=1,nel
93 p(i) =-third*(sig(i,1)+sig(i,2)+sig(i,3))
94 dav(i)=-third*(d1(i)+d2(i)+d3(i))
95 ENDDO
96C
97 !ELASTIC PREDICTION : S_prediction = S_old + 2 mu de
98 !where [e_dot] = [e_dot]_dev
99 ! [de] = dt.[e_dot]
100 ! mu = G
101 !
102 ! 2mu de_11 = 2G dt.e_dot_11 = 2G dt (EPS_DOT_11-DAV) = 2G dt (D1-DAV)
103 ! 2mu de_12 = 2G dt.e_dot_12 = 2G dt D4/2 = G dt D4
104 !
105
106 DO i=1,nel
107 sig(i,1)=sig(i,1)+p(i)+ggdt*(d1(i)+dav(i))
108 sig(i,2)=sig(i,2)+p(i)+ggdt*(d2(i)+dav(i))
109 sig(i,3)=sig(i,3)+p(i)+ggdt*(d3(i)+dav(i))
110 sig(i,4)=sig(i,4)+gdt*d4(i)
111 sig(i,5)=sig(i,5)+gdt*d5(i)
112 sig(i,6)=sig(i,6)+gdt*d6(i)
113 ENDDO
114C---------------------
115C LIMITE PLASTIQUE
116C---------------------
117 DO i=1,nel
118 yld(i)= min(sigmx11,ca11+cb11*max(zero,epseq(i))**cn11)
119 ENDDO
120C-----------------------
121C MODULE ECROUISSAGE
122C-----------------------
123 IF(cn11==one)THEN
124 DO i=1,nel
125 qh(i)= cb11
126 ENDDO
127 ELSEIF(cn11>one)THEN
128 DO i=1,nel
129 qh(i)= cb11*cn11*max(zero,epseq(i))**(cn11- one)
130 ENDDO
131 ELSE
132 DO i=1,nel
133 IF(epseq(i)/=zero)THEN
134 qh(i)= cb11*cn11/max(zero,epseq(i))**(one-cn11)
135 ELSE
136 qh(i)=zero
137 ENDIF
138 ENDDO
139 ENDIF
140
141C---------------------------------
142C SOUND SPEED
143C---------------------------------
144 DO i=1,nel
145 dpdm(i)=dpdm(i)+onep333*g11
146 ssp(i)=sqrt(abs(dpdm(i))/rho0(i))
147 ENDDO
148 DO i=1,nel
149 aj2(i)=half*(sig(i,1)**2+sig(i,2)**2+sig(i,3)**2)+sig(i,4)**2+sig(i,5)**2+sig(i,6)**2
150 sj2(i)=sqrt(three*aj2(i))
151 ENDDO
152 k=0
153 ! sublist to avoir CYCLE on YLD(I)==ZERO
154 DO i=1,nel
155 IF(yld(i)/=zero)THEN
156 k=k+1
157 list(k)=i
158 ENDIF
159 ENDDO
160 IF(ipla==0)THEN
161 DO ii=1,k
162 i=list(ii)
163 scale= min(one,yld(i)/ max(sj2(i),em15))
164 sig(i,1)=scale*sig(i,1)
165 sig(i,2)=scale*sig(i,2)
166 sig(i,3)=scale*sig(i,3)
167 sig(i,4)=scale*sig(i,4)
168 sig(i,5)=scale*sig(i,5)
169 sig(i,6)=scale*sig(i,6)
170 dpla1(i) = (one -scale)*sj2(i)/max(three*g11+qh(i),em15)
171 epseq(i)=epseq(i)+ dpla1(i)
172 ENDDO
173 ELSEIF(ipla==2)THEN
174 DO ii=1,k
175 i=list(ii)
176 scale= min(one,yld(i)/ max(sj2(i),em15))
177 sig(i,1)=scale*sig(i,1)
178 sig(i,2)=scale*sig(i,2)
179 sig(i,3)=scale*sig(i,3)
180 sig(i,4)=scale*sig(i,4)
181 sig(i,5)=scale*sig(i,5)
182 sig(i,6)=scale*sig(i,6)
183 dpla1(i) = (one -scale)*sj2(i)/max(three*g11,em15)
184 epseq(i)=epseq(i)+dpla1(i)
185 ENDDO
186 ELSEIF(ipla==1)THEN
187 DO ii=1,k
188 i=list(ii)
189 scale= min(one,yld(i)/ max(sj2(i),em15))
190 !--plastic strain increment.
191 dpla=(one -scale)*sj2(i)/max(three*g11+qh(i),em15)
192 !--actual yield stress.
193 yld(i)=yld(i)+dpla*qh(i)
194 scale= min(one,yld(i)/ max(sj2(i),em15))
195 sig(i,1)=scale*sig(i,1)
196 sig(i,2)=scale*sig(i,2)
197 sig(i,3)=scale*sig(i,3)
198 sig(i,4)=scale*sig(i,4)
199 sig(i,5)=scale*sig(i,5)
200 sig(i,6)=scale*sig(i,6)
201 epseq(i)=epseq(i)+dpla
202 dpla1(i) = dpla
203 ENDDO
204 ENDIF
205C----------------------------
206C TEST DE RUPTURE DUCTILE
207C---------------------------
208 DO i=1,nel
209 IF(off(i)<em01) off(i)=zero
210 IF(off(i)<one) off(i)=off(i)*four_over_5
211 ENDDO
212 DO i=1,nel
213 IF(epmx11==zero .OR. off(i)<one .OR. epseq(i)<epmx11) cycle
214 off(i)=off(i)*four_over_5
215 ii=i+nft
216#include "lockon.inc"
217 WRITE(iout,1000) ngl(i)
218#include "lockoff.inc"
219 ENDDO
220 DO i=1,nel
221 sig(i,1)=sig(i,1)*off(i)
222 sig(i,2)=sig(i,2)*off(i)
223 sig(i,3)=sig(i,3)*off(i)
224 sig(i,4)=sig(i,4)*off(i)
225 sig(i,5)=sig(i,5)*off(i)
226 sig(i,6)=sig(i,6)*off(i)
227 ENDDO
228 DO i=1,nel
229 sigy(i)=yld(i)
230 defp(i)=epseq(i)
231 ENDDO
232 1000 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10)
233 RETURN
234 END
subroutine m3law(pm, off, sig, epseq, mat, ngl, ssp, d1, d2, d3, d4, d5, d6, rho0, dpdm, ipla, sigy, defp, dpla1, nel, nft)
Definition m3law.F:35
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21