1 subroutine hocmsa ( codret )
2 c ______________________________________________________________________
6 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
8 c Version originale enregistree le 18 juin 1996 sous le numero 96036
9 c aupres des huissiers de justice Simart et Lavoir a Clamart
10 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
11 c aupres des huissiers de justice
12 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
14 c HOMARD est une marque deposee d'Electricite de France
20 c ______________________________________________________________________
22 c HOMARD : Creation d'un Maillage et d'une Solution Annexe
24 c Option(s) possible(s) : changement de degre
26 c remarque : on n'execute ce programme que si le precedent s'est
28 c ______________________________________________________________________
30 c . nom . e/s . taille . description .
31 c .____________________________________________________________________.
32 c . codret . es . 1 . code de retour des modules .
33 c . . . . en entree = celui du module d'avant .
34 c . . . . en sortie = celui du module en cours .
35 c . . . . 0 : pas de probleme .
36 c . . . . 1 : manque de temps cpu .
37 c . . . . 2x : probleme dans les memoires .
38 c . . . . 3x : probleme dans les fichiers .
39 c . . . . 5 : mauvaises options .
40 c . . . . 6 : problemes dans les noms d'objet .
41 c ______________________________________________________________________
44 c 0. declarations et dimensionnement
47 c 0.1. ==> generalites
53 parameter ( nompro = 'HOCMSA' )
71 c 0.4. ==> variables locales
73 integer ulsort, langue, codava
74 integer adopti, lgopti
75 integer adopts, lgopts
76 integer adetco, lgetco
77 integer nrsect, nrssse
78 integer nretap, nrsset
81 integer codre1, codre2
85 character*8 typobs, nocmaa, nohmap
89 parameter ( nbmess = 10 )
90 character*80 texte(nblang,nbmess)
92 c 0.5. ==> initialisations
93 c ______________________________________________________________________
96 c 1. les initialisations
101 c=======================================================================
102 if ( codava.eq.0 ) then
103 c=======================================================================
105 #ifdef _DEBUG_HOMARD_
106 call gmprsx (nompro, nndoad )
107 call gmprsx (nompro, nndoad//'.OptEnt' )
108 call gmprsx (nompro, nndoad//'.OptRee' )
109 call gmprsx (nompro, nndoad//'.OptCar' )
110 call gmprsx (nompro, nndoad//'.EtatCour' )
113 c 1.2. ==> le numero d'unite logique de la liste standard
115 call utulls ( ulsort, codret )
117 c 1.3. ==> la langue des messages
119 call gmadoj ( nndoad//'.OptEnt', adopti, lgopti, codret )
120 if ( codret.eq.0 ) then
121 langue = imem(adopti)
129 #ifdef _DEBUG_HOMARD_
130 write (ulsort,texte(langue,1)) 'Entree', nompro
134 if ( imem(adopti+40).eq.1 ) then
136 c 1.4. ==> l'etat courant
138 call gmadoj ( nndoad//'.EtatCour', adetco, lgetco, codret )
140 if ( codret.eq.0 ) then
141 if ( imem(adopti+40).eq.1 ) then
142 nretap = imem(adetco) + 1
143 imem(adetco) = nretap
145 imem(adetco+1) = nrsset
147 nrsect = imem(adetco+2) + 10
148 imem(adetco+2) = nrsect
150 imem(adetco+3) = nrssse
159 c 1.5. ==> le debut des mesures de temps
163 c 1.6. ==> les messages
166 > '(//,a6,'' M A I L L A G E E T S O L U T I O N A N N '',
168 texte(1,5) = '(65(''=''),/)'
169 texte(1,7) = '(''Impossible pour Code_Saturne'')'
170 texte(1,8) = '(''Le format'',i7,''est impossible.'')'
172 texte(2,4) = '(//,a6,'' A D D I T I O N A L M E S H A N D'',
173 >'' S O L U T I O N'')'
174 texte(2,5) = '(65(''=''),/)'
175 texte(2,7) = '(''Impossible for Code_Saturne'')'
176 texte(2,8) = '(''Format #'',i7,''cannot be written.'')'
180 call utcvne ( nretap, nrsset, saux, iaux, codret )
182 write (ulsort,texte(langue,4)) saux
183 write (ulsort,texte(langue,5))
186 imem(adetco+1) = nrsset
188 c 1.8. ==> les noms d'objets a conserver
190 if ( codret.eq.0 ) then
191 call gmadoj ( nndoad//'.OptCar', adopts, lgopts, codret )
192 if ( codret.ne.0 ) then
198 c 2. les structures de base
201 c 2.1. ==> le maillage homard a l'iteration n+1
205 call utosno ( typobs, nohmap, iaux, ulsort, langue, codre1 )
207 c 2.2. ==> le maillage med annexe
209 if ( imem(adopti+10).eq.6 .or.
210 > imem(adopti+10).eq.16 .or.
211 > imem(adopti+10).eq.26 .or.
212 > imem(adopti+10).eq.36 .or.
213 > imem(adopti+10).eq.46 .or.
214 > imem(adopti+10).eq.56 ) then
219 call utfino ( typobs, iaux, nommaa, lnomaa,
221 > ulsort, langue, codre2 )
232 codre0 = min ( codre1, codre2 )
233 codret = max ( abs(codre0), codret,
237 c 3. modification du degre du maillage
240 if ( codret.eq.0 ) then
242 imem(adetco+3) = imem(adetco+3) + 1
244 if ( imem(adopti+40).eq.1 ) then
246 #ifdef _DEBUG_HOMARD_
247 write (ulsort,texte(langue,3)) 'MMDEGR', nompro
250 call mmdegr ( lgopti, imem(adopti), lgetco, imem(adetco),
252 > ulsort, langue, codret )
259 c 4. conversion du maillage
262 c 4.1. ==> conversion vraie des connectivites
264 if ( codret.eq.0 ) then
266 imem(adetco+3) = imem(adetco+3) + 1
268 nrssse = imem(adetco+3)
271 #ifdef _DEBUG_HOMARD_
272 write (ulsort,texte(langue,3)) 'PCMACO', nompro
275 call pcmaco ( imem(adopti+3),
276 > nocmaa, nohmap, nommaa, lnomaa,
278 > ulsort, langue, codret )
282 if ( codret.eq.0 ) then
283 smem(adopts+4) = nocmaa
286 c 4.2. ==> les familles
288 if ( codret.eq.0 ) then
290 #ifdef _DEBUG_HOMARD_
291 write (ulsort,texte(langue,3)) 'PCMAFA', nompro
294 call pcmafa ( nocmaa, nohmap,
295 > ulsort, langue, codret )
299 c 3.2. ==> verification pour le cas extrude
301 if ( codret.eq.0 ) then
303 if ( imem(adopti+38).ne.0 .or.
304 > imem(adopti+10).eq.26 .or.
305 > imem(adopti+10).eq.36 .or.
306 > imem(adopti+10).eq.46 .or.
307 > imem(adopti+10).eq.56 ) then
309 write (ulsort,texte(langue,7))
319 c 4. ecriture du maillage
322 if ( codret.eq.0 ) then
324 imem(adetco+3) = imem(adetco+3) + 1
326 if ( imem(adopti+21).eq.1 ) then
330 #ifdef _DEBUG_HOMARD_
331 write (ulsort,texte(langue,3)) 'HOAPEM', nompro
333 call hoapem ( lgopti, imem(adopti), lgopts, smem(adopts),
334 > lgetco, imem(adetco),
335 > ulsort, langue, codret )
345 c 5.1. ==> message si erreur
347 if ( codret.ne.0 ) then
351 write (ulsort,texte(langue,1)) 'Sortie', nompro
352 write (ulsort,texte(langue,2)) codret
356 c 5.2. ==> fin des mesures de temps de la section
362 #ifdef _DEBUG_HOMARD_
363 write (ulsort,texte(langue,1)) 'Sortie', nompro
367 c=======================================================================
369 c=======================================================================