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