OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sigeps76.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!|| sigeps76 ../engine/source/materials/mat/mat076/sigeps76.F
25!||--- called by ------------------------------------------------------
26!|| mulaw ../engine/source/materials/mat_share/mulaw.F90
27!||--- calls -----------------------------------------------------
28!|| asso_plas76 ../engine/source/materials/mat/mat076/asso_plas76.F
29!|| no_asso_plas76 ../engine/source/materials/mat/mat076/no_asso_plas76.F
30!|| vinter ../engine/source/tools/curve/vinter.f
31!||--- uses -----------------------------------------------------
32!|| matparam_def_mod ../common_source/modules/mat_elem/matparam_def_mod.F90
33!||====================================================================
34 SUBROUTINE sigeps76(
35 1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,NGL ,
36 2 NPF ,TF ,TIME ,TIMESTEP ,UPARAM ,MATPARAM ,
37 3 RHO0 ,DPLA ,ET ,SOUNDSP ,YLD ,UVAR ,
38 3 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
39 4 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
40 5 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 6 OFF ,EPSD ,PLA ,INLOC ,L_PLANL ,PLANL ,
42 7 DMG ,NVARTMP ,VARTMP )
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
46 USE matparam_def_mod
47C-----------------------------------------------
48C I m p l i c i t T y p e s
49C-----------------------------------------------
50#include "implicit_f.inc"
51C-----------------------------------------------
52C G l o b a l P a r a m e t e r s
53C-----------------------------------------------
54#include "tabsiz_c.inc"
55#include "comlock.inc"
56#include "units_c.inc"
57C=======================================================================
58 INTEGER, INTENT(IN) :: NEL,NFUNC,NUPARAM,NUVAR,INLOC,L_PLANL
59 INTEGER ,INTENT(IN) :: NVARTMP
60 INTEGER, DIMENSION(NFUNC), INTENT(IN) :: IFUNC
61 INTEGER, DIMENSION(NEL), INTENT(IN) :: NGL
62 INTEGER ,DIMENSION(NEL,NVARTMP) ,INTENT(INOUT) :: VARTMP
63 my_real, INTENT(IN) :: TIME,TIMESTEP
64 my_real, DIMENSION(NUPARAM), INTENT(IN) :: UPARAM
65 my_real, DIMENSION(NEL), INTENT(IN) ::
66 . rho0,depsxx,depsyy,depszz,
67 . depsxy,depsyz,depszx,sigoxx,sigoyy,sigozz,
68 . sigoxy,sigoyz,sigozx
69 my_real, DIMENSION(L_PLANL*NEL), INTENT(IN) :: planl
70 my_real, DIMENSION(NEL), INTENT(INOUT) ::
71 . epsd,dpla,pla,signxx,signyy,signzz,dmg,
72 . signxy,signyz,signzx,soundsp,et,off,yld
73 my_real, DIMENSION(NEL,NUVAR), INTENT(INOUT) :: uvar
74 TYPE(matparam_struct_), INTENT(IN), TARGET :: MATPARAM
75C-----------------------------------------------
76C VARIABLES FOR FUNCTION INTERPOLATION
77C-----------------------------------------------
78 INTEGER :: NPF(SNPC)
79 my_real :: TF(STF)
80C-----------------------------------------------
81C L o c a l V a r i a b l e s
82C-----------------------------------------------
83 INTEGER :: I,IFORM,NUMTABL,NINDX,INDX(NEL)
84 INTEGER ,DIMENSION(NEL) :: IAD,ILEN
85 my_real :: EPSPF,EPSPR,YFAC2
86 my_real ,DIMENSION(NEL) :: df,pla_dam,sig0xx,sig0yy,
87 . sig0zz,sig0xy,sig0yz,sig0zx
88 TYPE(table_4d_),DIMENSION(:),POINTER :: TABLE
89C=======================================================================
90c
91 !====================================================================
92 ! - PARAMETERS INITIALIZATION
93 !====================================================================
94 epspf = uparam(10) ! Failure plastic strain
95 epspr = uparam(11) ! Rupture plastic strain
96 iform = nint(uparam(13)) ! Flag for plasticity
97 ! = 0 associated (with quadratic yield criterion only)
98 ! = 1 not associated
99 yfac2 = uparam(29) ! Damage function scale factor
100 DO i = 1,nel
101 IF (off(i) < em01) off(i) = zero
102 IF (off(i) < one) off(i) = off(i)*four_over_5
103 ENDDO
104c
105 ! Table parameters
106 numtabl = matparam%NTABLE
107 table => matparam%TABLE(1:numtabl)
108c
109 !====================================================================
110 ! - COMPUTE INITIAL UNDAMAGED STRESSES
111 !====================================================================
112 DO i = 1,nel
113 sig0xx(i) = sigoxx(i)/max(one-dmg(i),em20)
114 sig0yy(i) = sigoyy(i)/max(one-dmg(i),em20)
115 sig0zz(i) = sigozz(i)/max(one-dmg(i),em20)
116 sig0xy(i) = sigoxy(i)/max(one-dmg(i),em20)
117 sig0yz(i) = sigoyz(i)/max(one-dmg(i),em20)
118 sig0zx(i) = sigozx(i)/max(one-dmg(i),em20)
119 ENDDO
120c
121 !====================================================================
122 ! - ELASTO-PLASTIC BEHAVIOR
123 !====================================================================
124 IF (iform == 1) THEN ! Associated plastic flow, Quadratic yield criterion
125 CALL asso_plas76(
126 1 nel ,nuparam,nuvar ,nfunc ,ifunc ,nvartmp,
127 2 npf ,tf ,time ,timestep,uparam ,vartmp ,
128 3 rho0 ,pla ,dpla ,et ,numtabl ,table ,
129 3 depsxx ,depsyy ,depszz ,depsxy ,depsyz ,depszx ,
130 4 sig0xx ,sig0yy ,sig0zz ,sig0xy ,sig0yz ,sig0zx ,
131 5 signxx ,signyy ,signzz ,signxy ,signyz ,signzx ,
132 6 soundsp,uvar ,off ,epsd ,yld )
133 ELSE ! Non-associated plastic flow
134 CALL no_asso_plas76(
135 1 nel ,nuparam,nuvar ,nfunc ,ifunc ,nvartmp,
136 2 npf ,tf ,time ,timestep,uparam ,vartmp ,
137 3 rho0 ,pla ,dpla ,et ,numtabl ,table ,
138 3 depsxx ,depsyy ,depszz ,depsxy ,depsyz ,depszx ,
139 4 sig0xx ,sig0yy ,sig0zz ,sig0xy ,sig0yz ,sig0zx ,
140 5 signxx ,signyy ,signzz ,signxy ,signyz ,signzx ,
141 6 soundsp,uvar ,off ,epsd ,yld )
142 ENDIF
143c
144 !====================================================================
145 ! - UPDATE DAMAGE VARIABLE
146 !====================================================================
147 nindx = 0
148 IF (inloc > 0) THEN
149 pla_dam(1:nel) = planl(1:nel)
150 ELSE
151 pla_dam(1:nel) = pla(1:nel)
152 ENDIF
153!
154 IF (ifunc(2) > 0) THEN
155 ! Tabulated damage
156 iad(1:nel) = npf(ifunc(2)) / 2 + 1
157 ilen(1:nel) = npf(ifunc(2)+1) / 2 - iad(1:nel) - vartmp(1:nel,7)
158!
159 CALL vinter(tf,iad,vartmp(1:nel,7),ilen,nel,pla_dam,df,dmg)
160!
161 dmg(1:nel) = abs(yfac2)*dmg(1:nel)
162 DO i=1,nel
163 IF (dmg(i) >= one) THEN
164 dmg(i) = one
165 IF (off(i) == one) THEN
166 off(i) = four_over_5
167 nindx = nindx+1
168 indx(nindx) = i
169 ENDIF
170 ENDIF
171 ENDDO
172!
173 ELSE ! Analytical damage
174!
175 DO i = 1,nel
176 IF (pla_dam(i) >= epspf) THEN
177 dmg(i) = (pla_dam(i) - epspf)/ (epspr - epspf)
178 dmg(i) = min(dmg(i),one)
179 ENDIF
180 IF (dmg(i) >= one) THEN
181 IF (off(i) == one) THEN
182 off(i) = four_over_5
183 nindx = nindx+1
184 indx(nindx) = i
185 ENDIF
186 ENDIF
187 ENDDO
188 ENDIF
189c
190 !====================================================================
191 ! - COMPUTE DAMAGED STRESSES
192 !====================================================================
193 DO i = 1,nel
194 signxx(i) = signxx(i)*(one-dmg(i))
195 signyy(i) = signyy(i)*(one-dmg(i))
196 signzz(i) = signzz(i)*(one-dmg(i))
197 signxy(i) = signxy(i)*(one-dmg(i))
198 signyz(i) = signyz(i)*(one-dmg(i))
199 signzx(i) = signzx(i)*(one-dmg(i))
200 ENDDO
201c
202 !====================================================================
203 ! - PRINTOUT ELEMENT DELETION
204 !====================================================================
205 IF (nindx > 0) THEN
206 DO i=1,nindx
207#include "lockon.inc"
208 WRITE(iout ,1000) ngl(indx(i))
209 WRITE(istdo,1100) ngl(indx(i)),time
210#include "lockoff.inc"
211 ENDDO
212 ENDIF
213c------------------------------------------------------
214 1000 FORMAT(1x,'RUPTURE (SAMP) OF SOLID ELEMENT NUMBER ',i10)
215 1100 FORMAT(1x,'RUPTURE (SAMP) OF SOLID ELEMENT NUMBER ',i10,'AT TIME :',g11.4)
216c------------------------------------------------------
217 END
subroutine asso_plas76(nel, nuparam, nuvar, nfunc, ifunc, nvartmp, npf, tf, time, timestep, uparam, vartmp, rho0, pla, dpla, et, numtabl, table, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, soundsp, uvar, off, epsd, yld)
Definition asso_plas76.F:42
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine no_asso_plas76(nel, nuparam, nuvar, nfunc, ifunc, nvartmp, npf, tf, time, timestep, uparam, vartmp, rho0, pla, dpla, et, numtabl, table, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, soundsp, uvar, off, epsd, yld)
subroutine sigeps76(nel, nuparam, nuvar, nfunc, ifunc, ngl, npf, tf, time, timestep, uparam, matparam, rho0, dpla, et, soundsp, yld, uvar, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, off, epsd, pla, inloc, l_planl, planl, dmg, nvartmp, vartmp)
Definition sigeps76.F:43
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)
Definition vinter.F:72