Salome HOME
Homard executable
[modules/homard.git] / src / tool / ES_MED / eslch1.F
1       subroutine eslch1 ( idfmed, nomcha, nbsqch,
2      >                    nbtmed, litmed,
3      >                    option,
4      >                    nbtvch, numdtx,
5      >                    ulsort, langue, codret )
6 c ______________________________________________________________________
7 c
8 c                             H O M A R D
9 c
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c
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
17 c
18 c    HOMARD est une marque deposee d'Electricite de France
19 c
20 c Copyright EDF 1996
21 c Copyright EDF 1998
22 c Copyright EDF 2002
23 c Copyright EDF 2020
24 c ______________________________________________________________________
25 c
26 c  Entree-Sortie - Lecture d'un CHamp au format MED - phase 1
27 c  -      -        -            --                          -
28 c
29 c  Recuperation pour le champ a lire :
30 c  - du nombre total de tableaux ecrits dans le fichier pour toutes
31 c    les sequences et tous les types geometriques
32 c  - du dernier instant des sequences enregistrees, comme etant celui
33 c    de plus grand numero de pas de temps
34 c  Affichage eventuel
35 c ______________________________________________________________________
36 c .        .     .        .                                            .
37 c .  nom   . e/s . taille .           description                      .
38 c .____________________________________________________________________.
39 c . idfmed . e   .   1    . identifiant du fichier med en entree       .
40 c . nomcha . e   . char64 . nom du champ a lire                        .
41 c . nbsqch . e   .   1    . nombre de sequences associees a ce champ   .
42 c . nbtmed . e   .   1    . nombre de types MED                        .
43 c . litmed . e   .0:nbtmed. liste des types MED                        .
44 c . option . e   .   1    . 0 : lecture et calcul de nbtvch/numdtx     .
45 c .        .     .        . 1 : lecture et affichage                   .
46 c . nbtvch .  s  .    1   . nombre total de tableaux pour le champ     .
47 c . numdtx .  s  .    1   . numero du dernier pas de temps             .
48 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
49 c . langue . e   .    1   . langue des messages                        .
50 c .        .     .        . 1 : francais, 2 : anglais                  .
51 c . codret . es  .    1   . code de retour des modules                 .
52 c .        .     .        . 0 : pas de probleme                        .
53 c .        .     .        . 1 : probleme                               .
54 c ______________________________________________________________________
55 c
56 c====
57 c 0. declarations et dimensionnement
58 c====
59 c
60 c 0.1. ==> generalites
61 c
62       implicit none
63       save
64 c
65       character*6 nompro
66       parameter ( nompro = 'ESLCH1' )
67 c
68 #include "nblang.h"
69 #include "consts.h"
70 #include "meddc0.h"
71 c
72 c 0.2. ==> communs
73 c
74 #include "envex1.h"
75 c
76 c 0.3. ==> arguments
77 c
78       integer*8 idfmed
79       integer nbsqch, nbtmed
80       integer litmed(0:nbtmed)
81       integer option
82       integer nbtvch, numdtx
83 c
84       character*64 nomcha
85 c
86       integer ulsort, langue, codret
87 c
88 c 0.4. ==> variables locales
89 c
90       integer iaux
91       integer typent, typgeo
92       integer numseq
93       integer numdt, numit
94       integer nrtmed
95 c
96       character*64 nolopg
97       character*64 noprof
98 c
99       double precision instan
100 c
101       logical afaire
102 c
103       integer nbmess
104       parameter ( nbmess = 150 )
105       character*80 texte(nblang,nbmess)
106 c
107 c 0.5. ==> initialisations
108 c ______________________________________________________________________
109 c
110 c====
111 c 1. initialisations
112 c====
113 c
114 #include "impr01.h"
115 c
116 #ifdef _DEBUG_HOMARD_
117       write (ulsort,texte(langue,1)) 'Entree', nompro
118       call dmflsh (iaux)
119 #endif
120 c
121       texte(1,4) = '(''Lecture d''''un nouveau profil.'')'
122 c
123       texte(2,4) = '(''Readings of a new profile.'')'
124 c
125 #include "impr03.h"
126 c
127 #include "esimpr.h"
128 c
129 #ifdef _DEBUG_HOMARD_
130       write (ulsort,texte(langue,32)) nomcha
131       write (ulsort,90002) 'Nombre total de sequences  (nbsqch)',nbsqch
132       write (ulsort,90002) 'Option', Option
133 #endif
134 c
135 c====
136 c 2. On parcourt les sequences
137 c====
138 c
139       nbtvch = 0
140       numdtx = ednodt
141 c
142       do 20 , numseq = 1, nbsqch
143 c
144 #ifdef _DEBUG_HOMARD_
145       write (ulsort,90002) '----- Sequence numero', numseq
146 #endif
147 c
148 c====
149 c 2. Recuperation du pas de temps et numero d'iteration de la sequence
150 c====
151 c
152         if ( codret.eq.0 ) then
153 c
154         iaux = numseq
155 #ifdef _DEBUG_HOMARD_
156         write (ulsort,texte(langue,3)) 'MFDCSI', nompro
157 #endif
158         call mfdcsi ( idfmed, nomcha, iaux,
159      >                numdt, numit, instan, codret )
160         if ( codret.ne.0 ) then
161           write (ulsort,texte(langue,17)) nomcha
162         endif
163 c
164 #ifdef _DEBUG_HOMARD_
165         write (ulsort,texte(langue,113)) numdt
166         write (ulsort,texte(langue,114)) numit
167         write (ulsort,texte(langue,115)) instan
168 #endif
169 c
170         afaire = .true.
171 c
172         endif
173 c
174 c====
175 c 3. On parcourt tous les types de supports
176 c====
177 #ifdef _DEBUG_HOMARD_
178       write (ulsort,90002) '3. On parcourt ; codret', codret
179 #endif
180 c
181         do 30 , nrtmed = 0 , 2*nbtmed
182 c
183 c 3.1. ==> Le couple (typent,typgeo)
184 c
185           if ( codret.eq.0 ) then
186 c
187           if ( nrtmed.eq.0 ) then
188             typent = ednoeu
189             typgeo = litmed(nrtmed)
190           elseif ( nrtmed.le.nbtmed ) then
191             typent = edmail
192             typgeo = litmed(nrtmed)
193           else
194             typent = ednoma
195             typgeo = litmed(nrtmed-nbtmed)
196           endif
197 c
198 #ifdef _DEBUG_HOMARD_
199       write (ulsort,*) ' '
200       write (ulsort,texte(langue,60)) typent
201       write (ulsort,texte(langue,64)) typgeo
202 #endif
203 c
204           endif
205 c
206 c 3.2. ==> Nombre de profils pour cette sequence et cette entite
207 c          Remarque : cela indique si des valeurs ont ete enregistrees
208 c
209           if ( codret.eq.0 ) then
210 c
211 #ifdef _DEBUG_HOMARD_
212       write (ulsort,texte(langue,3)) 'MFDNPF', nompro
213 #endif
214           call mfdnpf ( idfmed, nomcha,
215      >                  numdt, numit, typent, typgeo,
216      >                  noprof, nolopg, iaux, codret )
217 c
218           if ( codret.ne.0 ) then
219             write (ulsort,texte(langue,60)) typent
220             write (ulsort,texte(langue,64)) typgeo
221             write (ulsort,texte(langue,2)) codret
222           endif
223 c
224           endif
225 c
226 c 3.3. ==> Diagostic pour ce couple (typent,typgeo)
227 c  0 profil : aucune valeur n'est presente ; on passe au couple suivant
228 c >1 profil : HOMARD ne sait pas faire
229 c  1 profil : impeccable.
230 c
231           if ( codret.eq.0 ) then
232 c
233 #ifdef _DEBUG_HOMARD_
234       write (ulsort,texte(langue,86)) iaux
235       if ( iaux.eq.1 ) then
236         write (ulsort,texte(langue,61)) noprof
237       endif
238       write (ulsort,texte(langue,81)) nolopg
239 #endif
240 c
241           if ( iaux.eq.0 ) then
242             goto 30
243           elseif ( iaux.gt.1 ) then
244             write (ulsort,texte(langue,60)) typent
245             write (ulsort,texte(langue,64)) typgeo
246             write (ulsort,texte(langue,86)) iaux
247             codret = 33
248           endif
249 c
250           endif
251 c
252 c 3.4. ==> Un profil et un seul :
253 c 3.4.1.  ==> En vue de la lecture :
254 c          . cumul du nombre total de tableaux
255 c          . reperage du dernier pas de temps
256 c
257           if ( option.eq.0 ) then
258 c
259             if ( codret.eq.0 ) then
260 c
261             nbtvch = nbtvch + 1
262 c
263 #ifdef _DEBUG_HOMARD_
264       write (ulsort,90002) 'numdt', numdt
265 #endif
266             if ( numdt.ne.ednodt ) then
267 c
268                 numdtx = max(numdtx,numdt)
269 c
270             endif
271 c
272 #ifdef _DEBUG_HOMARD_
273       write (ulsort,90002) 'nbtvch', nbtvch
274       write (ulsort,90002) 'numdtx', numdtx
275 #endif
276 c
277             endif
278 c
279 c 3.4.2.  ==> Pour affichage
280 c
281           elseif ( option.eq.1 ) then
282 c
283             if ( codret.eq.0 ) then
284 c
285             if ( afaire ) then
286               write (ulsort,*) ' '
287               if ( numdt.ne.ednodt ) then
288                 write (ulsort,texte(langue,113)) numdt
289                 write (ulsort,texte(langue,114)) numit
290                 write (ulsort,texte(langue,115)) instan
291 cgn              else
292 cgn                write (ulsort,texte(langue,119))
293               endif
294               afaire = .false.
295             endif
296 c
297             write (ulsort,texte(langue,64)) typgeo
298 c
299             endif
300 c
301           endif
302 c
303    30   continue
304 c
305    20 continue
306 c
307 c====
308 c 4. la fin
309 c====
310 c
311       if ( codret.ne.0 ) then
312 c
313 #include "envex2.h"
314 c
315       write (ulsort,texte(langue,1)) 'Sortie', nompro
316       write (ulsort,texte(langue,2)) codret
317 c
318       endif
319 c
320 #ifdef _DEBUG_HOMARD_
321       write (ulsort,texte(langue,1)) 'Sortie', nompro
322       call dmflsh (iaux)
323 #endif
324 c
325       end