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

Go to the source code of this file.

Functions/Subroutines

subroutine spmd_anim_ply_init (igeo, geo, iparg, ixc, ixtg, ipartc, ipartq, iparttg, stack)
integer function get_ply_nod (iply, nodid)
integer function get_ply_nodid (iply, nodid, offset)

Function/Subroutine Documentation

◆ get_ply_nod()

integer function get_ply_nod ( integer iply,
integer nodid )

Definition at line 280 of file spmd_anim_ply_init.F.

281C-----------------------------------------------
282C M o d u l e s
283C-----------------------------------------------
284 USE plyxfem_mod
285C-----------------------------------------------
286C I m p l i c i t T y p e s
287C-----------------------------------------------
288#include "implicit_f.inc"
289C-----------------------------------------------
290C D u m m y A r g u m e n t s
291C-----------------------------------------------
292 INTEGER IPLY,NODID
293C-----------------------------------------------
294C L O C A L V A R I A B L E S
295C-----------------------------------------------
296 INTEGER I,BINF,BSUP,MILIEU,SIZE,EMPL,TAILLE
297C-----------------------------------------------
298 size=plynod(iply)%PLYNUMNODS
299
300 binf=1
301 empl = - huge(empl)
302 bsup=SIZE
303
304 IF (plynod(iply)%NODES(binf)==nodid)THEN
305 empl=binf
306 GOTO 100
307 ENDIF
308
309 IF (plynod(iply)%NODES(bsup)==nodid)THEN
310 empl=bsup
311 GOTO 100
312 ENDIF
313
314 taille = bsup-binf+1
315 DO WHILE ( taille > 5)
316 milieu = (bsup-binf)/2 + binf
317
318 IF (plynod(iply)%NODES(milieu) == nodid) THEN
319 empl = milieu
320 GOTO 100
321 ENDIF
322 IF ( plynod(iply)%NODES(milieu) < nodid) THEN
323 binf = milieu
324 ELSE
325 bsup = milieu
326 ENDIF
327 taille = bsup-binf+1
328 ENDDO
329
330 DO i=binf,bsup
331 IF (plynod(iply)%NODES(i) == nodid) THEN
332 empl = i
333 GOTO 100
334 ENDIF
335 ENDDO
336
337 100 CONTINUE
338
339 get_ply_nod = empl
340
341 RETURN
type(plynods), dimension(:), allocatable plynod
Definition plyxfem_mod.F:44
integer function get_ply_nod(iply, nodid)

◆ get_ply_nodid()

integer function get_ply_nodid ( integer iply,
integer nodid,
integer offset )

Definition at line 350 of file spmd_anim_ply_init.F.

351C-----------------------------------------------
352C M o d u l e s
353C-----------------------------------------------
354 USE plyxfem_mod
355C-----------------------------------------------
356C I m p l i c i t T y p e s
357C-----------------------------------------------
358#include "implicit_f.inc"
359C-----------------------------------------------
360C D u m m y A r g u m e n t s
361C-----------------------------------------------
362 INTEGER IPLY,NODID,OFFSET
363C-----------------------------------------------
364C L O C A L V A R I A B L E S
365C-----------------------------------------------
366 INTEGER I,BINF,BSUP,MILIEU,SIZE,EMPL,TAILLE
367C-----------------------------------------------
368 size=plynod(iply)%PLYNUMNODS
369
370 binf=1
371 bsup=SIZE
372
373 IF (plynod(iply)%NODES(binf)==nodid)THEN
374 empl=binf
375 GOTO 100
376 ENDIF
377
378 IF (plynod(iply)%NODES(bsup)==nodid)THEN
379 empl=bsup
380 GOTO 100
381 ENDIF
382
383 taille = bsup-binf+1
384 DO WHILE ( taille > 5)
385 milieu = (bsup-binf)/2 + binf
386
387 IF (plynod(iply)%NODES(milieu) == nodid) THEN
388 empl = milieu
389 GOTO 100
390 ENDIF
391 IF ( plynod(iply)%NODES(milieu) < nodid) THEN
392 binf = milieu
393 ELSE
394 bsup = milieu
395 ENDIF
396 taille = bsup-binf+1
397 ENDDO
398
399 DO i=binf,bsup
400 IF (plynod(iply)%NODES(i) == nodid) THEN
401 empl = i
402 GOTO 100
403 ENDIF
404 ENDDO
405
406 100 CONTINUE
407
408 get_ply_nodid = plynod(iply)%PLYNODID(empl)+offset
409
410 RETURN
integer function get_ply_nodid(iply, nodid, offset)

◆ spmd_anim_ply_init()

subroutine spmd_anim_ply_init ( integer, dimension(npropgi,*) igeo,
geo,
integer, dimension(nparg,*) iparg,
integer, dimension(nixc,*) ixc,
integer, dimension(nixtg,*) ixtg,
integer, dimension(*) ipartc,
integer, dimension(*) ipartq,
integer, dimension(*) iparttg,
type (stack_ply) stack )

Definition at line 31 of file spmd_anim_ply_init.F.

33C-----------------------------------------------
34C M o d u l e s
35C-----------------------------------------------
36 USE plyxfem_mod
37 USE stack_mod
38 use element_mod , only : nixc,nixtg
39C-----------------------------------------------
40C I m p l i c i t T y p e s
41C-----------------------------------------------
42#include "implicit_f.inc"
43C-----------------------------------------------
44C C o m m o n B l o c k s
45C-----------------------------------------------
46#include "com01_c.inc"
47#include "com04_c.inc"
48#include "param_c.inc"
49C-----------------------------------------------
50C D u m m y A r g u m e n t s
51C-----------------------------------------------
52C REAL
54 . geo(npropg,*)
55 INTEGER IXC(NIXC,*),IPARTQ(*),IPARTTG(*),IXTG(NIXTG,*),
56 . IPARG(NPARG,*), IPARTC(*),IGEO(NPROPGI,*)
57C
58 TYPE (STACK_PLY) :: STACK
59C-----------------------------------------------
60C L O C A L V A R I A B L E S
61C-----------------------------------------------
62 LOGICAL :: COMPUTATION_NEEDED
63 INTEGER IE,NG, ITY, LFT, LLT, NPT, N, I,
64 . IPRT, NEL, IAD, NFT,MTN,
65 . K, IHBE,ISHPLYXFEM,IPID,IPT,
66 . IPLY,IPPID,JPID,
67 . NCOUNT,SHCOUNT,MATER(NPART),ISUBSTACK
68 INTEGER, DIMENSION(:), ALLOCATABLE :: TAG_ARRAY,TAG_SHELLS
69
70C-----------------------------------------------
71 ALLOCATE(tag_array(numnod))
72 ALLOCATE(tag_shells(numelc))
73 DO i=1,npart
74 mater(i)=0
75 ENDDO
76
77 computation_needed = .false.
78 DO ng = 1, ngroup
79 nel =iparg(2,ng)
80 nft =iparg(3,ng)
81 ity =iparg(5,ng)
82 IF(ity==2)THEN
83 DO i = 1, nel
84 n = i + nft
85 mater(ipartq(n)) = 1
86 ENDDO
87 ELSEIF(ity==3)THEN
88 DO i = 1, nel
89 n = i + nft
90 mater(ipartc(n)) = 1
91 ENDDO
92 ELSEIF(ity==7)THEN
93 DO i = 1, nel
94 n = i + nft
95 mater(iparttg(n)) = 1
96 ENDDO
97 ENDIF
98 ishplyxfem = iparg(50,ng)
99 IF(ishplyxfem/=0) computation_needed = .true.
100 ENDDO
101
102c
103
104C INITIALISATION
105
106 ALLOCATE(plynod(nplymax))
107
108 DO i=1,nplymax
109 plynod(i)%PLYNUMNODS = 0
110 ENDDO
111
112 ALLOCATE(plyshell(nplymax))
113 DO i=1,nplymax
114 plyshell(i)%PLYNUMSHELL = 0
115 ENDDO
116C-----------------------------------------------
117C NORMALE
118C-----------------------------------------------
119 ie = 0
120C-----------------------------------------------
121 ippid = 100
122C-----------------------------------------------
123C PART
124C-----------------------------------------------
125 ALLOCATE (idpid_ply(nplymax))
126 idpid_ply= 0
127 IF(computation_needed) THEN
128 DO k=1,nplymax
129 tag_array=0
130 tag_shells=0
131 shcount=0
132 DO 500 iprt=1,npart
133 IF(mater(iprt) == 0)GOTO 500
134 DO 490 ng=1,ngroup
135 mtn =iparg(1,ng)
136 nel =iparg(2,ng)
137 nft =iparg(3,ng)
138 iad =iparg(4,ng)
139 ity =iparg(5,ng)
140 ishplyxfem = iparg(50,ng)
141 lft=1
142 llt=nel
143
144 IF(ishplyxfem > 0) THEN
145C-----------------------------------------------
146C COQUES
147C-----------------------------------------------
148 IF(ity==3)THEN
149 npt =iparg(6,ng)
150 ihbe = iparg(23,ng)
151 isubstack = iparg(71,ng)
152 ippid = 2
153 DO 130 i=lft,llt
154 n = i + nft
155 IF(ipartc(n)/=iprt)GOTO 130
156 ipid = ixc(6,n)
157 DO ipt=1,npt
158 jpid = stack%IGEO(ippid + ipt, isubstack)
159 iply = igeo(102 ,jpid)
160 idpid_ply(iply) =igeo(1 ,jpid)
161 IF (iply == k) THEN
162 tag_array(ixc(2,n))=1
163 tag_array(ixc(3,n))=1
164 tag_array(ixc(4,n))=1
165 tag_array(ixc(5,n))=1
166
167 tag_shells(n) = ipt
168 plyshell(k)%PLYNUMSHELL = plyshell(k)%PLYNUMSHELL+1
169 ENDIF
170
171 ENDDO
172130 CONTINUE
173
174C-----------------------------------------------
175C COQUES 3 NOEUDS
176C-----------------------------------------------
177 ELSEIF(ity==7)THEN
178C
179 ENDIF
180 ENDIF
181 490 CONTINUE
182C
183 500 CONTINUE
184C
185C Ply Nodes Post treatments
186C
187 DO i=1,numnod
188 IF (tag_array(i)==1) plynod(k)%PLYNUMNODS = plynod(k)%PLYNUMNODS + 1
189 ENDDO
190 ALLOCATE (plynod(k)%NODES(plynod(k)%PLYNUMNODS))
191
192 ncount = 0
193 DO i=1,numnod
194 IF (tag_array(i)==1) THEN
195 ncount=ncount+1
196 plynod(k)%NODES(ncount)=i
197 ENDIF
198 ENDDO
199C
200C Ply Shells Post treatments
201C
202 ALLOCATE (plyshell(k)%SHID(plyshell(k)%PLYNUMSHELL))
203 ALLOCATE (plyshell(k)%SHELLIPT(plyshell(k)%PLYNUMSHELL))
204
205C debugs print*,'PLYSHELL : ',PLYSHELL(K)%plynumshell,NUMELC
206
207 shcount=0
208 DO i=1, numelc
209 IF (tag_shells(i) > 0)THEN
210 shcount=shcount+1
211 plyshell(k)%SHID(shcount)=i
212 plyshell(k)%SHELLIPT(shcount)=tag_shells(i)
213 ENDIF
214 ENDDO
215 ENDDO
216
217 ELSE
218 DO k=1,nplymax
219 ALLOCATE (plynod(k)%NODES(plynod(k)%PLYNUMNODS))
220 ALLOCATE (plyshell(k)%SHID(plyshell(k)%PLYNUMSHELL))
221 ALLOCATE (plyshell(k)%SHELLIPT(plyshell(k)%PLYNUMSHELL))
222 ENDDO
223 ENDIF
224C-------------------------------
225C Numeros globaux des shell ply
226C-------------------------------
227 ncount = 0
228 DO k=1,nplymax
229 ALLOCATE(plyshell(k)%SHELLID(plyshell(k)%PLYNUMSHELL))
230 DO i=1,plyshell(k)%PLYNUMSHELL
231 ncount=ncount+1
232 plyshell(k)%SHELLID(i)=ncount
233 ENDDO
234 ENDDO
235
236C-------------------------------
237C Global numbers of the ply nodes
238C-------------------------------
239 ncount = 0
240 DO k=1,nplymax
241 ALLOCATE(plynod(k)%PLYNODID(plynod(k)%PLYNUMNODS))
242 DO i=1,plynod(k)%PLYNUMNODS
243 ncount=ncount+1
244 plynod(k)%PLYNODID(i)=ncount
245 ENDDO
246 ENDDO
247
248C-------------------------------
249C Plyparts
250C-------------------------------
251 ALLOCATE (indx_ply(nplymax))
252 nplypart = 0
253 indx_ply = 0
254 DO k=1,nplymax
255 IF ( plyshell(k)%PLYNUMSHELL >0) THEN
256 nplypart = nplypart + 1
257 indx_ply(nplypart) = k
259 ENDIF
260 ENDDO
261
262 nplynodg = 0
263 DO k=1,nplymax
264 nplynodg = nplynodg + plynod(k)%PLYNUMNODS
265 ENDDO
266
267 DEALLOCATE(tag_array)
268 DEALLOCATE(tag_shells)
269
270
271 RETURN
#define my_real
Definition cppsort.cpp:32
integer, dimension(:), allocatable indx_ply
Definition plyxfem_mod.F:60
integer nplypart
Definition plyxfem_mod.F:59
integer, dimension(:), allocatable idpid_ply
Definition plyxfem_mod.F:61
type(plyshells), dimension(:), allocatable plyshell
Definition plyxfem_mod.F:56