1 subroutine vcmext ( lgopti, taopti, lgopts, taopts,
3 > ulsort, langue, codret)
4 c ______________________________________________________________________
8 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c Version originale enregistree le 18 juin 1996 sous le numero 96036
11 c aupres des huissiers de justice Simart et Lavoir a Clamart
12 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
13 c aupres des huissiers de justice
14 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c HOMARD est une marque deposee d'Electricite de France
22 c ______________________________________________________________________
24 c aVant adaptation - Conversion de Maillage EXTrude
26 c Pour un maillage initial
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . lgopti . e . 1 . longueur du tableau des options .
32 c . taopti . e . lgopti . tableau des options .
33 c . lgopts . e . 1 . longueur du tableau des options caracteres .
34 c . taopts . e . lgopts . tableau des options caracteres .
35 c . lgetco . e . 1 . longueur du tableau de l'etat courant .
36 c . taetco . e . lgetco . tableau de l'etat courant .
37 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
38 c . langue . e . 1 . langue des messages .
39 c . . . . 1 : francais, 2 : anglais .
40 c . codret . es . 1 . code de retour des modules .
41 c . . . . 0 : pas de probleme .
42 c . . . . 5 : mauvais type de code de calcul associe .
43 c ______________________________________________________________________
46 c 0. declarations et dimensionnement
49 c 0.1. ==> generalites
55 parameter ( nompro = 'VCMEXT' )
76 integer taopti(lgopti)
79 character*8 taopts(lgopts)
82 integer taetco(lgetco)
84 integer ulsort, langue, codret
86 c 0.4. ==> variables locales
88 integer nretap, nrsset
89 integer iaux, jaux, kaux
90 integer codre1, codre2, codre3, codre4
92 integer ptrav1, ptrav2, ptrav3, ptrav4
93 integer ptrav5, ptrav6, ptrav7, ptrav8
94 integer pcoono, pareno, phetno, adcocs
95 integer psomar, phetar, pfilar, pmerar, pnp2ar
96 integer paretr, phettr, pfiltr, ppertr, pnivtr, adnmtr, adpetr
97 integer parequ, phetqu, pfilqu, pperqu, pnivqu, adnmqu, adhequ
98 integer phethe, pquahe, pcoquh
99 integer phetpe, pfacpe, pcofap
100 integer pposif, pfacar
102 integer adnohn, adnocn
103 integer adtrhn, adtrcn
104 integer adquhn, adqucn
106 integer pfamno, pcfano, pcofno
107 integer pfammp, pcfamp
108 integer pfamar, pcfaar, pcofar
109 integer pfamtr, pcfatr, pcoftr
110 integer pfamqu, pcfaqu, pcofqu
111 integer pfamhe, pcfahe
112 integer pfampe, pcfape
117 integer nbp2re, nbimre
119 integer adhono, adhoar, adhotr, adhoqu
120 integer notfno, notfar, notftr, notfqu
121 integer nofano, nofaar, nofatr, nofaqu
126 character*8 nhnoeu, nhmapo, nharet, nhtria, nhquad
127 character*8 nhhexa, nhpent
129 character*8 nhnofa, nharfa, nhtrfa, nhqufa
131 character*8 nhenti, nhenfa
132 character*8 ntrav1, ntrav2, ntrav3, ntrav4
133 character*8 ntrav5, ntrav6, ntrav7, ntrav8
134 character*8 nforfa(-1:4)
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
154 if ( taopti(11).eq.26 ) then
156 elseif ( taopti(11).eq.46 ) then
159 if ( langue.eq.1 ) then
167 > '(/,a6,1x,'''//saux09//' - PASSAGE DU MAILLAGE 3D EN 2D'')'
168 texte(1,5) = '(47(''=''),/)'
170 texte(2,4) = '(/,a6,1x,'''//saux09//' - FROM 3D MESH TO 2D'')'
171 texte(2,5) = '(37(''=''),/)'
173 c 1.4. ==> le numero de sous-etape
176 nrsset = taetco(2) + 1
179 call utcvne ( nretap, nrsset, saux, iaux, codret )
183 write (ulsort,texte(langue,4)) saux
184 write (ulsort,texte(langue,5))
191 c 2. les structures de base
193 #ifdef _DEBUG_HOMARD_
194 write (ulsort,90002) '2. structures de base ; codret', codret
197 c 2.1. ==> Le maillage 3D au format HOMARD
201 c 2.2. ==> Les adresses
203 #ifdef _DEBUG_HOMARD_
204 write (ulsort,90002) '2.2. adresses ; codret', codret
207 if ( codret.eq.0 ) then
210 #ifdef _DEBUG_HOMARD_
211 write (ulsort,texte(langue,3)) 'VCMEXB', nompro
213 call vcmexb ( nomail, iaux,
215 > pcoono, pareno, adhono, adcocs,
217 > phetar, psomar, pfilar, pmerar,
219 > phettr, paretr, pfiltr, ppertr,
220 > pnivtr, adnmtr, adhotr, adpetr,
222 > phetqu, parequ, pfilqu, pperqu,
223 > pnivqu, adnmqu, adhoqu, adhequ,
225 > phethe, pquahe, pcoquh,
226 > phetpe, pfacpe, pcofap,
235 > nhnoeu, nhmapo, nharet, nhtria, nhquad,
236 > nhhexa, nhpent, norenu,
237 > ulsort, langue, codret)
241 c 2.3. ==> Sauvegarde des familles d'origine
242 #ifdef _DEBUG_HOMARD_
243 write (ulsort,90002) '2.3. Sauvegarde familles ; codret', codret
246 if ( codret.eq.0 ) then
250 if ( codret.eq.0 ) then
252 if ( iaux.eq.-1 ) then
255 elseif ( iaux.eq.1 ) then
258 elseif ( iaux.eq.2 ) then
261 elseif ( iaux.eq.4 ) then
265 nforfa(iaux) = blan08
269 call gmnomc ( nhenti//'.Famille', nhenfa, codre0 )
270 codret = max ( abs(codre0), codret )
274 if ( codret.eq.0 ) then
276 if ( iaux.eq.-1 ) then
278 elseif ( iaux.eq.1 ) then
280 elseif ( iaux.eq.2 ) then
282 elseif ( iaux.eq.4 ) then
287 call gmcpal ( nhenfa//'.Codes',
288 > nforfa(iaux), jaux, kaux, codre0 )
290 codret = max ( abs(codre0), codret )
293 #ifdef _DEBUG_HOMARD_
294 write (ulsort,90012) '.. codre0123 apres phase',
295 > iaux, codre0, codre1, codre2, codre3
296 cgn call gmprsx ( nompro, nforfa(iaux) )
299 if ( codret.eq.0 ) then
301 if ( iaux.eq.-1 ) then
303 elseif ( iaux.eq.1 ) then
305 elseif ( iaux.eq.2 ) then
307 elseif ( iaux.eq.4 ) then
317 c 2.4. ==> Tableaux de travail
318 #ifdef _DEBUG_HOMARD_
319 write (ulsort,90002) '2.4. Tableaux de travail ; codret', codret
322 if ( codret.eq.0 ) then
325 call gmalot ( ntrav1, 'entier ', iaux, ptrav1, codre1 )
327 call gmalot ( ntrav2, 'entier ', iaux, ptrav2, codre2 )
329 call gmalot ( ntrav3, 'entier ', iaux, ptrav3, codre3 )
331 call gmalot ( ntrav4, 'entier ', iaux, ptrav4, codre4 )
333 codre0 = min ( codre1, codre2, codre3, codre4 )
334 codret = max ( abs(codre0), codret,
335 > codre1, codre2, codre3, codre4 )
337 call gmalot ( ntrav5, 'entier ', nbnoto, ptrav5, codre1 )
338 call gmalot ( ntrav6, 'entier ', nbarto, ptrav6, codre2 )
339 call gmalot ( ntrav7, 'entier ', nbtrto, ptrav7, codre3 )
340 call gmalot ( ntrav8, 'entier ', nbquto, ptrav8, codre4 )
342 codre0 = min ( codre1, codre2, codre3, codre4 )
343 codret = max ( abs(codre0), codret,
344 > codre1, codre2, codre3, codre4 )
349 c 3. Reperage du positionnement des entites
351 #ifdef _DEBUG_HOMARD_
352 write (ulsort,90002) '3. reperage ; codret', codret
355 if ( codret.eq.0 ) then
358 #ifdef _DEBUG_HOMARD_
359 write (ulsort,texte(langue,3)) 'VCMEX0', nompro
363 > rmem(pcoono), imem(ptrav5),
364 > imem(psomar), imem(ptrav6),
365 > imem(paretr), imem(ptrav7),
366 > imem(parequ), imem(ptrav8), imem(ptrav4),
367 > ulsort, langue, codret )
369 #ifdef _DEBUG_HOMARD_
370 call gmprsx ('Position des noeuds :', ntrav5)
371 call gmprsx ('Position des aretes :', ntrav6)
372 call gmprsx ('Position des triangles :', ntrav7)
373 call gmprsx ('Position des quadrangles :', ntrav8)
379 c 4. Memorisation des informations pour l'extrusion
381 #ifdef _DEBUG_HOMARD_
382 write (ulsort,90002) '4. Memorisation extrusion ; codret', codret
385 if ( codret.eq.0 ) then
387 #ifdef _DEBUG_HOMARD_
388 write (ulsort,texte(langue,3)) 'VCMEX1', nompro
390 call vcmex1 ( imem(pfamno),
391 > imem(ptrav5), imem(ptrav1),
392 > imem(psomar), imem(pfamar),
393 > imem(ptrav6), imem(ptrav2),
395 > imem(ptrav7), imem(ptrav3), imem(adpetr),
396 > imem(parequ), imem(pfamqu),
397 > imem(ptrav8), imem(ptrav4), imem(adhequ),
398 > imem(pquahe), imem(pcoquh), imem(pfamhe),
399 > imem(pfacpe), imem(pcofap), imem(pfampe),
400 > ulsort, langue, codret )
402 #ifdef _DEBUG_HOMARD_
403 call gmprsx ('inxnoe - noeuds :', ntrav1)
404 call gmprsx ('inxare - aretes :', ntrav2)
405 call gmprsx ('inxtri - triangles :', ntrav3)
406 call gmprsx ('inxqua - quadrangles :', ntrav4)
412 c 5. Creation des tableaux de memorisation des familles
414 #ifdef _DEBUG_HOMARD_
415 write (ulsort,90002) '5. creation tableaux ; codret', codret
417 c 5.1. ==> Les familles des pentaedres
419 if ( codret.eq.0 ) then
421 call gmnomc ( nhpent//'.Famille', nhpefa, codre0 )
422 codret = max ( abs(codre0), codret )
426 c 5.2. ==> La creation
428 #ifdef _DEBUG_HOMARD_
429 write (ulsort,90002) '5.2. creation ; codret', codret
431 if ( codret.eq.0 ) then
443 #ifdef _DEBUG_HOMARD_
444 write (ulsort,texte(langue,3)) 'VCMEX2', nompro
448 > nhnofa, imem(pfamno), notfno, nofano, imem(pcofno),
449 > imem(ptrav5), imem(ptrav1), pcfano,
450 > nharfa, imem(pfamar), notfar, nofaar, imem(pcofar),
451 > imem(ptrav6), imem(ptrav2), pcfaar,
452 > nhtrfa, imem(pfamtr), notftr, nofatr, imem(pcoftr),
453 > imem(ptrav7), imem(ptrav3), pcfatr,
454 > nhqufa, imem(pfamqu), notfqu, nofaqu, imem(pcofqu),
455 > imem(ptrav8), imem(ptrav4), pcfaqu,
458 > ulsort, langue, codret )
463 c 6. Destruction des entites inutiles
465 #ifdef _DEBUG_HOMARD_
466 write (ulsort,90002) '6. destruction ; codret', codret
469 if ( codret.eq.0 ) then
471 #ifdef _DEBUG_HOMARD_
472 write (ulsort,texte(langue,3)) 'VCMEXD', nompro
474 call vcmexd ( nomail,
475 > nhnoeu, nharet, nhtria, nhquad,
476 > nhhexa, nhpent, norenu,
477 > imem(ptrav5), nbnore, nbp2re, nbimre,
478 > imem(phetno), rmem(pcoono),
479 > imem(pareno), imem(adhono),
480 > imem(adnocn), imem(adnohn),
481 > imem(ptrav6), nbarre,
482 > imem(phetar), imem(psomar), imem(pmerar), imem(pfilar),
483 > imem(pnp2ar), imem(adhoar),
484 > imem(pposif), imem(pfacar),
485 > imem(ptrav7), nbtrre,
486 > imem(phettr), imem(paretr), imem(ppertr), imem(pfiltr),
487 > imem(pnivtr), imem(adpetr), imem(adnmtr), imem(adhotr),
488 > imem(adtrcn), imem(adtrhn),
489 > imem(ptrav8), nbqure,
490 > imem(phetqu), imem(parequ), imem(pperqu), imem(pfilqu),
491 > imem(pnivqu), imem(adhequ), imem(adnmqu),
492 > imem(adqucn), imem(adquhn),
494 > imem(pfamno), imem(pcfano),
495 > imem(pfammp), imem(pcfamp),
496 > imem(pfamar), imem(pcfaar),
497 > imem(pfamtr), imem(pcfatr),
498 > imem(pfamqu), imem(pcfaqu),
501 > ulsort, langue, codret)
508 #ifdef _DEBUG_HOMARD_
509 write (ulsort,90002) '7. menage ; codret', codret
512 if ( codret.eq.0 ) then
514 call gmlboj ( ntrav1 , codre1 )
515 call gmlboj ( ntrav2 , codre2 )
516 call gmlboj ( ntrav3 , codre3 )
517 call gmlboj ( ntrav4 , codre4 )
519 codre0 = min ( codre1, codre2, codre3, codre4 )
520 codret = max ( abs(codre0), codret,
521 > codre1, codre2, codre3, codre4 )
523 call gmlboj ( ntrav5 , codre1 )
524 call gmlboj ( ntrav6 , codre2 )
525 call gmlboj ( ntrav7 , codre3 )
526 call gmlboj ( ntrav8 , codre4 )
528 codre0 = min ( codre1, codre2, codre3, codre4 )
529 codret = max ( abs(codre0), codret,
530 > codre1, codre2, codre3, codre4 )
534 if ( nforfa(iaux).ne.blan08 ) then
535 call gmlboj ( nforfa(iaux) , codre0 )
536 codret = max ( abs(codre0), codret )
543 cgn call gmprsx ( nompro, nhtria//'.InfoSupp' )
544 cgn call gmprsx ( nompro, norenu//'.TrCalcul' )
545 cgn call gmprsx ( nompro, norenu//'.TrHOMARD' )
546 cgn call gmprsx ( nompro, norenu//'.PeCalcul' )
547 cgn call gmprsx ( nompro, norenu//'.PeHOMARD' )
548 cgn call gmprsx ( nompro, nhquad//'.InfoSupp' )
549 cgn call gmprsx ( nompro, norenu//'.QuCalcul' )
550 cgn call gmprsx ( nompro, norenu//'.QuHOMARD' )
551 cgn call gmprsx ( nompro, norenu//'.HeCalcul' )
552 cgn call gmprsx ( nompro, norenu//'.HeHOMARD' )
558 if ( codret.ne.0 ) then
562 write (ulsort,texte(langue,1)) 'Sortie', nompro
563 write (ulsort,texte(langue,2)) codret
567 #ifdef _DEBUG_HOMARD_
568 write (ulsort,texte(langue,1)) 'Sortie', nompro