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,L
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)