1 subroutine utmcz0 ( nbzord, cazord,
3 > nomref, lgnofi, poinno,
5 > ulsort, langue, codret )
6 c ______________________________________________________________________
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
18 c HOMARD est une marque deposee d'Electricite de France
24 c ______________________________________________________________________
26 c UTilitaire : Mot-Cle - caracterisation des Zones a Raffiner - 0
28 c ______________________________________________________________________
30 c . nom . e/s . taille . description .
31 c .____________________________________________________________________.
32 c . nbzord . es . 1 . nombre de zones a raffiner/deraffiner .
33 c . . . . si negatif, les zones sont 2D (en x et y) .
34 c . cazord . s . 20 * . caracteristiques zone a raffiner/deraffiner.
35 c . . . nbzord . 1 : >0 si a raffiner, <0 si a deraffiner .
36 c . . . . . si rectangle : .
38 c . . . . de 2 a 5 : xmin, xmax, ymin, ymax .
39 c . . . . . si parallelepipede : .
41 c . . . . de 2 a 7 : xmin, xmax, ymin, ymax .
42 c . . . . zmin, zmax .
43 c . . . . . si disque : .
45 c . . . . de 8 a 10 : rayon, xcentr, ycentr .
46 c . . . . . si sphere : .
48 c . . . . de 8 a 11 : rayon, xcentr, ycentr, zcentr .
49 c . . . . . si cylindre : .
52 c . . . . de 12 a 14 : xaxe, yaxe, zaxe .
53 c . . . . de 15 a 17 : xbase, ybase, zbase .
54 c . . . . 18 : hauteur .
55 c . . . . . si disque perce : .
57 c . . . . de 9 a 10 : xcentr, ycentr .
58 c . . . . 19 : rayon interieur .
59 c . . . . 20 : rayon exterieur .
60 c . . . . . si tuyau : .
62 c . . . . de 12 a 14 : xaxe, yaxe, zaxe .
63 c . . . . de 15 a 17 : xbase, ybase, zbase .
64 c . . . . 18 : hauteur .
65 c . . . . 19 : rayon interieur .
66 c . . . . 20 : rayon exterieur .
67 c . nomref . e . nbfich . nom de reference des fichiers .
68 c . lgnofi . e . nbfich . longueurs des noms des fichiers .
69 c . poinno . e .0:nbfich. pointeur dans le tableau des noms .
70 c . nomufi . e . lgtanf . noms des fichiers .
71 c . nomstr . e . nbfich . nom des structures .
72 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
73 c . langue . e . 1 . langue des messages .
74 c . . . . 1 : francais, 2 : anglais .
75 c . codret . es . 1 . code de retour des modules .
76 c . . . . 0 : pas de probleme .
77 c . . . . 2 : probleme de lecture .
78 c . . . . 3 : type inconnu .
79 c ______________________________________________________________________
82 c 0. declarations et dimensionnement
85 c 0.1. ==> generalites
91 parameter ( nompro = 'UTMCZ0' )
97 parameter ( nbmcle = 20 )
107 integer lgnofi(nbfich), poinno(0:nbfich)
109 character*8 nomref(nbfich), nomufi(*), nomstr(nbfich)
111 double precision cazord(nbmcle,nbzord)
113 integer ulsort, langue, codret
115 c 0.4. ==> variables locales
119 integer nrzord, tyzord, tyzosi
120 integer numero, nrmcle
122 character*8 mclref(nbmcle)
125 logical mccode(nbmcle)
126 logical mccod2(nbmcle)
128 double precision daux
131 parameter ( nbmess = 10 )
132 character*80 texte(nblang,nbmess)
134 character*13 messag(nblang,7)
136 c 0.5. ==> initialisations
137 c ______________________________________________________________________
143 c 1.1. ==> tout va bien
147 c 1.2. ==> les messages
151 #ifdef _DEBUG_HOMARD_
152 write (ulsort,texte(langue,1)) 'Entree', nompro
156 texte(1,4) = '(''Nombre de zones a raffiner :'',i8)'
157 texte(1,5) = '(''Numero de la zone en cours de recherche :'',i8)'
158 texte(1,6) = '(''Type de la zone : '',a)'
159 texte(1,7) = '(''Le type '',i8,'' est inconnu.'')'
160 texte(1,8) = '(''La valeur de '',a,'' est indecodable.'')'
162 texte(2,4) = '(''Number of zones to refine :'',i8)'
163 texte(2,5) = '(''Search for zone #'',i8)'
164 texte(2,6) = '(''Type of zone : '',a)'
165 texte(2,7) = '(''The type #'',i8,'' is unknown.'')'
166 texte(2,8) = '(''The value for '',a,'' cannot be uncoded.'')'
169 messag(1,1) = 'Rectangle '
170 messag(1,2) = 'Parallepipede'
171 messag(1,3) = 'Disque '
172 messag(1,4) = 'Sphere '
173 messag(1,5) = 'Cylindre '
174 messag(1,6) = 'Disque perce '
175 messag(1,7) = 'Tuyau '
177 messag(2,1) = 'Rectangle '
178 messag(2,2) = 'Parallepiped '
179 messag(2,3) = 'Disk '
180 messag(2,4) = 'Sphere '
181 messag(2,5) = 'Cylindre '
182 messag(2,6) = 'Disk '
183 messag(2,7) = 'Pipe '
185 c 1.3. ==> preliminaires
187 #ifdef _DEBUG_HOMARD_
188 write (ulsort,texte(langue,4)) nbzord
211 #ifdef _DEBUG_HOMARD_
212 write(ulsort,*) mclref
216 c 2. on parcourt toutes les posssibilites de zones de raffinement
219 do 20 , nrzord = 1 , nbzord
221 c 2.0. ==> On n'a rien au debut
223 do 201 , iaux = 1 , nbmcle
224 mccode(iaux) = .false.
227 do 200 , nrfich = 1 , nbfich
229 c 2.1. ==> si c'est un des mots-cles possibles, on verifie si c'est
232 if ( codret.eq.0 ) then
234 cgn write(ulsort,*) nomref(nrfich)
236 do 21 , iaux = 1 , nbmcle
237 cgn write(ulsort,*) 'mclref(',iaux,') =', mclref(iaux)
238 if ( nomref(nrfich).eq.mclref(iaux) ) then
240 cgn write(ulsort,*) '==> nrmcle =',iaux
247 if ( nrmcle.ge.1 ) then
249 call utchen ( nomstr(nrfich), numero,
250 > ulsort, langue, codret )
252 if ( nrzord.ne.numero ) then
264 c 2.2. ==> Recherche de la valeur
265 c 2.2.1. ==> Mise sous forme de chaine de la 3eme donnee sur la ligne
267 if ( codret.eq.0 ) then
269 iaux = poinno(nrfich-1) + 1
270 jaux = lgnofi(nrfich)
271 call uts8ch ( nomufi(iaux), jaux, sau200,
272 > ulsort, langue, codret )
275 cgn write(ulsort,*) 'nrmcle =',nrmcle,nomufi(iaux),
276 cgn >'sau200 = ',sau200
278 c 2.2.2. ==> Conversions
280 if ( codret.eq.0 ) then
282 c 2.2.2.1. ==> Conversion du type : entier a decoder, puis reel
284 if ( nrmcle.eq.1 ) then
286 call utchen ( sau200, tyzord,
287 > ulsort, langue, codret )
289 cazord(nrmcle,nrzord) = dble(tyzord)
290 if ( tyzord.gt.0 ) then
297 c 2.2.2.2. ==> Conversion des coordonnees : reel
299 elseif ( nrmcle.ge.2 ) then
301 call utchre ( sau200, daux,
302 > ulsort, langue, codret )
303 cazord(nrmcle,nrzord) = daux
305 if ( codret.ne.0 ) then
306 write (ulsort,texte(langue,5)) nrzord
307 write (ulsort,texte(langue,8)) mclref(nrmcle)
314 c 2.2.3. ==> Memorisation du passage par le mot-cle
316 if ( codret.eq.0 ) then
318 mccode(nrmcle) = .true.
322 c 2.3. ==> Controle ; si on a tout trouve, on passe a la zone suivante
324 if ( codret.eq.0 ) then
326 if ( mccode(1) ) then
328 c 2.3.1. ==> Cas du rectangle
330 if ( tyzord.eq.1 ) then
332 if ( mccode(2) .and. mccode(3) .and.
333 > mccode(4) .and. mccode(5) ) then
339 c 2.3.2. ==> Cas du parallelepipede
341 elseif ( tyzord.eq.2 ) then
343 if ( mccode(2) .and. mccode(3) .and.
344 > mccode(4) .and. mccode(5) .and.
345 > mccode(6) .and. mccode(7) ) then
351 c 2.3.3. ==> Cas du disque
353 elseif ( tyzord.eq.3 ) then
355 if ( mccode( 8) .and. mccode( 9) .and.
362 c 2.3.4. ==> Cas de la sphere
364 elseif ( tyzord.eq.4 ) then
366 if ( mccode( 8) .and. mccode( 9) .and.
367 > mccode(10) .and. mccode(11) ) then
373 c 2.3.5. ==> Cas du cylindre
375 elseif ( tyzord.eq.5 ) then
377 if ( mccode( 8) .and.
378 > mccode(12) .and. mccode(13) .and.
379 > mccode(14) .and. mccode(15) .and.
380 > mccode(16) .and. mccode(17) .and.
387 c 2.3.6. ==> Cas du disque perce
389 elseif ( tyzord.eq.6 ) then
391 if ( mccode( 9) .and. mccode(10) .and.
392 > mccode(19) .and. mccode(20) ) then
398 c 2.3.7. ==> Cas du tuyau
400 elseif ( tyzord.eq.7 ) then
402 if ( mccode(12) .and. mccode(13) .and.
403 > mccode(14) .and. mccode(15) .and.
404 > mccode(16) .and. mccode(17) .and.
405 > mccode(18) .and. mccode(19) .and.
412 c 2.3.n. ==> Type inconnu
415 write (ulsort,texte(langue,7)) tyzord*tyzosi
425 c 2.4. ==> si on arrive ici, c'est qu'il en manque pour la zone courante
427 if ( codret.eq.0 ) then
429 do 240 , iaux = 1 , nbmcle
430 mccod2(iaux) = .false.
433 write (ulsort,texte(langue,5)) nrzord
434 write (ulsort,texte(langue,6)) messag(langue,tyzord)
435 if ( tyzord.eq.1 ) then
436 do 241 , iaux = 2 , 5
437 mccod2(iaux) = .true.
439 elseif ( tyzord.eq.2 ) then
440 do 242 , iaux = 2 , 7
441 mccod2(iaux) = .true.
443 elseif ( tyzord.eq.3 ) then
444 do 243 , iaux = 8 , 10
445 mccod2(iaux) = .true.
447 elseif ( tyzord.eq.4 ) then
448 do 244 , iaux = 8 , 11
449 mccod2(iaux) = .true.
451 elseif ( tyzord.ge.5 ) then
453 do 245 , iaux = 12 , 18
454 mccod2(iaux) = .true.
456 elseif ( tyzord.eq.6 ) then
457 do 246 , iaux = 8 , 10
458 mccod2(iaux) = .true.
461 elseif ( tyzord.eq.7 ) then
463 do 248 , iaux = 12 , 19
464 mccod2(iaux) = .true.
467 do 24 , iaux = 2 , nbmcle
468 if ( .not.mccode(iaux) .and. mccod2(iaux) ) then
469 write (ulsort,texte(langue,8)) mclref(iaux)
483 if ( codret.ne.0 ) then
489 write (ulsort,texte(langue,1)) 'Sortie', nompro
490 write (ulsort,texte(langue,2)) codret
494 #ifdef _DEBUG_HOMARD_
495 write (ulsort,texte(langue,1)) 'Sortie', nompro