OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
upd_outmax.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!|| upd_tmax ../engine/source/output/upd_outmax.F
25!||--- called by ------------------------------------------------------
26!|| ini_tmax ../engine/source/output/ini_outmax.F
27!|| resol ../engine/source/engine/resol.F
28!||--- calls -----------------------------------------------------
29!|| gps_solid ../engine/source/output/outmaxsubr.F
30!|| gpstra_solid ../engine/source/output/outmaxsubr.F
31!|| my_barrier ../engine/source/system/machine.F
32!|| sig3dpin2h ../engine/source/output/outmaxsubr.F
33!|| tm_dmg_shells ../engine/source/output/outmaxsubr.F
34!|| tm_dmg_solid ../engine/source/output/outmaxsubr.F
35!|| tm_dmgl25_shell ../engine/source/output/outmaxsubr.F
36!|| tm_seq_shell ../engine/source/output/outmaxsubr.F
37!|| tm_seq_solid ../engine/source/output/outmaxsubr.F
38!|| tm_sig_shell ../engine/source/output/outmaxsubr.F
39!|| tm_sig_solid ../engine/source/output/outmaxsubr.F
40!|| tm_stra_shell ../engine/source/output/outmaxsubr.F
41!|| tm_stra_solid ../engine/source/output/outmaxsubr.F
42!|| tm_vonm_shell ../engine/source/output/outmaxsubr.F
43!|| tm_vonm_solid ../engine/source/output/outmaxsubr.F
44!|| upd_tmnorm2 ../engine/source/output/outmaxsubr.F
45!|| upd_tmtens ../engine/source/output/outmaxsubr.F
46!||--- uses -----------------------------------------------------
47!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
48!|| element_mod ../common_source/modules/elements/element_mod.F90
49!|| outmax_mod ../common_source/modules/outmax_mod.F
50!|| stack_mod ../engine/share/modules/stack_mod.F
51!||====================================================================
52 SUBROUTINE upd_tmax(ELBUF_TAB,IPARG ,GEO ,PM ,
53 . IXS ,IXS10 ,IXS16 ,IXS20 ,IXQ ,
54 . IXC ,IXTG ,IXT ,IXP ,IXR ,
55 . X ,D ,V ,IAD_ELEM,FR_ELEM ,
56 . WEIGHT ,IPM ,IGEO ,STACK ,ITASK )
57C-----------------------------------------------
58C M o d u l e s
59C-----------------------------------------------
60 USE elbufdef_mod
61 USE outmax_mod
62 USE stack_mod
63 use element_mod , only : nixs,nixq,nixc,nixp,nixr,nixt,nixtg
64C-----------------------------------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68#include "mvsiz_p.inc"
69C-----------------------------------------------
70C C o m m o n B l o c k s
71C-----------------------------------------------
72#include "com01_c.inc"
73#include "com04_c.inc"
74#include "param_c.inc"
75#include "task_c.inc"
76#include "tabsiz_c.inc"
77C-----------------------------------------------
78C D u m m y A r g u m e n t s
79C-----------------------------------------------
80 INTEGER, INTENT(IN):: ITASK
81 INTEGER, DIMENSION(NPARG,NGROUP) ,INTENT(IN):: IPARG
82 INTEGER, DIMENSION(NIXC,NUMELC) ,INTENT(IN):: IXC
83 INTEGER, DIMENSION(NIXTG,NUMELTG) ,INTENT(IN):: IXTG
84 INTEGER, DIMENSION(NIXS,NUMELS) ,INTENT(IN):: IXS
85 INTEGER, DIMENSION(NIXQ,NUMELQ) ,INTENT(IN):: IXQ
86 INTEGER, DIMENSION(NIXT,NUMELT) ,INTENT(IN):: IXT
87 INTEGER, DIMENSION(NIXP,NUMELP) ,INTENT(IN):: IXP
88 INTEGER, DIMENSION(NIXR,NUMELR) ,INTENT(IN):: IXR
89 INTEGER, DIMENSION(6,NUMELS10) ,INTENT(IN):: IXS10
90 INTEGER, DIMENSION(8,NUMELS16) ,INTENT(IN):: IXS16
91 INTEGER, DIMENSION(12,NUMELS20) ,INTENT(IN):: IXS20
92 INTEGER, DIMENSION(2,NSPMD+1) ,INTENT(IN):: IAD_ELEM
93 INTEGER, DIMENSION(SFR_ELEM) ,INTENT(IN):: FR_ELEM
94 INTEGER, DIMENSION(NUMNOD) ,INTENT(IN):: WEIGHT
95 INTEGER, DIMENSION(NPROPMI,NUMMAT) ,INTENT(IN):: IPM
96 INTEGER, DIMENSION(NPROPGI,NUMGEO) ,INTENT(IN):: IGEO
97 my_real, DIMENSION(NPROPG,NUMGEO) ,INTENT(IN):: geo
98 my_real, DIMENSION(NPROPM,NUMMAT) ,INTENT(IN):: pm
99 my_real, DIMENSION(3,NUMNOD) ,INTENT(IN):: x,d,v
100 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
101 TYPE (STACK_PLY) :: STACK
102C-----------------------------------------------
103C L o c a l V a r i a b l e s
104C-----------------------------------------------
105 INTEGER N, I, NG, ITY, NEL, IVISC, NFT, IFLU, MX, TSHELL,
106 . IGTYP,ISOLNOD,ISROT,NPTR,NPTS,NPTT,NLAY,NPT,
107 . JHBE,IMAT,IPID,MATLY(MVSIZ*100),IPMAT,IADR,
108 . ISUBSTACK,MTN
109 INTEGER NODFTSK,NODLTSK,NGFTSK,NGLTSK
110 TYPE(G_BUFEL_) ,POINTER :: GBUF
111 TYPE(L_BUFEL_) ,POINTER :: LBUF
112
113 my_real
114 . value(mvsiz),rho,
115 . mass(mvsiz)
116C-----------------------------------------------
117C S o u r c e L i n e s
118C-----------------------------------------------
119 IF (nmax_e > 0 )THEN
120 ngftsk = 1+itask*ngroup/ nthread
121 ngltsk = (itask+1)*ngroup/nthread
122 DO ng=ngftsk,ngltsk
123 IF (iparg(8,ng)==1) cycle
124 ity=iparg(5,ng)
125 IF (ity /= 1 .AND. ity /= 3 .AND. ity /= 7) cycle
126 mtn=iparg(1,ng)
127 nel=iparg(2,ng)
128 nft=iparg(3,ng)
129 ivisc = iparg(61,ng)
130 iflu=iparg(7,ng)+iparg(11,ng)
131 isolnod = iparg(28,ng)
132 igtyp = iparg(38,ng)
133 isrot = iparg(41,ng)
134 jhbe = iparg(23,ng)
135 gbuf => elbuf_tab(ng)%GBUF
136 SELECT CASE (ity)
137 CASE(1)
138 tshell = 0
139 IF (igtyp==20 .OR. igtyp==21 .OR. igtyp==22) tshell = 1
140 nlay = elbuf_tab(ng)%NLAY
141 nptr = elbuf_tab(ng)%NPTR
142 npts = elbuf_tab(ng)%NPTS
143 nptt = elbuf_tab(ng)%NPTT
144 IF (tshell==1) THEN
145 IF (jhbe==14 .OR. jhbe==15) nptt = 1
146 IF (jhbe==16) npts = 1
147 ELSE
148 nlay = 1
149 IF (isolnod==10 .OR. (isolnod==4 .AND. isrot==1)) THEN
150 npts = 1
151 nptt = 1
152 END IF
153 END IF
154 npt = nptt*npts*nptr*nlay
155 IF (gbuf%G_TM_YIELD>0 ) THEN !VONM main value
156 value(1:nel) = zero
157 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
158 CALL tm_vonm_solid(ivisc,gbuf%SIG,lbuf%VISC,VALUE,nel)
159 gbuf%TM_YIELD(1:nel)= max(gbuf%TM_YIELD(1:nel),value(1:nel))
160 END IF
161 IF (gbuf%G_TM_EINT>0 ) THEN
162 value(1:nel) = zero
163 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
164 IF (mtn == 151) cycle
165 IF(iflu == 0)THEN
166 mx=ixs(1,nft+1)
167 rho = pm(89,mx)
168 value(1:nel) = gbuf%EINT(1:nel)/max(em20,rho) !
169 ELSE
170 value(1:nel) = gbuf%EINT(1:nel)/max(em20,gbuf%RHO(1:nel)) !
171 ENDIF
172 gbuf%TM_EINT(1:nel)= max(gbuf%TM_EINT(1:nel),value(1:nel))
173 END IF
174 IF (gbuf%G_TM_SEQ>0 ) THEN
175 value(1:nel) = zero
176 CALL tm_seq_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,ivisc,VALUE,nel)
177 gbuf%TM_SEQ(1:nel)= max(gbuf%TM_SEQ(1:nel),value(1:nel))
178 END IF
179 IF (gbuf%G_TM_DMG>0 ) THEN
180 value(1:nel) = zero
181 CALL tm_dmg_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,VALUE,nel)
182 gbuf%TM_DMG(1:nel)= max(gbuf%TM_DMG(1:nel),value(1:nel))
183 END IF
184 IF (gbuf%G_TM_SIG>0) THEN
185 CALL tm_sig_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,ivisc,
186 . gbuf%TM_SIG1,gbuf%TM_SIG3,gbuf%TM_PSIG,nel)
187 END IF
188 IF (gbuf%G_TM_STRA>0) THEN
189 CALL tm_stra_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,
190 . gbuf%TM_STRA1,gbuf%TM_STRA3,gbuf%TM_PSTRA,nel)
191 END IF
192 CASE(3,7)
193 nlay = elbuf_tab(ng)%NLAY
194 nptr = elbuf_tab(ng)%NPTR
195 npts = elbuf_tab(ng)%NPTS
196 npt = elbuf_tab(ng)%BUFLY(1)%NPTT
197 isubstack = iparg(71,ng)
198 IF(ity == 3)THEN
199 imat = ixc(1,nft+1)
200 ipid = ixc(6,nft+1)
201 ELSE
202 imat = ixtg(1,nft+1)
203 ipid = ixtg(5,nft+1)
204 ENDIF
205 IF (gbuf%G_TM_YIELD>0 ) THEN !VONM main value
206 value(1:nel) = zero
207 CALL tm_vonm_shell(gbuf%FOR,VALUE,nel)
208 gbuf%TM_YIELD(1:nel)= max(gbuf%TM_YIELD(1:nel),value(1:nel))
209 END IF
210 IF (gbuf%G_TM_EINT>0 ) THEN ! /ENER
211 value(1:nel) = zero
212 IF (mtn == 151) cycle
213 rho = pm(1,imat)
214 DO i=1,nel
215 mass(i) = rho*gbuf%VOL(i)
216 value(i) = (gbuf%EINT(i)+ gbuf%EINT(i+nel))/max(em20,mass(i))
217 ENDDO
218 gbuf%TM_EINT(1:nel)= max(gbuf%TM_EINT(1:nel),value(1:nel))
219 END IF
220 IF (gbuf%G_TM_SEQ>0 ) THEN
221 value(1:nel) = zero
222 CALL tm_seq_shell(elbuf_tab(ng),nlay,nptr,npts,VALUE,nel)
223 gbuf%TM_SEQ(1:nel)= max(gbuf%TM_SEQ(1:nel),value(1:nel))
224 END IF
225 IF (gbuf%G_TM_DMG>0 ) THEN
226 value(1:nel) = zero
227 IF (mtn == 25) THEN
228 SELECT CASE (igtyp)
229 CASE(10)
230 DO n=1,npt
231 iadr = (n-1)*nel
232 DO i=1,nel
233 matly(iadr+i)=imat
234 END DO
235 END DO
236 CASE(11)
237 ipmat = 100
238 DO n=1,npt
239 iadr = (n-1)*nel
240 DO i=1,nel
241 matly(iadr+i)=igeo(ipmat+n,ipid)
242 END DO
243 END DO
244 CASE(17,51,52)
245 ipmat = 2 + nlay
246 DO n=1,nlay
247 iadr = (n-1)*nel
248 DO i=1,nel
249 matly(iadr+i) = stack%IGEO(ipmat+n,isubstack)
250 END DO
251 END DO
252 END SELECT
253 CALL tm_dmgl25_shell(elbuf_tab(ng),nlay,nptr,npts,igtyp,
254 . pm,matly,VALUE,nel)
255 ELSE
256 CALL tm_dmg_shells(elbuf_tab(ng),nlay,nptr,npts,VALUE,nel)
257 END IF
258 gbuf%TM_DMG(1:nel)= max(gbuf%TM_DMG(1:nel),value(1:nel))
259 END IF
260 IF (gbuf%G_TM_SIG>0) THEN
261 CALL tm_sig_shell(elbuf_tab(ng),nlay,nptr,npts,
262 . gbuf%TM_SIG1,gbuf%TM_SIG3,gbuf%TM_PSIG,nel)
263 END IF
264 IF (gbuf%G_TM_STRA>0) THEN
265 CALL tm_stra_shell(elbuf_tab(ng),nptr,npts,
266 . gbuf%TM_STRA1,gbuf%TM_STRA3,gbuf%TM_PSTRA,nel)
267 END IF
268 END SELECT
269 END DO
270 END IF !(NMAX_E > 0 )THEN
271 IF (nmax_n > 0 )THEN
272 nodftsk = 1+itask*numnod/ nthread
273 nodltsk = (itask+1)*numnod/nthread
274 IF (lmax_dis>0) CALL upd_tmnorm2(d,tm_dis,tm_pdis,nodftsk,nodltsk)
275 IF (lmax_vel>0) CALL upd_tmnorm2(v,tm_vel,tm_pvel,nodftsk,nodltsk)
276 IF (lmax_nsig>0 .AND.(ncycle <= 1 .OR. mod(ncycle,ncy_gps)==0)) THEN
277!$OMP SINGLE
278 CALL gps_solid(elbuf_tab,iparg ,geo ,pm ,
279 . ixs ,ixs10 ,ixs16 ,ixs20 ,ixq ,
280 . ixc ,ixtg ,ixt ,ixp ,ixr ,
281 . x ,iad_elem,fr_elem ,weight ,gpstmp ,igpstag )
282!$OMP END SINGLE
283 CALL sig3dpin2h(gpstmp,p2tmp,nodftsk,nodltsk,igpstag)
284 CALL upd_tmtens(gpstmp,p2tmp,tm_nsig1,tm_nsig3,tm_pnsig,nodftsk,nodltsk,igpstag)
285 END IF
286C-----------------
287 CALL my_barrier()
288C-----------------
289 IF (lmax_nstra>0 .AND.(ncycle <= 1 .OR. mod(ncycle,ncy_gpstr)==0)) THEN
290!$OMP SINGLE
291 CALL gpstra_solid(elbuf_tab,iparg ,geo ,pm ,
292 . ixs ,ixs10 ,ixs16 ,ixs20 ,ixq ,
293 . ixc ,ixtg ,ixt ,ixp ,ixr ,
294 . x ,iad_elem,fr_elem ,weight ,gpstmp ,igpstratag)
295!$OMP END SINGLE
296 CALL sig3dpin2h(gpstmp,p2tmp,nodftsk,nodltsk,igpstratag)
297 CALL upd_tmtens(gpstmp,p2tmp,tm_nstra1,tm_nstra3,tm_pnstra,nodftsk,nodltsk,igpstratag)
298 END IF
299 END IF !(nmax_n > 0 )THEN
300C-----------------
301 CALL my_barrier()
302C-----------------
303
304 RETURN
305 END
#define my_real
Definition cppsort.cpp:32
#define max(a, b)
Definition macros.h:21
integer, dimension(:), allocatable igpstratag
Definition outmax_mod.F:71
integer ncy_gpstr
Definition outmax_mod.F:66
integer, dimension(:), allocatable igpstag
Definition outmax_mod.F:71
integer lmax_vel
Definition outmax_mod.F:61
integer lmax_nstra
Definition outmax_mod.F:63
integer nmax_e
Definition outmax_mod.F:59
integer lmax_dis
Definition outmax_mod.F:60
integer lmax_nsig
Definition outmax_mod.F:62
integer nmax_n
Definition outmax_mod.F:58
integer ncy_gps
Definition outmax_mod.F:66
subroutine tm_dmgl25_shell(elbuf_tab, nlay, nptr, npts, igtyp, pm, matly, value, nel)
Definition outmaxsubr.F:992
subroutine upd_tmnorm2(d, tm_d, tm_norm2, nft, nlt)
subroutine upd_tmtens(nsig, pnsig, tm_nsig1, tm_nsig3, tm_pnsig, nft, nlt, igpstag)
subroutine gps_solid(elbuf_tab, iparg, geo, pm, ixs, ixs10, ixs16, ixs20, ixq, ixc, ixtg, ixt, ixp, ixr, x, iad_elem, fr_elem, weight, sig_n, itagps)
Definition outmaxsubr.F:39
subroutine tm_seq_solid(elbuf_tab, nlay, nptr, npts, nptt, ivisc, value, nel)
Definition outmaxsubr.F:461
subroutine tm_seq_shell(elbuf_tab, nlay, nptr, npts, value, nel)
Definition outmaxsubr.F:741
subroutine tm_stra_shell(elbuf_tab, nptr, npts, ten1, ten3, p2, nel)
Definition outmaxsubr.F:862
subroutine tm_sig_solid(elbuf_tab, nlay, nptr, npts, nptt, ivisc, ten1, ten3, p2, nel)
Definition outmaxsubr.F:567
subroutine sig3dpin2h(sig, pin, nft, nlt, igpstag)
subroutine tm_dmg_solid(elbuf_tab, nlay, nptr, npts, nptt, value, nel)
Definition outmaxsubr.F:514
subroutine tm_vonm_shell(for, value, nel)
Definition outmaxsubr.F:701
subroutine gpstra_solid(elbuf_tab, iparg, geo, pm, ixs, ixs10, ixs16, ixs20, ixq, ixc, ixtg, ixt, ixp, ixr, x, iad_elem, fr_elem, weight, str_n, itagps)
Definition outmaxsubr.F:136
subroutine tm_dmg_shells(elbuf_tab, nlay, nptr, npts, value, nel)
Definition outmaxsubr.F:941
subroutine tm_sig_shell(elbuf_tab, nlay, nptr, npts, ten1, ten3, p2, nel)
Definition outmaxsubr.F:796
subroutine tm_stra_solid(elbuf_tab, nlay, nptr, npts, nptt, ten1, ten3, p2, nel)
Definition outmaxsubr.F:637
subroutine tm_vonm_solid(ivisc, sig, visc, value, nel)
Definition outmaxsubr.F:417
subroutine my_barrier
Definition machine.F:31
subroutine upd_tmax(elbuf_tab, iparg, geo, pm, ixs, ixs10, ixs16, ixs20, ixq, ixc, ixtg, ixt, ixp, ixr, x, d, v, iad_elem, fr_elem, weight, ipm, igeo, stack, itask)
Definition upd_outmax.F:57