Projet

Général

Profil

perl script : split a mesh according to an elements set » hz_splitMail.pl

Julien Troufflard, 31/08/2016 17:22

 
1
#!/usr/bin/env perl
2
use strict;
3
use warnings;
4
use English;
5
use File::Basename;
6
my $NOM_PROG = basename $PROGRAM_NAME;
7

    
8

    
9

    
10

    
11

    
12
my $VERSION = '1.00';
13
#####################################################################################################
14
#  script pour visualiser un ou plusieurs maillages dans Gmsh                                       #
15
#  version 1.00 : version initiale                                                                  #
16
#####################################################################################################
17

    
18

    
19

    
20

    
21

    
22
sub affichage_aide {
23
  use Text::Wrap;
24
  #config du package Text::Wrap
25
  $Text::Wrap::columns = 81;#le nombre de caracteres maximum par ligne sera egal a ($Text::Wrap::columns - 1) dans le cas ou utilise wrap
26

    
27
  #indentation de longueur $NOM_PROG
28
  my $indent_NOM_PROG = ""; $indent_NOM_PROG .= " " for(1 .. length($NOM_PROG));
29

    
30
  print "----------------------------------------\n";
31
  print " script $NOM_PROG  (version $VERSION)\n";
32
  print "----------------------------------------\n";
33
  print "\n";
34
  print wrap("", "      ", "But : permet de scinder un maillage en 2 selon une reference d elements\n");
35
  print "\n";
36
  print "Usage :\n";
37
  print wrap("    ","        $indent_NOM_PROG ", "> $NOM_PROG [-h|help] fher_ini nom_liste\n");
38
  print "\n";
39
  print "Arguments :\n";
40
  print "    o fher_ini  : fichier maillage initial (.her)\n";
41
  print "    o nom_liste : nom de la liste des elements\n";
42
  print wrap("                  ", "                   ", "(si cet argument est un unique entier, alors le maillage sera scinde selon ce numero d element)\n");
43
  print "\n";
44
  print "Fonctionnement :\n";
45
  print wrap("      ", "    ", "$NOM_PROG cree 2 nouveaux maillages (sans ecraser le maillage initial fher_ini). Le premier maillage, ",
46
                             "de nom fher_ini suivi du suffixe _SetElts, contiendra uniquement les elements de la liste de reference nom_liste. ",
47
                             "Le deuxieme maillage, de nom fher_ini suivi du suffixe _AutresElts, contiendra tous les elements sauf ceux de la liste de reference.\n");
48
  print "\n";
49
  print wrap("      ", "    ", "Les listes de reference du maillage initial seront reportees vers les 2 nouveaux maillages avec les modifications qui s imposent (nouvelle numerotation noeuds/elements, suppression des noeuds/elements non presents, suppression des eventuelles references devenues vides)\n");
50
  print "\n";
51
  print "Options :\n";
52
  print wrap("    ", "                   ", "-lis fic.lis : ajout d un fichier de listes de reference supplementaires (peut etre repetee autant de fois que necessaire)\n");
53
  print "\n";
54
  print "Exemples :\n";
55
  print wrap("    ", "      ", "o scinder le maillage mail1.her selon le set d elements E_elts1D\n");
56
  print wrap("        ", "          $indent_NOM_PROG ", "> $NOM_PROG mail1.her E_elts1D\n");
57
  print wrap("    ", "      ", "o scinder le maillage mail1.her selon le set d elements E_tmp dont la definition est dans le fichier mon_fichier_tmp.txt\n");
58
  print wrap("        ", "          $indent_NOM_PROG ", "> $NOM_PROG -lis mon_fichier_tmp.txt mail1.her E_tmp\n");
59
  print "\n";
60
  print "Auteur :\n";
61
  print "    TROUFFLARD Julien\n";
62
  print "       julien.troufflard\@univ-ubs.fr\n";
63
  print "       julien.troufflard\@free.fr\n";
64
  print "------------------------------------------\n";
65
  print "\n";
66
}
67

    
68

    
69

    
70
#------------------------------------
71
#option -h ou -help => affichage de l aide et arret
72
#------------------------------------
73
# rq : insensible a la casse
74
foreach my $arg (@ARGV) {
75
  if(($arg =~ /^-h$/i) or ($arg =~ /^-help$/i)) {
76
    affichage_aide();
77
    exit;
78
  }
79
}
80

    
81
#------------------------------------
82
#option -v => affichage de la version et arret
83
#------------------------------------
84
foreach my $arg (@ARGV) {
85
  if($arg eq '-v') {
86
    print "\n $NOM_PROG : version $VERSION\n\n";
87
    exit;
88
  }
89
}
90

    
91

    
92

    
93
#------------------------------------
94
#recuperation des arguments et options
95
#------------------------------------
96
my @liste_lis_sup = ();#option(s) -lis : ajout de fichiers de listes de reference supplementaires
97

    
98
my @args;
99
my $opt;
100
while($#ARGV > -1) {
101
  $opt = shift(@ARGV);
102

    
103
  #option -lis
104
  if($opt eq '-lis') {
105
    ($#ARGV > -1) or die "\nErreur (prog:$NOM_PROG,opt:-lis) : pas assez d arguments pour cette option...\n\n";
106
    my $flis_sup = shift(@ARGV);
107
    (-e $flis_sup) or die "\nErreur (prog:$NOM_PROG,opt:-lis) : fichier $flis_sup introuvable...\n\n";
108
    push(@liste_lis_sup, $flis_sup);
109
  }
110

    
111
  else {
112
    push(@args, $opt);
113
  }
114
}
115

    
116

    
117
($#args >= 1) or die "\nErreur (prog:$NOM_PROG) : pas assez d arguments...\n\n";
118
my $fher_ini = shift(@args); (-e $fher_ini) or die "\nErreur (prog:$NOM_PROG) : fichier $fher_ini introuvable...\n\n";
119
my $liste_elts = shift(@args);
120

    
121

    
122
#nouveau maillage 1 (de suffixe _SetElts) => maillage contenant uniquement les elements du set $liste_elts
123
# rq : on ne prend que le basename de $fher_ini (le nouveau maillage sera donc cree dans le repertoire courant)
124
(my $fher_1 = basename $fher_ini) =~ s/.her$/_SetElts.her/;
125
#nouveau maillage 2 (de suffixe _AutresElts) => maillage contenant tous les elements SAUF ceux du set $liste_elts
126
# rq : on ne prend que le basename de $fher_ini (le nouveau maillage sera donc cree dans le repertoire courant)
127
(my $fher_2 = basename $fher_ini) =~ s/.her$/_AutresElts.her/;
128

    
129

    
130
#lecture du maillage initial
131
my ($nom_maillage, $nb_noeuds, $ref_tab_noeuds,
132
    $nb_elts, $ref_tab_elts, @ref_listes) = lecture_mail_her($fher_ini);
133

    
134
#ajout des listes de reference supplementaires (option -lis)
135
foreach my $fic_lis (@liste_lis_sup) {
136
  add_listes_ref(\@ref_listes, $fic_lis);
137
}
138

    
139

    
140
($liste_elts =~ /^\d+$/ or defined($ref_listes[3]->{$liste_elts}[0])) or die "\nErreur (prog:$NOM_PROG) : liste d elements $liste_elts introuvable...\n\n";
141

    
142

    
143

    
144
#tableau indicateur de l appartenance des elements (=1 si appartient a la liste $liste_elts donc maillage 1 $fher_1, sinon =2 donc maillage 2 $fher_2)
145
my @tab_elts_appartenance_maillage; for(my $i=1; $i<=$nb_elts; $i++) {$tab_elts_appartenance_maillage[$i] = 2;}
146
#-cas d un unique entier
147
if($liste_elts =~ /^\d+$/) {
148
  $tab_elts_appartenance_maillage[$liste_elts] = 1;
149
}
150
#-cas d une liste d elements
151
else {
152
  foreach my $elt (@{$ref_listes[3]->{$liste_elts}}) {
153
    $tab_elts_appartenance_maillage[$elt] = 1;
154
  }
155
}
156

    
157
#liste des elements du set $liste_elts
158
my @liste_elts_fher_1;
159
#-cas d un unique entier
160
if($liste_elts =~ /^\d+$/) {
161
  push(@liste_elts_fher_1, $liste_elts);
162
}
163
#-cas d une liste d elements
164
else {
165
  foreach my $elt (@{$ref_listes[3]->{$liste_elts}}) {push(@liste_elts_fher_1, $elt);}
166
}
167
#liste des elements qui ne sont pas contenus dans le set $liste_elts
168
my @liste_elts_fher_2;
169
for(my $i=1; $i<=$nb_elts; $i++) {
170
  next if($tab_elts_appartenance_maillage[$i] == 1);
171
  push(@liste_elts_fher_2, $i);
172
}
173
#verif : il faut que le nombre d elements de @liste_elts_fher_1 + @liste_elts_fher_2 == $nb_elts (sinon ca veut dire qu il manque des elements ou que certains elements sont a la fois dans la liste 1 et 2)
174
$_ = $#liste_elts_fher_1 + 1 + $#liste_elts_fher_2 + 1;
175
($_ == $nb_elts) or die "\nErreur (prog:$NOM_PROG) : le nombre d elements des deux listes n est pas egal au nombre total d elements ($_ elts dans les listes contre $nb_elts en tout)...\n\n";
176

    
177

    
178

    
179

    
180

    
181

    
182
#------------------------------------------------------
183
#
184
#table des noeuds et des elements du maillage 1
185
#
186
#------------------------------------------------------
187
my ($nb_noeuds_1, $nb_elts_1, $ref_tab_noeuds_1, $ref_tab_elts_1);
188
$nb_noeuds_1 = $nb_elts_1 = 0;
189
#-table de correspondance entre ancien noeud et nouveau noeud + ancien elt et nouvel element
190
my @tab_corresp_noeud_old_new; for(my $i=1; $i<=$nb_noeuds; $i++) {$tab_corresp_noeud_old_new[$i] = 0;}
191
my @tab_corresp_elt_old_new; for(my $i=1; $i<=$nb_elts; $i++) {$tab_corresp_elt_old_new[$i] = 0;}
192
for(my $i=1; $i<=$nb_elts; $i++) {
193
  next if($tab_elts_appartenance_maillage[$i] != 1);
194

    
195
  $nb_elts_1++;
196
  $ref_tab_elts_1->{$nb_elts_1}{'TYPE'} = $ref_tab_elts->{$i}{'TYPE'};
197
  $tab_corresp_elt_old_new[$i] = $nb_elts_1;
198

    
199
  foreach my $noeud (@{$ref_tab_elts->{$i}{'CONNEX'}}) {
200
    if($tab_corresp_noeud_old_new[$noeud] == 0) {
201
      $nb_noeuds_1++;
202
      $ref_tab_noeuds_1->[$nb_noeuds_1][0] = $ref_tab_noeuds->[$noeud][0];
203
      $ref_tab_noeuds_1->[$nb_noeuds_1][1] = $ref_tab_noeuds->[$noeud][1];
204
      $ref_tab_noeuds_1->[$nb_noeuds_1][2] = $ref_tab_noeuds->[$noeud][2];
205
      $tab_corresp_noeud_old_new[$noeud] = $nb_noeuds_1;
206
    }
207
    push(@{$ref_tab_elts_1->{$nb_elts_1}{'CONNEX'}}, $tab_corresp_noeud_old_new[$noeud]);
208
  }
209
}
210

    
211

    
212
#------------------------------------------------------
213
#
214
#ecriture du maillage 1 $fher_1
215
#
216
#------------------------------------------------------
217
$fher_1 .= '.her' if(not $fher_1 =~ /\.her$/);
218
my $flis_1 = $fher_1; $flis_1 =~ s/.her$/.lis/;
219
$nom_maillage = basename $fher_1; $nom_maillage =~ s/\.her$//;
220

    
221
open(FIC, ">$fher_1");
222
#cas d un unique entier
223
if($liste_elts =~ /^\d+$/) {
224
  print FIC "\#($NOM_PROG) => maillage issu du maillage $fher_ini : element $liste_elts\n";
225
}
226
#cas d une liste d elements
227
else {
228
 print FIC "\#($NOM_PROG) => maillage issu du maillage $fher_ini : elements de la liste $liste_elts\n";
229
}
230
print FIC "\n";
231
print FIC " nom_maillage $nom_maillage\n";
232
print FIC "\n";
233
print FIC " noeuds\n";
234
print FIC " $nb_noeuds_1 NOEUDS\n";
235
print FIC "\n";
236
for(my $i=1; $i<=$nb_noeuds_1; $i++) {print FIC " $i @{$ref_tab_noeuds_1->[$i]}\n";}
237
print FIC "\n";
238
print FIC " elements\n";
239
print FIC " $nb_elts_1 ELEMENTS\n";
240
print FIC "\n";
241
for(my $i=1; $i<=$nb_elts_1; $i++) {print FIC " $i  $ref_tab_elts_1->{$i}{'TYPE'}  @{$ref_tab_elts_1->{$i}{'CONNEX'}}\n";}
242
close(FIC);
243

    
244
my $Hlis = *HLIS;
245
my $is_liste = 0;#indicateur pour signaler si il y a au moins une liste de reference (et donc creation d un .lis)
246
my @liste_tmp;
247
#liste de noeuds
248
foreach my $nom_ref (keys %{$ref_listes[0]}) {
249
  @liste_tmp = ();
250
  foreach my $noeud (@{$ref_listes[0]->{$nom_ref}}) {
251
    next if(not $tab_corresp_noeud_old_new[$noeud]);
252
    push(@liste_tmp, $tab_corresp_noeud_old_new[$noeud]);
253
    if($is_liste == 0) {
254
      $is_liste = 1;
255
      open($Hlis, ">$flis_1");
256
    }
257
  }
258
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions de noeuds
259
  print $Hlis "\n";
260
  ecrire_liste_N_E($Hlis, $nom_ref, @liste_tmp);
261
}
262
#liste d aretes
263
foreach my $nom_ref (keys %{$ref_listes[1]}) {
264
  @liste_tmp = ();
265
  for(my $i=0; $i<$#{$ref_listes[1]->{$nom_ref}}; $i+=2) {
266
    $_[0] = $ref_listes[1]->{$nom_ref}[$i];
267
    $_[1] = $ref_listes[1]->{$nom_ref}[$i+1];
268
    next if(not $tab_corresp_elt_old_new[$_[0]]);
269
    push(@liste_tmp, $tab_corresp_elt_old_new[$_[0]], $_[1]);
270
    if($is_liste == 0) {
271
      $is_liste = 1;
272
      open($Hlis, ">$flis_1");
273
    }
274
  }
275
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
276
  print $Hlis "\n";
277
  ecrire_liste_A_F($Hlis, $nom_ref, @liste_tmp);
278
}
279
#liste de faces
280
foreach my $nom_ref (keys %{$ref_listes[2]}) {
281
  @liste_tmp = ();
282
  for(my $i=0; $i<$#{$ref_listes[2]->{$nom_ref}}; $i+=2) {
283
    $_[0] = $ref_listes[2]->{$nom_ref}[$i];
284
    $_[1] = $ref_listes[2]->{$nom_ref}[$i+1];
285
    next if(not $tab_corresp_elt_old_new[$_[0]]);
286
    push(@liste_tmp, $tab_corresp_elt_old_new[$_[0]], $_[1]);
287
    if($is_liste == 0) {
288
      $is_liste = 1;
289
      open($Hlis, ">$flis_1");
290
    }
291
  }
292
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
293
  print $Hlis "\n";
294
  ecrire_liste_A_F($Hlis, $nom_ref, @liste_tmp);
295
}
296
#liste d elements
297
foreach my $nom_ref (keys %{$ref_listes[3]}) {
298
  @liste_tmp = ();
299
  foreach my $elt (@{$ref_listes[3]->{$nom_ref}}) {
300
    next if(not $tab_corresp_elt_old_new[$elt]);
301
    push(@liste_tmp, $tab_corresp_elt_old_new[$elt]);
302
    if($is_liste == 0) {
303
      $is_liste = 1;
304
      open($Hlis, ">$flis_1");
305
    }
306
  }
307
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
308
  print $Hlis "\n";
309
  ecrire_liste_N_E($Hlis, $nom_ref, @liste_tmp);
310
}
311
#liste de points d integration
312
foreach my $nom_ref (keys %{$ref_listes[4]}) {
313
  @liste_tmp = ();
314
  for(my $i=0; $i<$#{$ref_listes[4]->{$nom_ref}}; $i+=2) {
315
    $_[0] = $ref_listes[4]->{$nom_ref}[$i];
316
    $_[1] = $ref_listes[4]->{$nom_ref}[$i+1];
317
    next if(not $tab_corresp_elt_old_new[$_[0]]);
318
    push(@liste_tmp, $tab_corresp_elt_old_new[$_[0]], $_[1]);
319
    if($is_liste == 0) {
320
      $is_liste = 1;
321
      open($Hlis, ">$flis_1");
322
    }
323
  }
324
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
325
  print $Hlis "\n";
326
  ecrire_liste_A_F($Hlis, $nom_ref, @liste_tmp);
327
}
328

    
329
close($Hlis) if($is_liste);
330

    
331
if($is_liste) {
332
  #cas d un unique entier
333
  if($liste_elts =~ /^\d+$/) {
334
    print "\nLes fichiers $fher_1 et $flis_1 ont ete crees (element $liste_elts)...\n";
335
  }
336
  #cas d une liste d elements
337
  else {
338
    print "\nLes fichiers $fher_1 et $flis_1 ont ete crees (set d element : $liste_elts)...\n";
339
  }
340
}
341
else {
342
  #cas d un unique entier
343
  if($liste_elts =~ /^\d+$/) {
344
    print "\nLe fichier $fher_1 a ete cree (element $liste_elts)...\n";
345
  }
346
  #cas d une liste d elements
347
  else {
348
    print "\nLe fichier $fher_1 a ete cree (set d element : $liste_elts)...\n";
349
  }
350
}
351

    
352

    
353

    
354

    
355

    
356
#------------------------------------------------------
357
#
358
#table des noeuds et des elements du maillage 2
359
#
360
#------------------------------------------------------
361
my ($nb_noeuds_2, $nb_elts_2, $ref_tab_noeuds_2, $ref_tab_elts_2);
362
$nb_noeuds_2 = $nb_elts_2 = 0;
363
#-table de correspondance entre ancien noeud et nouveau noeud + ancien elt et nouvel element
364
for(my $i=1; $i<=$nb_noeuds; $i++) {$tab_corresp_noeud_old_new[$i] = 0;}
365
for(my $i=1; $i<=$nb_elts; $i++) {$tab_corresp_elt_old_new[$i] = 0;}
366
for(my $i=1; $i<=$nb_elts; $i++) {
367
  next if($tab_elts_appartenance_maillage[$i] != 2);
368

    
369
  $nb_elts_2++;
370
  $ref_tab_elts_2->{$nb_elts_2}{'TYPE'} = $ref_tab_elts->{$i}{'TYPE'};
371
  $tab_corresp_elt_old_new[$i] = $nb_elts_2;
372

    
373
  foreach my $noeud (@{$ref_tab_elts->{$i}{'CONNEX'}}) {
374
    if($tab_corresp_noeud_old_new[$noeud] == 0) {
375
      $nb_noeuds_2++;
376
      $ref_tab_noeuds_2->[$nb_noeuds_2][0] = $ref_tab_noeuds->[$noeud][0];
377
      $ref_tab_noeuds_2->[$nb_noeuds_2][1] = $ref_tab_noeuds->[$noeud][1];
378
      $ref_tab_noeuds_2->[$nb_noeuds_2][2] = $ref_tab_noeuds->[$noeud][2];
379
      $tab_corresp_noeud_old_new[$noeud] = $nb_noeuds_2;
380
    }
381
    push(@{$ref_tab_elts_2->{$nb_elts_2}{'CONNEX'}}, $tab_corresp_noeud_old_new[$noeud]);
382
  }
383
}
384

    
385

    
386
#------------------------------------------------------
387
#
388
#ecriture du maillage 2 $fher_2
389
#
390
#------------------------------------------------------
391
$fher_2 .= '.her' if(not $fher_2 =~ /\.her$/);
392
my $flis_2 = $fher_2; $flis_2 =~ s/.her$/.lis/;
393
$nom_maillage = basename $fher_2; $nom_maillage =~ s/\.her$//;
394

    
395
open(FIC, ">$fher_2");
396
#cas d un unique entier
397
if($liste_elts =~ /^\d+$/) {
398
  print FIC "\#($NOM_PROG) => maillage issu du maillage $fher_ini : tous les elements sauf element $liste_elts\n";
399
}
400
#cas d une liste d elements
401
else {
402
  print FIC "\#($NOM_PROG) => maillage issu du maillage $fher_ini : tous les elements sauf ceux de la liste $liste_elts\n";
403
}
404
print FIC "\n";
405
print FIC " nom_maillage $nom_maillage\n";
406
print FIC "\n";
407
print FIC " noeuds\n";
408
print FIC " $nb_noeuds_2 NOEUDS\n";
409
print FIC "\n";
410
for(my $i=1; $i<=$nb_noeuds_2; $i++) {print FIC " $i @{$ref_tab_noeuds_2->[$i]}\n";}
411
print FIC "\n";
412
print FIC " elements\n";
413
print FIC " $nb_elts_2 ELEMENTS\n";
414
print FIC "\n";
415
for(my $i=1; $i<=$nb_elts_2; $i++) {print FIC " $i  $ref_tab_elts_2->{$i}{'TYPE'}  @{$ref_tab_elts_2->{$i}{'CONNEX'}}\n";}
416
close(FIC);
417

    
418
$Hlis = *HLIS;
419
$is_liste = 0;#indicateur pour signaler si il y a au moins une liste de reference (et donc creation d un .lis)
420
#liste de noeuds
421
foreach my $nom_ref (keys %{$ref_listes[0]}) {
422
  @liste_tmp = ();
423
  foreach my $noeud (@{$ref_listes[0]->{$nom_ref}}) {
424
    next if(not $tab_corresp_noeud_old_new[$noeud]);
425
    push(@liste_tmp, $tab_corresp_noeud_old_new[$noeud]);
426
    if($is_liste == 0) {
427
      $is_liste = 1;
428
      open($Hlis, ">$flis_2");
429
    }
430
  }
431
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions de noeuds
432
  print $Hlis "\n";
433
  ecrire_liste_N_E($Hlis, $nom_ref, @liste_tmp);
434
}
435
#liste d aretes
436
foreach my $nom_ref (keys %{$ref_listes[1]}) {
437
  @liste_tmp = ();
438
  for(my $i=0; $i<$#{$ref_listes[1]->{$nom_ref}}; $i+=2) {
439
    $_[0] = $ref_listes[1]->{$nom_ref}[$i];
440
    $_[1] = $ref_listes[1]->{$nom_ref}[$i+1];
441
    next if(not $tab_corresp_elt_old_new[$_[0]]);
442
    push(@liste_tmp, $tab_corresp_elt_old_new[$_[0]], $_[1]);
443
    if($is_liste == 0) {
444
      $is_liste = 1;
445
      open($Hlis, ">$flis_2");
446
    }
447
  }
448
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
449
  print $Hlis "\n";
450
  ecrire_liste_A_F($Hlis, $nom_ref, @liste_tmp);
451
}
452
#liste de faces
453
foreach my $nom_ref (keys %{$ref_listes[2]}) {
454
  @liste_tmp = ();
455
  for(my $i=0; $i<$#{$ref_listes[2]->{$nom_ref}}; $i+=2) {
456
    $_[0] = $ref_listes[2]->{$nom_ref}[$i];
457
    $_[1] = $ref_listes[2]->{$nom_ref}[$i+1];
458
    next if(not $tab_corresp_elt_old_new[$_[0]]);
459
    push(@liste_tmp, $tab_corresp_elt_old_new[$_[0]], $_[1]);
460
    if($is_liste == 0) {
461
      $is_liste = 1;
462
      open($Hlis, ">$flis_2");
463
    }
464
  }
465
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
466
  print $Hlis "\n";
467
  ecrire_liste_A_F($Hlis, $nom_ref, @liste_tmp);
468
}
469
#liste d elements
470
foreach my $nom_ref (keys %{$ref_listes[3]}) {
471
  @liste_tmp = ();
472
  foreach my $elt (@{$ref_listes[3]->{$nom_ref}}) {
473
    next if(not $tab_corresp_elt_old_new[$elt]);
474
    push(@liste_tmp, $tab_corresp_elt_old_new[$elt]);
475
    if($is_liste == 0) {
476
      $is_liste = 1;
477
      open($Hlis, ">$flis_2");
478
    }
479
  }
480
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
481
  print $Hlis "\n";
482
  ecrire_liste_N_E($Hlis, $nom_ref, @liste_tmp);
483
}
484
#liste de points d integration
485
foreach my $nom_ref (keys %{$ref_listes[4]}) {
486
  @liste_tmp = ();
487
  for(my $i=0; $i<$#{$ref_listes[4]->{$nom_ref}}; $i+=2) {
488
    $_[0] = $ref_listes[4]->{$nom_ref}[$i];
489
    $_[1] = $ref_listes[4]->{$nom_ref}[$i+1];
490
    next if(not $tab_corresp_elt_old_new[$_[0]]);
491
    push(@liste_tmp, $tab_corresp_elt_old_new[$_[0]], $_[1]);
492
    if($is_liste == 0) {
493
      $is_liste = 1;
494
      open($Hlis, ">$flis_2");
495
    }
496
  }
497
  next if($#liste_tmp == -1);#pas d ecriture si la liste est devenue vide suite a des suppressions d elements
498
  print $Hlis "\n";
499
  ecrire_liste_A_F($Hlis, $nom_ref, @liste_tmp);
500
}
501

    
502
close($Hlis) if($is_liste);
503

    
504
if($is_liste) {
505
  print "Les fichiers $fher_2 et $flis_2 ont ete crees...\n\n";
506
}
507
else {
508
  print "Le fichier $fher_2 a ete cree...\n\n";
509
}
510

    
511

    
512

    
513

    
514

    
515

    
516
#sub pour ajouter des listes de reference issu d un fichier fourni par option -lis
517
sub add_listes_ref {
518
  my $ref_listes = shift;#reference vers la liste des references fournies par lecture_mail_her
519
  my $flis = shift;#fichier .lis
520

    
521
  #lecture des listes de reference du fichier $flis
522
  my @ref_listes_tmp = lire_ref($flis);
523

    
524
  #ajout de ces listes dans la reference d entree
525
  #rappel : $i == 0 => NOEUDS
526
  #rappel : $i == 1 => ARETES
527
  #rappel : $i == 2 => FACES
528
  #rappel : $i == 3 => ELEMENTS
529
  #rappel : $i == 4 => POINTS D INTEGRATION
530
  for(my $i=0; $i<=4; $i++) {
531
    foreach my $nom (keys(%{$ref_listes_tmp[$i]})) {
532
      @{$ref_listes->[$i]{$nom}} = @{$ref_listes_tmp[$i]->{$nom}};
533
    }
534
  }
535
}
536

    
537

    
538
#sub pour lire les refs dans un fichier et creer la variable @ref_listes qui a la meme structure
539
#  que celle en sortie de lecture_mail_her
540
#           => $ref_listes[0] : reference vers la table de hashage des listes de noeuds  => @{$ref_listes[0]->{'nom liste'}} : (liste des noeuds)
541
#              $ref_listes[1] : reference vers la table de hashage des listes d aretes   => @{$ref_listes[1]->{'nom liste'}} : (liste des aretes)
542
#              $ref_listes[2] : reference vers la table de hashage des listes de faces   => @{$ref_listes[2]->{'nom liste'}} : (liste des faces)
543
#              $ref_listes[3] : reference vers la table de hashage des listes d elements => @{$ref_listes[3]->{'nom liste'}} : (liste des elements)
544
#              $ref_listes[4] : reference vers la table de hashage des listes de points d integration => @{$ref_listes[4]->{'nom liste'}} : (liste des points d integration)
545
#                                
546

    
547
sub lire_ref {
548
  my $fic = shift;#.lis ou .her
549

    
550

    
551
  my @ref_listes;
552

    
553
  my ($is_liste_en_cours, $nom_liste);
554

    
555
  #NOEUDS
556
  open(my $Hlocal, "<$fic");
557
  $is_liste_en_cours = 0;
558
  while(<$Hlocal>) {
559
    chomp;
560
    if(/^\s*(N\S+)/) {
561
      $nom_liste = $1;
562
      $is_liste_en_cours = 1;
563
      s/^\s*N\S+\s+//; s/\s+$//;
564
      push(@{$ref_listes[0]->{$nom_liste}},split(/\s+/,$_));
565
    }
566
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[AFEG]/) {
567
      $is_liste_en_cours = 0;
568
    }
569
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
570
      s/^\s+//; s/\s+$//;
571
      push(@{$ref_listes[0]->{$nom_liste}},split(/\s+/,$_));
572
    }
573
  }
574
  close($Hlocal);
575

    
576
  #ARETES
577
  open($Hlocal, "<$fic");
578
  $is_liste_en_cours = 0;
579
  while(<$Hlocal>) {
580
    chomp;
581
    if(/^\s*(A\S+)/) {
582
      $nom_liste = $1;
583
      $is_liste_en_cours = 1;
584
      s/^\s*A\S+\s+//; s/\s+$//;
585
      push(@{$ref_listes[1]->{$nom_liste}},split(/\s+/,$_));
586
    }
587
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NFEG]/) {
588
      $is_liste_en_cours = 0;
589
    }
590
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
591
      s/^\s+//; s/\s+$//;
592
      push(@{$ref_listes[1]->{$nom_liste}},split(/\s+/,$_));
593
    }
594
  }
595
  close($Hlocal);
596

    
597
  #FACES
598
  open($Hlocal, "<$fic");
599
  $is_liste_en_cours = 0;
600
  while(<$Hlocal>) {
601
    chomp;
602
    if(/^\s*(F\S+)/) {
603
      $nom_liste = $1;
604
      $is_liste_en_cours = 1;
605
      s/^\s*F\S+\s+//; s/\s+$//;
606
      push(@{$ref_listes[2]->{$nom_liste}},split(/\s+/,$_));
607
    }
608
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAEG]/) {
609
      $is_liste_en_cours = 0;
610
    }
611
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
612
      s/^\s+//; s/\s+$//;
613
      push(@{$ref_listes[2]->{$nom_liste}},split(/\s+/,$_));
614
    }
615
  }
616
  close($Hlocal);
617

    
618
  #ELEMENTS
619
  open($Hlocal, "<$fic");
620
  $is_liste_en_cours = 0;
621
  while(<$Hlocal>) {
622
    chomp;
623
    if(/^\s*(E\S+)/) {
624
      $nom_liste = $1;
625
      $is_liste_en_cours = 1;
626
      s/^\s*E\S+\s+//; s/\s+$//;
627
      push(@{$ref_listes[3]->{$nom_liste}},split(/\s+/,$_));
628
    }
629
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAFG]/) {
630
      $is_liste_en_cours = 0;
631
    }
632
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
633
      s/^\s+//; s/\s+$//;
634
      push(@{$ref_listes[3]->{$nom_liste}},split(/\s+/,$_));
635
    }
636
  }
637
  close($Hlocal);
638

    
639
  #POINTS D INTEGRATION
640
  open($Hlocal, "<$fic");
641
  $is_liste_en_cours = 0;
642
  while(<$Hlocal>) {
643
    chomp;
644
    if(/^\s*(G\S+)/) {
645
      $nom_liste = $1;
646
      $is_liste_en_cours = 1;
647
      s/^\s*G\S+\s+//; s/\s+$//;
648
      push(@{$ref_listes[4]->{$nom_liste}},split(/\s+/,$_));
649
    }
650
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAFE]/) {
651
      $is_liste_en_cours = 0;
652
    }
653
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
654
      s/^\s+//; s/\s+$//;
655
      push(@{$ref_listes[4]->{$nom_liste}},split(/\s+/,$_));
656
    }
657
  }
658

    
659
  ##AFFICHAGE DES LISTES DE NOEUDS
660
  #foreach my $nom (keys(%{$ref_listes[0]})) {
661
  #  print "$nom : @{$ref_listes[0]->{$nom}}\n";
662
  #}
663
  #<STDIN>;
664
  ##AFFICHAGE DES LISTES D ARETES
665
  #foreach my $nom (keys(%{$ref_listes[1]})) {
666
  #  print "$nom : @{$ref_listes[1]->{$nom}}\n";
667
  #}
668
  #<STDIN>;
669
  ##AFFICHAGE DES LISTES DE FACES
670
  #foreach my $nom (keys(%{$ref_listes[2]})) {
671
  #  print "$nom : @{$ref_listes[2]->{$nom}}\n";
672
  #}
673
  #<STDIN>;
674
  ##AFFICHAGE DES LISTES D ELEMENTS
675
  #foreach my $nom (keys(%{$ref_listes[3]})) {
676
  #  print "$nom : @{$ref_listes[3]->{$nom}}\n";
677
  #}
678
  #<STDIN>;
679
  ##AFFICHAGE DES LISTES DE POINTS D INTEGRATION
680
  #foreach my $nom (keys(%{$ref_listes[4]})) {
681
  #  print "$nom : @{$ref_listes[4]->{$nom}}\n";
682
  #}
683
  #<STDIN>;
684

    
685
  return @ref_listes;
686
}
687

    
688

    
689

    
690
#sub pour ecrire une liste de noeuds et elements
691
sub ecrire_liste_N_E {
692
  my $handle = shift;
693
  my $nom_liste = shift;
694
  my @liste_no = @_;
695

    
696
  my $cpt; my $cpt_max = 15; my $nb_blancs;
697

    
698
  $nb_blancs = ""; $nb_blancs .= " " for(1 .. length($nom_liste));
699
  $_ = shift(@liste_no);
700
  print $handle " $nom_liste $_";
701
  $cpt = 1;
702
  foreach my $no (@liste_no) {
703
    $cpt++;
704
    if($cpt == 1) {print $handle " $nb_blancs $no";}
705
    elsif($cpt == $cpt_max) {print $handle " $no\n"; $cpt = 0;}
706
    else {print $handle " $no";}
707
  }
708
  print $handle "\n" if($cpt != $cpt_max);
709
}#sub ecrire_liste_noeuds
710

    
711
#sub pour ecrire une liste d aretes et faces
712
sub ecrire_liste_A_F {
713
  my $handle = shift;
714
  my $nom_liste = shift;
715
  my @liste_no = @_;
716

    
717
  my $cpt; my $cpt_max = 30; my $nb_blancs;
718

    
719
  $nb_blancs = ""; $nb_blancs .= " " for(1 .. length($nom_liste));
720
  $_ = shift(@liste_no);
721
  print $handle " $nom_liste $_";
722
  $cpt = 1;
723
  foreach my $no (@liste_no) {
724
    $cpt++;
725
    if($cpt == 1) {print $handle " $nb_blancs $no";}
726
    elsif($cpt == $cpt_max) {print $handle " $no\n"; $cpt = 0;}
727
    else {print $handle " $no";}
728
  }
729
  print $handle "\n" if($cpt != $cpt_max);
730
}
731

    
732
#----------------
733
#sub qui lit un maillage herezh++ pour recuperer les noeuds, les elements et les listes de references
734
#et les renvoier sous forme de reference (lecture du .her et d un .lis si il existe)
735
#
736
# exemple d appel :
737
#  my ($nom_maillage, $nb_noeuds, $ref_tab_noeuds, $nb_elts, $ref_tab_elements, @ref_listes) = lecture_mail_her("fic_her");
738
#
739
#  avec - $nom_maillage     : nom du maillage (si il y en a un. sinon $nom_maillage sera egal a undef
740
#       - $nb_noeuds        : nombre de noeuds (entier)
741
#       - $ref_tab_noeuds   : reference vers un tableau de noeuds => $ref_tab_noeuds->[no noeud][0] : coordonnee x
742
#                                                                    $ref_tab_noeuds->[no noeud][1] : coordonnee y
743
#                                                                    $ref_tab_noeuds->[no noeud][2] : coordonnee z)
744
#       - $nb_elts          : nombre d elements (entier)
745
#       - $ref_tab_elements : reference vers une table de hashage => $ref_tab_elements->{no elt}{'TYPE'}      : type d element
746
#                                                                    @{$ref_tab_elements->{no elt}{'CONNEX'}} : (liste des noeuds)
747
#       - @ref_listes       : liste de references vers les tables de hashage contenant les listes de references de noeuds, aretes, faces et elements
748
#                             => $ref_listes[0] : reference vers la table de hashage des listes de noeuds  => @{$ref_listes[0]->{'nom liste'}} : (liste des noeuds)
749
#                                $ref_listes[1] : reference vers la table de hashage des listes d aretes   => @{$ref_listes[1]->{'nom liste'}} : (liste des aretes)
750
#                                $ref_listes[2] : reference vers la table de hashage des listes de faces   => @{$ref_listes[2]->{'nom liste'}} : (liste des faces)
751
#                                $ref_listes[3] : reference vers la table de hashage des listes d elements => @{$ref_listes[3]->{'nom liste'}} : (liste des elements)
752
#                                $ref_listes[4] : reference vers la table de hashage des listes de points d integration => @{$ref_listes[4]->{'nom liste'}} : (liste des points d integration)
753
#                                
754
sub lecture_mail_her {
755
  my $fher = shift;
756

    
757
  my $nom_maillage;
758

    
759
  #------------------------
760
  # lecture du maillage .her
761
  #------------------------
762
  #-lecture de noeuds
763
  my @tab_noeuds; my $nb_noeuds;
764
  my $no_noeud = 0;
765
  open(Fher, "<$fher");
766
  while(<Fher>) {
767
    if(/^\s*nom_maillage\s+(\S+)/) {$nom_maillage = $1; next;}
768
    next if(not /(\d+)\s+NOEUDS/);
769
    $nb_noeuds = $1;
770
    last;
771
  }
772
  while(<Fher>) {
773
    last if($no_noeud == $nb_noeuds);
774
    next if(not /^\s*(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$/);
775
    $no_noeud = $1;
776
    @{$tab_noeuds[$no_noeud]} = ($2,$3,$4);
777
  }
778

    
779
  #-lecture des elements
780
  my %tab_elements; my $nb_elts;
781
  my $no_elt = 0;
782
  while(<Fher>) {
783
    next if(not /(\d+)\s+ELEMENTS/);
784
    $nb_elts = $1;
785
    last;
786
  }
787
  while(<Fher>) {
788
    last if($no_elt == $nb_elts);
789
    next if(not /^\s*\d+\s+\w+\s+\w+/);
790
    s/^\s+//;s/\s+$//;
791
    $_ =~ /^(\d+)\s+/;
792
    $no_elt = $1; s/^(\d+)\s+//;
793
    $_ =~ /\s+(\d+(?:\s+\d+)*)$/;
794
    @{$tab_elements{$no_elt}{'CONNEX'}} = split(/\s+/, $1); s/\s+(\d+(?:\s+\d+)*)$//;
795
    $tab_elements{$no_elt}{'TYPE'} = $_; $tab_elements{$no_elt}{'TYPE'} =~ s/\s+/ /g;
796
  }
797
  close(Fher);
798

    
799

    
800
  #------------------------
801
  # lecture des references (dans le .her et dans un eventuel .lis)
802
  #------------------------
803
  my $flis = $fher; $flis =~ s/.her$/.lis/;
804
  my $nom_liste;
805
  my $is_liste_en_cours;
806
  my %listes_NOEUDS;
807
  my %listes_ARETES;
808
  my %listes_FACES;
809
  my %listes_ELEMENTS;
810
  my %listes_PTI;
811

    
812
  #-dans le .her
813
  open(Fher, "<$fher");
814
  $is_liste_en_cours = 0;
815
  while(<Fher>) {
816
    chomp;
817
    if(/^\s*(N\S+)/) {
818
      $nom_liste = $1;
819
      $is_liste_en_cours = 1;
820
      s/^\s*N\S+\s+//; s/\s+$//;
821
      push(@{$listes_NOEUDS{$nom_liste}},split(/\s+/,$_));
822
    }
823
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[AFEG]/) {
824
      $is_liste_en_cours = 0;
825
    }
826
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
827
      s/^\s+//; s/\s+$//;
828
      push(@{$listes_NOEUDS{$nom_liste}},split(/\s+/,$_));
829
    }
830
  }
831
  close(Fher);
832

    
833
  open(Fher, "<$fher");
834
  $is_liste_en_cours = 0;
835
  while(<Fher>) {
836
    chomp;
837
    if(/^\s*(A\S+)/) {
838
      $nom_liste = $1;
839
      $is_liste_en_cours = 1;
840
      s/^\s*A\S+\s+//; s/\s+$//;
841
      push(@{$listes_ARETES{$nom_liste}},split(/\s+/,$_));
842
    }
843
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NFEG]/) {
844
      $is_liste_en_cours = 0;
845
    }
846
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
847
      s/^\s+//; s/\s+$//;
848
      push(@{$listes_ARETES{$nom_liste}},split(/\s+/,$_));
849
    }
850
  }
851
  close(Fher);
852

    
853
  open(Fher, "<$fher");
854
  $is_liste_en_cours = 0;
855
  while(<Fher>) {
856
    chomp;
857
    if(/^\s*(F\S+)/) {
858
      $nom_liste = $1;
859
      $is_liste_en_cours = 1;
860
      s/^\s*F\S+\s+//; s/\s+$//;
861
      push(@{$listes_FACES{$nom_liste}},split(/\s+/,$_));
862
    }
863
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAEG]/) {
864
      $is_liste_en_cours = 0;
865
    }
866
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
867
      s/^\s+//; s/\s+$//;
868
      push(@{$listes_FACES{$nom_liste}},split(/\s+/,$_));
869
    }
870
  }
871
  close(Fher);
872

    
873
  open(Fher, "<$fher");
874
  $is_liste_en_cours = 0;
875
  while(<Fher>) {
876
    chomp;
877
    if(/^\s*(E\S+)/) {
878
      $nom_liste = $1;
879
      $is_liste_en_cours = 1;
880
      s/^\s*E\S+\s+//; s/\s+$//;
881
      push(@{$listes_ELEMENTS{$nom_liste}},split(/\s+/,$_));
882
    }
883
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAFG]/) {
884
      $is_liste_en_cours = 0;
885
    }
886
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
887
      s/^\s+//; s/\s+$//;
888
      push(@{$listes_ELEMENTS{$nom_liste}},split(/\s+/,$_));
889
    }
890
  }
891
  close(Fher);
892

    
893
  open(Fher, "<$fher");
894
  $is_liste_en_cours = 0;
895
  while(<Fher>) {
896
    chomp;
897
    if(/^\s*(G\S+)/) {
898
      $nom_liste = $1;
899
      $is_liste_en_cours = 1;
900
      s/^\s*G\S+\s+//; s/\s+$//;
901
      push(@{$listes_PTI{$nom_liste}},split(/\s+/,$_));
902
    }
903
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAFE]/) {
904
      $is_liste_en_cours = 0;
905
    }
906
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
907
      s/^\s+//; s/\s+$//;
908
      push(@{$listes_PTI{$nom_liste}},split(/\s+/,$_));
909
    }
910
  }
911
  close(Fher);
912

    
913

    
914
  #dans le .lis (si il existe)
915
  if(-e $flis) {
916

    
917
  open(Flis, "<$flis");
918
  $is_liste_en_cours = 0;
919
  while(<Flis>) {
920
    chomp;
921
    if(/^\s*(N\S+)/) {
922
      $nom_liste = $1;
923
      $is_liste_en_cours = 1;
924
      s/^\s*N\S+\s+//; s/\s+$//;
925
      push(@{$listes_NOEUDS{$nom_liste}},split(/\s+/,$_));
926
    }
927
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[AFEG]/) {
928
      $is_liste_en_cours = 0;
929
    }
930
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
931
      s/^\s+//; s/\s+$//;
932
      push(@{$listes_NOEUDS{$nom_liste}},split(/\s+/,$_));
933
    }
934
  }
935
  close(Flis);
936

    
937
  open(Flis, "<$flis");
938
  $is_liste_en_cours = 0;
939
  while(<Flis>) {
940
    chomp;
941
    if(/^\s*(A\S+)/) {
942
      $nom_liste = $1;
943
      $is_liste_en_cours = 1;
944
      s/^\s*A\S+\s+//; s/\s+$//;
945
      push(@{$listes_ARETES{$nom_liste}},split(/\s+/,$_));
946
    }
947
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NFEG]/) {
948
      $is_liste_en_cours = 0;
949
    }
950
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
951
      s/^\s+//; s/\s+$//;
952
      push(@{$listes_ARETES{$nom_liste}},split(/\s+/,$_));
953
    }
954
  }
955
  close(Flis);
956

    
957
  open(Flis, "<$flis");
958
  $is_liste_en_cours = 0;
959
  while(<Flis>) {
960
    chomp;
961
    if(/^\s*(F\S+)/) {
962
      $nom_liste = $1;
963
      $is_liste_en_cours = 1;
964
      s/^\s*F\S+\s+//; s/\s+$//;
965
      push(@{$listes_FACES{$nom_liste}},split(/\s+/,$_));
966
    }
967
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAEG]/) {
968
      $is_liste_en_cours = 0;
969
    }
970
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
971
      s/^\s+//; s/\s+$//;
972
      push(@{$listes_FACES{$nom_liste}},split(/\s+/,$_));
973
    }
974
  }
975
  close(Flis);
976

    
977
  open(Flis, "<$flis");
978
  $is_liste_en_cours = 0;
979
  while(<Flis>) {
980
    chomp;
981
    if(/^\s*(E\S+)/) {
982
      $nom_liste = $1;
983
      $is_liste_en_cours = 1;
984
      s/^\s*E\S+\s+//; s/\s+$//;
985
      push(@{$listes_ELEMENTS{$nom_liste}},split(/\s+/,$_));
986
    }
987
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAFG]/) {
988
      $is_liste_en_cours = 0;
989
    }
990
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
991
      s/^\s+//; s/\s+$//;
992
      push(@{$listes_ELEMENTS{$nom_liste}},split(/\s+/,$_));
993
    }
994
  }
995
  close(Flis);
996

    
997
  open(Flis, "<$flis");
998
  $is_liste_en_cours = 0;
999
  while(<Flis>) {
1000
    chomp;
1001
    if(/^\s*(G\S+)/) {
1002
      $nom_liste = $1;
1003
      $is_liste_en_cours = 1;
1004
      s/^\s*G\S+\s+//; s/\s+$//;
1005
      push(@{$listes_PTI{$nom_liste}},split(/\s+/,$_));
1006
    }
1007
    elsif(/^\s*noeuds/i or /^\s*elements/i or /^\s*[NAFE]/) {
1008
      $is_liste_en_cours = 0;
1009
    }
1010
    elsif($is_liste_en_cours and /^\s*\d+(\s+\d+)*\s*$/i) {
1011
      s/^\s+//; s/\s+$//;
1012
      push(@{$listes_PTI{$nom_liste}},split(/\s+/,$_));
1013
    }
1014
  }
1015
  close(Flis);
1016

    
1017
  }#if(-e $flis)
1018

    
1019
  #AFFICHAGE DES LISTES DE NOEUDS
1020
  #foreach my $nom (keys(%listes_NOEUDS)) {
1021
  #  print "$nom : @{$listes_NOEUDS{$nom}}\n";
1022
  #}
1023
  #AFFICHAGE DES LISTES D ARETES
1024
  #foreach my $nom (keys(%listes_ARETES)) {
1025
  #  print "$nom : @{$listes_ARETES{$nom}}\n";
1026
  #}
1027
  #AFFICHAGE DES LISTES DE FACES
1028
  #foreach my $nom (keys(%listes_FACES)) {
1029
  #  print "$nom : @{$listes_FACES{$nom}}\n";
1030
  #}
1031
  #AFFICHAGE DES LISTES D ELEMENTS
1032
  #foreach my $nom (keys(%listes_ELEMENTS)) {
1033
  #  print "$nom : @{$listes_ELEMENTS{$nom}}\n";
1034
  #}
1035
  #AFFICHAGE DES LISTES DE POINTS D INTEGRATION
1036
  #foreach my $nom (keys(%listes_PTI)) {
1037
  #  print "$nom : @{$listes_PTI{$nom}}\n";
1038
  #}
1039

    
1040
  return($nom_maillage, $nb_noeuds, \@tab_noeuds, $nb_elts, \%tab_elements,
1041
         \%listes_NOEUDS, \%listes_ARETES,
1042
         \%listes_FACES, \%listes_ELEMENTS, \%listes_PTI);
1043
}#sub lecture_mail_her
    (1-1/1)
    Redmine Appliance - Powered by TurnKey Linux