OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
tgrhead.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!|| tgrhead ../starter/source/elements/truss/tgrhead.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!||--- uses -----------------------------------------------------
29!||====================================================================
30 SUBROUTINE tgrhead(
31 1 IXT , PM , GEO , INUM , ISEL,
32 2 ITR1, EADD, INDEX, ITRI ,
33 3 IPARTT, ND, IGRSURF, IGRTRUSS,
34 4 CEP, XEP, ITRUOFF ,
35 5 TAGPRT_SMS,ITAGPRLD_TRUSS)
36C-----------------------------------------------
37C M o d u l e s
38C-----------------------------------------------
39 USE groupdef_mod
40C-----------------------------------------------
41C A R G U M E N T S
42C-----------------------------------------------
43C IXT(5,NUMELT) TABLEAU CONECS+MID+PID+NOS TRUSSES E
44C GEO(NPROPG,NUMGEO)TABLEAU DES CARACS DES PID E
45C INUM(6,NUMELT) TABLEAU DE TRAVAIL E/S
46C ISEL(NSELT) TABLEAU DESPOUTRES CHOISIS POUR TH E/S
47C ITR1(NSELT) TABLEAU DE TRAVAIL E/S
48C EADD(NUMELT) TABLEAU DES ADRESSES DANS IDAM CHGT DAMIER S
49C INDEX(NUMELT) TABLEAU DE TRAVAIL E/S
50C ITRI(5,NUMELT) TABLEAU DE TRAVAIL E/S
51C IPARTT(NUMELT) TABLEAU PART E/S
52C CEP(NUMELT) TABLEAU PROC E/S
53C XEP(NUMELT) TABLEAU PROC E/S
54C-----------------------------------------------
55C I M P L I C I T T Y P E S
56C-----------------------------------------------
57#include "implicit_f.inc"
58C-----------------------------------------------
59C C O M M O N B L O C K S
60C-----------------------------------------------
61#include "vect01_c.inc"
62#include "com04_c.inc"
63#include "param_c.inc"
64#include "sms_c.inc"
65C-----------------------------------------------
66C D U M M Y A R G U M E N T S
67C-----------------------------------------------
68 INTEGER IXT(5,*),ISEL(*),INUM(7,*),IPARTT(*),
69 . EADD(*),ITR1(*),INDEX(*),ITRI(5,*),
70 . ND, CEP(*), XEP(*),
71 . ITRUOFF(*), TAGPRT_SMS(*)
72 INTEGER ,INTENT(INOUT), DIMENSION(NUMELT) ::ITAGPRLD_TRUSS
73 my_real :: pm(npropm,*), geo(npropg,*)
74C-----------------------------------------------
75 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS
76 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
77C-----------------------------------------------
78C L O C A L V A R I A B L E S
79C-----------------------------------------------
80 INTEGER :: I,J,K,L,NG, ISSN, NN,N,MLN,MID,PID ,NGROU
81 INTEGER :: II,JJ,II2,JJ2,II3,JJ3,II4,JJ4,II5,JJ5
82 INTEGER :: MSKMLN,MSKISN,MSKPID, MSKMID, MODE
83 INTEGER :: WORK(70000),IPRLD
84 EXTERNAL MY_SHIFTL,MY_SHIFTR,MY_AND
85 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
86
87 DATA mskmln /o'07770000000'/
88 DATA mskisn /o'00000000700'/
89 DATA mskmid /o'07777777777'/
90 DATA mskpid /o'07777777777'/
91C---+----1----+----2----+----3----+----4----+----5----+----6----+----7--
92
93C----------------------------------------------------------
94C TRI GLOBAL SUR TOUS LES CRITERES POUR TOUS LES ELEMENTS
95C----------------------------------------------------------
96C
97 DO i=1,numelt
98 eadd(i)=1
99 index(i)=i
100 inum(1,i)=ipartt(i)
101 inum(2,i)=itruoff(i)
102 inum(3,i)=ixt(1,i)
103 inum(4,i)=ixt(2,i)
104 inum(5,i)=ixt(3,i)
105 inum(6,i)=ixt(4,i)
106 inum(7,i)=ixt(5,i)
107 ENDDO
108
109 DO i=1,numelt
110 xep(i)=cep(i)
111 ENDDO
112C
113C
114 DO i = 1, numelt
115 ii = i
116 mid= ixt(1,ii)
117 mln= pm(19,mid)
118 pid= ixt(4,ii)
119 issn = 0
120 IF(geo(5,pid)/=0.) issn=1
121 iprld = itagprld_truss(ii)
122 IF (iprld>0) mln = mln+iprld
123C
124 issn=my_shiftl(issn,6)
125 mln=my_shiftl(mln,21)
126C
127 itri(1,i)=mln+issn
128 itri(2,i)=itruoff(i)
129C
130 jsms = 0
131 IF(isms/=0)THEN
132 IF(idtgrs/=0)THEN
133 IF(tagprt_sms(ipartt(ii))/=0)jsms=1
134 ELSE
135 jsms=1
136 END IF
137 END IF
138C JSMS=MY_SHIFTL(JSMS,0)
139 itri(3,i) = jsms
140C NEXT=MY_SHIFTL(NEXT,1)
141c
142C key4
143 itri(4,i) = mid
144C key5
145 itri(5,i) = pid
146
147 ENDDO
148C
149 mode=0
150 CALL my_orders( mode, work, itri, index, numelt , 4)
151C
152 DO i=1,numelt
153 ipartt(i) =inum(1,index(i))
154 itruoff(i) =inum(2,index(i))
155 ENDDO
156 DO k=1,5
157 DO i=1,numelt
158 ixt(k,i)=inum(k+2,index(i))
159 ENDDO
160 ENDDO
161
162 DO i=1,numelt
163 cep(i)=xep(index(i))
164 ENDDO
165C
166C INVERSION DE INDEX (DANS ITR1)
167C
168 DO i=1,numelt
169 itr1(index(i))=i
170 ENDDO
171C
172C RENUMEROTATION POUR TH
173C
174C
175C RENUMEROTATION POUR SURFACES
176C
177 DO i=1,nsurf
178 nn=igrsurf(i)%NSEG
179 DO j=1,nn
180 IF(igrsurf(i)%ELTYP(j) == 4)
181 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
182 ENDDO
183 ENDDO
184C
185C RENUMEROTATION POUR GROUPES DE TRUSSES
186C
187 DO i=1,ngrtrus
188 nn=igrtruss(i)%NENTITY
189 DO j=1,nn
190 igrtruss(i)%ENTITY(j) = itr1(igrtruss(i)%ENTITY(j))
191 ENDDO
192 ENDDO
193C REORDERING FOR ITAGPRLD_TRUSS
194 inum(2,1:numelt)=itagprld_truss(1:numelt)
195 DO i=1,numelt
196 itagprld_truss(i) =inum(2,index(i))
197 ENDDO
198C
199C--------------------------------------------------------------
200C DETERMINATION DES SUPER_GROUPES
201C--------------------------------------------------------------
202 nd=1
203 DO i=2,numelt
204 ii=itri(1,index(i))
205 jj=itri(1,index(i-1))
206 ii2=itri(2,index(i))
207 jj2=itri(2,index(i-1))
208 ii3=itri(3,index(i))
209 jj3=itri(3,index(i-1))
210 ii4=itri(4,index(i))
211 jj4=itri(4,index(i-1))
212 ii5=itri(5,index(i))
213 jj5=itri(5,index(i-1))
214
215 IF (ii/=jj .OR. ii2/=jj2 .OR. ii3/=jj3 .OR.
216 . ii4/=jj4 .OR. ii5/=jj5) THEN
217 nd=nd+1
218 eadd(nd)=i
219 ENDIF
220 ENDDO
221 eadd(nd+1) = numelt+1
222c-----------
223 RETURN
224 END
#define my_real
Definition cppsort.cpp:32
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
Definition my_orders.c:82
subroutine tgrhead(ixt, pm, geo, inum, isel, itr1, eadd, index, itri, ipartt, nd, igrsurf, igrtruss, cep, xep, itruoff, tagprt_sms, itagprld_truss)
Definition tgrhead.F:36