OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
m3law.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "mvsiz_p.inc"
#include "com08_c.inc"
#include "param_c.inc"
#include "units_c.inc"
#include "scr17_c.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine m3law (pm, off, sig, epseq, mat, ngl, ssp, d1, d2, d3, d4, d5, d6, rho0, dpdm, ipla, sigy, defp, dpla1, nel, nft)

Function/Subroutine Documentation

◆ m3law()

subroutine m3law ( pm,
off,
sig,
epseq,
integer, dimension(mvsiz) mat,
integer, dimension(mvsiz) ngl,
ssp,
d1,
d2,
d3,
d4,
d5,
d6,
rho0,
dpdm,
integer ipla,
sigy,
defp,
dpla1,
integer nel,
integer, intent(in) nft )

Definition at line 28 of file m3law.F.

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
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
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
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21