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
|