OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ale_connectivity_mod.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!|| ale_connectivity_mod ../common_source/modules/ale/ale_connectivity_mod.F
25!||--- called by ------------------------------------------------------
26!|| a4conv3 ../engine/source/ale/ale3d/a4conv3.F
27!|| a4flux3 ../engine/source/ale/ale3d/a4flux3.F
28!|| aconv2 ../engine/source/ale/ale2d/aconv2.F
29!|| aconv3 ../engine/source/ale/ale3d/aconv3.F
30!|| aconve ../engine/source/ale/aconve.F
31!|| adiff2 ../engine/source/ale/ale2d/adiff2.F
32!|| adiff3 ../engine/source/ale/ale3d/adiff3.F
33!|| aeturb ../engine/source/ale/turbulence/aeturb.F
34!|| afimp2 ../engine/source/ale/ale2d/afimp2.F
35!|| afimp3 ../engine/source/ale/ale3d/afimp3.F
36!|| aflux0 ../engine/source/ale/aflux0.F
37!|| aflux2 ../engine/source/ale/ale2d/aflux2.F
38!|| aflux3 ../engine/source/ale/ale3d/aflux3.F
39!|| afluxt ../engine/source/ale/ale51/afluxt.F
40!|| agaug3 ../engine/source/ale/agauge.F
41!|| agaug3q ../engine/source/ale/agaug3q.F
42!|| agaug3t ../engine/source/ale/agaug3t.F
43!|| agauge ../engine/source/ale/agauge.F
44!|| agrad0 ../engine/source/ale/agrad0.F
45!|| agrad2 ../engine/source/ale/ale2d/agrad2.F
46!|| agrad3 ../engine/source/ale/ale3d/agrad3.F
47!|| akturb ../engine/source/ale/turbulence/akturb.F
48!|| ale51_antidiff2 ../engine/source/ale/ale51/ale51_antidiff2.F
49!|| ale51_antidiff3 ../engine/source/ale/ale51/ale51_antidiff3.F
50!|| ale51_finish ../engine/source/ale/ale51/ale51_finish.F
51!|| ale51_gradient_reconstruction ../engine/source/ale/alemuscl/ale51_gradient_reconstruction.F
52!|| ale51_gradient_reconstruction2 ../engine/source/ale/alemuscl/ale51_gradient_reconstruction2.F
53!|| ale51_init ../engine/source/ale/ale51/ale51_init.F
54!|| ale51_spmd2 ../engine/source/ale/ale51/ale51_spmd2.F
55!|| ale51_spmd3 ../engine/source/ale/ale51/ale51_spmd3.F
56!|| ale51_upwind2 ../engine/source/ale/ale51/ale51_upwind2.F
57!|| ale51_upwind3 ../engine/source/ale/ale51/ale51_upwind3.F
58!|| aleconv3 ../engine/source/ale/porous/aleconv.F
59!|| aleconve ../engine/source/ale/porous/aleconv.F
60!|| aleflow ../engine/source/ale/porous/aleflow.F
61!|| aleflux ../engine/source/ale/porous/aleflux.F
62!|| alefvm_aflux3 ../engine/source/ale/alefvm/alefvm_aflux3.F
63!|| alefvm_eflux3 ../engine/source/ale/alefvm/alefvm_eflux3.F
64!|| alefvm_main ../engine/source/ale/alefvm/alefvm_main.F
65!|| alefvm_sfint3 ../engine/source/ale/alefvm/alefvm_sfint3.F
66!|| alefvm_tfext ../engine/source/ale/alefvm/alefvm_tfext.F
67!|| alelec ../starter/source/ale/alelec.F
68!|| alemain ../engine/source/ale/alemain.F
69!|| alemuscl_upwind ../engine/source/ale/alemuscl/alemuscl_upwind.F
70!|| alemuscl_upwind2 ../engine/source/ale/alemuscl/alemuscl_upwind2.f
71!|| aleso2 ../starter/source/ale/ale2d/aleso2.F
72!|| aleso2t ../starter/source/ale/ale2d/aleso2t.F
73!|| aleso3 ../starter/source/ale/ale3d/aleso3.F
74!|| alesop ../starter/source/ale/alesop.F
75!|| alethe ../engine/source/ale/alethe.F
76!|| alew ../engine/source/ale/grid/alew.F
77!|| alew1 ../engine/source/ale/grid/alew1.F
78!|| alew5 ../engine/source/ale/grid/alew5.f
79!|| alew6 ../engine/source/ale/grid/alew6.F
80!|| alewdx ../engine/source/ale/grid/alewdx.F
81!|| amulf2 ../engine/source/ale/bimat/amulf2.F
82!|| arezo2 ../engine/source/ale/ale2d/arezo2.F
83!|| arezo3 ../engine/source/ale/ale3d/arezo3.F
84!|| arezon ../engine/source/ale/arezon.F
85!|| atherm ../engine/source/ale/atherm.F
86!|| bconv2 ../engine/source/ale/ale2d/bconv2.F
87!|| bcs_wall_trigger ../engine/source/boundary_conditions/bcs_wall_trigger.f90
88!|| bforc2 ../engine/source/ale/bimat/bforc2.F
89!|| binit2 ../starter/source/ale/bimat/binit2.F
90!|| brezo2 ../engine/source/ale/ale2d/brezo2.F
91!|| brezo2_sig ../engine/source/ale/ale2d/brezo2.F
92!|| build_connectivity ../engine/source/multifluid/connectivity.F
93!|| c_idglob ../starter/source/restart/ddsplit/c_idglob.F
94!|| c_ixfloc ../starter/source/restart/ddsplit/c_ixfloc.F
95!|| c_spmd_ne_connect ../starter/source/ale/spmd_ne_connect.F
96!|| c_vois ../starter/source/restart/ddsplit/c_vois.F
97!|| ddsplit ../starter/source/restart/ddsplit/ddsplit.F
98!|| dfunc0 ../engine/source/output/anim/generate/dfunc0.F
99!|| dfuncc ../engine/source/output/anim/generate/dfuncc.F
100!|| dfuncs ../engine/source/output/anim/generate/dfunc6.F
101!|| ede112 ../engine/source/ale/euler2d/ede112.F
102!|| eflux2 ../engine/source/ale/euler2d/eflux2.F
103!|| eflux3 ../engine/source/ale/euler3d/eflux3.F
104!|| egrad2 ../engine/source/ale/euler2d/egrad2.F
105!|| egrad3 ../engine/source/ale/euler3d/egrad3.F
106!|| eig ../engine/stub/eig.F
107!|| eig1 ../engine/stub/eig1.F
108!|| eigcond ../engine/stub/eigcond.F
109!|| eigp ../engine/stub/eigp.F
110!|| eikonal_compute_adjacent ../starter/source/initial_conditions/detonation/eikonal_compute_adjacent.F90
111!|| eikonal_fast_marching_method ../starter/source/initial_conditions/detonation/eikonal_fast_marching_method.F90
112!|| eikonal_init_start_list_2d ../starter/source/initial_conditions/detonation/eikonal_init_start_list_2d.F90
113!|| eikonal_solver ../starter/source/initial_conditions/detonation/eikonal_solver.F90
114!|| eporin3 ../starter/source/ale/ale3d/eporin3.F
115!|| findele ../starter/source/boundary_conditions/ebcs/findele.F
116!|| forint ../engine/source/elements/forint.F
117!|| funct_python_update_elements ../engine/source/tools/curve/funct_python_update_elements.F90
118!|| genani ../engine/source/output/anim/generate/genani.F
119!|| genh3d ../engine/source/output/h3d/h3d_results/genh3d.F
120!|| gradient_reconstruction ../engine/source/ale/alemuscl/gradient_reconstruction.F
121!|| gradient_reconstruction2 ../engine/source/ale/alemuscl/gradient_reconstruction2.F
122!|| h3d_nodal_scalar ../engine/source/output/h3d/h3d_results/h3d_nodal_scalar.F
123!|| h3d_quad_scalar ../engine/source/output/h3d/h3d_results/h3d_quad_scalar.f
124!|| h3d_quad_scalar_1 ../engine/source/output/h3d/h3d_results/h3d_quad_scalar_1.F90
125!|| h3d_shell_scalar ../engine/source/output/h3d/h3d_results/h3d_shell_scalar.F
126!|| h3d_shell_scalar_1 ../engine/source/output/h3d/h3d_results/h3d_shell_scalar_1.F
127!|| h3d_solid_scalar ../engine/source/output/h3d/h3d_results/h3d_solid_scalar.F
128!|| h3d_solid_scalar_1 ../engine/source/output/h3d/h3d_results/h3d_solid_scalar_1.F
129!|| i12chk3 ../starter/source/interfaces/inter3d1/i12chk3.F
130!|| i18dst3 ../engine/source/interfaces/int18/i18dst3.f
131!|| i18main_kine_1 ../engine/source/interfaces/int18/i18main_kine.F
132!|| i18main_kine_i ../engine/source/interfaces/int18/i18main_kine.F
133!|| i22buce ../engine/source/interfaces/intsort/i22buce.F
134!|| i22main_tri ../engine/source/interfaces/intsort/i22main_tri.F
135!|| i7mainf ../engine/source/interfaces/int07/i7mainf.F
136!|| ig3dinit3 ../starter/source/elements/ige3d/ig3dinit3.F
137!|| ig3duforc3 ../engine/source/elements/ige3d/ig3duforc3.F
138!|| imp_buck ../engine/source/implicit/imp_buck.F
139!|| iniebcs ../starter/source/boundary_conditions/ebcs/iniebcs.F
140!|| inigrav_load ../starter/source/initial_conditions/inigrav/inigrav_load.F
141!|| inigrav_m51 ../starter/source/initial_conditions/inigrav/inigrav_m51.f
142!|| inint3 ../starter/source/interfaces/inter3d1/inint3.F
143!|| inintr ../starter/source/interfaces/interf1/inintr.F
144!|| init_bcs_wall ../starter/source/boundary_conditions/init_bcs_wall.F90
145!|| init_diffusion ../engine/share/modules/diffusion_mod.F
146!|| initia ../starter/source/elements/initia/initia.F
147!|| intfop2 ../engine/source/interfaces/interf/intfop2.F
148!|| inttri ../engine/source/interfaces/intsort/inttri.F
149!|| lectur ../engine/source/input/lectur.F
150!|| m11law ../engine/source/materials/mat/mat011/m11law.F
151!|| m11vs2 ../engine/source/materials/mat/mat011/m11vs2.F
152!|| m11vs3 ../engine/source/materials/mat/mat011/m11vs3.f
153!|| m51init ../starter/source/materials/mat/mat051/m51init.F
154!|| m51vois2 ../engine/source/materials/mat/mat051/m51vois2.F
155!|| m51vois3 ../engine/source/materials/mat/mat051/m51vois3.F
156!|| mat11check ../starter/source/materials/mat/mat011/mat11check.F
157!|| matini ../starter/source/materials/mat_share/matini.F
158!|| mmain ../engine/source/materials/mat_share/mmain.F90
159!|| mulaw ../engine/source/materials/mat_share/mulaw.f90
160!|| multi_connectivity ../starter/source/multifluid/multi_connectivity.F
161!|| multi_fluxes_computation ../engine/source/multifluid/multi_fluxes_computation.F
162!|| multi_muscl_fluxes_computation ../engine/source/multifluid/multi_muscl_fluxes_computation.F
163!|| multi_muscl_gradients ../engine/source/multifluid/multi_muscl_gradients.F
164!|| multi_timeevolution ../engine/source/multifluid/multi_timeevolution.F
165!|| multi_unplug_neighbors ../starter/source/multifluid/multi_unplug_neighbors.F
166!|| multifluid_init2 ../starter/source/multifluid/multifluid_init2.F
167!|| multifluid_init2t ../starter/source/multifluid/multifluid_init2t.F
168!|| multifluid_init3 ../starter/source/multifluid/multifluid_init3.F
169!|| multifluid_init3t ../starter/source/multifluid/multifluid_init3t.F
170!|| nodal_schlieren ../engine/source/output/anim/generate/nodal_schlieren.F
171!|| nrf51ini ../starter/source/materials/mat/mat051/nrf51ini.F
172!|| ns_fvm_diffusion ../engine/source/multifluid/ns_fvm_diffusion.f
173!|| output_schlieren ../engine/source/output/anim/generate/output_schlieren.F
174!|| q4forc2 ../engine/source/elements/solid_2d/quad4/q4forc2.f
175!|| q4init2 ../starter/source/elements/solid_2d/quad4/q4init2.F
176!|| qforc2 ../engine/source/elements/solid_2d/quad/qforc2.F
177!|| qinit2 ../starter/source/elements/solid_2d/quad/qinit2.F
178!|| radioss2 ../engine/source/engine/radioss2.F
179!|| rdresb ../engine/source/output/restart/rdresb.F
180!|| resol ../engine/source/engine/resol.F
181!|| resol_head ../engine/source/engine/resol_head.F
182!|| restalloc ../engine/source/output/restart/arralloc.F
183!|| s10forc3 ../engine/source/elements/solid/solide10/s10forc3.F
184!|| s10init3 ../starter/source/elements/solid/solide10/s10init3.F
185!|| s11defo3 ../engine/source/elements/solid/solide/s11defo3.f
186!|| s11fx3 ../engine/source/elements/solid/solide/s11fx3.F
187!|| s16forc3 ../engine/source/elements/thickshell/solide16/s16forc3.F
188!|| s16init3 ../starter/source/elements/thickshell/solide16/s16init3.F
189!|| s20forc3 ../engine/source/elements/solid/solide20/s20forc3.F
190!|| s20init3 ../starter/source/elements/solid/solide20/s20init3.F
191!|| s4forc3 ../engine/source/elements/solid/solide4/s4forc3.F
192!|| s4init3 ../starter/source/elements/solid/solide4/s4init3.F
193!|| s6cforc3 ../engine/source/elements/thickshell/solide6c/s6cforc3.F
194!|| s6cinit3 ../starter/source/elements/thickshell/solide6c/s6cinit3.F
195!|| s6zforc3 ../engine/source/elements/solid/solide6z/s6zforc3.F90
196!|| s6zinit3 ../starter/source/elements/solid/solide6z/s6zinit3.F90
197!|| s8cforc3 ../engine/source/elements/thickshell/solide8c/s8cforc3.f
198!|| s8cinit3 ../starter/source/elements/thickshell/solide8c/s8cinit3.F
199!|| s8eforc3 ../engine/source/elements/solid/solide8e/s8eforc3.F
200!|| s8forc3 ../engine/source/elements/solid/solide8/s8forc3.F
201!|| s8sforc3 ../engine/source/elements/solid/solide8s/s8sforc3.F
202!|| s8zforc3 ../engine/source/elements/solid/solide8z/s8zforc3.F
203!|| s8zinit3 ../starter/source/elements/solid/solide8z/s8zinit3.F
204!|| scforc3 ../engine/source/elements/thickshell/solidec/scforc3.F
205!|| scinit3 ../starter/source/elements/thickshell/solidec/scinit3.F
206!|| seggetv ../engine/source/interfaces/interf/seggetv.F
207!|| sforc3 ../engine/source/elements/solid/solide/sforc3.F
208!|| sigeps51 ../engine/source/materials/mat/mat051/sigeps51.F90
209!|| sigeps51_boundary_material ../engine/source/materials/mat/mat051/sigeps51_boundary_material.F90
210!|| sinit22_fvm ../engine/source/interfaces/int22/sinit22_fvm.F
211!|| sinit3 ../starter/source/elements/solid/solide/sinit3.F
212!|| sortie_main ../engine/source/output/sortie_main.F
213!|| spinit3 ../starter/source/elements/sph/spinit3.f
214!|| split_cfd_solide ../starter/source/spmd/split_cfd_solide.f
215!|| spmd_exch_inter_18 ../engine/source/mpi/interfaces/spmd_exch_inter_18.F
216!|| spmd_ne_connect ../starter/source/ale/spmd_ne_connect.F
217!|| spstres ../engine/source/elements/sph/spstres.F
218!|| suinit3 ../starter/source/elements/elbuf_init/suinit3.F
219!|| szforc3 ../engine/source/elements/solid/solidez/szforc3.F
220!|| w_front ../starter/source/restart/ddsplit/w_front.F
221!|| w_ing2loc ../starter/source/restart/ddsplit/w_ing2loc.F
222!|| wrcomip ../starter/source/restart/ddsplit/wrcommp.F
223!|| wrrestp ../engine/source/output/restart/wrrestp.F
224!||====================================================================
226
227 IMPLICIT NONE
228#include "my_real.inc"
229
230! ************ !
231! Connectivity
232! ************ !
233 TYPE, PUBLIC :: t_connectivity
234 INTEGER, DIMENSION(:), ALLOCATABLE :: iad_connect
235 INTEGER, DIMENSION(:), ALLOCATABLE :: connected
236 INTEGER, DIMENSION(:), ALLOCATABLE :: type
237 END TYPE t_connectivity
238
239! Extended type : + iface
240 TYPE, PUBLIC, EXTENDS(t_connectivity) :: t_connectivity_ext1
241 INTEGER, DIMENSION(:), ALLOCATABLE :: iface2
242 END TYPEt_connectivity_ext1
243
244
245! ****************** !
246! Extended local ids !
247! ****************** !
248 TYPE :: t_idglob
249 INTEGER, DIMENSION(:), ALLOCATABLE :: id
250 INTEGER, DIMENSION(:), ALLOCATABLE :: uid
251 END TYPE t_idglob
252
253! **************** !
254! ALE connectivity !
255! **************** !
256 TYPE, PUBLIC :: t_ale_connectivity
257! node-node, node-element, element-element
258 TYPE(t_connectivity) :: nn_connect, ne_connect
259 TYPE(t_connectivity_ext1) :: ee_connect
260 LOGICAL :: has_nn_connect = .false.
261 LOGICAL :: has_ne_connect = .false.
262 LOGICAL :: has_ee_connect = .false.
263 LOGICAL :: has_idglob = .false.
264 LOGICAL :: nale_already_computed = .false.
265 INTEGER, DIMENSION(:), ALLOCATABLE :: nale
266 TYPE(t_idglob) :: idglob
267 CONTAINS
268 PROCEDURE, pass :: ale_connectivity_init
269 PROCEDURE, pass :: ale_compute_connectivity
272 END TYPE t_ale_connectivity
273
274! *********** !
275! Subroutines !
276! *********** !
277 CONTAINS
278
279!||====================================================================
280!|| ale_connectivity_init ../common_source/modules/ale/ale_connectivity_mod.F
281!||--- uses -----------------------------------------------------
282!|| ale_mod ../common_source/modules/ale/ale_mod.F
283!||====================================================================
284 SUBROUTINE ale_connectivity_init(THIS)
285 USE ale_mod
286 IMPLICIT NONE
287 CLASS(t_ale_connectivity), INTENT(INOUT) :: THIS
288#include "com01_c.inc"
289#include "inter18.inc"
290 LOGICAL RESULT
291 result = .false.
292 IF(iale > 0 .AND. ale%GRID%NWALE == 6)result=.true. !/ALE/GRID/VOLUME DEFINED
293 IF(inter18_autoparam == 1)result=.true. !/INTER/TYPE18 WITH FLAG IAUTO SET TO 1
294 IF(inter18_is_variable_gap_defined)result=.true. !/INTER/TYPE18 WITH FLAG IAUTO SET TO 1
295 this%HAS_NE_CONNECT = result
296 result = .false.
297 IF(iale > 0 .AND. ale%GRID%NWALE < 2)result=.true. !/ALE/GRID/DONEA, DISP, SPRING
298 IF(iale > 0 .AND. ale%GRID%NWALE == 7)result=.true. !/ALE/GRID/FLOW-TRACKING
299 IF(iale > 0 .AND. ale%GRID%NWALE == 5)result=.true. !/ALE/GRID/LAPLACIAN
300 this%HAS_NN_CONNECT = result
301 END SUBROUTINE ale_connectivity_init
302
303!||====================================================================
304!|| ale_compute_connectivity ../common_source/modules/ale/ale_connectivity_mod.F
305!||--- calls -----------------------------------------------------
306!|| quicksort_i ../common_source/tools/sort/quicksort.F
307!|| quicksort_i2 ../common_source/tools/sort/quicksort.F
308!||====================================================================
309 SUBROUTINE ale_compute_connectivity(THIS, NUMNOD, NUMELQ, NUMELTG, NUMELS,
310 . NIXQ, NIXTG, NIXS,
311 . IXQ, IXTG, IXS)
312 IMPLICIT NONE
313C-----------------------------------------------
314C D e s c r i p t i o n
315C-----------------------------------------------
316! Comptes Node to element connectivities, !
317! and Node to Node connectivities for ALE !
318! grid velocity formulations !
319! --------------------------------------- !
320C-----------------------------------------------
321C D u m m y A r g u m e n t s
322C-----------------------------------------------
323 CLASS(t_ale_connectivity), INTENT(INOUT) :: THIS
324 INTEGER, INTENT(IN) :: NUMNOD, NUMELQ, NUMELTG, NUMELS, NIXQ, NIXTG, NIXS
325 INTEGER, DIMENSION(NIXQ, NUMELQ), INTENT(IN) :: IXQ
326 INTEGER, DIMENSION(NIXTG, NUMELTG), INTENT(IN) :: IXTG
327 INTEGER, DIMENSION(NIXS, NUMELS), INTENT(IN) :: IXS
328C-----------------------------------------------
329C L o c a l V a r i a b l e s
330C-----------------------------------------------
331 INTEGER :: II, JJ,KK, NODE_ID, NODE1, NODE2
332 LOGICAL :: DUPLICATE
333 INTEGER, DIMENSION(:), ALLOCATABLE :: ADSKY
334 INTEGER :: IAD1, IAD2, ITMP
335 INTEGER :: MAX_EDGE, NB_EDGE, NB_EDGE_NEW, IEDGE, CUR_POS
336 INTEGER, DIMENSION(:, :), ALLOCATABLE :: EDGES, EDGES_TMP
337 INTEGER, DIMENSION(:), ALLOCATABLE :: IDX
338 INTEGER, DIMENSION(2, 3) :: TRI_EDGE
339 INTEGER, DIMENSION(2, 4) :: QUAD_EDGE
340 INTEGER, DIMENSION(2, 12) :: HEXA_EDGE
341 INTEGER, DIMENSION(2, 6) :: TETRA_EDGE
342 INTEGER, DIMENSION(:), ALLOCATABLE :: NN_NB_CONNECT, NE_NB_CONNECT
343C-----------------------------------------------
344C S o u r c e L i n e s
345C-----------------------------------------------
346! In case we go through this routine a second time
347! node-node connectivity
348 IF (ALLOCATED(this%NN_CONNECT%IAD_CONNECT)) DEALLOCATE(this%NN_CONNECT%IAD_CONNECT)
349 IF (ALLOCATED(this%NN_CONNECT%CONNECTED)) DEALLOCATE(this%NN_CONNECT%CONNECTED)
350! node-element connectivity
351 IF (ALLOCATED(this%NE_CONNECT%IAD_CONNECT)) DEALLOCATE(this%NE_CONNECT%IAD_CONNECT)
352 IF (ALLOCATED(this%NE_CONNECT%CONNECTED)) DEALLOCATE(this%NE_CONNECT%CONNECTED)
353 IF (ALLOCATED(this%NE_CONNECT%TYPE)) DEALLOCATE(this%NE_CONNECT%TYPE)
354
355 ALLOCATE(nn_nb_connect(numnod))
356 nn_nb_connect(1:numnod) = 0
357 ALLOCATE(ne_nb_connect(numnod))
358 ne_nb_connect(1:numnod) = 0
359 max_edge = 12 * numels + 3 * numeltg + 4 * numelq
360 ALLOCATE(edges(2, max_edge))
361 nb_edge = 0
362 node_id = 0
363
364 tri_edge(1, 1) = 1
365 tri_edge(2, 1) = 2
366 tri_edge(1, 2) = 2
367 tri_edge(2, 2) = 3
368 tri_edge(1, 3) = 3
369 tri_edge(2, 3) = 1
370
371 quad_edge(1, 1) = 1
372 quad_edge(2, 1) = 2
373 quad_edge(1, 2) = 2
374 quad_edge(2, 2) = 3
375 quad_edge(1, 3) = 3
376 quad_edge(2, 3) = 4
377 quad_edge(1, 4) = 4
378 quad_edge(2, 4) = 1
379
380 hexa_edge(1, 1) = 1
381 hexa_edge(2, 1) = 2
382 hexa_edge(1, 2) = 2
383 hexa_edge(2, 2) = 3
384 hexa_edge(1, 3) = 3
385 hexa_edge(2, 3) = 4
386 hexa_edge(1, 4) = 4
387 hexa_edge(2, 4) = 1
388 hexa_edge(1, 5) = 5
389 hexa_edge(2, 5) = 6
390 hexa_edge(1, 6) = 6
391 hexa_edge(2, 6) = 7
392 hexa_edge(1, 7) = 7
393 hexa_edge(2, 7) = 8
394 hexa_edge(1, 8) = 8
395 hexa_edge(2, 8) = 5
396 hexa_edge(1, 9) = 1
397 hexa_edge(2, 9) = 5
398 hexa_edge(1, 10) = 2
399 hexa_edge(2, 10) = 6
400 hexa_edge(1, 11) = 3
401 hexa_edge(2, 11) = 7
402 hexa_edge(1, 12) = 4
403 hexa_edge(2, 12) = 8
404
405 tetra_edge(1, 1) = 1
406 tetra_edge(2, 1) = 3
407 tetra_edge(1, 2) = 3
408 tetra_edge(2, 2) = 6
409 tetra_edge(1, 3) = 6
410 tetra_edge(2, 3) = 1
411 tetra_edge(1, 4) = 1
412 tetra_edge(2, 4) = 5
413 tetra_edge(1, 5) = 3
414 tetra_edge(2, 5) = 5
415 tetra_edge(1, 6) = 6
416 tetra_edge(2, 6) = 5
417
418! 2D elements
419! /TRIA
420 DO ii = 1, numeltg
421 DO jj = 1, 3
422 node_id = ixtg(1 + jj, ii)
423 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
424 ENDDO
425 !edges
426 DO iedge = 1, 3
427 node1 = ixtg(1 + tri_edge(1, iedge), ii)
428 node2 = ixtg(1 + tri_edge(2, iedge), ii)
429 nb_edge = nb_edge + 1
430 edges(1, nb_edge) = node1
431 edges(2, nb_edge) = node2
432 ENDDO
433 ENDDO
434! /QUAD
435 DO ii = 1, numelq
436 DO jj = 1, 4
437 node_id = ixq(1 + jj, ii)
438 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
439 ENDDO
440 !edges
441 DO iedge = 1, 4
442 node1 = ixq(1 + quad_edge(1, iedge), ii)
443 node2 = ixq(1 + quad_edge(2, iedge), ii)
444 nb_edge = nb_edge + 1
445 edges(1, nb_edge) = node1
446 edges(2, nb_edge) = node2
447 ENDDO
448 ENDDO
449! 3D elements
450 DO ii = 1, numels
451 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
452 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
453! TETRA
454 node_id = ixs(2, ii)
455 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
456 node_id = ixs(4, ii)
457 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
458 node_id = ixs(7, ii)
459 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
460 node_id = ixs(6, ii)
461 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
462 !edges
463 DO iedge = 1, 6
464 node1 = ixs(1 + tetra_edge(1, iedge), ii)
465 node2 = ixs(1 + tetra_edge(2, iedge), ii)
466 nb_edge = nb_edge + 1
467 edges(1, nb_edge) = node1
468 edges(2, nb_edge) = node2
469 ENDDO
470 ELSE
471! BRICKS
472 DO jj = 1, 8
473 node_id = ixs(1 + jj, ii)
474 duplicate = .false.
475 DO kk = 1, jj-1
476 IF(node_id == ixs(1 + kk, ii)) duplicate = .true.
477 ENDDO
478 IF(.NOT. duplicate) ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
479 ENDDO
480! edges
481 DO iedge = 1, 12
482 node1 = ixs(1 + hexa_edge(1, iedge), ii)
483 node2 = ixs(1 + hexa_edge(2, iedge), ii)
484 IF(node1 /= node2)THEN
485 nb_edge = nb_edge + 1
486 edges(1, nb_edge) = node1
487 edges(2, nb_edge) = node2
488 ENDIF
489 ENDDO
490 ENDIF
491 ENDDO
492
493 DO ii = 1, nb_edge
494 IF (edges(1, ii) > edges(2, ii)) THEN
495 itmp = edges(1, ii)
496 edges(1, ii) = edges(2, ii)
497 edges(2, ii) = itmp
498 ENDIF
499 ENDDO
500
501
502! Indirection tab
503 ALLOCATE(this%NE_CONNECT%IAD_CONNECT(numnod + 1))
504 this%NE_CONNECT%IAD_CONNECT(1) = 1
505 DO ii = 2, numnod + 1
506 this%NE_CONNECT%IAD_CONNECT(ii) = this%NE_CONNECT%IAD_CONNECT(ii - 1) + ne_nb_connect(ii - 1)
507 ENDDO
508
509 ALLOCATE(adsky(numnod))
510 DO ii = 1, numnod
511 adsky(ii) = this%NE_CONNECT%IAD_CONNECT(ii)
512 ENDDO
513! Connectivities
514 ALLOCATE(this%NE_CONNECT%CONNECTED(this%NE_CONNECT%IAD_CONNECT(numnod + 1)))
515 this%NE_CONNECT%CONNECTED(:) = 0
516 ALLOCATE(this%NE_CONNECT%TYPE(this%NE_CONNECT%IAD_CONNECT(numnod + 1)))
517 this%NE_CONNECT%TYPE(:) = 0
518
519! 2D elements
520! /TRIA
521 DO ii = 1, numeltg
522 DO jj = 1, 3
523 node_id = ixtg(1 + jj, ii)
524 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
525 this%NE_CONNECT%TYPE(adsky(node_id)) = 3
526 adsky(node_id) = adsky(node_id) + 1
527 ENDDO
528 ENDDO
529! /QUAD
530 DO ii = 1, numelq
531 DO jj = 1, 4
532 node_id = ixq(1 + jj, ii)
533 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
534 this%NE_CONNECT%TYPE(adsky(node_id)) = 2
535 adsky(node_id) = adsky(node_id) + 1
536 ENDDO
537 ENDDO
538
539! 3D elements
540 DO ii = 1, numels
541 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
542 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
543! TETRA
544 node_id = ixs(2, ii)
545 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
546 this%NE_CONNECT%TYPE(adsky(node_id)) = 1
547 adsky(node_id) = adsky(node_id) + 1
548 node_id = ixs(4, ii)
549 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
550 this%NE_CONNECT%TYPE(adsky(node_id)) = 1
551 adsky(node_id) = adsky(node_id) + 1
552 node_id = ixs(7, ii)
553 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
554 this%NE_CONNECT%TYPE(adsky(node_id)) = 1
555 adsky(node_id) = adsky(node_id) + 1
556 node_id = ixs(6, ii)
557 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
558 this%NE_CONNECT%TYPE(adsky(node_id)) = 1
559 adsky(node_id) = adsky(node_id) + 1
560 ELSE
561! BRICKS
562 DO jj = 1, 8
563 node_id = ixs(1 + jj, ii)
564 duplicate = .false. !degenerated solids: duplicated node IDS
565 DO kk = 1, jj-1
566 IF(node_id == ixs(1 + kk, ii)) duplicate = .true.
567 ENDDO
568 IF(.NOT. duplicate) THEN
569 this%NE_CONNECT%CONNECTED(adsky(node_id)) = ii
570 this%NE_CONNECT%TYPE(adsky(node_id)) = 1
571 adsky(node_id) = adsky(node_id) + 1
572 ENDIF
573 ENDDO
574 ENDIF
575 ENDDO
576
577 ALLOCATE(idx(nb_edge), edges_tmp(2, nb_edge))
578 DO ii = 1, nb_edge
579 idx(ii) = ii
580 edges_tmp(1, ii) = edges(1, ii)
581 edges_tmp(2, ii) = edges(2, ii)
582 ENDDO
583 CALL quicksort_i2(edges_tmp(1, :), idx, 1, nb_edge)! hidden copies
584 DO ii = 1, nb_edge
585 edges_tmp(1, ii) = edges(1, idx(ii))
586 edges_tmp(2, ii) = edges(2, idx(ii))
587 ENDDO
588
589 nb_edge_new = 0
590 ii = 1
591 DO WHILE (ii < nb_edge)
592 cur_pos = ii
593 iad1 = 1
594 DO WHILE (edges_tmp(1, ii + iad1) == edges_tmp(1, ii))
595 IF (ii + iad1 == nb_edge) THEN
596 EXIT
597 ENDIF
598 iad1 = iad1 + 1
599 ENDDO
600 IF (iad1 == 1) THEN
601 nb_edge_new = nb_edge_new + 1
602 edges(1, nb_edge_new) = edges_tmp(1, ii)
603 edges(2, nb_edge_new) = edges_tmp(2, ii)
604 ii = ii + 1
605 ELSE
606 CALL quicksort_i(edges_tmp(2, ii : ii + iad1 - 1), 1, iad1) !hidden copies
607 node1 = edges_tmp(1, ii)
608 node2 = edges_tmp(2, ii)
609 nb_edge_new = nb_edge_new + 1
610 edges(1, nb_edge_new) = node1
611 edges(2, nb_edge_new) = node2
612 DO iad2 = 0, iad1 - 1
613 IF (edges_tmp(2, ii + iad2) /= node2) THEN
614 nb_edge_new = nb_edge_new + 1
615 node2 = edges_tmp(2, ii + iad2)
616 edges(1, nb_edge_new) = node1
617 edges(2, nb_edge_new) = node2
618 ENDIF
619 ENDDO
620 ii = ii + iad1
621 ENDIF
622 ENDDO
623
624! node node connectivity
625 DO ii = 1, nb_edge_new
626 nn_nb_connect(edges(1, ii)) = nn_nb_connect(edges(1, ii)) + 1
627 nn_nb_connect(edges(2, ii)) = nn_nb_connect(edges(2, ii)) + 1
628 ENDDO
629 !NE_NB_CONNECT(NODE_ID) = NE_NB_CONNECT(NODE_ID) + 1
630! indirection tab
631 ALLOCATE(this%NN_CONNECT%IAD_CONNECT(numnod + 1))
632 this%NN_CONNECT%IAD_CONNECT(1) = 1
633 DO ii = 2, numnod + 1
634 this%NN_CONNECT%IAD_CONNECT(ii) = this%NN_CONNECT%IAD_CONNECT(ii - 1) + nn_nb_connect(ii - 1)
635 ENDDO
636
637 DO ii = 1, numnod
638 adsky(ii) = this%NN_CONNECT%IAD_CONNECT(ii)
639 ENDDO
640 ALLOCATE(this%NN_CONNECT%CONNECTED(this%NN_CONNECT%IAD_CONNECT(numnod + 1)))
641 this%NN_CONNECT%CONNECTED(:) = 0
642 DO ii = 1, nb_edge_new
643 node1 = edges(1, ii)
644 node2 = edges(2, ii)
645 this%NN_CONNECT%CONNECTED(adsky(node1)) = node2
646 this%NN_CONNECT%CONNECTED(adsky(node2)) = node1
647 adsky(node1) = adsky(node1) + 1
648 adsky(node2) = adsky(node2) + 1
649 ENDDO
650
651 DEALLOCATE(adsky, edges, idx, edges_tmp, nn_nb_connect, ne_nb_connect)
652 END SUBROUTINE ale_compute_connectivity
653
654!||====================================================================
655!|| ale_deallocate_connectivity ../common_source/modules/ale/ale_connectivity_mod.F
656!||====================================================================
658 IMPLICIT NONE
659 CLASS(t_ale_connectivity), INTENT(INOUT) :: THIS
660
661 IF (ALLOCATED(this%NE_CONNECT%CONNECTED)) DEALLOCATE(this%NE_CONNECT%CONNECTED)
662 IF (ALLOCATED(this%NE_CONNECT%IAD_CONNECT)) DEALLOCATE(this%NE_CONNECT%IAD_CONNECT)
663 IF (ALLOCATED(this%NN_CONNECT%CONNECTED)) DEALLOCATE(this%NN_CONNECT%CONNECTED)
664 IF (ALLOCATED(this%NN_CONNECT%IAD_CONNECT)) DEALLOCATE(this%NN_CONNECT%IAD_CONNECT)
665 IF (ALLOCATED(this%NALE)) DEALLOCATE(this%NALE)
666
667 END SUBROUTINE ale_deallocate_connectivity
668
669!||====================================================================
670!|| ale_compute_ee_connectivity ../common_source/modules/ale/ale_connectivity_mod.F
671!||--- calls -----------------------------------------------------
672!||====================================================================
673 SUBROUTINE ale_compute_ee_connectivity(THIS, PM, IGEO,
674 . NPROPGI,NUMGEO, NPROPM, NUMMAT, NUMNOD, NUMELQ, NUMELTG, NUMELS, N2D,
675 . IALE, IEULER, ITHERM, IALELAG, ISHADOW,
676 . NIXQ, NIXTG, NIXS,
677 . IXQ, IXTG, IXS)
678 IMPLICIT NONE
679C-----------------------------------------------
680C D e s c r i p t i o n
681C-----------------------------------------------
682! Computes element to element connectivities !
683! for ALE, and EULER computations !
684! --------------------------------------- !
685C-----------------------------------------------
686C D u m m y A r g u m e n t s
687C-----------------------------------------------
688 CLASS(t_ale_connectivity), INTENT(INOUT) :: THIS
689 INTEGER, INTENT(IN) :: NUMNOD, NUMELQ, NUMELTG, NUMELS, NPROPGI
690 INTEGER, INTENT(IN) :: NIXQ, NIXTG, NIXS, N2D, IALE, IEULER, ITHERM, IALELAG, NPROPM, NUMMAT,NUMGEO
691 MY_REAL, DIMENSION(NPROPM, NUMMAT), INTENT(IN) :: PM
692 INTEGER, DIMENSION(NIXQ, NUMELQ), INTENT(IN) :: IXQ
693 INTEGER, DIMENSION(NIXTG, NUMELTG), INTENT(IN) :: IXTG
694 INTEGER, DIMENSION(NIXS, NUMELS), INTENT(IN) :: IXS
695 INTEGER, DIMENSION(NPROPGI, NUMGEO), INTENT(IN) :: IGEO
696 LOGICAL,INTENT(IN) :: ISHADOW !< shadowing option for detonators (Eikonal equation solver)
697C-----------------------------------------------
698C L o c a l V a r i a b l e s
699C-----------------------------------------------
700 INTEGER :: II, JJ,KK, NODE_ID, INODE
701 LOGICAL :: DUPLICATE
702 INTEGER, DIMENSION(:), ALLOCATABLE :: ADSKY
703 INTEGER :: IAD1, ITMP, IAD
704 INTEGER, DIMENSION(:), ALLOCATABLE :: IAD_CONNECT, NE_NB_CONNECT, CONNECTED, TYPE, EE_NB_CONNECT,ITAG
705 INTEGER(8) :: VEC_PTR1
706 INTEGER :: JAL_FROM_MAT, JAL_FROM_PROP, JAL, JALT, MLW, IMID, TMP, COUNT, JTHE, JSHADOW
707 INTEGER, DIMENSION(4), TARGET :: TETRA_NODES
708 INTEGER, DIMENSION(6, 4), TARGET :: HEXA_FACE
709 INTEGER, DIMENSION(6, 3), TARGET :: TETRA_FACE
710 INTEGER, DIMENSION(4, 2), TARGET :: QUAD_FACE
711 INTEGER, DIMENSION(3, 2), TARGET :: TRI_FACE
712 INTEGER, DIMENSION(:, :), POINTER :: ELEM_FACE, ELEM_FACE2
713 INTEGER :: KFACE, KFACE2, NFACE, NFACE_NODE, NFACE2, NFACE_NODE2
714 INTEGER NN(4)
715 LOGICAL SKIP_FACE
716C-----------------------------------------------
717C B e g i n n i n g o f S u b r o u t i n e
718C-----------------------------------------------
719 IF (iale + ieuler + ialelag +itherm == 0 .AND. .NOT.ishadow) THEN
720 RETURN
721 ENDIF
722! List of nodes of interest for tetra
723 tetra_nodes(1) = 2
724 tetra_nodes(2) = 4
725 tetra_nodes(3) = 7
726 tetra_nodes(4) = 6
727! Faces for each element
728! hexa
729 hexa_face(1, 1) = 1
730 hexa_face(1, 2) = 2
731 hexa_face(1, 3) = 3
732 hexa_face(1, 4) = 4
733 hexa_face(2, 1) = 3
734 hexa_face(2, 2) = 4
735 hexa_face(2, 3) = 8
736 hexa_face(2, 4) = 7
737 hexa_face(3, 1) = 5
738 hexa_face(3, 2) = 6
739 hexa_face(3, 3) = 7
740 hexa_face(3, 4) = 8
741 hexa_face(4, 1) = 1
742 hexa_face(4, 2) = 2
743 hexa_face(4, 3) = 6
744 hexa_face(4, 4) = 5
745 hexa_face(5, 1) = 2
746 hexa_face(5, 2) = 3
747 hexa_face(5, 3) = 7
748 hexa_face(5, 4) = 6
749 hexa_face(6, 1) = 1
750 hexa_face(6, 2) = 4
751 hexa_face(6, 3) = 8
752 hexa_face(6, 4) = 5
753! tetra
754 tetra_face(1, 1) = -1
755 tetra_face(1, 2) = -1
756 tetra_face(1, 3) = -1
757 tetra_face(2, 1) = 5
758 tetra_face(2, 2) = 6
759 tetra_face(2, 3) = 3
760 tetra_face(3, 1) = -1
761 tetra_face(3, 2) = -1
762 tetra_face(3, 3) = -1
763 tetra_face(4, 1) = 5
764 tetra_face(4, 2) = 1
765 tetra_face(4, 3) = 6
766 tetra_face(5, 1) = 1
767 tetra_face(5, 2) = 3
768 tetra_face(5, 3) = 6
769 tetra_face(6, 1) = 5
770 tetra_face(6, 2) = 3
771 tetra_face(6, 3) = 1
772! quad
773 quad_face(1, 1) = 1
774 quad_face(1, 2) = 2
775 quad_face(2, 1) = 2
776 quad_face(2, 2) = 3
777 quad_face(3, 1) = 3
778 quad_face(3, 2) = 4
779 quad_face(4, 1) = 4
780 quad_face(4, 2) = 1
781! tria
782 tri_face(1, 1) = 1
783 tri_face(1, 2) = 2
784 tri_face(2, 1) = 2
785 tri_face(2, 2) = 3
786 tri_face(3, 1) = 3
787 tri_face(3, 2) = 1
788 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
789! Marking ALE nodes
790 IF (ALLOCATED(this%NALE)) DEALLOCATE(this%NALE)
791 ALLOCATE(this%NALE(numnod))
792 this%NALE(1:numnod) = 0
793 ENDIF
794! element-element connectivity
795 IF (ALLOCATED(this%EE_CONNECT%IAD_CONNECT)) DEALLOCATE(this%EE_CONNECT%IAD_CONNECT)
796 IF (ALLOCATED(this%EE_CONNECT%CONNECTED)) DEALLOCATE(this%EE_CONNECT%CONNECTED)
797 IF (ALLOCATED(this%EE_CONNECT%TYPE)) DEALLOCATE(this%EE_CONNECT%TYPE)
798 IF (ALLOCATED(this%EE_CONNECT%IFACE2)) DEALLOCATE(this%EE_CONNECT%IFACE2)
799
800! Node element connectivity
801 ALLOCATE(ne_nb_connect(numnod))
802 ne_nb_connect(1:numnod) = 0
803
804! 2D elements
805! /TRIA
806 IF(n2d > 0)THEN
807 DO ii = 1, numeltg
808! ale : jal = 1, euler : jal = 2
809 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
810 jal_from_prop = igeo(62, iabs(ixtg(5, ii)))
811 jal = max(jal_from_mat, jal_from_prop)
812 jthe = nint(pm(71, iabs(ixtg(1, ii))))
813 jshadow = nint(pm(96, iabs(ixtg(1, ii))))
814 jalt = jal + jthe + jshadow
815 imid = iabs(ixtg(1, ii))
816 IF (jalt == 0) cycle
817 mlw = nint(pm(19,imid))
818 DO jj = 1, 3
819 node_id = ixtg(1 + jj, ii)
820 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
821 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
822 this%NALE(node_id) = max(this%NALE(node_id), jal)
823 IF (mlw == 151) THEN
824 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
825 ENDIF
826 ENDIF
827 ENDDO
828 ENDDO
829 ENDIF
830
831! /QUAD
832 DO ii = 1, numelq
833! ale : jal = 1, euler : jal = 2
834 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
835 jal_from_prop = igeo(62,iabs(ixq(6, ii)))
836 jal = max(jal_from_mat, jal_from_prop)
837 jthe = nint(pm(71, iabs(ixq(1, ii))))
838 jshadow = nint(pm(96, iabs(ixq(1, ii))))
839 jalt = jal + jthe + jshadow
840 imid = iabs(ixq(1, ii))
841 IF (jalt == 0) cycle
842 mlw = nint(pm(19,imid))
843 DO jj = 1, 4
844 node_id = ixq(1 + jj, ii)
845 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
846 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
847 this%NALE(node_id) = max(this%NALE(node_id), jal)
848 IF (mlw == 151) THEN
849 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
850 ENDIF
851 ENDIF
852 ENDDO
853 ENDDO
854
855! 3D elements
856 DO ii = 1, numels
857 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
858 jal_from_prop = igeo(62, iabs(ixs(10, ii)))
859 jal = max(jal_from_mat, jal_from_prop)
860 jthe = nint(pm(71, iabs(ixs(1, ii))))
861 jshadow = nint(pm(96, iabs(ixs(1, ii))))
862 jalt = jal + jthe + jshadow
863 imid = iabs(ixs(1, ii))
864 IF (jalt == 0) cycle
865 mlw = nint(pm(19,imid))
866 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
867 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
868! tetra
869 DO jj = 1, 4
870 node_id = ixs(tetra_nodes(jj), ii)
871 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
872 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
873 this%NALE(node_id) = max(this%NALE(node_id), jal)
874 IF (mlw == 151) THEN
875 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
876 ENDIF
877 ENDIF
878 ENDDO
879 ELSE
880! bricks
881 DO jj = 1, 8
882 node_id = ixs(1 + jj, ii)
883 duplicate = .false.
884 DO kk = 1,jj - 1
885 IF(node_id == ixs(1 + kk, ii)) duplicate = .true.
886 ENDDO
887 IF( .NOT. duplicate) THEN
888 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
889 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
890 this%NALE(node_id) = max(this%NALE(node_id), jal)
891 IF (mlw == 151) THEN
892 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
893 ENDIF
894 ENDIF
895 ENDIF
896 ENDDO
897 ENDIF
898 ENDDO
899
900 this%NALE_ALREADY_COMPUTED = .true.
901
902! Indirection tab
903 ALLOCATE(iad_connect(numnod + 1))
904 iad_connect(1) = 1
905 DO ii = 2, numnod + 1
906 iad_connect(ii) = iad_connect(ii - 1) + ne_nb_connect(ii - 1)
907 ENDDO
908 ALLOCATE(adsky(numnod))
909 DO ii = 1, numnod
910 adsky(ii) = iad_connect(ii)
911 ENDDO
912
913 ALLOCATE(connected(iad_connect(numnod + 1)))
914 connected(:) = 0
915 ALLOCATE(TYPE(iad_connect(numnod + 1)))
916 TYPE(:) = 0
917
918! 2D elements
919! /TRIA
920 IF(n2d > 0)THEN
921 DO ii = 1, numeltg
922 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
923 jal_from_prop = igeo(62,iabs(ixtg(5, ii)))
924 jal = max(jal_from_mat, jal_from_prop)
925 jalt = jal + nint(pm(71, iabs(ixtg(1, ii))) + pm(96, iabs(ixtg(1, ii))))
926 imid = iabs(ixtg(1, ii))
927 IF (jalt == 0) cycle
928 DO jj = 1, 3
929 node_id = ixtg(1 + jj, ii)
930 connected(adsky(node_id)) = ii
931 TYPE(adsky(node_id)) = 3
932 adsky(node_id) = adsky(node_id) + 1
933 ENDDO
934 ENDDO
935 ENDIF
936
937! /QUAD
938 DO ii = 1, numelq
939 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
940 jal_from_prop = igeo(62, iabs(ixq(6, ii)) )
941 jal = max(jal_from_mat, jal_from_prop)
942 jalt = jal + nint(pm(71, iabs(ixq(1, ii))) + pm(96, iabs(ixq(1, ii))))
943 imid = iabs(ixq(1, ii))
944 IF (jalt == 0) cycle
945 DO jj = 1, 4
946 node_id = ixq(1 + jj, ii)
947 connected(adsky(node_id)) = ii
948 TYPE(adsky(node_id)) = 2
949 adsky(node_id) = adsky(node_id) + 1
950 ENDDO
951 ENDDO
952
953! 3D elements
954 DO ii = 1, numels
955 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
956 jal_from_prop = igeo(62, iabs(ixs(10, ii)) )
957 jal = max(jal_from_mat, jal_from_prop)
958 jalt = jal + nint(pm(71, iabs(ixs(1, ii))) + pm(96, iabs(ixs(1, ii))))
959 imid = iabs(ixs(1, ii))
960 IF (jalt == 0) cycle
961 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
962 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
963! tetra
964 node_id = ixs(2, ii)
965 connected(adsky(node_id)) = ii
966 TYPE(adsky(node_id)) = 1
967 adsky(node_id) = adsky(node_id) + 1
968 node_id = ixs(4, ii)
969 connected(adsky(node_id)) = ii
970 TYPE(adsky(node_id)) = 1
971 adsky(node_id) = adsky(node_id) + 1
972 node_id = ixs(7, ii)
973 connected(adsky(node_id)) = ii
974 TYPE(adsky(node_id)) = 1
975 adsky(node_id) = adsky(node_id) + 1
976 node_id = ixs(6, ii)
977 connected(adsky(node_id)) = ii
978 TYPE(adsky(node_id)) = 1
979 adsky(node_id) = adsky(node_id) + 1
980 ELSE
981! bricks
982 DO jj = 1, 8
983 node_id = ixs(1 + jj, ii)
984 duplicate = .false.
985 DO kk = 1,jj - 1
986 IF(node_id == ixs(1 + kk, ii)) duplicate = .true.
987 ENDDO
988 IF(.NOT. duplicate) THEN
989 connected(adsky(node_id)) = ii
990 TYPE(adsky(node_id)) = 1
991 adsky(node_id) = adsky(node_id) + 1
992 ENDIF
993 ENDDO
994 ENDIF
995 ENDDO
996
997
998! Counting connected elements
999 IF (n2d == 0) THEN
1000 ALLOCATE(this%EE_CONNECT%IAD_CONNECT(numels+1))
1001 ALLOCATE(ee_nb_connect(numels))
1002 ELSE
1003 ALLOCATE(this%EE_CONNECT%IAD_CONNECT(numeltg + numelq + 1))
1004 ALLOCATE(ee_nb_connect(numeltg + numelq))
1005 ENDIF
1006 ee_nb_connect(:) = 0
1007
1008 tmp = 0
1009 IF (n2d == 0) THEN
1010! 3D elements
1011 DO ii = 1, numels
1012 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
1013 jal_from_prop = igeo(62, iabs(ixs(10, ii)) )
1014 jal = max(jal_from_mat, jal_from_prop)
1015 jalt = jal + nint(pm(71, iabs(ixs(1, ii))) + pm(96, iabs(ixs(1, ii))))
1016 IF (jalt == 0) cycle
1017 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
1018 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
1019! Tetras
1020 ee_nb_connect(ii) = 6
1021 ELSE
1022! Hexa
1023 ee_nb_connect(ii) = 6
1024 ENDIF
1025 ENDDO
1026 this%EE_CONNECT%IAD_CONNECT(1) = 1
1027 DO ii = 2, numels + 1
1028 this%EE_CONNECT%IAD_CONNECT(ii) = this%EE_CONNECT%IAD_CONNECT(ii - 1) + ee_nb_connect(ii - 1)
1029 ENDDO
1030 tmp = this%EE_CONNECT%IAD_CONNECT(numels + 1)
1031 ELSE
1032! 2D elements
1033! /QUAD
1034 DO ii = 1, numelq
1035 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
1036 jal_from_prop = igeo(62, iabs(ixq(6, ii)) )
1037 jal = max(jal_from_mat, jal_from_prop)
1038 jalt = jal + nint(pm(71, iabs(ixq(1, ii))) + pm(96, iabs(ixq(1, ii))))
1039 IF (jalt == 0) cycle
1040 ee_nb_connect(ii) = 4
1041 ENDDO
1042! /TRIA
1043 DO ii = 1, numeltg
1044 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
1045 jal_from_prop = igeo(62, iabs(ixtg(5, ii)) )
1046 jal = max(jal_from_mat, jal_from_prop)
1047 jalt = jal + nint(pm(71, iabs(ixtg(1, ii))) + pm(96, iabs(ixtg(1, ii))))
1048 IF (jalt == 0) cycle
1049 ee_nb_connect(ii) = 3
1050 ENDDO
1051 this%EE_CONNECT%IAD_CONNECT(1) = 1
1052 DO ii = 2, numelq + numeltg + 1
1053 this%EE_CONNECT%IAD_CONNECT(ii) = this%EE_CONNECT%IAD_CONNECT(ii - 1) + ee_nb_connect(ii - 1)
1054 ENDDO
1055 tmp = this%EE_CONNECT%IAD_CONNECT(numelq + numeltg + 1) - 1
1056 ENDIF
1057
1058 ALLOCATE(this%EE_CONNECT%CONNECTED(tmp))
1059 ALLOCATE(this%EE_CONNECT%TYPE(tmp))
1060 ALLOCATE(this%EE_CONNECT%IFACE2(tmp))
1061 this%EE_CONNECT%TYPE(1:tmp) = 0
1062 this%EE_CONNECT%CONNECTED(1:tmp) = 0
1063 this%EE_CONNECT%IFACE2(1:tmp) = 0
1064 CALL intvector_create(vec_ptr1)
1065 ALLOCATE(itag(numnod))
1066 itag(1:numnod) = 0
1067 IF (n2d == 0) THEN
1068 DO ii = 1, numels
1069 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
1070 jal_from_prop = igeo(62, iabs(ixs(10, ii)) )
1071 jal = max(jal_from_mat, jal_from_prop)
1072 jalt = jal + nint(pm(71, iabs(ixs(1, ii))) + pm(96, iabs(ixs(1, ii))))
1073 IF (jalt == 0) cycle
1074 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1075 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
1076 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
1077! Tetras
1078 nface = 6
1079 nface_node = 3
1080 count = 3
1081 elem_face => tetra_face
1082 ELSE
1083! Hexa
1084 nface = 6
1085 nface_node = 4
1086 count = 4
1087 elem_face => hexa_face
1088 ENDIF
1089
1090 DO kface = 1, nface
1091 CALL intvector_clear(vec_ptr1)
1092
1093 !skip hexa degenerated face (penta)
1094 skip_face = .false.
1095 IF(nface_node == 4)THEN
1096 DO kk=1,4
1097 nn(kk) = ixs(1 + elem_face(kface, kk), ii)
1098 ENDDO
1099 IF(nn(1)==nn(2) .AND. nn(3)==nn(4)) THEN
1100 skip_face = .true.
1101 ELSEIF(nn(2)==nn(3) .AND. nn(1)==nn(4)) THEN
1102 skip_face = .true.
1103 ENDIF
1104 ENDIF
1105
1106 IF(.NOT. skip_face)THEN
1107 DO inode = 1, nface_node
1108 IF (elem_face(kface, inode) < 0) cycle
1109 node_id = ixs(1 + elem_face(kface, inode), ii)
1110 itag(node_id) = 1
1111 DO iad = iad_connect(node_id), iad_connect(node_id + 1) - 1
1112 IF (connected(iad) /= ii) THEN
1113 CALL intvector_push_back(vec_ptr1, connected(iad))
1114 ENDIF
1115 ENDDO
1116 ENDDO
1117 ENDIF
1118
1119! get the redundant element number
1120 CALL intvector_get_redundant(vec_ptr1, jj, itmp, count)
1121 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1122 IF(skip_face) jj = 0 !no connected face (degenerated)
1123 this%EE_CONNECT%CONNECTED(iad1 + kface - 1) = jj
1124 IF (jj > 0) THEN
1125 IF (ixs(2, jj) == ixs(3, jj) .AND. ixs(4, jj) == ixs(5, jj) .AND.
1126 . ixs(6, jj) == ixs(9, jj) .AND. ixs(7, jj) == ixs(8, jj)) THEN
1127! Tetras
1128 nface2 = 6
1129 nface_node2 = 3
1130 elem_face2 => tetra_face
1131 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 1
1132 ELSE
1133! Hexa
1134 nface2 = 6
1135 nface_node2 = 4
1136 elem_face2 => hexa_face
1137 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 0
1138 ENDIF
1139 DO kface2 = 1, nface2
1140 itmp = 1
1141 DO inode = 1, nface_node2
1142 IF (elem_face(kface2, inode) < 0) cycle
1143 itmp = itmp * itag(ixs(1 + elem_face(kface2, inode), jj))
1144 ENDDO
1145 IF (itmp == 1) THEN
1146 this%EE_CONNECT%IFACE2(iad1 + kface - 1) = kface2
1147 EXIT
1148 ENDIF
1149 ENDDO
1150 ENDIF
1151 DO inode = 1, nface_node
1152 IF (elem_face(kface, inode) < 0) cycle
1153 node_id = ixs(1 + elem_face(kface, inode), ii)
1154 itag(node_id) = 0
1155 ENDDO
1156 ENDDO
1157 ENDDO
1158 ELSE
1159! quad
1160 DO ii = 1, numelq
1161 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
1162 jal_from_prop = igeo(62, iabs(ixq(6, ii)) )
1163 jal = max(jal_from_mat, jal_from_prop)
1164 jalt = jal + nint(pm(71, iabs(ixq(1, ii))) + pm(96, iabs(ixq(1, ii))))
1165 IF (jalt == 0) cycle
1166 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1167 nface = 4
1168 nface_node = 2
1169 elem_face => quad_face
1170 count = 2
1171 DO kface = 1, nface
1172 CALL intvector_clear(vec_ptr1)
1173 DO inode = 1, nface_node
1174 node_id = ixq(1 + elem_face(kface, inode), ii)
1175 itag(node_id) = 1
1176 DO iad = iad_connect(node_id), iad_connect(node_id + 1) - 1
1177 IF (connected(iad) /= ii) THEN
1178 CALL intvector_push_back(vec_ptr1, connected(iad))
1179 ENDIF
1180 ENDDO
1181 ENDDO
1182! get the redundant element number
1183 CALL intvector_get_redundant(vec_ptr1, jj, itmp, count)
1184 this%EE_CONNECT%CONNECTED(iad1 + kface - 1) = jj
1185 IF (jj > 0) THEN
1186 IF (jj > numelq) THEN
1187 nface2 = 3
1188 nface_node2 = 2
1189 elem_face2 => tri_face
1190 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 3
1191 ELSE
1192 nface2 = 4
1193 nface_node2 = 2
1194 elem_face2 => quad_face
1195 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 2
1196 ENDIF
1197 DO kface2 = 1, nface2
1198 itmp = 1
1199 DO inode = 1, nface_node2
1200 itmp = itmp * itag(ixq(1 + elem_face(kface2, inode), jj))
1201 ENDDO
1202 IF (itmp == 1) THEN
1203 this%EE_CONNECT%IFACE2(iad1 + kface - 1) = kface2
1204 EXIT
1205 ENDIF
1206 ENDDO
1207 ENDIF
1208 DO inode = 1, nface_node
1209 node_id = ixq(1 + elem_face(kface, inode), ii)
1210 itag(node_id) = 0
1211 ENDDO
1212 ENDDO
1213 ENDDO
1214! Tria
1215 DO ii = 1, numeltg
1216 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
1217 jal_from_prop = igeo(62, iabs(ixtg(5, ii)) )
1218 jal = max(jal_from_mat, jal_from_prop)
1219 jalt = jal + nint(pm(71, iabs(ixtg(1, ii))) + pm(96, iabs(ixtg(1, ii))))
1220 IF (jalt == 0) cycle
1221 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1222 nface = 3
1223 nface_node = 2
1224 elem_face => tri_face
1225 count = 2
1226 DO kface = 1, nface
1227 CALL intvector_clear(vec_ptr1)
1228 DO inode = 1, nface_node
1229 node_id = ixtg(1 + elem_face(kface, inode), ii)
1230 itag(node_id) = 1
1231 DO iad = iad_connect(node_id), iad_connect(node_id + 1) - 1
1232 IF (connected(iad) /= ii) THEN
1233 CALL intvector_push_back(vec_ptr1, connected(iad))
1234 ENDIF
1235 ENDDO
1236 ENDDO
1237! get the redundant element number
1238 CALL intvector_get_redundant(vec_ptr1, jj, itmp, count)
1239 this%EE_CONNECT%CONNECTED(iad1 + kface - 1) = jj
1240 IF (jj > 0) THEN
1241 IF (jj > numelq) THEN
1242 nface2 = 2
1243 nface_node2 = 2
1244 elem_face2 => tri_face
1245 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 3
1246 ELSE
1247 nface2 = 4
1248 nface_node2 = 3
1249 elem_face2 => quad_face
1250 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 2
1251 ENDIF
1252 DO kface2 = 1, nface2
1253 itmp = 1
1254 DO inode = 1, nface_node2
1255 itmp = itmp * itag(ixtg(1 + elem_face(kface2, inode), jj))
1256 ENDDO
1257 IF (itmp == 1) THEN
1258 this%EE_CONNECT%IFACE2(iad1 + kface - 1) = kface2
1259 EXIT
1260 ENDIF
1261 ENDDO
1262 ENDIF
1263 DO inode = 1, nface_node
1264 node_id = ixtg(1 + elem_face(kface, inode), ii)
1265 itag(node_id) = 0
1266 ENDDO
1267 ENDDO
1268 ENDDO
1269 ENDIF
1270
1271 CALL intvector_delete(vec_ptr1)
1272 IF (ALLOCATED(ee_nb_connect)) DEALLOCATE(ee_nb_connect)
1273 IF (ALLOCATED(itag)) DEALLOCATE(itag)
1274 IF (ALLOCATED(ne_nb_connect)) DEALLOCATE(ne_nb_connect)
1275 IF (ALLOCATED(iad_connect)) DEALLOCATE(iad_connect)
1276 IF (ALLOCATED(adsky)) DEALLOCATE(adsky)
1277 IF (ALLOCATED(connected)) DEALLOCATE(connected)
1278
1279 END SUBROUTINE ale_compute_ee_connectivity
1280C-----------------------------------------------
1281
1282 END MODULE ale_connectivity_mod
subroutine alemuscl_upwind2(flux, ale_connect, x, ixq, flux_vois, n4_vois, itab, nv46, itrimat, segvar)
subroutine alew5(x, v, w, wa, ale_nn_connect, nale, nodft, nodlt, nbrcvois, nbsdvois, lnrcvois, lnsdvois, skew, iskew, icodt)
Definition alew5.F:40
subroutine h3d_quad_scalar(elbuf_tab, quad_scalar, iparg, ixq, pm, ehour, ipm, x, v, w, ale_connect, nercvois, nesdvois, lercvois, lesdvois, id_elem, is_written_quad, ipartq, layer_input, npart1, iuvar_input, h3d_part, keyword, itherm, bufmat, multi_fvm, ir_input, is_input, it_input, id, mat_param)
integer function iface2(ip, n)
Definition iface.F:85
subroutine inigrav_m51(nelg, nel, ng, matid, ipm, grav0, depth, pm, bufmat, elbuf_tab, psurf, list, ale_connectivity, nv46, ix, nix, nft, bufmatg, iparg)
Definition inigrav_m51.F:33
subroutine m11vs3(pm, iparg, ixs, ale_connect, elbuf_tab, v, x, dvp, vn, w, vel, vd2, vdx, vdy, vdz, mat, rhov, pv, eiv, rev, rkv, tv, ssp_eq, vxv, vyv, vzv, ialefvm_flg, vx, vy, vz, mom, rho, vol, xmomv, ymomv, zmomv, bufvois, nel)
Definition m11vs3.F:40
#define max(a, b)
Definition macros.h:21
subroutine mulaw(lft, llt, nft, mtn, jcvt, pm, off, sig, eint, rho, vol, strain, gama, uvar, bufmat, tf, npf, imat, ngl, nuvar, nvartmp, vartmp, geo, pid, epsd, wxx, wyy, wzz, jsph, ssp, voln, vis, d1, d2, d3, d4, d5, d6, dvol, sold1, sold2, sold3, sold4, sold5, sold6, rx, ry, rz, sx, sy, sz, tx, ty, tz, ismstr, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, ipm, isorth, nel, matparam)
Definition mulaw.F:54
initmumps id
subroutine ale_connectivity_init(this)
subroutine ale_compute_connectivity(this, numnod, numelq, numeltg, numels, nixq, nixtg, nixs, ixq, ixtg, ixs)
subroutine ale_deallocate_connectivity(this)
subroutine ale_compute_ee_connectivity(this, pm, igeo, npropgi, numgeo, npropm, nummat, numnod, numelq, numeltg, numels, n2d, iale, ieuler, itherm, ialelag, ishadow, nixq, nixtg, nixs, ixq, ixtg, ixs)
type(ale_) ale
Definition ale_mod.F:253
subroutine ns_fvm_diffusion(ale_connect, multi_fvm, time_step, ebcs_tab, diffusion, ipm, pm, iparg, elbuf_tab, nercvois, nesdvois, lercvois, lesdvois, ixs, func_value)
subroutine q4forc2(timers, output, pm, geo, ic, x, a, v, ms, w, flux, flu1, veul, fv, ale_connect, iparg, nloc_dmg, elbuf_tab, tf, npf, bufmat, partsav, dt2t, neltst, ityptst, stifn, offset, eani, ipartq, nel, iadq, fsky, icp, ng, ipm, bufvois, qmv, gresav, grth, igrth, table, igeo, itask, iexpan, ms_2d, fskym, ioutprt, mat_elem, h3d_strain, sz_bufvois, snpc, stf, sbufmat, svis, nsvois, idtmins, iresp, tt, dt1, idel7ng, idel7nok, idtmin, maxfunc, imon_mat, userl_avail, impl_s, idyna, dt, glob_therm, sensors)
Definition q4forc2.F:81
recursive subroutine quicksort_i(a, first, last)
Definition quicksort.F:92
recursive subroutine quicksort_i2(a, idx, first, last)
Definition quicksort.F:153
subroutine s11defo3(pm, v, veul, x, ixs, ale_connect, dxx, dxy, dxz, dyx, dyy, dyz, dzx, dzy, dzz, d4, d5, d6, wxx, wyy, wzz, bufmat, nel, nft, ipm, nummat, numels)
Definition s11defo3.F:40
subroutine s8cforc3(timers, output, elbuf_tab, ng, pm, geo, ixs, x, a, v, ms, w, flux, flu1, veul, fv, ale_connect, iparg, tf, npf, bufmat, partsav, nloc_dmg, dt2t, neltst, ityptst, stifn, fsky, iads, offset, eani, iparts, f11, f21, f31, f12, f22, f32, f13, f23, f33, f14, f24, f34, f15, f25, f35, f16, f26, f36, f17, f27, f37, f18, f28, f38, nel, icp, icsig, smr, sms, smt, mfxx, mfxy, mfxz, mfyx, mfyy, mfyz, mfzx, mfzy, mfzz, nvc, ipm, itask, istrain, temp, fthe, fthesky, iexpan, igeo, nnpt, gresav, grth, igrth, mssa, dmels, table, xdp, voln, condn, condnsky, sensors, ioutprt, mat_elem, h3d_strain, dt, nodadt, dtfac1, dtmin1, idtmin, snpc, stf, sbufmat, svis, nsvois, idtmins, iresp, maxfunc, userl_avail, glob_therm, impl_s, idyna)
Definition s8cforc3.F:111
subroutine spinit3(igrtyp, spbuf, kxsp, x, geo, xmas, npc, pld, xin, skew, dtelem, nel, stifn, stifr, igeo, partsav, v, ipartsp, bufmat, pm, itab, msr, inr, ixsp, nod2sp, iparg, ale_connectivity, detonators, sigsph, isptag, ipart, ipm, nsigsph, ptsph, npf, tf, elbuf_str, mcp, temp, iloadp, facload, stifint, i7stifs, glob_therm, mat_param)
Definition spinit3.F:52
subroutine split_cfd_solide(numels, ale_connectivity, ixs, ale_elm, size_ale_elm)
program starter
Definition starter.F:39