--- /dev/null
+ subroutine utmcz0 ( nbzord, cazord,
+ > nbfich,
+ > nomref, lgnofi, poinno,
+ > nomufi, nomstr,
+ > ulsort, langue, codret )
+c ______________________________________________________________________
+c
+c H O M A R D
+c
+c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
+c
+c Version originale enregistree le 18 juin 1996 sous le numero 96036
+c aupres des huissiers de justice Simart et Lavoir a Clamart
+c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
+c aupres des huissiers de justice
+c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
+c
+c HOMARD est une marque deposee d'Electricite de France
+c
+c Copyright EDF 1996
+c Copyright EDF 1998
+c Copyright EDF 2002
+c Copyright EDF 2020
+c ______________________________________________________________________
+c
+c UTilitaire : Mot-Cle - caracterisation des Zones a Raffiner - 0
+c -- - - - -
+c ______________________________________________________________________
+c . . . . .
+c . nom . e/s . taille . description .
+c .____________________________________________________________________.
+c . nbzord . es . 1 . nombre de zones a raffiner/deraffiner .
+c . . . . si negatif, les zones sont 2D (en x et y) .
+c . cazord . s . 20 * . caracteristiques zone a raffiner/deraffiner.
+c . . . nbzord . 1 : >0 si a raffiner, <0 si a deraffiner .
+c . . . . . si rectangle : .
+c . . . . 1 : +-1 .
+c . . . . de 2 a 5 : xmin, xmax, ymin, ymax .
+c . . . . . si parallelepipede : .
+c . . . . 1 : +-2 .
+c . . . . de 2 a 7 : xmin, xmax, ymin, ymax .
+c . . . . zmin, zmax .
+c . . . . . si disque : .
+c . . . . 1 : +-3 .
+c . . . . de 8 a 10 : rayon, xcentr, ycentr .
+c . . . . . si sphere : .
+c . . . . 1 : +-4 .
+c . . . . de 8 a 11 : rayon, xcentr, ycentr, zcentr .
+c . . . . . si cylindre : .
+c . . . . 1 : +-5 .
+c . . . . 8 : rayon .
+c . . . . de 12 a 14 : xaxe, yaxe, zaxe .
+c . . . . de 15 a 17 : xbase, ybase, zbase .
+c . . . . 18 : hauteur .
+c . . . . . si disque perce : .
+c . . . . 1 : +-6 .
+c . . . . de 9 a 10 : xcentr, ycentr .
+c . . . . 19 : rayon interieur .
+c . . . . 20 : rayon exterieur .
+c . . . . . si tuyau : .
+c . . . . 1 : +-7 .
+c . . . . de 12 a 14 : xaxe, yaxe, zaxe .
+c . . . . de 15 a 17 : xbase, ybase, zbase .
+c . . . . 18 : hauteur .
+c . . . . 19 : rayon interieur .
+c . . . . 20 : rayon exterieur .
+c . nomref . e . nbfich . nom de reference des fichiers .
+c . lgnofi . e . nbfich . longueurs des noms des fichiers .
+c . poinno . e .0:nbfich. pointeur dans le tableau des noms .
+c . nomufi . e . lgtanf . noms des fichiers .
+c . nomstr . e . nbfich . nom des structures .
+c . ulsort . e . 1 . numero d'unite logique de la liste standard.
+c . langue . e . 1 . langue des messages .
+c . . . . 1 : francais, 2 : anglais .
+c . codret . es . 1 . code de retour des modules .
+c . . . . 0 : pas de probleme .
+c . . . . 2 : probleme de lecture .
+c . . . . 3 : type inconnu .
+c ______________________________________________________________________
+c
+c====
+c 0. declarations et dimensionnement
+c====
+c
+c 0.1. ==> generalites
+c
+ implicit none
+ save
+c
+ character*6 nompro
+ parameter ( nompro = 'UTMCZ0' )
+c
+#include "nblang.h"
+#include "motcle.h"
+c
+ integer nbmcle
+ parameter ( nbmcle = 20 )
+c
+c 0.2. ==> communs
+c
+#include "envex1.h"
+c
+c 0.3. ==> arguments
+c
+ integer nbzord
+ integer nbfich
+ integer lgnofi(nbfich), poinno(0:nbfich)
+c
+ character*8 nomref(nbfich), nomufi(*), nomstr(nbfich)
+c
+ double precision cazord(nbmcle,nbzord)
+c
+ integer ulsort, langue, codret
+c
+c 0.4. ==> variables locales
+c
+ integer iaux, jaux
+ integer nrfich
+ integer nrzord, tyzord, tyzosi
+ integer numero, nrmcle
+c
+ character*8 mclref(nbmcle)
+ character*200 sau200
+c
+ logical mccode(nbmcle)
+ logical mccod2(nbmcle)
+c
+ double precision daux
+c
+ integer nbmess
+ parameter ( nbmess = 10 )
+ character*80 texte(nblang,nbmess)
+c
+ character*13 messag(nblang,7)
+c
+c 0.5. ==> initialisations
+c ______________________________________________________________________
+c
+c====
+c 1. messages
+c====
+c
+c 1.1. ==> tout va bien
+c
+ codret = 0
+c
+c 1.2. ==> les messages
+c
+#include "impr01.h"
+c
+#ifdef _DEBUG_HOMARD_
+ write (ulsort,texte(langue,1)) 'Entree', nompro
+ call dmflsh (iaux)
+#endif
+c
+ texte(1,4) = '(''Nombre de zones a raffiner :'',i8)'
+ texte(1,5) = '(''Numero de la zone en cours de recherche :'',i8)'
+ texte(1,6) = '(''Type de la zone : '',a)'
+ texte(1,7) = '(''Le type '',i8,'' est inconnu.'')'
+ texte(1,8) = '(''La valeur de '',a,'' est indecodable.'')'
+c
+ texte(2,4) = '(''Number of zones to refine :'',i8)'
+ texte(2,5) = '(''Search for zone #'',i8)'
+ texte(2,6) = '(''Type of zone : '',a)'
+ texte(2,7) = '(''The type #'',i8,'' is unknown.'')'
+ texte(2,8) = '(''The value for '',a,'' cannot be uncoded.'')'
+c
+c 1234567890123
+ messag(1,1) = 'Rectangle '
+ messag(1,2) = 'Parallepipede'
+ messag(1,3) = 'Disque '
+ messag(1,4) = 'Sphere '
+ messag(1,5) = 'Cylindre '
+ messag(1,6) = 'Disque perce '
+ messag(1,7) = 'Tuyau '
+c
+ messag(2,1) = 'Rectangle '
+ messag(2,2) = 'Parallepiped '
+ messag(2,3) = 'Disk '
+ messag(2,4) = 'Sphere '
+ messag(2,5) = 'Cylindre '
+ messag(2,6) = 'Disk '
+ messag(2,7) = 'Pipe '
+c
+c 1.3. ==> preliminaires
+c
+#ifdef _DEBUG_HOMARD_
+ write (ulsort,texte(langue,4)) nbzord
+#endif
+ mclref( 1) = mczrty
+ mclref( 2) = mcrxmi
+ mclref( 3) = mcrxma
+ mclref( 4) = mcrymi
+ mclref( 5) = mcryma
+ mclref( 6) = mcrzmi
+ mclref( 7) = mcrzma
+ mclref( 8) = mcrray
+ mclref( 9) = mcrxce
+ mclref(10) = mcryce
+ mclref(11) = mcrzce
+ mclref(12) = mcrxax
+ mclref(13) = mcryax
+ mclref(14) = mcrzax
+ mclref(15) = mcrxba
+ mclref(16) = mcryba
+ mclref(17) = mcrzba
+ mclref(18) = mcrhau
+ mclref(19) = mcrrai
+ mclref(20) = mcrrae
+c
+#ifdef _DEBUG_HOMARD_
+ write(ulsort,*) mclref
+#endif
+c
+c====
+c 2. on parcourt toutes les posssibilites de zones de raffinement
+c====
+c
+ do 20 , nrzord = 1 , nbzord
+c
+c 2.0. ==> On n'a rien au debut
+c
+ do 201 , iaux = 1 , nbmcle
+ mccode(iaux) = .false.
+ 201 continue
+c
+ do 200 , nrfich = 1 , nbfich
+c
+c 2.1. ==> si c'est un des mots-cles possibles, on verifie si c'est
+c pour la bonne zone
+c
+ if ( codret.eq.0 ) then
+c
+cgn write(ulsort,*) nomref(nrfich)
+ nrmcle = -1
+ do 21 , iaux = 1 , nbmcle
+cgn write(ulsort,*) 'mclref(',iaux,') =', mclref(iaux)
+ if ( nomref(nrfich).eq.mclref(iaux) ) then
+ nrmcle = iaux
+cgn write(ulsort,*) '==> nrmcle =',iaux
+ goto 211
+ endif
+ 21 continue
+c
+ 211 continue
+c
+ if ( nrmcle.ge.1 ) then
+c
+ call utchen ( nomstr(nrfich), numero,
+ > ulsort, langue, codret )
+c
+ if ( nrzord.ne.numero ) then
+ goto 200
+ endif
+c
+ else
+c
+ goto 200
+c
+ endif
+c
+ endif
+c
+c 2.2. ==> Recherche de la valeur
+c 2.2.1. ==> Mise sous forme de chaine de la 3eme donnee sur la ligne
+c
+ if ( codret.eq.0 ) then
+c
+ iaux = poinno(nrfich-1) + 1
+ jaux = lgnofi(nrfich)
+ call uts8ch ( nomufi(iaux), jaux, sau200,
+ > ulsort, langue, codret )
+c
+ endif
+cgn write(ulsort,*) 'nrmcle =',nrmcle,nomufi(iaux),
+cgn >'sau200 = ',sau200
+c
+c 2.2.2. ==> Conversions
+c
+ if ( codret.eq.0 ) then
+c
+c 2.2.2.1. ==> Conversion du type : entier a decoder, puis reel
+c
+ if ( nrmcle.eq.1 ) then
+c
+ call utchen ( sau200, tyzord,
+ > ulsort, langue, codret )
+c
+ cazord(nrmcle,nrzord) = dble(tyzord)
+ if ( tyzord.gt.0 ) then
+ tyzosi = 1
+ else
+ tyzosi = -1
+ endif
+ tyzord = abs(tyzord)
+c
+c 2.2.2.2. ==> Conversion des coordonnees : reel
+c
+ elseif ( nrmcle.ge.2 ) then
+c
+ call utchre ( sau200, daux,
+ > ulsort, langue, codret )
+ cazord(nrmcle,nrzord) = daux
+c
+ if ( codret.ne.0 ) then
+ write (ulsort,texte(langue,5)) nrzord
+ write (ulsort,texte(langue,8)) mclref(nrmcle)
+ endif
+c
+ endif
+c
+ endif
+c
+c 2.2.3. ==> Memorisation du passage par le mot-cle
+c
+ if ( codret.eq.0 ) then
+c
+ mccode(nrmcle) = .true.
+c
+ endif
+c
+c 2.3. ==> Controle ; si on a tout trouve, on passe a la zone suivante
+c
+ if ( codret.eq.0 ) then
+c
+ if ( mccode(1) ) then
+c
+c 2.3.1. ==> Cas du rectangle
+c
+ if ( tyzord.eq.1 ) then
+c
+ if ( mccode(2) .and. mccode(3) .and.
+ > mccode(4) .and. mccode(5) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.2. ==> Cas du parallelepipede
+c
+ elseif ( tyzord.eq.2 ) then
+c
+ if ( mccode(2) .and. mccode(3) .and.
+ > mccode(4) .and. mccode(5) .and.
+ > mccode(6) .and. mccode(7) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.3. ==> Cas du disque
+c
+ elseif ( tyzord.eq.3 ) then
+c
+ if ( mccode( 8) .and. mccode( 9) .and.
+ > mccode(10) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.4. ==> Cas de la sphere
+c
+ elseif ( tyzord.eq.4 ) then
+c
+ if ( mccode( 8) .and. mccode( 9) .and.
+ > mccode(10) .and. mccode(11) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.5. ==> Cas du cylindre
+c
+ elseif ( tyzord.eq.5 ) then
+c
+ if ( mccode( 8) .and.
+ > mccode(12) .and. mccode(13) .and.
+ > mccode(14) .and. mccode(15) .and.
+ > mccode(16) .and. mccode(17) .and.
+ > mccode(18) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.6. ==> Cas du disque perce
+c
+ elseif ( tyzord.eq.6 ) then
+c
+ if ( mccode( 9) .and. mccode(10) .and.
+ > mccode(19) .and. mccode(20) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.7. ==> Cas du tuyau
+c
+ elseif ( tyzord.eq.7 ) then
+c
+ if ( mccode(12) .and. mccode(13) .and.
+ > mccode(14) .and. mccode(15) .and.
+ > mccode(16) .and. mccode(17) .and.
+ > mccode(18) .and. mccode(19) .and.
+ > mccode(20) ) then
+c
+ goto 20
+c
+ endif
+c
+c 2.3.n. ==> Type inconnu
+c
+ else
+ write (ulsort,texte(langue,7)) tyzord*tyzosi
+ codret = 3
+ endif
+c
+ endif
+c
+ endif
+c
+ 200 continue
+c
+c 2.4. ==> si on arrive ici, c'est qu'il en manque pour la zone courante
+c
+ if ( codret.eq.0 ) then
+c
+ do 240 , iaux = 1 , nbmcle
+ mccod2(iaux) = .false.
+ 240 continue
+c
+ write (ulsort,texte(langue,5)) nrzord
+ write (ulsort,texte(langue,6)) messag(langue,tyzord)
+ if ( tyzord.eq.1 ) then
+ do 241 , iaux = 2 , 5
+ mccod2(iaux) = .true.
+ 241 continue
+ elseif ( tyzord.eq.2 ) then
+ do 242 , iaux = 2 , 7
+ mccod2(iaux) = .true.
+ 242 continue
+ elseif ( tyzord.eq.3 ) then
+ do 243 , iaux = 8 , 10
+ mccod2(iaux) = .true.
+ 243 continue
+ elseif ( tyzord.eq.4 ) then
+ do 244 , iaux = 8 , 11
+ mccod2(iaux) = .true.
+ 244 continue
+ elseif ( tyzord.ge.5 ) then
+ mccod2(8) = .true.
+ do 245 , iaux = 12 , 18
+ mccod2(iaux) = .true.
+ 245 continue
+ elseif ( tyzord.eq.6 ) then
+ do 246 , iaux = 8 , 10
+ mccod2(iaux) = .true.
+ 246 continue
+ mccod2(19) = .true.
+ elseif ( tyzord.eq.7 ) then
+ mccod2(8) = .true.
+ do 248 , iaux = 12 , 19
+ mccod2(iaux) = .true.
+ 248 continue
+ endif
+ do 24 , iaux = 2 , nbmcle
+ if ( .not.mccode(iaux) .and. mccod2(iaux) ) then
+ write (ulsort,texte(langue,8)) mclref(iaux)
+ endif
+ 24 continue
+c
+ codret = 2
+c
+ endif
+c
+ 20 continue
+c
+c====
+c 3. la fin
+c====
+c
+ if ( codret.ne.0 ) then
+c
+ call dmflsh(iaux)
+c
+#include "envex2.h"
+c
+ write (ulsort,texte(langue,1)) 'Sortie', nompro
+ write (ulsort,texte(langue,2)) codret
+c
+ endif
+c
+#ifdef _DEBUG_HOMARD_
+ write (ulsort,texte(langue,1)) 'Sortie', nompro
+ call dmflsh (iaux)
+#endif
+c
+ end