Salome HOME
Homard executable
[modules/homard.git] / src / tool / ES_MED / esemmq.F
1       subroutine esemmq ( idfmed, nomamd, nomequ,
2      >                     numdt,  numit,
3      >                    typgeo, typmai,
4      >                    nbeqen, eqenti,
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 - Ecriture d'un Maillage au format MED - eQuivalences
27 c  -      -        -             -                  -      -
28 c ______________________________________________________________________
29 c .        .     .        .                                            .
30 c .  nom   . e/s . taille .           description                      .
31 c .____________________________________________________________________.
32 c . idfmed . e   .   1    . identificateur du fichier de               .
33 c .        .     .        . maillage de sortie                         .
34 c . nomamd . e   . char64 . nom du maillage MED                        .
35 c . nomequ . e   . char64 . nom de l'equivalence                       .
36 c . numdt  . e   .   1    . numero du pas de temps                     .
37 c . numit  . e   .   1    . numero d'iteration                         .
38 c . nbeqen . e   .   1    . nombre de paires d'entites                 .
39 c . eqenti . e   .2*nbeqen. liste des paires d'entites equivalentes    .
40 c .        .     .        . avec la convention :                       .
41 c .        .     .        . eqenti(i)<-->eqenti(i+1)                   .
42 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
43 c . langue . e   .    1   . langue des messages                        .
44 c .        .     .        . 1 : francais, 2 : anglais                  .
45 c . codret . es  .    1   . code de retour des modules                 .
46 c .        .     .        . 0 : pas de probleme                        .
47 c .        .     .        . 1 : probleme                               .
48 c ______________________________________________________________________
49 c
50 c====
51 c 0. declarations et dimensionnement
52 c====
53 c
54 c 0.1. ==> generalites
55 c
56       implicit none
57       save
58 c
59       character*6 nompro
60       parameter ( nompro = 'ESEMMQ' )
61 c
62 #include "nblang.h"
63 #include "consts.h"
64 c
65 c 0.2. ==> communs
66 c
67 #include "gmenti.h"
68 #include "envex1.h"
69 #include "impr02.h"
70 #include "indefi.h"
71 c
72 #include "envca1.h"
73 #include "nbutil.h"
74 c
75 c 0.3. ==> arguments
76 c
77       integer*8 idfmed
78       integer ulsort, langue, codret
79 c
80       integer numdt, numit
81       integer typgeo, typmai
82       integer nbeqen
83       integer eqenti(2,nbeqen)
84 c
85       character*64 nomamd
86       character*64 nomequ
87 c
88 c 0.4. ==> variables locales
89 c
90 #include "meddc0.h"
91 c
92       integer iaux, jaux, kaux
93       integer nuenmx, nbcibl
94       integer codre0
95       integer codre1, codre2, codre3
96       integer ptrav1, ptrav2, ptrav3
97 c
98       character*8 ntrav1, ntrav2, ntrav3
99 c
100       integer nbmess
101       parameter ( nbmess = 150 )
102       character*80 texte(nblang,nbmess)
103 c ______________________________________________________________________
104 c
105 c====
106 c 1. initialisations
107 c====
108 c
109 #include "impr01.h"
110 c
111 #ifdef _DEBUG_HOMARD_
112       write (ulsort,texte(langue,1)) 'Entree', nompro
113       call dmflsh (iaux)
114 #endif
115 c
116 #include "impr03.h"
117 c
118 #include "esimpr.h"
119 c
120       codret = 0
121 c
122 c====
123 c 2. preliminaires
124 c====
125 c 2.1. ==> Numero maximal de l'entite source
126 c
127       nuenmx = 0
128       do 21 , iaux = 1 , nbeqen
129 cgn      write (ulsort,90112) 'eqenti',iaux,eqenti(1,iaux),eqenti(2,iaux)
130         nuenmx = max (nuenmx, eqenti(1,iaux))
131    21 continue
132 c
133 #ifdef _DEBUG_HOMARD_
134       write (ulsort,90002) 'nuenmx', nuenmx
135 #endif
136 c
137 c 2.2. ==> tableaux de travail
138 c
139       if ( codret.eq.0 ) then
140 c
141       call gmalot ( ntrav1, 'entier  ', nuenmx, ptrav1, codre1 )
142       iaux = nuenmx + 1
143       call gmalot ( ntrav2, 'entier  ',   iaux, ptrav2, codre2 )
144       iaux = 2*nbeqen
145       call gmalot ( ntrav3, 'entier  ',   iaux, ptrav3, codre3 )
146 c
147       codre0 = min ( codre1, codre2, codre3 )
148       codret = max ( abs(codre0), codret,
149      >               codre1, codre2, codre3 )
150       endif
151 c
152 c 2.3. ==> Nombre de cibles par source
153 c
154       if ( codret.eq.0 ) then
155 c
156       do 231 , iaux = 1 , nuenmx
157         imem(ptrav1+iaux-1) = 0
158   231 continue
159 c
160       do 232 , iaux = 1 , nbeqen
161         jaux = ptrav1+eqenti(1,iaux)-1
162         imem(jaux) = imem(jaux) + 1
163   232 continue
164 #ifdef _DEBUG_HOMARD_
165       call gmprsx ('ntrav1 nombre de cibles', ntrav1)
166 #endif
167 c
168       endif
169 c
170 c 2.4. ==> Pointeur
171 c
172       if ( codret.eq.0 ) then
173 c
174       do 241 , iaux = 1 , nuenmx+1
175         imem(ptrav2+iaux-1) = 0
176   241 continue
177 c
178       do 242 , iaux = 1 , nuenmx
179         nbcibl = imem(ptrav1+iaux-1)
180 cgn      write (ulsort,90112) 'cible',iaux,nbcibl
181         jaux = ptrav2+iaux
182         imem(jaux) = imem(jaux-1) + nbcibl
183   242 continue
184 #ifdef _DEBUG_HOMARD_
185       call gmprsx ('ntrav2 pointeur', ntrav2)
186 #endif
187 c
188       endif
189 c
190 c 2.5. ==> Rangement
191 c
192       if ( codret.eq.0 ) then
193 c
194       do 252 , iaux = 1 , nbeqen
195 cgn      write (ulsort,90112) 'eqenti',iaux,eqenti(1,iaux),eqenti(2,iaux)
196         jaux = ptrav2+eqenti(1,iaux)-1
197         imem(jaux) = imem(jaux) + 1
198 cgn      write (ulsort,90002) 'imem(jaux)', imem(jaux)
199         kaux = ptrav3 + 2*(imem(jaux)-1)
200         imem(kaux  ) = eqenti(1,iaux)
201         imem(kaux+1) = eqenti(2,iaux)
202   252 continue
203 #ifdef _DEBUG_HOMARD_
204       call gmprsx ('ntrav3', ntrav3)
205 #endif
206 c
207       endif
208 c
209 c
210 c====
211 c 3. ecriture
212 c    la convention de stockage MED des listes d'equivalences est que
213 c    l'entite Liste(j) est associee a Liste(j+1)
214 c====
215 #ifdef _DEBUG_HOMARD_
216       write (ulsort,90002) '3. ecriture ; codret', codret
217 #endif
218 c
219       if ( codret.eq.0 ) then
220 c
221 #ifdef _DEBUG_HOMARD_
222       write (ulsort,texte(langue,3)) 'MEQCOW', nompro
223 #endif
224       call meqcow ( idfmed, nomamd, nomequ, numdt, numit,
225      >              typgeo, typmai,
226      >              nbeqen, imem(ptrav3), codret )
227 c
228       if ( codret.ne.0 ) then
229         write(ulsort,texte(langue,78)) 'meqcow', codret
230       endif
231 c
232       endif
233 c
234 c===
235 c 4. nettoyage
236 c===
237 c
238       if ( codret.eq.0 ) then
239 c
240       call gmlboj ( ntrav1, codre1 )
241       call gmlboj ( ntrav2, codre2 )
242       call gmlboj ( ntrav3, codre3 )
243 c
244       codre0 = min ( codre1, codre2, codre3 )
245       codret = max ( abs(codre0), codret,
246      >               codre1, codre2, codre3 )
247 c
248       endif
249 c
250 c====
251 c 5. la fin
252 c====
253 c
254       if ( codret.ne.0 ) then
255 c
256 #include "envex2.h"
257 c
258       write (ulsort,texte(langue,1)) 'Sortie', nompro
259       write (ulsort,texte(langue,2)) codret
260 c
261       endif
262 c
263 #ifdef _DEBUG_HOMARD_
264       write (ulsort,texte(langue,1)) 'Sortie', nompro
265       call dmflsh (iaux)
266 #endif
267 c
268       end