OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i17crit.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/.
23Cas| I17MAIN_PENA /int17/i17main_pena.F
24!||====================================================================
25!|| i17crit ../engine/source/interfaces/int17/i17crit.F
26!||--- called by ------------------------------------------------------
27!|| i17main ../engine/source/interfaces/int17/i17main.F
28!|| i17main_crit_tri ../engine/source/interfaces/int17/i17main_pena.f
29!||--- calls -----------------------------------------------------
30!|| i16box ../engine/source/interfaces/int16/i16crit.F
31!|| i20box ../engine/source/interfaces/int16/i16crit.F
32!||====================================================================
33 SUBROUTINE i17crit(
34 1 X ,V ,A ,NELEM ,EMINX ,
35 2 NME ,ITASK ,XSAV ,IXS ,IXS16 ,
36 3 IXS20 ,XMSR_G ,SIZE_T_G)
37C-----------------------------------------------
38C I m p l i c i t T y p e s
39C-----------------------------------------------
40#include "implicit_f.inc"
41#include "comlock.inc"
42C-----------------------------------------------
43C G l o b a l P a r a m e t e r s
44C-----------------------------------------------
45#include "mvsiz_p.inc"
46C-----------------------------------------------
47C C o m m o n B l o c k s
48C-----------------------------------------------
49#include "com04_c.inc"
50#include "task_c.inc"
51C-----------------------------------------------
52C D u m m y A r g u m e n t s
53C-----------------------------------------------
54 INTEGER ITASK,NME,
55 . NELEM(*),IXS(NIXS,*),IXS16(8,*),IXS20(12,*)
56 my_real
57 . x(3,*),v(3,*),a(3,*),xsav(3,*),eminx(6,*),
58 . xmsr_g(6),size_t_g
59C-----------------------------------------------
60C L o c a l V a r i a b l e s
61C-----------------------------------------------
62 INTEGER NSNF,NMEF,NSNL,NMEL,I, J, II, K,I16,I20,LFT16,LLT16,
63 . LFT20,LLT20,INDEX16(MVSIZ),INDEX20(MVSIZ)
64 my_real
65 . xmsr(6), size_t
66C-----------------------------------------------
67C S o u r c e L i n e s
68C-----------------------------------------------
69 nmef = 1 + itask*nme / nthread
70 nmel = (itask+1)*nme / nthread
71C--------------------------------------------------------------
72C 0- CALCUL DU CRITERE POUR SAVOIR SI ON DOIT TRIER OU NON
73C--------------------------------------------------------------
74 xmsr(1) = -ep30
75 xmsr(2) = -ep30
76 xmsr(3) = -ep30
77 xmsr(4) = ep30
78 xmsr(5) = ep30
79 xmsr(6) = ep30
80 size_t = zero
81C------------------------------------
82C CALCUL DES BORNES DES ELEMENTS
83C------------------------------------
84 DO i=nmef,nmel
85 eminx(1,i) = ep30
86 eminx(2,i) = ep30
87 eminx(3,i) = ep30
88 eminx(4,i) = -ep30
89 eminx(5,i) = -ep30
90 eminx(6,i) = -ep30
91 ENDDO
92C
93 lft16=1
94 llt16=0
95 lft20=1
96 llt20=0
97 DO i=nmef,nmel
98 i20=nelem(i)-numels8-numels10
99 i16=i20-numels20
100 IF(i16>=1.AND.i16<=numels16)THEN
101 llt16=llt16+1
102 index16(llt16)=i
103 IF(llt16==mvsiz-1)THEN
104 CALL i16box(
105 1 lft16,llt16 ,nelem,eminx,nmef ,nmel ,
106 2 x ,v ,a ,ixs ,ixs16,size_t,
107 3 xmsr ,index16,xsav )
108 llt16=0
109 ENDIF
110 ELSEIF(i20>=1.AND.i20<=numels20)THEN
111 llt20=llt20+1
112 index20(llt20)=i
113 IF(llt20==mvsiz-1)THEN
114 CALL i20box(
115 1 lft20,llt20 ,nelem,eminx,nmef ,nmel ,
116 2 x ,v ,a ,ixs ,ixs20,size_t,
117 3 xmsr ,index20,xsav )
118 llt20=0
119 ENDIF
120 ENDIF
121 END DO
122 IF(llt16>0)CALL i16box(
123 1 lft16,llt16 ,nelem,eminx,nmef ,nmel ,
124 2 x ,v ,a ,ixs ,ixs16,size_t,
125 3 xmsr ,index16,xsav )
126 IF(llt20>0)CALL i20box(
127 1 lft20,llt20 ,nelem,eminx,nmef ,nmel ,
128 2 x ,v ,a ,ixs ,ixs20,size_t,
129 3 xmsr ,index20,xsav )
130C
131#include "lockon.inc"
132 xmsr_g(1)=max(xmsr_g(1),xmsr(1))
133 xmsr_g(2)=max(xmsr_g(2),xmsr(2))
134 xmsr_g(3)=max(xmsr_g(3),xmsr(3))
135 xmsr_g(4)=min(xmsr_g(4),xmsr(4))
136 xmsr_g(5)=min(xmsr_g(5),xmsr(5))
137 xmsr_g(6)=min(xmsr_g(6),xmsr(6))
138 size_t_g = size_t_g + size_t
139#include "lockoff.inc"
140C
141 RETURN
142 END
subroutine i16box(lft, llt, nelem, eminx, nmef, nmel, x, v, a, ixs, ixs16, size, xmsr, index, xsav)
Definition i16crit.F:226
subroutine i20box(lft, llt, nelem, eminx, nmef, nmel, x, v, a, ixs, ixs20, size, xmsr, index, xsav)
Definition i16crit.F:531
subroutine i17crit(x, v, a, nelem, eminx, nme, itask, xsav, ixs, ixs16, ixs20, xmsr_g, size_t_g)
Definition i17crit.F:37
subroutine i17main_pena(nin, ipari, intbuf_tab, x, v, a, itask, igrbric, eminx, ms, ixs, ixs16, ixs20, stifn, fskyi, isky, fsav, fcont, niskyfi, h3d_data)
subroutine i17main_crit_tri(ipari, intbuf_tab, x, nin, itask, igrbric, eminx, nme, nmes, xslv _l, xmsr_l, size_t, ixs, ixs16, ixs20)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21