2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
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.
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.
14Copyright> You should have received a copy of
the GNU Affero General Public License
15Copyright> along with
this program. If not, see <https:
18Copyright> Commercial Alternative: Altair Radioss Software
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:
33 . S_TETRA, S_PENTA, S_POLY3, S_HEXAE, S_POLY4, S_POLY4A, S_POLY4B, S_POLYH, S_POLYC,
34 . D_TETRA, D_PENTA, D_POLY3, D_HEXAE, D_POLY4, D_POLY4A, D_POLY4B, D_POLYH, D_POLYC,
35 . M_TETRA, M_PENTA, M_POLY3, M_HEXAE, M_POLY4, M_POLY4A, M_POLY4B, M_POLYH, M_POLYC,
36 . N_TETRA, N_PENTA, N_POLY3, N_HEXAE, N_POLY4, N_POLY4A, N_POLY4B, N_POLYH, N_POLYC,
37 . F_TETRA, F_PENTA, F_POLY3, F_HEXAE, F_POLY4, F_POLY4A, F_POLY4B, F_POLYH, F_POLYC,
38 . C_TETRA, C_PENTA, C_POLY3, C_HEXAE, C_POLY4, C_POLY4A, C_POLY4B, C_POLYH, C_POLYC,
40 . StrCODE, GetPolyhedraType, GetNumTria, Gtria
42C=====================================================================
43C Nu, Nv, Nw, Nx : GRAPH corner (Brick node)
44C Ci, Cj, Ck, Cl, Cm, Cn : GRAPH corner (
Edge intersection point)
45C Fa, Fb, Fc, Fd, Fe, Ff : face number (usual ALE face numbering)
46C=====================================================================
54C \ +----+ / * number of binary codes : S_TETRA ( 8)
55C | * Number of graph
for each subvolume : M_TETRA ( 1)
56C \ | / * Number of brick nodes (Nu) : F_TETRA ( 3)
57C +----+ * Number of corner from edge (Ci,j,k): C_TETRA ( 3)
61C=====================================================================
71C | Fd | Fc * number of binary codes : S_PENTA (12)
72C +----+ | * Number of graph
for each subvolume : M_PENTA ( 1)
73C | | Nv | * Number of brick nodes (Nu) : F_PENTA ( 4)
74C +----+ | * Number of corner from edge (Ci,j,k): C_PENTA ( 4)
80C=====================================================================
89C Fd | +----+ POLYG3 GRAPH
90C | | / | * number of binary codes : S_POLY3 (18)
91C +----+ +----+ * Number of graph
for each subvolume : M_POLY3 ( 1)
92C | | Nx | - -| Nw | Fb | * Number of brick nodes (Nu) : F_POLY3 ( 5)
93C +----+ +----+ * Number of corner from edge (Ci,j,k): C_POLY3 ( 5)
96C | Cl | - - - - - - - - | Ck |
99C=====================================================================
102C | Ci | - - - - - - - - | Cj |
108C Fe | Fa | Fc | HEXA GRAPH
109C | | | * number of binary codes : S_HEXAE ( 3)
110C +----+ +----+ | * Number of graph
for each subvolume : M_HEXAE ( 2)
111C | | Nx | - -| Nw | * Number of brick nodes (Nu) : F_HEXAE ( 5)
112C +----+ +----+ | * Number of corner from edge (Ci,j,k): C_HEXAE ( 4)
115C | Cl | - - - - - - - - | Ck |
118C=====================================================================
127C Fc | Fd POLYG4 GRAPH
128C / | \ * number of binary codes : S_POLY4 ( 4)
129C +----+ +----+ +----+ * Number of graph
for each subvolume : M_POLY4 ( 2)
130C | Cn | | Nv | | Ck | * Number of brick nodes (Nu) : F_POLY4 ( 6)
131C +----+ +----+ +----+ * Number of corner from edge (Ci,j,k): C_POLY4 ( 6)
138C | Cm | - - - - - - - - - - | Cl |
141C=====================================================================
143C +----+--------------------+----+
147C | | Nu | ---- | Nv | \
148C | +----+ +----+ +----+ POLYG4A GRAPH
149C | / | | C3 | * number of binary codes : S_POLY4A ( 4)
150C +----+ | +----+ * Number of graph
for each subvolume : M_POLY4A ( 2)
151C | C6 | | / | * Number of brick nodes (Nu) : F_POLY4A ( 6)
152C +----+ +----+ +----+ | * Number of corner from edge (Ci,j,k): C_POLY4A ( 6)
153C \ | Nw | ---- | Nx | |
157C \ | C5 |--------------------| C4 |
160C=====================================================================
164C /| C1 |--------------------| C2 |
168C +----+ | Nw | ---- | Nx | |
169C | C5 | +----+ +----+ |
171C | \+----+ +----+ | C3 |
172C | | Nu | ---| Nv | +----+
173C | +----+ +----+ / POLYG4B GRAPH
174C | / \ / * number of binary codes : S_POLY4B ( 4)
175C +----+ +----+ / * Number of graph
for each subvolume : M_POLY4B ( 2)
176C | C6 |------------------| C3 | / * Number of brick nodes (Nu) : F_POLY4B ( 6)
177C +----+ +----+ * Number of corner from edge (Ci,j,k): C_POLY4B ( 6)
179C=====================================================================
182C | Ci | - - - - - - - - - - - - - | Cj |
187C | Nu |- - - - - -| Nv | |
189C Fe | \ Fa / | Fc | POLYC GRAPH (continuity)
190C | | \ / | * number of binary codes : S_POLYC ( 8)
191C +----+ \ / +----+ | * Number of graph
for each subvolume : M_POLYC ( 1)
192C | | Nx |- -| - | - -| Nw | * Number of brick nodes (Nu) : F_POLYC ( 4)
193C +----+ | | +----+ | * Number of corner from edge (Ci,j,k): C_POLYC ( 6)
196C +----+ +----+ +----+ +----+
197C | Cl | - - -| Cm | - | Cn |- - - | Ck |
198C +----+ +----+ +----+ +----+
200C=====================================================================
201C=====================================================================
203C=====================================================================
205 !----------------------------------------------------!
206 !Dimensions des tableaux !
207 !----------------------------------------------------!
208 !Combinaison number (binary codes)
230 !Number of Corner from brick node
250 !Number of Corner from edge intersection node
260 !First index in global array of subvolumes (1:106)
270 !----------------------------------------------------!
271 !Tableaux contenant l'ensemble des codes binaires !
272 ! index1:combination number !
273 !----------------------------------------------------!
276 !----------------------------------------------------!
277 !Denomination pour les Identification dintersection !
278 ! index1:combination number !
279 !----------------------------------------------------!
281 CHARACTER*14,TARGET :: strCODE(106)
283 !----------------------------------------------------!
284 !SUBVOLUME
'G'RAPH :
'F'ACES !
286 ! index2:combination number !
287 !----------------------------------------------------!
290 !----------------------------------------------------!
291 !SUBVOLUME
'G'RAPH :
'N'umbert of
'P'oin
't' !
292 ! index1:local polyhedron face !
293 !----------------------------------------------------!
296 !----------------------------------------------------!
297 !SUBVOLUME
'G'RAPH :
'N'umbert of 'Nod'e !
298 ! index1:local polyhedron face !
299 !----------------------------------------------------!
302 !----------------------------------------------------!
303 !SUBVOLUME
'G'RAPH :
'C'ORNER !
304 ! index1:edge (corner=intersection_node) !
305 ! index2:combination number !
306 !----------------------------------------------------!
307 INTEGER,TARGET :: Gcorner(7,106)
309 !----------------------------------------------------!
310 !SUBVOLUME
'G'RAPH : brick
'N'ODES !
311 ! index1:master node(on brick) !
312 ! index2:combination number !
313 !----------------------------------------------------!
317 !----------------------------------------------------!
318 ! TAG bits(from 1 to 106)
for each of 106 combinations!
319 ! which is using node (1-8) sent as index !
320 ! (KIND=14 = 112bits >= 106) !
321 !----------------------------------------------------!
322c
INTEGER(KIND=14),TARGET :: b22CombiNode(8)
324 !----------------------------------------------------!
325 ! TAG bits(from 1 to 106)
for each of 106 combinations!
326 ! which is using edge (1-12) sent as index !
327 ! (KIND=14 = 112bits >= 106) !
328 !----------------------------------------------------!
329c
INTEGER(KIND=14),TARGET :: b22CombiEdge(12)
331 !----------------------------------------------------!
332 !
function which from a combination code associates !
333 ! a combination type : !
334 ! tetra:1,penta:2,poly3:3,hexa:4,poly4:5,etc... !
335 ! GetPolyhedraType : [1,106] -> [1,8] !
336 !----------------------------------------------------!
337 INTEGER,TARGET :: GetPolyhedraType(106)
339 !----------------------------------------------------!
340 !
function which from a combination type (1-5) !
341 ! provides
the number of tria needed to darw
the !
343 ! a combination type : !
344 ! tetra:1,penta:2,poly3:3,hexa:4,poly4:5 !
345 ! GetNumTria : [1,5] -> [1,4] !
346 !----------------------------------------------------!
347 INTEGER,TARGET :: GetNumTria(8)
349 !----------------------------------------------------!
350 !SUBVOLUME
'G'RAPH : 'tria' intersection
surface !
351 ! index1:edge local
id i,j,k,l,m,
n !
352 ! index2:triangle
id (ex 2 to draw a quad) !
353 ! index3:combination type
354 !----------------------------------------------------!
end diagonal values have been computed in the(sparse) matrix id.SOL
for(i8=*sizetab-1;i8 >=0;i8--)