1 subroutine utmcc0 ( nbcham,
2 > caetal, cactal, cartal,
4 > nomref, lgnofi, poinno,
6 > ulsort, langue, codret )
7 c ______________________________________________________________________
11 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
13 c Version originale enregistree le 18 juin 1996 sous le numero 96036
14 c aupres des huissiers de justice Simart et Lavoir a Clamart
15 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
16 c aupres des huissiers de justice
17 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
19 c HOMARD est une marque deposee d'Electricite de France
25 c ______________________________________________________________________
27 c UTilitaire : Mot-Cle - liste des Champs a mettre a jour - 0
29 c ______________________________________________________________________
31 c . nom . e/s . taille . description .
32 c .____________________________________________________________________.
33 c . nbcham . e . 1 . nombre de champs a mettre a jour .
34 c . cactal . s .8*nbseal. caracteristiques caracteres de chaque .
35 c . . . . tableau a lire .
36 c . . . . 1,2,3,4. nom du champ associe .
37 c . caetal . s . 12 * . caracteristiques entieres de chaque .
38 c . . . nbseal . tableau a lire .
39 c . . . . 1. type de support au sens MED .
40 c . . . . -1, si on prend tous les supports .
41 c . . . . 2. 1, si numero du pas de temps, 0 sinon .
42 c . . . . 3. numero du pas de temps .
43 c . . . . 4. 1, si numero d'ordre, 0 sinon .
44 c . . . . 5. numero d'ordre .
45 c . . . . 6. 1, si instant, 0 sinon .
46 c . . . . 7. 1, si aux noeuds par elements, 0 sinon, .
47 c . . . . -1, si non precise .
48 c . . . . 8. numero du champ noeuds/element associe .
49 c . . . . 9. numero du champ associe dans HOMARD .
50 c . . . . 10. type d'interpolation .
51 c . . . . 0, si automatique .
52 c . . . . 1 si degre 1, 2 si degre 2, 3 si iso-P2 .
53 c . . . . 11. sans objet a ce stade du traitement .
54 c . . . . 12. type de champ edfl64/edin64 .
55 c . cartal . s . nbseal . caracteristiques reelles de chaque .
56 c . . . . tableau a lire .
57 c . . . . 1. instant .
58 c . nomref . e . nbfich . nom de reference des fichiers .
59 c . lgnofi . e . nbfich . longueurs des noms des fichiers .
60 c . poinno . e .0:nbfich. pointeur dans le tableau des noms .
61 c . nomufi . e . lgtanf . noms des fichiers .
62 c . nomstr . e . nbfich . nom des structures .
63 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
64 c . langue . e . 1 . langue des messages .
65 c . . . . 1 : francais, 2 : anglais .
66 c . codret . es . 1 . code de retour des modules .
67 c . . . . 0 : pas de probleme .
68 c . . . . 1 : la configuration est perdue .
69 c . . . . 2 : probleme de lecture .
70 c . . . . 8 : Allocation impossible .
71 c ______________________________________________________________________
74 c 0. declarations et dimensionnement
77 c 0.1. ==> generalites
83 parameter ( nompro = 'UTMCC0' )
96 integer caetal(12,nbcham)
98 integer lgnofi(nbfich), poinno(0:nbfich)
100 double precision cartal(*)
102 character*8 cactal(*)
103 character*8 nomref(nbfich), nomufi(*), nomstr(nbfich)
105 integer ulsort, langue, codret
107 c 0.4. ==> variables locales
109 integer iaux, jaux, kaux
110 integer nrcham, nrfich
113 double precision daux
118 logical chnom, chnum, chpdt, chins, chcas, chncn
121 parameter ( nbmess = 20 )
122 character*80 texte(nblang,nbmess)
124 c 0.5. ==> initialisations
125 c ______________________________________________________________________
133 #ifdef _DEBUG_HOMARD_
134 write (ulsort,texte(langue,1)) 'Entree', nompro
138 texte(1,4) = '(''Nombre de champs a mettre a jour :'',i8)'
139 texte(1,5) = '(/,''Numero du champ en cours de recherche :'',i8)'
140 texte(1,6) = '('' .. ==> Nom du champ : '',a)'
141 texte(1,7) = '(''Le nom est introuvable.'')'
142 texte(1,8) = '('' .. ==> Numero d''''ordre :'',i8)'
143 texte(1,9) = '(''Le numero d''''ordre est introuvable.'')'
144 texte(1,10) = '('' .. ==> Numero du pas de temps :'',i8)'
145 texte(1,11) = '(''Le numero de pas de temps est introuvable.'')'
146 texte(1,12) = '('' .. ==> Instant :'',g12.5)'
147 texte(1,13) = '(''L''''instant est introuvable.'')'
148 texte(1,14) = '('' .. ==> Caracteristique du support : '',a)'
150 > '(''La caracteristique du support est inconnue : '',a)'
151 texte(1,16) = '('' .. ==> Numero du champ associe :'',i8)'
153 texte(2,4) = '(''Number of files to update :'',i8)'
154 texte(2,5) = '(/,''Search for field #'',i8)'
155 texte(2,6) = '('' .. ==> Name of the field : '',a)'
156 texte(2,7) = '(''Name of the field cannot be found.'')'
157 texte(2,8) = '('' .. ==> Rank number :'',i8)'
158 texte(2,9) = '(''Rank number cannot be found.'')'
159 texte(2,10) = '('' .. ==> Time step # :'',i8)'
160 texte(2,11) = '(''Time step # cannot be found.'')'
161 texte(2,12) = '('' .. ==> Instant :'',g12.5)'
162 texte(2,13) = '(''Instant cannot be found.'')'
163 texte(2,14) = '('' .. ==> Characteristic of support : '',a)'
165 > '(''The characteristic of support is unknown : '',a)'
166 texte(2,16) = '(''. Number for the associated field :'',i8)'
170 #ifdef _DEBUG_HOMARD_
171 write (ulsort,texte(langue,4)) nbcham
177 c 2. on parcourt toutes les posssibilites de champs
180 do 20 , nrcham = 1 , nbcham
182 #ifdef _DEBUG_HOMARD_
183 write (ulsort,texte(langue,5)) nrcham
196 caetal(10,nrcham) = 0
198 do 200 , nrfich = 1 , nbfich
200 c 2.1. ==> si c'est un des mots-cles possibles, on verifie que c'est
203 if ( codret.eq.0 ) then
205 motcle = nomref(nrfich)
206 cgn write (ulsort,*) '.. motcle = ',motcle
208 if ( motcle.eq.mcchno .or.
209 > motcle.eq.mcchcs .or.
210 > motcle.eq.mcchpt .or.
211 > motcle.eq.mcchnu .or.
212 > motcle.eq.mcchin .or.
213 > motcle.eq.mcchti .or.
214 > motcle.eq.mcchnc ) then
216 cgn write (ulsort,*) '.. nomstr(nrfich) = ',nomstr(nrfich)
217 #ifdef _DEBUG_HOMARD_
218 write (ulsort,texte(langue,3)) 'UTCHEN', nompro
220 call utchen ( nomstr(nrfich), numero,
221 > ulsort, langue, codret )
223 cgn write (ulsort,*) '.. motcle = ',motcle,' ',nrcham,' ',numero
224 if ( nrcham.eq.numero ) then
226 if ( motcle.eq.mcchno ) then
228 elseif ( motcle.eq.mcchcs ) then
230 elseif ( motcle.eq.mcchpt .or. motcle.eq.mcchnu ) then
232 elseif ( motcle.eq.mcchin ) then
234 elseif ( motcle.eq.mcchti ) then
252 c 2.2. ==> recherche du nom du champ
256 if ( codret.eq.0 ) then
258 cgn write (ulsort,90002) 'debut de 22 continue ; nrcham', nrcham
261 do 221 , iaux = jaux+1 , jaux+8
262 cactal(iaux) = blan08
264 kaux = poinno(nrfich-1) + 1
265 do 222 , iaux = kaux, poinno(nrfich)
267 cactal(jaux) = nomufi(iaux)
270 #ifdef _DEBUG_HOMARD_
271 jaux = poinno(nrfich-1) + 1
272 kaux = lgnofi(nrfich)
273 call uts8ch ( nomufi(jaux), kaux, sau200,
274 > ulsort, langue, codret )
275 write (ulsort,texte(langue,6)) sau200(1:kaux)
282 c 2.3. ==> recherche de la caracteristique du support du champ
283 c par defaut, il est standard
287 if ( codret.eq.0 ) then
289 cgn write (ulsort,90002) 'debut de 23 continue ; nrcham', nrcham
294 kaux = poinno(nrfich-1) + 1
295 do 231 , iaux = kaux, poinno(nrfich)
296 sau200(jaux:jaux+7) = nomufi(iaux)
300 do 232 , iaux = jaux , 200
301 sau200(iaux:iaux) = ' '
304 call utlgut ( iaux, sau200,
305 > ulsort, langue, codret )
309 if ( iaux.eq.8 ) then
311 if ( sau200(1:iaux).eq.'standard' ) then
316 elseif ( iaux.eq.22 ) then
317 c 1234567890123456789012
318 if ( sau200(1:iaux).eq.'aux_noeuds_par_element' ) then
324 if ( jaux.ne.0 ) then
325 write (ulsort,texte(langue,15)) sau200(1:iaux)
327 #ifdef _DEBUG_HOMARD_
329 write (ulsort,texte(langue,14)) sau200(1:iaux)
339 c 2.4. ==> recherche de numero d'ordre du champ
343 if ( codret.eq.0 ) then
345 cgn write (ulsort,90002) 'debut de 24 continue ; nrcham', nrcham
347 jaux = poinno(nrfich-1) + 1
348 kaux = lgnofi(nrfich)
349 call uts8ch ( nomufi(jaux), kaux, sau200,
350 > ulsort, langue, codret )
354 if ( codret.eq.0 ) then
356 #ifdef _DEBUG_HOMARD_
357 write (ulsort,texte(langue,3)) 'UTCHEN', nompro
359 call utchen ( sau200, iaux,
360 > ulsort, langue, codret )
364 if ( codret.eq.0 ) then
366 if ( motcle.eq.mcchpt ) then
368 caetal(3,nrcham) = iaux
370 #ifdef _DEBUG_HOMARD_
371 write (ulsort,texte(langue,10)) iaux
375 caetal(5,nrcham) = iaux
377 #ifdef _DEBUG_HOMARD_
378 write (ulsort,texte(langue,8)) iaux
386 c 2.5. ==> recherche de l'instant du champ
390 if ( codret.eq.0 ) then
392 cgn write (ulsort,90002) 'debut de 25 continue ; nrcham', nrcham
394 jaux = poinno(nrfich-1) + 1
395 kaux = lgnofi(nrfich)
396 call uts8ch ( nomufi(jaux), kaux, sau200,
397 > ulsort, langue, codret )
401 if ( codret.eq.0 ) then
403 #ifdef _DEBUG_HOMARD_
404 write (ulsort,texte(langue,3)) 'UTCHRE', nompro
406 call utchre ( sau200, daux,
407 > ulsort, langue, codret )
411 if ( codret.eq.0 ) then
414 cartal(nrcham) = daux
416 #ifdef _DEBUG_HOMARD_
417 write (ulsort,texte(langue,12)) daux
424 c 2.6. ==> recherche du type d'interpolation
428 if ( codret.eq.0 ) then
430 cgn write (ulsort,90002) 'debut de 26 continue ; nrcham', nrcham
432 jaux = poinno(nrfich-1) + 1
433 kaux = lgnofi(nrfich)
434 call uts8ch ( nomufi(jaux), kaux, sau200,
435 > ulsort, langue, codret )
439 if ( codret.eq.0 ) then
441 #ifdef _DEBUG_HOMARD_
442 write (ulsort,texte(langue,3)) 'UTCHEN', nompro
444 call utchen ( sau200, iaux,
445 > ulsort, langue, codret )
449 if ( codret.eq.0 ) then
451 caetal(10,nrcham) = iaux
457 c 2.7. ==> recherche du numero du champ aux noeuds par elements associe
459 c remarque : on ne peut pas controler ici que c'est un vrai
460 c champ aux points de Gauss
464 if ( codret.eq.0 ) then
466 cgn write (ulsort,90002) 'debut de 27 continue ; nrcham', nrcham
468 jaux = poinno(nrfich-1) + 1
469 kaux = lgnofi(nrfich)
470 call uts8ch ( nomufi(jaux), kaux, sau200,
471 > ulsort, langue, codret )
475 if ( codret.eq.0 ) then
477 #ifdef _DEBUG_HOMARD_
478 write (ulsort,texte(langue,3)) 'UTCHEN', nompro
480 call utchen ( sau200, iaux,
481 > ulsort, langue, codret )
483 caetal(8,nrcham) = iaux
485 #ifdef _DEBUG_HOMARD_
486 write (ulsort,texte(langue,16)) iaux
493 c 2.8. ==> si on a tout trouve, on passe au champ suivant
497 if ( codret.eq.0 ) then
499 #ifdef _DEBUG_HOMARD_
500 write (ulsort,*) '... arrivee dans 28 continue'
501 write (ulsort,90003) 'chnom', chnom
502 write (ulsort,90003) 'chnum', chnum
503 write (ulsort,90003) 'chpdt', chpdt
504 write (ulsort,90003) 'chins', chins
505 write (ulsort,90003) 'chcas', chcas
506 write (ulsort,90003) 'chncn', chncn
510 > ( ( chnum .and. chpdt ) .or. chins ) .and.
511 > chcas .and. chncn ) then
512 caetal(1,nrcham) = -1
514 #ifdef _DEBUG_HOMARD_
515 write (ulsort,*) '... ==> OK 28 ; passage au champ suivant'
524 c 2.9. ==> si on arrive ici, il faut verifier qu'il ne manque rien
526 if ( codret.eq.0 ) then
528 #ifdef _DEBUG_HOMARD_
529 write (ulsort,*) 'debut de 29 continue'
530 write (ulsort,90003) 'chnom', chnom
531 write (ulsort,90003) 'chnum', chnum
532 write (ulsort,90003) 'chpdt', chpdt
533 write (ulsort,90003) 'chins', chins
534 write (ulsort,90003) 'chcas', chcas
535 write (ulsort,90003) 'chncn', chncn
538 c 2.9.1. ==> s'il ne manque que la caracteristique du support ou les
539 c indications temporelles, on suppose que ce champ est
544 caetal(1,nrcham) = -1
545 if ( .not.chcas ) then
548 if ( .not.chncn ) then
552 #ifdef _DEBUG_HOMARD_
553 write (ulsort,*) '... ==> OK 29 ; passage au champ suivant'
556 c 2.9.2. ==> s'il manque le nom, probleme ...
560 write (ulsort,texte(langue,5)) nrcham
561 write (ulsort,texte(langue,7))
562 #ifdef _DEBUG_HOMARD_
563 if ( .not.chnum ) then
564 write (ulsort,texte(langue,9))
566 if ( .not.chpdt ) then
567 write (ulsort,texte(langue,11))
569 if ( .not.chins ) then
570 write (ulsort,texte(langue,13))
579 cgn print texte(langue,6), sau200(1:kaux)
580 cgn print *, '... support MED caetal(1,',nrcham,') = ',
581 cgn > caetal(1,nrcham)
582 cgn print *, '... pas de temps ? caetal(2,',nrcham,') = ',
583 cgn > caetal(2,nrcham)
584 cgn print *, '... pas de temps = caetal(3,',nrcham,') = ',
585 cgn > caetal(3,nrcham)
586 cgn print *, '... nro ordre ? caetal(4,',nrcham,') = ',
587 cgn > caetal(4,nrcham)
588 cgn print *, '... nro ordre = caetal(5,',nrcham,') = ',
589 cgn > caetal(5,nrcham)
590 cgn print *, '... instant ? caetal(6,',nrcham,') = ',
591 cgn > caetal(6,nrcham)
592 cgn print *, '... no/el ? caetal(7,',nrcham,') = ',
593 cgn > caetal(7,nrcham)
594 cgn print *, '... nr chp no/el caetal(8,',nrcham,') = ',
595 cgn > caetal(8,nrcham)
596 cgn print *, '... typint caetal(10,',nrcham,') = ',
597 cgn > caetal(10,nrcham)
598 cgn print *, '... instant = cartal(',nrcham,') = ',
606 if ( codret.ne.0 ) then
610 write (ulsort,texte(langue,1)) 'Sortie', nompro
611 write (ulsort,texte(langue,2)) codret
615 #ifdef _DEBUG_HOMARD_
616 write (ulsort,texte(langue,1)) 'Sortie', nompro