Salome HOME
Homard executable
[modules/homard.git] / src / tool / Creation_Maillage / cmcp1b.F
1       subroutine cmcp1b ( nulofa, lepent,
2      >                    aretri, nivtri,
3      >                    filqua,
4      >                    facpen, cofape,
5      >                    niveau,
6      >                    trifad, cotrvo, areqtr,
7      >                    ulsort, langue, codret )
8 c
9 c ______________________________________________________________________
10 c
11 c                             H O M A R D
12 c
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c
21 c    HOMARD est une marque deposee d'Electricite de France
22 c
23 c Copyright EDF 1996
24 c Copyright EDF 1998
25 c Copyright EDF 2002
26 c Copyright EDF 2020
27 c ______________________________________________________________________
28 c
29 c    Creation du Maillage - Conformite - decoupage des Pentaedres
30 c    -           -          -                          -
31 c                         - cas 1, phase B
32 c                               -        -
33 c    Reperage des aretes et des triangles sur les faces externes
34 c ______________________________________________________________________
35 c .        .     .        .                                            .
36 c .  nom   . e/s . taille .           description                      .
37 c .____________________________________________________________________.
38 c . nulofa . e   .   4    . numero local des faces a traiter           .
39 c . lepent . e   .   1    . pentaedre a decouper                       .
40 c . aretri . e   .nouvtr*3. numeros des 3 aretes des triangles         .
41 c . nivtri . e   . nouvtr . niveau des triangles                       .
42 c . filqua . e   . nouvqu . premier fils des quadrangles               .
43 c . facpen . e   .nouvpf*5. numeros des faces des pentaedres           .
44 c . cofape . e   .nouvpf*5. codes des faces des pentaedres             .
45 c . niveau .  s  .   1    . niveau des faces issus du decoupage        .
46 c . trifad .  s  .(2,0:2) . triangles traces sur les faces decoupees   .
47 c . cotrvo .  s  .(2,0:2) . code des triangles dans les volumes        .
48 c . areqtr .  s  .  (2,2) . aretes tri tracees sur les faces decoupees .
49 c . ulsort . e   .   1    . unite logique de la sortie generale        .
50 c . langue . e   .    1   . langue des messages                        .
51 c .        .     .        . 1 : francais, 2 : anglais                  .
52 c . codret . es  .    1   . code de retour des modules                 .
53 c .        .     .        . 0 : pas de probleme                        .
54 c .        .     .        . 1 : aucune arete ne correspond             .
55 c ______________________________________________________________________
56 c
57 c====
58 c 0. declarations et dimensionnement
59 c====
60 c
61 c 0.1. ==> generalites
62 c
63       implicit none
64       save
65 c
66       character*6 nompro
67       parameter ( nompro = 'CMCP1B' )
68 c
69 #include "nblang.h"
70 c
71 c 0.2. ==> communs
72 c
73 #include "envex1.h"
74 c
75 #include "nouvnb.h"
76 c
77 c 0.3. ==> arguments
78 c
79       integer lepent, nulofa(2)
80       integer aretri(nouvtr,3), nivtri(nouvtr)
81       integer filqua(nouvqu)
82       integer facpen(nouvpf,5), cofape(nouvpf,5)
83       integer niveau
84       integer trifad(2,0:2), cotrvo(2,0:2), areqtr(2,2)
85 c
86       integer ulsort, langue, codret
87 c
88 c 0.4. ==> variables locales
89 c
90       integer iaux, jaux
91 c
92       integer nbmess
93       parameter ( nbmess = 10 )
94       character*80 texte(nblang,nbmess)
95 c
96 c 0.5. ==> initialisations
97 c ______________________________________________________________________
98 c
99 c====
100 c 1. initialisations
101 c====
102 c
103 #include "impr01.h"
104 c
105 #ifdef _DEBUG_HOMARD_
106       write (ulsort,texte(langue,1)) 'Entree', nompro
107       call dmflsh (iaux)
108 #endif
109 c
110 #include "impr03.h"
111 #include "impr04.h"
112 c
113       codret = 0
114 c
115 c====
116 c 2. Triangles et aretes tracees sur le quadrangle dont le
117 c          triangle central sera la face 2 de la pyramide
118 c     trifad(1,0) : triangle central de ce decoupage
119 c     trifad(1,1) : triangle du cote de la face F1 du pentaedre
120 c     trifad(1,2) : triangle du cote de la face F2 du pentaedre
121 c     cotrvo(1,0/1/2) : futur code du triangle trifad(p,0/1/2) dans la
122 c                       description des fils
123 c     areqtr(1,1) : arete interne au quadrangle de bord et bordant le
124 c                   triangle trifad(p,1)
125 c     areqtr(1,2) : arete interne au quadrangle de bord et bordant le
126 c                   triangle trifad(p,2)
127 c====
128 c
129       iaux = facpen(lepent,nulofa(1))
130       jaux = cofape(lepent,nulofa(1))
131       trifad(1,0) = -filqua(iaux)
132       if ( jaux.lt.5 ) then
133         cotrvo(1,0) = 2
134         trifad(1,1) = trifad(1,0) + 2
135         cotrvo(1,1) = 1
136         trifad(1,2) = trifad(1,0) + 1
137         cotrvo(1,2) = 4
138         areqtr(1,1) = aretri(trifad(1,0),3)
139         areqtr(1,2) = aretri(trifad(1,0),1)
140       else
141         cotrvo(1,0) = 4
142         trifad(1,1) = trifad(1,0) + 1
143         cotrvo(1,1) = 4
144         trifad(1,2) = trifad(1,0) + 2
145         cotrvo(1,2) = 1
146         areqtr(1,1) = aretri(trifad(1,0),1)
147         areqtr(1,2) = aretri(trifad(1,0),3)
148       endif
149 #ifdef _DEBUG_HOMARD_
150       write(ulsort,90006) 'Quadrangle = ', iaux,', code =', jaux
151       do 2222 , iaux = 0, 2
152       write (ulsort,90015) 'trifad(1,0/1/2) =', trifad(1,iaux),
153      >             ', aretes', (aretri(trifad(1,iaux),jaux),jaux=1,3)
154  2222 continue
155       write(ulsort,90006) 'cotrvo(1,0) = ', cotrvo(1,0),
156      >                    'cotrvo(1,1) = ', cotrvo(1,1),
157      >                    'cotrvo(1,2) = ', cotrvo(1,2)
158       write(ulsort,90002) 'areqtr(1,1) = ', areqtr(1,1)
159       write(ulsort,90002) 'areqtr(1,2) = ', areqtr(1,2)
160 #endif
161 c
162 c====
163 c 3. Triangles et aretes tracees sur le quadrangle dont le
164 c          triangle central sera la face 4 de la pyramide
165 c     trifad(2,0) : triangle central de ce decoupage
166 c     trifad(2,1) : triangle du cote de la face F1 du pentaedre
167 c     trifad(2,2) : triangle du cote de la face F2 du pentaedre
168 c     cotrvo(2,0/1/2) : futur code du triangle trifad(p,0/1/2) dans la
169 c                       description des fils
170 c     areqtr(2,1) : arete interne au quadrangle de bord et bordant le
171 c                   triangle trifad(p,1)
172 c     areqtr(2,2) : arete interne au quadrangle de bord et bordant le
173 c                   triangle trifad(p,2)
174 c====
175 c
176       iaux = facpen(lepent,nulofa(2))
177       jaux = cofape(lepent,nulofa(2))
178       trifad(2,0) = -filqua(iaux)
179       if ( jaux.lt.5 ) then
180         cotrvo(2,0) = 1
181         trifad(2,1) = trifad(2,0) + 1
182         cotrvo(2,1) = 4
183         trifad(2,2) = trifad(2,0) + 2
184         cotrvo(2,2) = 1
185         areqtr(2,1) = aretri(trifad(2,0),1)
186         areqtr(2,2) = aretri(trifad(2,0),3)
187       else
188         cotrvo(2,0) = 5
189         trifad(2,1) = trifad(2,0) + 2
190         cotrvo(2,1) = 1
191         trifad(2,2) = trifad(2,0) + 1
192         cotrvo(2,2) = 4
193         areqtr(2,1) = aretri(trifad(2,0),3)
194         areqtr(2,2) = aretri(trifad(2,0),1)
195       endif
196 #ifdef _DEBUG_HOMARD_
197       write(ulsort,90006) 'Quadrangle = ', iaux,', code =', jaux
198       do 3333 , iaux = 0, 2
199       write (ulsort,90015) 'trifad(2,0/1/2) =', trifad(2,iaux),
200      >             ', aretes', (aretri(trifad(2,iaux),jaux),jaux=1,3)
201  3333 continue
202       write(ulsort,90006) 'cotrvo(1,0) = ', cotrvo(1,0),
203      >                    'cotrvo(1,1) = ', cotrvo(1,1),
204      >                    'cotrvo(1,2) = ', cotrvo(1,2)
205       write(ulsort,90002) 'areqtr(2,1) = ', areqtr(1,1)
206       write(ulsort,90002) 'areqtr(2,2) = ', areqtr(1,2)
207 #endif
208 c
209 c====
210 c 4. niveau des triangles des conformites des faces
211 c====
212 c
213       niveau = nivtri(trifad(1,0))
214 #ifdef _DEBUG_HOMARD_
215       write(ulsort,90002) 'niveau', niveau
216 #endif
217 c
218 c====
219 c 5. la fin
220 c====
221 c
222       if ( codret.ne.0 ) then
223 c
224 #include "envex2.h"
225 c
226       write (ulsort,texte(langue,1)) 'Sortie', nompro
227       write (ulsort,texte(langue,2)) codret
228 c
229       endif
230 c
231 #ifdef _DEBUG_HOMARD_
232       write (ulsort,texte(langue,1)) 'Sortie', nompro
233       call dmflsh (iaux)
234 #endif
235 c
236       end