OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
condamage.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/.
23c-----------------------------------------------
24!||====================================================================
25!|| condamage_mod ../engine/source/materials/mat/mat190/condamage.F
26!||--- called by ------------------------------------------------------
27!|| sigeps190 ../engine/source/materials/mat/mat190/sigeps190.f
28!||====================================================================
30 CONTAINS
31!||====================================================================
32!|| condamage ../engine/source/materials/mat/mat190/condamage.F
33!||--- called by ------------------------------------------------------
34!|| sigeps190 ../engine/source/materials/mat/mat190/sigeps190.F
35!||--- calls -----------------------------------------------------
36!|| table_mat_vinterp ../engine/source/materials/tools/table_mat_vinterp.F
37!||--- uses -----------------------------------------------------
38!|| table4d_mod ../common_source/modules/table4d_mod.F
39!|| table_mat_vinterp_mod ../engine/source/materials/tools/table_mat_vinterp.F
40!||====================================================================
41 SUBROUTINE condamage
42 . (zxx,zyy,zzz,zxy,zzx,zyz,
43 . damage,nel,hu,shape,whysmax,
44 . numtabl ,table, nvartmp, vartmp)
45c-----------------------------------------------
46c computation of damage for hsyteretic unloading
47c computes the damage for unloading at t(n+1)
48c ( new GL strains are used )
49c-----------------------------------------------
50C M o d u l e s
51C-----------------------------------------------
52 USE table4d_mod
54C-----------------------------------------------
55C I m p l i c i t T y p e s
56C-----------------------------------------------
57#include "implicit_f.inc"
58#include "comlock.inc"
59C-----------------------------------------------
60#include "scr05_c.inc"
61#include "impl1_c.inc"
62#include "tabsiz_c.inc"
63C-----------------------------------------------
64C A r g u m e n t s
65C-----------------------------------------------
66 INTEGER, INTENT(IN) :: NEL ,NUMTABL,NVARTMP
67 my_real ,INTENT(IN) :: hu, shape
68 my_real, INTENT(IN) ,DIMENSION(NEL):: zxx ,zyy ,zzz ,zxy ,zzx ,zyz
69 TYPE (TABLE_4D_), DIMENSION(NUMTABL) ,TARGET :: TABLE
70 my_real, INTENT(INOUT) ,DIMENSION(NEL) :: whysmax
71 my_real, INTENT(OUT) ,DIMENSION(NEL) :: damage
72 INTEGER ,DIMENSION(NEL,NVARTMP) ,INTENT(INOUT) :: VARTMP
73c-----------------------------------------------
74 INTEGER I
75 my_real,DIMENSION(NEL) :: alambda1,alambda2,alambda3,z1,z2,z3,
76 . fener1,dener1,fener2,dener2,fener3,dener3
78 . ratio, whys(nel),epsilon(nel,3)
79
80 my_real
81 . ah1(nel),ah2(nel),ah3(nel),
82 . at2(nel),at3(nel),aa3(nel),aa2(nel)
83 INTEGER IPOS(NEL,1)
84 my_real, DIMENSION(NEL,1) :: xvec
85 TYPE(table_4d_), POINTER :: FUNC_ENER , FUNC_SIG
86c-----------------------------------------------
87c-----------------------------------------------
88 func_sig => table(1)
89 func_ener => table(2)
90
91 DO i=1,nel
92c principal strains
93c note that these are not the same principal strains
94c that were computed in subroutine conversion since
95c we are now 1/2 timestep further
96c
97c compute H1, H2 and H3
98c
99 ah1(i)=zxx(i)+zyy(i)+zzz(i)
100 ah2(i)=zyy(i)*zzz(i)+zzz(i)*zxx(i)+zxx(i)*zyy(i)
101 . -zyz(i)**2-zzx(i)**2-zxy(i)**2
102 ah3(i)=zxx(i)*zyy(i)*zzz(i)+two*zxy(i)*zyz(i)*zzx(i)
103 . -zxx(i)*zyz(i)**2-zyy(i)*zzx(i)**2-zzz(i)*zxy(i)**2
104C
105C COMPUTE T2 AND T3
106C
107 at3(i)=two*ah1(i)**3/twenty7 - ah1(i)*ah2(i)/three + ah3(i)
108 at2(i)=-ah2(i)+ah1(i)**2/three
109 at2(i)=max(at2(i),em16)
110C
111C COMPUTE COS(A)
112C
113 aa3(i)=at3(i)/two/sqrt(at2(i)**3/twenty7)
114 aa3(i)=min(one,aa3(i))
115 aa3(i)=max(-one,aa3(i))
116 aa2(i)=sqrt(at2(i)/three)
117C
118C COMPUTE PRINCIPAL STRAINS
119C
120 z1(i)=two*aa2(i)*cos(third*acos(aa3(i)))
121 z2(i)=two*aa2(i)*cos(third*acos(aa3(i)) - two*pi/three)
122 z3(i)=two*aa2(i)*cos(third*acos(aa3(i)) - four*pi/three)
123C
124C ADD HYDROSTATIC PART
125C
126 z1(i)=z1(i)+ah1(i)/three
127 z2(i)=z2(i)+ah1(i)/three
128 z3(i)=z3(i)+ah1(i)/three
129C
130 ENDDO
131C
132C UPDATE IN THE PRINCIPAL SYSTEM AT T(N+1)
133C
134 DO i=1,nel
135C
136C PRINCIPAL STRETCHES FROM PRINCIPAL GL STRAINS
137C
138 alambda1(i)=sqrt(two*z1(i) + one)
139 alambda2(i)=sqrt(two*z2(i) + one)
140 alambda3(i)=sqrt(two*z3(i) + one)
141C
142C PRINCIPAL ENGINEERING STRAIN POSITIVE IN COMPRESSION
143C
144 epsilon(i,1) = one - alambda1(i)
145 epsilon(i,2) = one - alambda2(i)
146 epsilon(i,3) = one - alambda3(i)
147 ENDDO !I=1,NEL
148C
149C INTERPOLATE ENERGIES FOR HYSTERESIS MODEL
150C
151 xvec(1:nel,1) = epsilon(1:nel,1)
152 ipos(1:nel,1) = vartmp(1:nel,16)
153 CALL table_mat_vinterp(func_ener,nel,nel,ipos,xvec,fener1,dener1)
154 vartmp(1:nel,16) = ipos(1:nel,1)
155
156 xvec(1:nel,1) = epsilon(1:nel,2)
157 ipos(1:nel,1) = vartmp(1:nel,17)
158 CALL table_mat_vinterp(func_ener,nel,nel,ipos,xvec,fener2,dener2)
159 vartmp(1:nel,17) = ipos(1:nel,1)
160
161 xvec(1:nel,1) = epsilon(1:nel,3)
162 ipos(1:nel,1) = vartmp(1:nel,18)
163 CALL table_mat_vinterp(func_ener,nel,nel,ipos,xvec,fener3,dener3)
164 vartmp(1:nel,18) = ipos(1:nel,1)
165C
166C COMPUTE DAMAGE FOR UNLOADING
167C
168 DO i=1,nel
169 whys(i) = fener1(i) + fener2(i) + fener3(i)
170 whysmax(i)= max(whysmax(i),whys(i))
171 ratio = whys(i) / whysmax(i)
172 damage(i) =(one-hu)*(one - ratio**shape)
173 ENDDO
174C
175 RETURN
176 END
177 END MODULE
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine condamage(zxx, zyy, zzz, zxy, zzx, zyz, damage, nel, hu, shape, whysmax, numtabl, table, nvartmp, vartmp)
Definition condamage.F:45
subroutine table_mat_vinterp(table, dimx, nel, ipos, xx, yy, dydx)
subroutine sigeps190(nel, nuvar, rho, et, epspxx, epspyy, epspzz, epspxy, epspyz, epspzx, signxx, signyy, signzz, signxy, signyz, signzx, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, soundsp, viscmax, uvar, numtabl, matparam, nvartmp, vartmp)
Definition sigeps190.F:45