OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
compute_connect_partelm.F File Reference
#include "implicit_f.inc"
#include "com04_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine compute_connect_partelm (iparts, ipartq, ipartc, ipartt, ipartp, iparttg, ipartr, ipartsp, inv_group, numsph, nisp, kxsp)

Function/Subroutine Documentation

◆ compute_connect_partelm()

subroutine compute_connect_partelm ( integer, dimension(numels), intent(in) iparts,
integer, dimension(numelq), intent(in) ipartq,
integer, dimension(numelc), intent(in) ipartc,
integer, dimension(numelt), intent(in) ipartt,
integer, dimension(numelp), intent(in) ipartp,
integer, dimension(numeltg), intent(in) iparttg,
integer, dimension(numelr), intent(in) ipartr,
integer, dimension(numsph), intent(in) ipartsp,
type(invertgroup_struct_) inv_group,
integer, intent(in) numsph,
integer, intent(in) nisp,
integer, dimension(nisp,numsph), intent(in) kxsp )

Definition at line 33 of file compute_connect_partelm.F.

36!$COMMENT
37! COMPUTE_CONNECT_PARTELM description
38! computation of the inverted connectivity between part and element
39!
40! COMPUTE_CONNECT_PARTELM organization :
41! for each kind of element :
42! - compute an index array based on the number of
43! element in each part
44! - fill the INV_GROUP%PARTxxx array with the part ID
45!
46!$ENDCOMMENT
47C-----------------------------------------------
48C M o d u l e s
49C-----------------------------------------------
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55#include "com04_c.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59C
60 INTEGER, INTENT(IN) :: NUMSPH,NISP
61 INTEGER, INTENT(IN) :: KXSP(NISP,NUMSPH)
62 INTEGER, INTENT(IN),DIMENSION(NUMELS) :: IPARTS
63 INTEGER, INTENT(IN),DIMENSION(NUMELQ) :: IPARTQ
64 INTEGER, INTENT(IN),DIMENSION(NUMELC) :: IPARTC
65 INTEGER, INTENT(IN),DIMENSION(NUMELTG):: IPARTTG
66 INTEGER, INTENT(IN),DIMENSION(NUMELR) :: IPARTR
67 INTEGER, INTENT(IN),DIMENSION(NUMELT) :: IPARTT
68 INTEGER, INTENT(IN),DIMENSION(NUMELP) :: IPARTP
69 INTEGER, INTENT(IN),DIMENSION(NUMSPH) :: IPARTSP
70
71 TYPE(INVERTGROUP_STRUCT_) :: INV_GROUP
72
73C-----------------------------------------------
74C L o c a l V a r i a b l e s
75C-----------------------------------------------
76 INTEGER I,J,EL,NCOUNT,PART,IND,FIRST,LAST
77 INTEGER, DIMENSION (:), ALLOCATABLE :: PART_COUNT
78C-----------------------------------------------
79 ! allocation of INV_GROUP% array
80 IF( .NOT.(inv_group%ALREADY_ALLOC) ) CALL inverted_group_alloc(inv_group)
81 ! check INV_GROUP% array was already computed, if already computed, flush to 0
82 IF( inv_group%ALREADY_DONE ) CALL inverted_group_init(1,inv_group,numsph)
83
84 ALLOCATE(part_count(npart))
85
86
87C ------------------------------------------------
88C Solid elements
89C ------------------------------------------------
90 part_count(1:npart)=0
91
92 DO i=1,numels
93 part=iparts(i)
94 part_count(part)=part_count(part)+1
95 ENDDO
96
97 inv_group%INDPARTS(1)=1
98 DO i=2,npart+1
99 inv_group%INDPARTS(i)=inv_group%INDPARTS(i-1)+part_count(i-1)
100 ENDDO
101
102 part_count(1:npart)=0
103 DO i=1,numels
104 part=iparts(i)
105
106 ind=inv_group%INDPARTS(part) + part_count(part)
107 inv_group%PARTS(ind)=i
108 part_count(part)=part_count(part)+1
109 ENDDO
110C ------------------------------------------------
111C Sph particles (cells)
112C ------------------------------------------------
113 part_count(1:npart)=0
114
115 DO i=1,numsph
116 part=ipartsp(i)
117 part_count(part)=part_count(part)+1
118 ENDDO
119
120 inv_group%INDPARTSPH(1)=1
121 DO i=2,npart+1
122 inv_group%INDPARTSPH(i)=inv_group%INDPARTSPH(i-1)+part_count(i-1)
123 ENDDO
124
125 part_count(1:npart)=0
126 DO i=1,numsph
127 part=ipartsp(i)
128 ind=inv_group%INDPARTSPH(part) + part_count(part)
129 inv_group%PARTSPH(ind)=kxsp(3,i)
130 part_count(part)=part_count(part)+1
131 ENDDO
132C ------------------------------------------------
133C Quad elements
134C ------------------------------------------------
135 part_count(1:npart)=0
136
137 DO i=1,numelq
138 part=ipartq(i)
139 part_count(part)=part_count(part)+1
140 ENDDO
141
142 inv_group%INDPARTQ(1)=1
143 DO i=2,npart+1
144 inv_group%INDPARTQ(i)=inv_group%INDPARTQ(i-1)+part_count(i-1)
145 ENDDO
146
147 part_count(1:npart)=0
148 DO i=1,numelq
149 part=ipartq(i)
150
151 ind=inv_group%INDPARTQ(part) + part_count(part)
152 inv_group%PARTQ(ind)=i
153 part_count(part)=part_count(part)+1
154 ENDDO
155C ------------------------------------------------
156C Shell elements
157C ------------------------------------------------
158 part_count(1:npart)=0
159
160 DO i=1,numelc
161 part=ipartc(i)
162 part_count(part)=part_count(part)+1
163 ENDDO
164
165 inv_group%INDPARTC(1)=1
166 DO i=2,npart+1
167 inv_group%INDPARTC(i)=inv_group%INDPARTC(i-1)+part_count(i-1)
168 ENDDO
169
170 part_count(1:npart)=0
171 DO i=1,numelc
172 part=ipartc(i)
173
174 ind=inv_group%INDPARTC(part) + part_count(part)
175 inv_group%PARTC(ind)=i
176 part_count(part)=part_count(part)+1
177 ENDDO
178C ------------------------------------------------
179C TRUSS elements
180C ------------------------------------------------
181 part_count(1:npart)=0
182
183 DO i=1,numelt
184 part=ipartt(i)
185 part_count(part)=part_count(part)+1
186 ENDDO
187
188 inv_group%INDPARTT(1)=1
189 DO i=2,npart+1
190 inv_group%INDPARTT(i)=inv_group%INDPARTT(i-1)+part_count(i-1)
191 ENDDO
192
193 part_count(1:npart)=0
194 DO i=1,numelt
195 part=ipartt(i)
196
197 ind=inv_group%INDPARTT(part) + part_count(part)
198 inv_group%PARTT(ind)=i
199 part_count(part)=part_count(part)+1
200 ENDDO
201C ------------------------------------------------
202C Beam elements
203C ------------------------------------------------
204 part_count(1:npart)=0
205
206 DO i=1,numelp
207 part=ipartp(i)
208 part_count(part)=part_count(part)+1
209 ENDDO
210
211 inv_group%INDPARTP(1)=1
212 DO i=2,npart+1
213 inv_group%INDPARTP(i)=inv_group%INDPARTP(i-1)+part_count(i-1)
214 ENDDO
215
216 part_count(1:npart)=0
217 DO i=1,numelp
218 part=ipartp(i)
219 ind=inv_group%INDPARTP(part) + part_count(part)
220 inv_group%PARTP(ind)=i
221 part_count(part)=part_count(part)+1
222 ENDDO
223C ------------------------------------------------
224C Triangle elements
225C ------------------------------------------------
226 part_count(1:npart)=0
227
228 DO i=1,numeltg
229 part=iparttg(i)
230 part_count(part)=part_count(part)+1
231 ENDDO
232
233 inv_group%INDPARTTG(1)=1
234 DO i=2,npart+1
235 inv_group%INDPARTTG(i)=inv_group%INDPARTTG(i-1)+part_count(i-1)
236 ENDDO
237
238 part_count(1:npart)=0
239 DO i=1,numeltg
240 part=iparttg(i)
241
242 ind=inv_group%INDPARTTG(part) + part_count(part)
243 inv_group%PARTTG(ind)=i
244 part_count(part)=part_count(part)+1
245 ENDDO
246C ------------------------------------------------
247C TRIA ELTs
248C ------------------------------------------------
249 part_count(1:npart)=0
250
251 DO i=1,numeltria
252 part=iparttg(i)
253 part_count(part)=part_count(part)+1
254 ENDDO
255
256 inv_group%INDPARTTRIA(1)=1
257 DO i=2,npart+1
258 inv_group%INDPARTTRIA(i)=inv_group%INDPARTTRIA(i-1)+part_count(i-1)
259 ENDDO
260
261 part_count(1:npart)=0
262 DO i=1,numeltria
263 part=iparttg(i)
264
265 ind=inv_group%INDPARTTRIA(part) + part_count(part)
266 inv_group%PARTTRIA(ind)=i
267 part_count(part)=part_count(part)+1
268 ENDDO
269
270C ------------------------------------------------
271C Spring elements
272C ------------------------------------------------
273 part_count(1:npart)=0
274
275 DO i=1,numelr
276 part=ipartr(i)
277 part_count(part)=part_count(part)+1
278 ENDDO
279
280 inv_group%INDPARTR(1)=1
281 DO i=2,npart+1
282 inv_group%INDPARTR(i)=inv_group%INDPARTR(i-1)+part_count(i-1)
283 ENDDO
284 part_count(1:npart)=0
285 DO i=1,numelr
286 part=ipartr(i)
287
288 ind=inv_group%INDPARTR(part) + part_count(part)
289 inv_group%PARTR(ind)=i
290 part_count(part)=part_count(part)+1
291 ENDDO
292
293 DEALLOCATE(part_count)
294
295 inv_group%ALREADY_DONE = .true.
296 RETURN
subroutine inverted_group_alloc(inv_group)
subroutine inverted_group_init(mode, inv_group, numsph)