OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
condamage_mod Module Reference

Functions/Subroutines

subroutine condamage (zxx, zyy, zzz, zxy, zzx, zyz, damage, nel, hu, shape, whysmax, numtabl, table, nvartmp, vartmp)

Function/Subroutine Documentation

◆ condamage()

subroutine condamage_mod::condamage ( dimension(nel) zxx,
dimension(nel) zyy,
dimension(nel) zzz,
dimension(nel) zxy,
dimension(nel) zzx,
dimension(nel) zyz,
dimension(nel) damage,
integer, intent(in) nel,
intent(in) hu,
intent(in) shape,
dimension(nel) whysmax,
integer, intent(in) numtabl,
type (table_4d_), dimension(numtabl), target table,
integer, intent(in) nvartmp,
integer, dimension(nel,nvartmp), intent(inout) vartmp )

Definition at line 41 of file condamage.F.

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
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine table_mat_vinterp(table, dimx, nel, ipos, xx, yy, dydx)