1 subroutine utacma ( nocmai, typnom, typcca,
3 > degre, mailet, maconf, homolo, hierar,
4 > nbnoto, nctfno, nbelem, nbmane, attrib,
5 > ncinfo, ncnoeu, nccono, nccode,
7 > ncequi, ncfron, ncnomb,
8 > ulsort, langue, codret )
9 c ______________________________________________________________________
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c HOMARD est une marque deposee d'Electricite de France
27 c ______________________________________________________________________
29 c UTilitaire - Allocation pour le Calcul - MAillage
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . nocmai . es . char8 . nom de l'objet maillage homard .
36 c . typnom . e . 1 . type du nom de l'objet maillage .
37 c . . . . 0 : le nom est a creer automatiquement .
38 c . . . . 1 : le nom est impose par l'appel .
39 c . typcca . e . 1 . type du code de calcul .
40 c . sdim . e . 1 . dimension de l'espace .
41 c . mdim . e . 1 . dimension du maillage .
42 c . degre . e . 1 . degre du maillage .
43 c . mailet . e . 1 . presence de mailles etendues .
44 c . . . . 1 : aucune .
45 c . . . . 2x : TRIA7 .
46 c . . . . 3x : QUAD9 .
47 c . . . . 5x : HEXA27 .
48 c . maconf . e . 1 . conformite du maillage .
50 c . . . . 1 : non-conforme avec au minimum 2 aretes .
51 c . . . . non decoupees en 2 par face .
52 c . . . . 2 : non-conforme avec 1 seul noeud pendant.
54 c . . . . 3 : non-conforme fidele a l'indicateur .
55 c . . . . -1 : conforme, avec des boites pour les .
56 c . . . . quadrangles, hexaedres et pentaedres .
57 c . . . . -2 : non-conforme avec au maximum 1 arete .
58 c . . . . decoupee en 2 et des boites pour les .
59 c . . . . quadrangles, hexaedres et pentaedres .
60 c . . . . 10 : non-conforme sans autre connaissance .
61 c . homolo . e . 1 . type de relations par homologues .
62 c . . . . 0 : pas d'homologues .
63 c . . . . 1 : relations sur les noeuds .
64 c . . . . 2 : relations sur les noeuds et les aretes .
65 c . . . . 3 : relations sur les noeuds, les aretes .
66 c . . . . et les triangles .
67 c . hierar . e . 1 . maillage hierarchique .
70 c . nbnoto . e . 1 . nombre de noeuds total .
71 c . nctfno . e . 1 . nombre de carac. des familles de noeuds .
72 c . nbelem . e . 1 . nombre d'elements .
73 c . nbmane . e . 1 . nombre maximum de noeuds par element .
74 c . attrib . e . 1 . attribut auxiliaire .
75 c . ncinfo . s . char8 . nom de la branche InfoGene .
76 c . ncnoeu . s . char8 . nom de la branche Noeud .
77 c . nccono . s . char8 . nom de la branche ConnNoeu .
78 c . nccode . s . char8 . nom de la branche ConnDesc .
79 c . nccoex . s . char8 . nom de la branche CodeExte .
80 c . ncfami . s . char8 . nom de la branche Famille .
81 c . ncequi . s . char8 . nom de la branche Equivalt .
82 c . ncfron . s . char8 . nom de la branche Frontier .
83 c . ncnomb . s . char8 . nom de la branche Nombres .
84 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
85 c . langue . e . 1 . langue des messages .
86 c . . . . 1 : francais, 2 : anglais .
87 c . codret . es . 1 . code de retour des modules .
88 c . . . . 0 : pas de probleme .
89 c . . . . -1 : mauvaise demande pour le type de nom .
90 c . . . . autre : probleme dans l'allocation .
91 c ______________________________________________________________________
94 c 0. declarations et dimensionnement
97 c 0.1. ==> generalites
103 parameter ( nompro = 'UTACMA' )
106 parameter ( nbnomb = 50 )
118 integer typnom, typcca
120 integer degre, mailet, maconf, homolo, hierar
121 integer nbnoto, nctfno, nbelem, nbmane, attrib
123 character*8 ncinfo, ncnoeu, nccono, nccode
124 character*8 nccoex, ncfami
125 character*8 ncequi, ncfron, ncnomb
127 integer ulsort, langue, codret
129 c 0.4. ==> variables locales
132 integer codre1, codre2, codre3, codre4, codre5
133 integer codre6, codre7, codre8
137 parameter ( nbmess = 10 )
138 character*80 texte(nblang,nbmess)
140 c 0.5. ==> initialisations
141 c ______________________________________________________________________
149 #ifdef _DEBUG_HOMARD_
150 write (ulsort,texte(langue,1)) 'Entree', nompro
155 > '(5x,''Allocation d''''un objet maillage de calcul'',/)'
156 texte(1,5) = '(''Mauvaise demande de type de nom :'',i6)'
157 texte(1,6) = '(''Probleme pour allouer l''''objet '',a8)'
158 texte(1,7) = '(''Probleme pour allouer un objet temporaire.'')'
161 > '(5x,''Allocation of an object calculation mesh'',/)'
162 texte(2,5) = '(''Bad request for the type of name :'',i6)'
163 texte(2,6) = '(''Problem while allocating object '',a8)'
164 texte(2,7) = '(''Problem while allocating a temporary object.'')'
168 #ifdef _DEBUG_HOMARD_
169 write (ulsort,texte(langue,4))
173 c 2. allocation de la structure du maillage de calcul
174 c on n'alloue que les objets structures du graphe
177 c 2.1. ==> allocation de la tete du maillage de calcul
179 if ( typnom.eq.0 ) then
181 call gmalot ( nocmai, 'Cal_Mail', 0, iaux, codre1 )
184 elseif ( typnom.eq.1 ) then
186 call gmaloj ( nocmai, 'Cal_Mail', 0, iaux, codre1 )
195 c 2.2. ==> Allocation des branches principales
196 #ifdef _DEBUG_HOMARD_
197 write (ulsort,90002) '2.2. branches ppales ; codret', codret
200 if ( codret.eq.0 ) then
202 call gmecat ( nocmai, 1, sdim, codre1 )
203 call gmecat ( nocmai, 2, mdim, codre2 )
204 call gmecat ( nocmai, 3, degre, codre3 )
205 call gmecat ( nocmai, 4, maconf, codre4 )
206 call gmecat ( nocmai, 5, homolo, codre5 )
207 call gmecat ( nocmai, 6, hierar, codre6 )
208 call gmecat ( nocmai, 7, nbnomb, codre7 )
209 call gmecat ( nocmai, 8, mailet, codre8 )
211 codre0 = min ( codre1, codre2, codre3, codre4, codre5,
212 > codre6, codre7, codre8 )
213 codret = max ( abs(codre0), codret,
214 > codre1, codre2, codre3, codre4, codre5,
215 > codre6, codre7, codre8 )
217 #ifdef _DEBUG_HOMARD_
218 write (ulsort,90002)'codes',codre1, codre2, codre3,
219 > codre4, codre5,codre6, codre7, codre8
220 call gmprsx(nompro, nocmai)
225 #ifdef _DEBUG_HOMARD_
226 write (ulsort,90002) '2.2. avant nocmai 1 ; codret', codret
229 if ( codret.eq.0 ) then
231 call gmaloj ( nocmai//'.InfoGene', ' ', 0, iaux, codre1 )
232 call gmaloj ( nocmai//'.Noeud' , ' ', 0, iaux, codre2 )
233 call gmaloj ( nocmai//'.ConnNoeu', ' ', 0, iaux, codre3 )
234 call gmaloj ( nocmai//'.ConnDesc', ' ', 0, iaux, codre4 )
236 codre0 = min ( codre1, codre2, codre3, codre4 )
237 codret = max ( abs(codre0), codret,
238 > codre1, codre2, codre3, codre4 )
242 #ifdef _DEBUG_HOMARD_
243 write (ulsort,90002) '2.2. avant nocmai 2 ; codret', codret
246 if ( codret.eq.0 ) then
248 call gmaloj ( nocmai//'.CodeExte' , ' ', 0, iaux, codre1 )
249 call gmaloj ( nocmai//'.Famille' , ' ', 0, iaux, codre2 )
250 call gmaloj ( nocmai//'.Equivalt' , ' ', 0, iaux, codre3 )
251 call gmaloj ( nocmai//'.Nombres' , ' ', nbnomb, iaux, codre4 )
253 codre0 = min ( codre1, codre2, codre3, codre4 )
254 codret = max ( abs(codre0), codret,
255 > codre1, codre2, codre3, codre4 )
259 if ( codret.eq.0 ) then
262 call gmaloj ( nocmai//'.Frontier', ' ', iaux, jaux, codret )
266 c 2.3. ==> nom interne de ces branches
267 #ifdef _DEBUG_HOMARD_
268 write (ulsort,90002) '2.3. nom interne ; codret', codret
271 if ( codret.eq.0 ) then
273 #ifdef _DEBUG_HOMARD_
274 write (ulsort,texte(langue,3)) 'UTNOMC', nompro
276 call utnomc ( nocmai,
278 > degre, mailet, maconf, homolo, hierar,
280 > ncinfo, ncnoeu, nccono, nccode,
282 > ncequi, ncfron, ncnomb,
283 > ulsort, langue, codret)
284 #ifdef _DEBUG_HOMARD_
285 write (ulsort,90003) 'ncnoeu', ncnoeu
286 write (ulsort,90003) 'nccono', nccono
292 #ifdef _DEBUG_HOMARD_
293 write (ulsort,90002) '2.4. attributs ; codret', codret
296 if ( codret.eq.0 ) then
298 call gmecat ( ncnoeu, 1, nbnoto, codre1 )
299 call gmecat ( ncnoeu, 2, nctfno, codre2 )
300 call gmecat ( ncnoeu, 3, 0 , codre2 )
302 codre0 = min ( codre1, codre2, codre3 )
303 codret = max ( abs(codre0), codret,
304 > codre1, codre2, codre3 )
306 call gmecat ( nccono, 1, nbelem, codre1 )
307 call gmecat ( nccono, 2, nbmane, codre2 )
308 call gmecat ( nccono, 3, attrib, codre3 )
310 codre0 = min ( codre1, codre2, codre3 )
311 codret = max ( abs(codre0), codret,
312 > codre1, codre2, codre3 )
316 #ifdef _DEBUG_HOMARD_
317 if ( codret.eq.0 ) then
318 call gmprsx(nompro, nocmai)
319 call gmprsx(nompro, nocmai//'.Nombres')
320 call gmprsx(nompro//' - ncnoeu', ncnoeu)
321 call gmprsx(nompro//' - nccono', nccono)
328 #ifdef _DEBUG_HOMARD_
329 write (ulsort,90002) '3. la fin ; codret', codret
332 if ( codret.ne.0 ) then
336 write (ulsort,texte(langue,1)) 'Sortie', nompro
337 write (ulsort,texte(langue,2)) codret
338 if ( codret.eq.-1 ) then
339 write (ulsort,texte(langue,5)) typnom
341 if ( typnom.eq.1 ) then
342 write (ulsort,texte(langue,6)) nocmai
344 write (ulsort,texte(langue,7))
350 #ifdef _DEBUG_HOMARD_
351 write (ulsort,texte(langue,1)) 'Sortie', nompro