aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetIOScalar
diff options
context:
space:
mode:
Diffstat (limited to 'Carpet/CarpetIOScalar')
-rwxr-xr-xCarpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl65
1 files changed, 65 insertions, 0 deletions
diff --git a/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl b/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl
new file mode 100755
index 000000000..f174b9cae
--- /dev/null
+++ b/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl
@@ -0,0 +1,65 @@
+#! /usr/bin/perl -w
+#/*@@
+# @file mergeCarpetIOScalar.pl
+# @date Tue 15 August 2006
+# @author Thomas Radke
+# @desc
+# Perl script to merge CarpetIOScalar output files,
+# eliminating duplicate timesteps.
+#
+# Source code comments also by Thomas Radke :-)
+# @enddesc
+#@@*/
+
+
+if (@ARGV) {
+ print "\n" .
+ " This script can be used to merge CarpetIOScalar output written\n" .
+ " before and after recovery.\n" .
+ " It reads from STDIN the contents of one or more files\n" .
+ " in CarpetIOScalar format and writes them to STDOUT again,\n" .
+ " eliminating duplicate timesteps.\n\n" .
+ " Example: cat alp.norm1.asc | $0 > alp.norm1.asc.merged\n\n";
+ exit;
+}
+
+# Skalar-Variable zur Speicherung der aktuellen Zeilennummer
+my $line = 0;
+
+# Rauten-Feld zur Speicherung der bereits ausgegebenen Datensaetze
+my %timesteps = ();
+
+# lese die naechste Zeile von der Standard-Eingabe, solange das Dateiende
+# nicht erreicht ist
+while (<STDIN>) {
+
+ # aktualisiere die Zeilennummer
+ $line++;
+
+ # vergleiche die aktuelle Zeile mit dem Format fuer eine Datenzeile
+ if (/^(\d+) /) {
+
+ # ermittle die Iterationsnummer aus der Datenzeile
+ my $iteration = $1;
+
+ # pruefe im Rauten-Feld, ob dieser Datensatz bereits ausgegeben wurde
+ while (defined $timesteps{$iteration}) {
+
+ # lies alle folgenden Zeilen von der Standard-Eingabe
+ # bis zur Datenzeile des naechsten Datensatzes
+ while (<STDIN>) {
+ $line++;
+ next unless (/^(\d+) /);
+
+ $iteration = $1;
+ last;
+ }
+ }
+
+ # vermerke im Rauten-Feld, dass dieser Datensatz ausgegeben wurde
+ $timesteps{$iteration} = 1;
+ }
+
+ # gib die aktuelle Zeile auf der Standard-Ausgabe aus
+ print;
+}