1 subroutine utniqu ( coonoe,
2 > hetnoe, arenoe, famnoe,
3 > hetare, somare, filare,
6 > arequa, hetqua, filqua,
8 > indnoe, nouvno, nouvar, nouvtr, nouvqu,
10 > ulsort, langue, codret )
11 c ______________________________________________________________________
15 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
17 c Version originale enregistree le 18 juin 1996 sous le numero 96036
18 c aupres des huissiers de justice Simart et Lavoir a Clamart
19 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
20 c aupres des huissiers de justice
21 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
23 c HOMARD est une marque deposee d'Electricite de France
29 c ______________________________________________________________________
31 c UTilitaire - creation de Noeuds Internes
33 c apres decoupages de QUadrangles
35 c ______________________________________________________________________
37 c . nom . e/s . taille . description .
38 c .____________________________________________________________________.
39 c . coonoe . es .nouvno*3. coordonnees des noeuds .
40 c . hetnoe . es . nouvno . historique de l'etat des noeuds .
41 c . arenoe . es . nouvno . arete liee a un nouveau noeud .
42 c . famnoe . es . nouvno . caracteristiques des noeuds .
43 c . hetare . e . nouvar . historique de l'etat des aretes .
44 c . somare . e .2*nouvar. numeros des extremites d'arete .
45 c . filare . e . nouvar . premiere fille des aretes .
46 c . np2are . e . nouvar . numero des noeuds p2 milieux d'aretes .
47 c . nintri . es . nouvtr . noeud interne au triangle .
48 c . arequa . e .nouvqu*4. numeros des 4 aretes des quadrangles .
49 c . hetqua . e . nouvqu . historique de l'etat des quadrangles .
50 c . filqua . e . nouvqu . premier fils des quadrangles .
51 c . ninqua . es . nouvqu . noeud interne au quadrangle .
52 c . indnoe . es . 1 . indice du dernier noeud cree .
53 c . nouvno . e . 1 . nombre total de noeuds a examiner .
54 c . nouvar . e . 1 . nombre total d'aretes a examiner .
55 c . nouvtr . e . 1 . nombre total de triangles a examiner .
56 c . option . e . 1 . 0 : decoupage standard .
57 c . . . . 1 : decoupage de conformite .
58 c . ulsort . e . 1 . unite logique de la sortie generale .
59 c . langue . e . 1 . langue des messages .
60 c . . . . 1 : francais, 2 : anglais .
61 c . codret . es . 1 . code de retour des modules .
62 c . . . . 0 : pas de probleme .
63 c ______________________________________________________________________
66 c 0. declarations et dimensionnement
69 c 0.1. ==> generalites
83 integer indnoe, nouvno, nouvar, nouvtr, nouvqu
84 integer hetnoe(nouvno), arenoe(nouvno), famnoe(nouvno)
85 integer hetare(nouvar), somare(2,nouvar), filare(nouvar)
86 integer np2are(nouvar)
87 integer nintri(nouvtr)
88 integer arequa(nouvqu,4), hetqua(nouvqu), filqua(nouvqu)
89 integer ninqua(nouvqu)
92 double precision coonoe(nouvno,sdim)
94 integer ulsort, langue, codret
96 c 0.4. ==> variables locales
99 integer lequad, lefils
100 integer a1, a2, a3, a4
101 integer sa1a2, sa2a3, sa3a4, sa4a1
102 integer n1, n2, n3, n4
103 integer iaux1, iaux2, iaux3
107 integer ai, aj, ak, al
109 integer saiaj, sajak, sakal, salai
113 c ______________________________________________________________________
116 c creation des noeuds internes aux nouveaux quadrangles
117 c on remarque que cette technique permet de garantir qu'un noeud
118 c interne a toujours un numero superieur a ceux des autres noeuds
122 do 11 , lequad = 1, nouvqu
124 cgn write (ulsort,90015) 'Quad', lequad, ' d''etat',hetqua(lequad)
125 etanp1 = mod(hetqua(lequad),100)
128 c 1. Ce quadrangle vient d'etre coupe en 4 : raffinement standard
131 if ( option.eq.0 .and. etanp1.eq.4 ) then
133 etan = (hetqua(lequad)-etanp1)/100
134 cgn write (ulsort,90002) 'etan', etan
136 if ( etan.ne.4 .and. etan.ne.99 ) then
137 cgn write (ulsort,90015) 'Quadrangle', lequad, ' coupe en 4'
139 c 1.1. ==> on recupere ses sommets
140 c voir cmrdqu pour la convention
150 a1 = arequa(lequad,1)
151 a2 = arequa(lequad,2)
152 a3 = arequa(lequad,3)
153 a4 = arequa(lequad,4)
155 call utsoqu ( somare, a1, a2, a3, a4,
156 > sa1a2, sa2a3, sa3a4, sa4a1 )
157 cgn write (ulsort,90002) 'sommets du pere',sa1a2, sa2a3, sa3a4, sa4a1
159 c 1.2. ==> Le noeud central
161 lesomm = ninqua(lequad)
162 cgn write (ulsort,90002) 'lesomm',lesomm
164 c 1.3. ==> les noeuds milieux des aretes
170 cgn write (ulsort,90002) 'noeuds milieux ',n1, n2, n3, n4
172 c 1.2. ==> creation pour les fils
174 lefils = filqua(lequad)
178 if ( iaux.eq.0 ) then
182 elseif ( iaux.eq.1 ) then
186 elseif ( iaux.eq.2 ) then
197 cgn write (ulsort,90002) '==> Creation du noeud', indnoe
198 cgn write (ulsort,90002) ' base sur', iaux1, iaux2, iaux3, lesomm
199 ninqua(lefils+iaux) = indnoe
201 if ( sdim.eq.2 ) then
202 coonoe(indnoe,1) = unsqu *
203 > ( coonoe(iaux1,1) + coonoe(iaux2,1) +
204 > coonoe(iaux3,1) + coonoe(lesomm,1) )
205 coonoe(indnoe,2) = unsqu *
206 > ( coonoe(iaux1,2) + coonoe(iaux2,2) +
207 > coonoe(iaux3,2) + coonoe(lesomm,2) )
209 coonoe(indnoe,1) = unsqu *
210 > ( coonoe(iaux1,1) + coonoe(iaux2,1) +
211 > coonoe(iaux3,1) + coonoe(lesomm,1) )
212 coonoe(indnoe,2) = unsqu *
213 > ( coonoe(iaux1,2) + coonoe(iaux2,2) +
214 > coonoe(iaux3,2) + coonoe(lesomm,2) )
215 coonoe(indnoe,3) = unsqu *
216 > ( coonoe(iaux1,3) + coonoe(iaux2,3) +
217 > coonoe(iaux3,3) + coonoe(lesomm,3) )
228 c 2. Ce quadrangle vient d'etre coupe en 3 triangles : conformite
231 elseif ( option.eq.1 .and.
232 > ( etanp1.ge.31 .and. etanp1.le.34 ) ) then
234 cgn write (ulsort,90015) 'Quadrangle', lequad, ' coupe en 3'
236 c 2.1. ==> determination des aretes et des sommets, relativement
237 c au decoupage de l'arete
238 c voir cmcdqu pour la convention
239 c S4=sa4a1 a4 sa3a4=S3
246 c S1=sa1a2 a2 sa2a3=S2
248 a1 = arequa(lequad,1)
249 a2 = arequa(lequad,2)
250 a3 = arequa(lequad,3)
251 a4 = arequa(lequad,4)
253 call utcoq3 ( hetare, somare, filare, a1, a2, a3, a4,
254 > numdec, ai, aj, ak, al, afij, afil,
255 > saiaj, sajak, sakal, salai, ni,
256 > ulsort, langue, codret )
257 cgn write (ulsort,90002) 'numdec', numdec,etanp1
258 cgn write (ulsort,90002) 'ni', ni
260 call utsoqu ( somare, a1, a2, a3, a4,
261 > sa1a2, sa2a3, sa3a4, sa4a1 )
262 cgn write (ulsort,90002) 'sommets du pere',sa1a2, sa2a3, sa3a4, sa4a1
264 c 2.3. ==> creation pour les trois fils
266 lefils = filqua(lequad)
267 cgn write (ulsort,90002) 'lefils', lefils
271 if ( iaux.eq.0 ) then
274 elseif ( iaux.eq.1 ) then
282 cgn write (ulsort,90002) '==> Creation du noeud', indnoe
283 cgn write (ulsort,90002) ' base sur', iaux1, iaux2, ni
284 nintri(-lefils+iaux) = indnoe
286 if ( sdim.eq.2 ) then
287 coonoe(indnoe,1) = unstr *
288 > ( coonoe(iaux1,1) + coonoe(iaux2,1) + coonoe(ni,1) )
289 coonoe(indnoe,2) = unstr *
290 > ( coonoe(iaux1,2) + coonoe(iaux2,2) + coonoe(ni,2) )
292 coonoe(indnoe,1) = unstr *
293 > ( coonoe(iaux1,1) + coonoe(iaux2,1) + coonoe(ni,1) )
294 coonoe(indnoe,2) = unstr *
295 > ( coonoe(iaux1,2) + coonoe(iaux2,2) + coonoe(ni,2) )
296 coonoe(indnoe,3) = unstr *
297 > ( coonoe(iaux1,3) + coonoe(iaux2,3) + coonoe(ni,3) )