Salome HOME
Homard executable
[modules/homard.git] / src / tool / Creation_Maillage / cmh310.F
1       subroutine cmh310 ( lehexa,
2      >                    indnoe, indare, indtet, indpyr, indhex,
3      >                    indptp,
4      >                    listso, listar, listfa, listcf,
5      >                    coonoe, hetnoe, arenoe,
6      >                    famnoe,
7      >                    hetare, somare,
8      >                    filare, merare, famare,
9      >                    aretri,
10      >                    arequa, filqua,
11      >                    hettet, aretet,
12      >                    filtet, pertet, famtet,
13      >                    hetpyr, arepyr,
14      >                    filpyr, perpyr, fampyr,
15      >                    hethex, arehex,
16      >                    filhex, perhex, famhex,
17      >                    cfahex,
18      >                    ulsort, langue, codret )
19 c ______________________________________________________________________
20 c
21 c                             H O M A R D
22 c
23 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
24 c
25 c Version originale enregistree le 18 juin 1996 sous le numero 96036
26 c aupres des huissiers de justice Simart et Lavoir a Clamart
27 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
28 c aupres des huissiers de justice
29 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
30 c
31 c    HOMARD est une marque deposee d'Electricite de France
32 c
33 c Copyright EDF 1996
34 c Copyright EDF 1998
35 c Copyright EDF 2002
36 c Copyright EDF 2020
37 c ______________________________________________________________________
38 c
39 c    Creation du Maillage - decoupage de conformite des Hexaedres
40 c    -           -                                      -
41 c ______________________________________________________________________
42 c .        .     .        .                                            .
43 c .  nom   . e/s . taille .           description                      .
44 c .____________________________________________________________________.
45 c . lehexa . e   .   1    . hexaedre a decouper                        .
46 c . indnoe . es  .   1    . indice du dernier noeud cree               .
47 c . indare . es  .   1    . indice de la derniere arete creee          .
48 c . indtet . es  .   1    . indice du dernier tetraedre cree           .
49 c . indpyr . es  .   1    . indice de la derniere pyramide creee       .
50 c . indhex . es  .   1    . indice du dernier hexaedre cree            .
51 c . indptp . es  .   1    . indice du dernier pere enregistre          .
52 c . listso . e   .   8    . numeros globaux des sommets                .
53 c . listar . e   .  12    . numeros globaux des aretes                 .
54 c . listfa . e   .   6    . numeros globaux des faces                  .
55 c . listcf . e   .   6    . codes des faces                            .
56 c . coonoe . es  .nouvno*3. coordonnees des noeuds                     .
57 c . hetnoe . es  . nouvno . historique de l'etat des noeuds            .
58 c . arenoe . es  . nouvno . arete liee a un nouveau noeud              .
59 c . famnoe . es  . nouvno . famille des noeuds                         .
60 c . hetare . es  . nouvar . historique de l'etat des aretes            .
61 c . somare . es  .2*nouvar. numeros des extremites d'arete             .
62 c . filare . es  . nouvar . premiere fille des aretes                  .
63 c . merare . es  . nouvar . mere des aretes                            .
64 c . famare . es  . nouvar . famille des aretes                         .
65 c . aretri . e   .nouvtr*3. numeros des 3 aretes des triangles         .
66 c . arequa . e   .nouvqu*4. numeros des 4 aretes des quadrangles       .
67 c . filqua . e   . nouvqu . premier fils des quadrangles               .
68 c . hettet . es  . nouvte . historique de l'etat des tetraedres        .
69 c . aretet . es  .nouvta*6. numeros des 6 aretes des tetraedres        .
70 c . filtet . es  . nouvte . premier fils des tetraedres                .
71 c . pertet . es  . nouvte . pere des tetraedres                        .
72 c .        .     .        . si pertet(i) > 0 : numero du tetraedre     .
73 c .        .     .        . si pertet(i) < 0 : -numero dans pthepe     .
74 c . famtet . es  . nouvte . famille des tetraedres                     .
75 c . hetpyr . es  . nouvpy . historique de l'etat des pyramides         .
76 c . arepyr . es  .nouvya*8. numeros des 8 aretes des pyramides         .
77 c . filpyr . es  . nouvpy . premier fils des pyramides                 .
78 c . perpyr . es  . nouvpy . pere des pyramides                         .
79 c .        .     .        . si perpyr(i) > 0 : numero de la pyramide   .
80 c .        .     .        . si perpyr(i) < 0 : -numero dans pphepe     .
81 c . fampyr . es  . nouvpy . famille des pyramides                      .
82 c . hethex . es  . nouvhe . historique de l'etat des hexaedres         .
83 c . arehex . es  .nouvha12. numeros des 12 aretes des hexaedres        .
84 c . filhex . es  . nouvhe . premier fils des hexaedres                 .
85 c . perhex . es  . nouvhe . pere des hexaedres                         .
86 c . famhex . es  . nouvhe . famille des hexaedres                      .
87 c . cfahex . e   . nctfhe. codes des familles des hexaedres            .
88 c .        .     . nbfhex .   1 : famille MED                          .
89 c .        .     .        .   2 : type d'hexaedres                     .
90 c .        .     .        .   3 : famille des tetraedres de conformite .
91 c .        .     .        .   4 : famille des pyramides de conformite  .
92 c . ulsort . e   .   1    . unite logique de la sortie generale        .
93 c . langue . e   .    1   . langue des messages                        .
94 c .        .     .        . 1 : francais, 2 : anglais                  .
95 c . codret . es  .    1   . code de retour des modules                 .
96 c ______________________________________________________________________
97 c
98 c====
99 c 0. declarations et dimensionnement
100 c====
101 c
102 c 0.1. ==> generalites
103 c
104       implicit none
105       save
106 c
107       integer nbarin
108       character*6 nompro
109       parameter ( nompro ='CMH310' )
110       parameter ( nbarin = 11 )
111 c
112       integer nbsomm
113       parameter ( nbsomm = 8 )
114 c
115 #include "nblang.h"
116 #include "cofpfh.h"
117 c
118 c 0.2. ==> communs
119 c
120 #include "envex1.h"
121 c
122 #include "envca1.h"
123 #include "dicfen.h"
124 #include "nbfami.h"
125 #include "nouvnb.h"
126 c
127 c 0.3. ==> arguments
128 c
129       integer lehexa
130       integer indnoe, indare, indtet, indpyr, indhex
131       integer indptp
132       integer listso(8), listar(12), listfa(6), listcf(6)
133       integer hetnoe(nouvno), arenoe(nouvno)
134       integer famnoe(nouvno)
135       integer hetare(nouvar), somare(2,nouvar)
136       integer filare(nouvar), merare(nouvar), famare(nouvar)
137       integer aretri(nouvtr,3)
138       integer arequa(nouvqu,4)
139       integer filqua(nouvqu)
140       integer hettet(nouvte), aretet(nouvta,6)
141       integer filtet(nouvte), pertet(nouvte), famtet(nouvte)
142       integer hetpyr(nouvpy), arepyr(nouvya,8)
143       integer filpyr(nouvpy), perpyr(nouvpy), fampyr(nouvpy)
144       integer arehex(nouvha,12)
145       integer hethex(nouvhe)
146       integer filhex(nouvhe), perhex(nouvhe)
147       integer cfahex(nctfhe,nbfhex), famhex(nouvhe)
148 c
149       double precision coonoe(nouvno,sdim)
150 c
151       integer ulsort, langue, codret
152 c
153 c 0.4. ==> variables locales
154 c
155       integer iaux, jaux
156 c
157       integer lesnoe(nbarin), areint(nbarin)
158       integer lisomm(10), liarin(10)
159       integer fdnume, fdcode
160       integer are1, are2, are3, are4
161       integer are5, are6, are7, are8
162
163 c
164       integer nbmess
165       parameter ( nbmess = 10 )
166       character*80 texte(nblang,nbmess)
167 c
168 c 0.5. ==> initialisations
169 c ______________________________________________________________________
170 c
171 c====
172 c 1. messages
173 c====
174 c
175 #include "impr01.h"
176 #include "impr03.h"
177 c
178 #ifdef _DEBUG_HOMARD_
179       write (ulsort,texte(langue,1)) 'Entree', nompro
180       call dmflsh (iaux)
181 #endif
182 c
183 #ifdef _DEBUG_HOMARD_
184       write (ulsort,90002) 'indnoe', indnoe
185       write (ulsort,90002) 'indtet', indtet
186       write (ulsort,90002) 'indpyr', indpyr
187       write (ulsort,90002) 'indhex', indhex
188 #endif
189 #ifdef _DEBUG_HOMARD_
190       write (ulsort,90002) 'listar  1-8', (listar(iaux),iaux=1,8)
191       write (ulsort,90002) 'listar 9-12', (listar(iaux),iaux=9,12)
192       write (ulsort,90002) 'listso', listso
193       write (ulsort,90002) 'listfa', listfa
194       write (ulsort,90002) 'listcf', listcf
195 #endif
196 c
197       codret = 0
198 c
199 c====
200 c 2. Recuperation
201 c    . des sommets de l'hexaedre
202 c    . des noeuds milieux des 3 aretes coupees
203 c====
204 c
205       do 21 , iaux = 1 , 8
206         lesnoe(iaux) = listso(iaux)
207    21 continue
208 c
209       lesnoe(9) = somare(2,filare(listar(1)))
210       lesnoe(10) = somare(2,filare(listar(4)))
211       lesnoe(11) = somare(2,filare(listar(9)))
212 c
213 #ifdef _DEBUG_HOMARD_
214       do 2000 , iaux = 1 , nbarin
215         write(ulsort,90015) 'lesnoe(',iaux,') = ', lesnoe(iaux)
216  2000 continue
217 #endif
218 c
219 c====
220 c 3. Creation du noeud interne et des onze aretes internes
221 c====
222 c
223 #ifdef _DEBUG_HOMARD_
224       write (ulsort,texte(langue,3)) 'CMCHPB', nompro
225 #endif
226       call cmchpb ( indnoe, indare, nbarin,
227      >              nbsomm, lesnoe, areint,
228      >              coonoe, hetnoe, arenoe,
229      >              famnoe,
230      >              hetare, somare,
231      >              filare, merare, famare,
232      >              ulsort, langue, codret )
233 c
234 c====
235 c 4. Creation des six pyramides et des six tetraedres
236 c====
237 c
238       iaux = -indptp
239       jaux = cfahex(cofpfh,famhex(lehexa))
240 c
241 c 4.1. ==> Sur la face 1
242 c
243       lisomm(1) = lesnoe(1)
244       liarin(1) = areint(1)
245       lisomm(2) = lesnoe(4)
246       liarin(2) = areint(4)
247       lisomm(3) = lesnoe(3)
248       liarin(3) = areint(3)
249       lisomm(4) = lesnoe(2)
250       liarin(4) = areint(2)
251       liarin(5) = areint(9)
252       liarin(6) = areint(10)
253       are1 = listar(1)
254       are2 = listar(2)
255       are3 = listar(4)
256       are4 = listar(3)
257       fdnume = listfa(1)
258 c
259 #ifdef _DEBUG_HOMARD_
260       write (ulsort,texte(langue,3)) 'CMCPY2 - face 1', nompro
261 #endif
262       call cmcpy2 ( lehexa, indpyr, indptp,
263      >              fdnume,
264      >              lisomm, liarin,
265      >              are1, are2, are3, are4,
266      >              filare, arequa, filqua,
267      >              arepyr, fampyr,
268      >              hetpyr, filpyr, perpyr,
269      >              famhex, cfahex,
270      >              ulsort, langue, codret )
271 c
272 c 4.2. ==> Sur la face 2
273 c
274       lisomm(1) = lesnoe(2)
275       liarin(1) = areint(2)
276       lisomm(2) = lesnoe(5)
277       liarin(2) = areint(5)
278       lisomm(3) = lesnoe(6)
279       liarin(3) = areint(6)
280       lisomm(4) = lesnoe(1)
281       liarin(4) = areint(1)
282       liarin(5) = areint(9)
283       liarin(6) = areint(11)
284       are1 = listar(1)
285       are2 = listar(6)
286       are3 = listar(9)
287       are4 = listar(5)
288       fdnume = listfa(2)
289 c
290 #ifdef _DEBUG_HOMARD_
291       write (ulsort,texte(langue,3)) 'CMCPY2 - face 2', nompro
292 #endif
293       call cmcpy2 ( lehexa, indpyr, indptp,
294      >              fdnume,
295      >              lisomm, liarin,
296      >              are1, are2, are3, are4,
297      >              filare, arequa, filqua,
298      >              arepyr, fampyr,
299      >              hetpyr, filpyr, perpyr,
300      >              famhex, cfahex,
301      >              ulsort, langue, codret )
302 c
303 c 4.3. ==> Sur la face 3
304 c
305       are1 = areint(4)
306       are2 = areint(1)
307       are3 = areint(6)
308       are4 = areint(7)
309       are5 = listar(2)
310       are6 = listar(5)
311       are7 = listar(10)
312       are8 = listar(7)
313       indpyr = indpyr + 1
314 #ifdef _DEBUG_HOMARD_
315       write (ulsort,texte(langue,3)) 'CMCPYA - face 3', nompro
316 #endif
317       call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
318      >              are1, are2, are3, are4,
319      >              are5, are6, are7, are8,
320      >              iaux,  jaux,   indpyr )
321 c
322 c 4.4. ==> Sur la face 4
323 c
324       are1 = areint(2)
325       are2 = areint(3)
326       are3 = areint(8)
327       are4 = areint(5)
328       are5 = listar(3)
329       are6 = listar(8)
330       are7 = listar(11)
331       are8 = listar(6)
332       indpyr = indpyr + 1
333 #ifdef _DEBUG_HOMARD_
334       write (ulsort,texte(langue,3)) 'CMCPYA - face 4', nompro
335 #endif
336       call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
337      >              are1, are2, are3, are4,
338      >              are5, are6, are7, are8,
339      >              iaux,  jaux,   indpyr )
340 c
341 c 4.5. ==> Sur la face 5
342 c
343       liarin(1) = areint(4)
344       liarin(2) = areint(7)
345       liarin(3) = areint(8)
346       liarin(4) = areint(3)
347       liarin(5) = areint(10)
348       fdnume = listfa(5)
349       fdcode = listcf(5)
350 c
351 #ifdef _DEBUG_HOMARD_
352       write (ulsort,texte(langue,3)) 'CMCTE3 - face 5', nompro
353 #endif
354       call cmcte3 ( lehexa, indtet, indptp,
355      >              fdnume, fdcode, liarin,
356      >              aretri, filqua,
357      >              aretet, famtet,
358      >              hettet, filtet, pertet,
359      >              famhex, cfahex,
360      >              ulsort, langue, codret )
361 c
362 c 4.6. ==> Sur la face 6
363 c
364       liarin(1) = areint(5)
365       liarin(2) = areint(8)
366       liarin(3) = areint(7)
367       liarin(4) = areint(6)
368       liarin(5) = areint(11)
369       fdnume = listfa(6)
370       fdcode = listcf(6)
371 c
372 #ifdef _DEBUG_HOMARD_
373       write (ulsort,texte(langue,3)) 'CMCTE3 - face 6', nompro
374 #endif
375       call cmcte3 ( lehexa, indtet, indptp,
376      >              fdnume, fdcode, liarin,
377      >              aretri, filqua,
378      >              aretet, famtet,
379      >              hettet, filtet, pertet,
380      >              famhex, cfahex,
381      >              ulsort, langue, codret )
382 c
383 c====
384 c 5. la fin
385 c====
386 c
387       if ( codret.ne.0 ) then
388 c
389 #include "envex2.h"
390 c
391       write (ulsort,texte(langue,1)) 'Sortie', nompro
392       write (ulsort,texte(langue,2)) codret
393 c
394       endif
395 c
396 #ifdef _DEBUG_HOMARD_
397       write (ulsort,texte(langue,1)) 'Sortie', nompro
398       call dmflsh (iaux)
399 #endif
400 c
401       end