OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
spmd_anim_ply_init.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!|| spmd_anim_ply_init ../starter/source/spmd/spmd_anim_ply_init.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- uses -----------------------------------------------------
28!|| plyxfem_mod ../starter/share/modules1/plyxfem_mod.F
29!|| stack_mod ../starter/share/modules1/stack_mod.F
30!||====================================================================
31 SUBROUTINE spmd_anim_ply_init (IGEO, GEO ,IPARG ,IXC ,IXTG ,
32 . IPARTC,IPARTQ,IPARTTG,STACK)
33C-----------------------------------------------
34C M o d u l e s
35C-----------------------------------------------
36 USE plyxfem_mod
37 USE stack_mod
38C-----------------------------------------------
39C I m p l i c i t T y p e s
40C-----------------------------------------------
41#include "implicit_f.inc"
42C-----------------------------------------------
43C C o m m o n B l o c k s
44C-----------------------------------------------
45#include "com01_c.inc"
46#include "com04_c.inc"
47#include "param_c.inc"
48C-----------------------------------------------
49C D u m m y A r g u m e n t s
50C-----------------------------------------------
51C REAL
53 . geo(npropg,*)
54 INTEGER IXC(NIXC,*),IPARTQ(*),IPARTTG(*),IXTG(NIXTG,*),
55 . iparg(nparg,*), ipartc(*),igeo(npropgi,*)
56C
57 TYPE (STACK_PLY) :: STACK
58C-----------------------------------------------
59C L O C A L V A R I A B L E S
60C-----------------------------------------------
61 LOGICAL :: COMPUTATION_NEEDED
62 INTEGER IE,NG, ITY, LFT, LLT, NPT, N, I, J,
63 . iprt, nel, iad, npar, nft, imid,ialel,mtn,
64 . jj, k, sh_ih, ihbe,buf,ishplyxfem,ipid,ipt,
65 . iply,ippid,jpid,
66 . ncount,shcount,mater(npart),isubstack
67 INTEGER, DIMENSION(:), ALLOCATABLE :: TAG_ARRAY,TAG_SHELLS
68
69C-----------------------------------------------
70 ALLOCATE(tag_array(numnod))
71 ALLOCATE(tag_shells(numelc))
72 DO i=1,npart
73 mater(i)=0
74 ENDDO
75
76 computation_needed = .false.
77 DO ng = 1, ngroup
78 nel =iparg(2,ng)
79 nft =iparg(3,ng)
80 ity =iparg(5,ng)
81 IF(ity==2)THEN
82 DO i = 1, nel
83 n = i + nft
84 mater(ipartq(n)) = 1
85 ENDDO
86 ELSEIF(ity==3)THEN
87 DO i = 1, nel
88 n = i + nft
89 mater(ipartc(n)) = 1
90 ENDDO
91 ELSEIF(ity==7)THEN
92 DO i = 1, nel
93 n = i + nft
94 mater(iparttg(n)) = 1
95 ENDDO
96 ENDIF
97 ishplyxfem = iparg(50,ng)
98 IF(ishplyxfem/=0) computation_needed = .true.
99 ENDDO
100
101c
102
103C INITIALISATION
104
105 ALLOCATE(plynod(nplymax))
106
107 DO i=1,nplymax
108 plynod(i)%PLYNUMNODS = 0
109 ENDDO
110
111 ALLOCATE(plyshell(nplymax))
112 DO i=1,nplymax
113 plyshell(i)%PLYNUMSHELL = 0
114 ENDDO
115C-----------------------------------------------
116C NORMALE
117C-----------------------------------------------
118 ie = 0
119C-----------------------------------------------
120 ippid = 100
121C-----------------------------------------------
122C PART
123C-----------------------------------------------
124 ALLOCATE (idpid_ply(nplymax))
125 idpid_ply= 0
126 IF(computation_needed) THEN
127 DO k=1,nplymax
128 tag_array=0
129 tag_shells=0
130 shcount=0
131 DO 500 iprt=1,npart
132 IF(mater(iprt) == 0)GOTO 500
133 DO 490 ng=1,ngroup
134 mtn =iparg(1,ng)
135 nel =iparg(2,ng)
136 nft =iparg(3,ng)
137 iad =iparg(4,ng)
138 ity =iparg(5,ng)
139 ishplyxfem = iparg(50,ng)
140 lft=1
141 llt=nel
142
143 IF(ishplyxfem > 0) THEN
144C-----------------------------------------------
145C COQUES
146C-----------------------------------------------
147 IF(ity==3)THEN
148 npt =iparg(6,ng)
149 ihbe = iparg(23,ng)
150 isubstack = iparg(71,ng)
151 ippid = 2
152 DO 130 i=lft,llt
153 n = i + nft
154 IF(ipartc(n)/=iprt)GOTO 130
155 ipid = ixc(6,n)
156 DO ipt=1,npt
157 jpid = stack%IGEO(ippid + ipt, isubstack)
158 iply = igeo(102 ,jpid)
159 idpid_ply(iply) =igeo(1 ,jpid)
160 IF (iply == k) THEN
161 tag_array(ixc(2,n))=1
162 tag_array(ixc(3,n))=1
163 tag_array(ixc(4,n))=1
164 tag_array(ixc(5,n))=1
165
166 tag_shells(n) = ipt
167 plyshell(k)%PLYNUMSHELL = plyshell(k)%PLYNUMSHELL+1
168 ENDIF
169
170 ENDDO
171130 CONTINUE
172
173C-----------------------------------------------
174C COQUES 3 NOEUDS
175C-----------------------------------------------
176 ELSEIF(ity==7)THEN
177C
178 ENDIF
179 ENDIF
180 490 CONTINUE
181C
182 500 CONTINUE
183C
184C Ply Nodes Post treatments
185C
186 DO i=1,numnod
187 IF (tag_array(i)==1) plynod(k)%PLYNUMNODS = plynod(k)%PLYNUMNODS + 1
188 ENDDO
189 ALLOCATE (plynod(k)%NODES(plynod(k)%PLYNUMNODS))
190
191 ncount = 0
192 DO i=1,numnod
193 IF (tag_array(i)==1) THEN
194 ncount=ncount+1
195 plynod(k)%NODES(ncount)=i
196 ENDIF
197 ENDDO
198C
199C Ply Shells Post treatments
200C
201 ALLOCATE (plyshell(k)%SHID(plyshell(k)%PLYNUMSHELL))
202 ALLOCATE (plyshell(k)%SHELLIPT(plyshell(k)%PLYNUMSHELL))
203
204C debugs print*,'PLYSHELL : ',PLYSHELL(K)%plynumshell,NUMELC
205
206 shcount=0
207 DO i=1, numelc
208 IF (tag_shells(i) > 0)THEN
209 shcount=shcount+1
210 plyshell(k)%SHID(shcount)=i
211 plyshell(k)%SHELLIPT(shcount)=tag_shells(i)
212 ENDIF
213 ENDDO
214 ENDDO
215
216 ELSE
217 DO k=1,nplymax
218 ALLOCATE (plynod(k)%NODES(plynod(k)%PLYNUMNODS))
219 ALLOCATE (plyshell(k)%SHID(plyshell(k)%PLYNUMSHELL))
220 ALLOCATE (plyshell(k)%SHELLIPT(plyshell(k)%PLYNUMSHELL))
221 ENDDO
222 ENDIF
223C-------------------------------
224C Numeros globaux des shell ply
225C-------------------------------
226 ncount = 0
227 DO k=1,nplymax
228 ALLOCATE(plyshell(k)%SHELLID(plyshell(k)%PLYNUMSHELL))
229 DO i=1,plyshell(k)%PLYNUMSHELL
230 ncount=ncount+1
231 plyshell(k)%SHELLID(i)=ncount
232 ENDDO
233 ENDDO
234
235C-------------------------------
236C Numeros globaux des noeuds ply
237C-------------------------------
238 ncount = 0
239 DO k=1,nplymax
240 ALLOCATE(plynod(k)%PLYNODID(plynod(k)%PLYNUMNODS))
241 DO i=1,plynod(k)%PLYNUMNODS
242 ncount=ncount+1
243 plynod(k)%PLYNODID(i)=ncount
244 ENDDO
245 ENDDO
246
247C-------------------------------
248C Plyparts
249C-------------------------------
250 ALLOCATE (indx_ply(nplymax))
251 nplypart = 0
252 indx_ply = 0
253 DO k=1,nplymax
254 IF ( plyshell(k)%PLYNUMSHELL >0) THEN
255 nplypart = nplypart + 1
256 indx_ply(nplypart) = k
258 ENDIF
259 ENDDO
260
261 nplynodg = 0
262 DO k=1,nplymax
263 nplynodg = nplynodg + plynod(k)%PLYNUMNODS
264 ENDDO
265
266 DEALLOCATE(tag_array)
267 DEALLOCATE(tag_shells)
268
269
270 RETURN
271 END
272!||====================================================================
273!|| get_ply_nod ../starter/source/spmd/spmd_anim_ply_init.f
274!||--- called by ------------------------------------------------------
275!|| w_anim_ply ../starter/source/restart/ddsplit/w_anim_ply.F
276!||--- uses -----------------------------------------------------
277!|| plyxfem_mod ../starter/share/modules1/plyxfem_mod.F
278!||====================================================================
279 INTEGER FUNCTION get_ply_nod(IPLY,NODID)
280C-----------------------------------------------
281C M o d u l e s
282C-----------------------------------------------
283 USE plyxfem_mod
284C-----------------------------------------------
285C I m p l i c i t T y p e s
286C-----------------------------------------------
287#include "implicit_f.inc"
288C-----------------------------------------------
289C D u m m y A r g u m e n t s
290C-----------------------------------------------
291 INTEGER iply,nodid
292C-----------------------------------------------
293C L O C A L V A R I A B L E S
294C-----------------------------------------------
295 INTEGER i,binf,bsup,milieu,size,empl,taille
296C-----------------------------------------------
297 size=plynod(iply)%PLYNUMNODS
298
299 binf=1
300 empl = - huge(empl)
301 bsup=SIZE
302
303 IF (plynod(iply)%NODES(binf)==nodid)THEN
304 empl=binf
305 GOTO 100
306 ENDIF
307
308 IF (plynod(iply)%NODES(bsup)==nodid)THEN
309 empl=bsup
310 GOTO 100
311 ENDIF
312
313 taille = bsup-binf+1
314 DO WHILE ( taille > 5)
315 milieu = (bsup-binf)/2 + binf
316
317 IF (plynod(iply)%NODES(milieu) == nodid) THEN
318 empl = milieu
319 GOTO 100
320 ENDIF
321 IF ( plynod(iply)%NODES(milieu) < nodid) THEN
322 binf = milieu
323 ELSE
324 bsup = milieu
325 ENDIF
326 taille = bsup-binf+1
327 ENDDO
328
329 DO i=binf,bsup
330 IF (plynod(iply)%NODES(i) == nodid) THEN
331 empl = i
332 GOTO 100
333 ENDIF
334 ENDDO
335
336 100 CONTINUE
337
338 get_ply_nod = empl
339
340 RETURN
341 END
342
343
344!||====================================================================
345!|| get_ply_nodid ../starter/source/spmd/spmd_anim_ply_init.F
346!||--- uses -----------------------------------------------------
347!|| plyxfem_mod ../starter/share/modules1/plyxfem_mod.F
348!||====================================================================
349 INTEGER FUNCTION get_ply_nodid(IPLY,NODID,OFFSET)
350C-----------------------------------------------
351C M o d u l e s
352C-----------------------------------------------
353 USE plyxfem_mod
354C-----------------------------------------------
355C I m p l i c i t T y p e s
356C-----------------------------------------------
357#include "implicit_f.inc"
358C-----------------------------------------------
359C D u m m y A r g u m e n t s
360C-----------------------------------------------
361 INTEGER iply,nodid,offset
362C-----------------------------------------------
363C L O C A L V A R I A B L E S
364C-----------------------------------------------
365 INTEGER i,binf,bsup,MILIEU,size,empl,taille
366C-----------------------------------------------
367 size=plynod(iply)%PLYNUMNODS
368
369 binf=1
370 bsup=SIZE
371
372 IF (plynod(iply)%NODES(binf)==nodid)THEN
373 empl=binf
374 GOTO 100
375 ENDIF
376
377 IF (plynod(iply)%NODES(bsup)==nodid)THEN
378 empl=bsup
379 GOTO 100
380 ENDIF
381
382 taille = bsup-binf+1
383 DO WHILE ( taille > 5)
384 milieu = (bsup-binf)/2 + binf
385
386 IF (plynod(iply)%NODES(milieu) == nodid) THEN
387 empl = milieu
388 GOTO 100
389 ENDIF
390 IF ( plynod(iply)%NODES(milieu) < nodid) THEN
391 binf = milieu
392 ELSE
393 bsup = milieu
394 ENDIF
395 taille = bsup-binf+1
396 ENDDO
397
398 DO i=binf,bsup
399 IF (plynod(iply)%NODES(i) == nodid) THEN
400 empl = i
401 GOTO 100
402 ENDIF
403 ENDDO
404
405 100 CONTINUE
406
407 get_ply_nodid = plynod(iply)%PLYNODID(empl)+offset
408
409 RETURN
410 END
#define my_real
Definition cppsort.cpp:32
type(plynods), dimension(:), allocatable plynod
Definition plyxfem_mod.F:44
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
integer function get_ply_nodid(iply, nodid, offset)
integer function get_ply_nod(iply, nodid)
subroutine spmd_anim_ply_init(igeo, geo, iparg, ixc, ixtg, ipartc, ipartq, iparttg, stack)
program starter
Definition starter.F:39