Index: /LMDZ5/trunk/tools/compare_real.py
===================================================================
--- /LMDZ5/trunk/tools/compare_real.py	(revision 2082)
+++ /LMDZ5/trunk/tools/compare_real.py	(revision 2082)
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+# Author: Lionel GUEZ
+
+# This script should be called by "diffdef.sh". It operates on
+# different lines with common variables. It requires version 2.7 or
+# higher of Python (it also works with Python 3).
+
+import sys, os.path
+
+with open(os.path.join(sys.argv[1], "common_var")) as common_var1, \
+        open(os.path.join(sys.argv[2], "common_var")) as common_var2, \
+        open("common_lines", "a") as common_lines, \
+        open("uniq_val", "w") as uniq_val:
+    uniq_val.write("Comparison of " + sys.argv[1] + " and " +  sys.argv[2] 
+                   + ":\n") # title line
+    for line1, line2 in zip(common_var1, common_var2):
+        i = line1.index("=")
+        var_name = line1[:i]
+        value1 = line1[i + 1:-1]
+        value2 = line2[i + 1:-1]
+        try:
+            value1_num = float(value1)
+            value2_num = float(value2)
+        except ValueError:
+            uniq_val.write(var_name + "=\t" + value1 + "\t" + value2 + "\n")
+        else:
+            if (value1_num, value2_num) == (0, 0) \
+                    or abs(value2_num - value1_num) \
+                    / max(abs(value1_num), abs(value2_num)) <= 1e-5:
+                # These should not be integer values, write a formatted value:
+                common_lines.write(var_name + "=" + str(value1_num) + "\n")
+            else:
+                # These could be integer values, write the original strings:
+                uniq_val.write(var_name + "=\t" + value1 + "\t" + value2 
+                               + "\n")
Index: /LMDZ5/trunk/tools/diffdef.sh
===================================================================
--- /LMDZ5/trunk/tools/diffdef.sh	(revision 2082)
+++ /LMDZ5/trunk/tools/diffdef.sh	(revision 2082)
@@ -0,0 +1,90 @@
+# This is a script in Bash.
+# Author: Lionel GUEZ
+
+# This script compares files "!(traceur).def" in two directories. The
+# script uses GNU versions of the utilities cut, sort and uniq.
+
+# See guide:
+# http://lmdz.lmd.jussieu.fr/utilisateurs/outils/utilisation-de-lmdz#section-5
+
+USAGE="usage: `basename $0` directory_1 directory_2"
+
+if (($# != 2))
+    then
+    echo "$USAGE" >&2
+    exit 1
+fi
+
+##set -x
+set -e
+
+script_dir=`dirname $0`
+
+# Let us make sure we know what the sort order is:
+export LC_ALL=C
+
+# Enable extended pattern matching features:
+shopt -s extglob
+
+for my_directory in $*
+  do
+  cd $my_directory
+  rm -f all.def
+  echo "def files in $my_directory:"
+  ls !(traceur).def
+
+  # Concatenate and format the def files:
+  cat !(traceur).def | tr -d " " | grep -v -E '(^#|^!|INCLUDEDEF|^$)' \
+      | tr '[:lower:]' '[:upper:]' | sed 's/=N$/=FALSE/' | sed 's/=Y$/=TRUE/' \
+      | sort >all.def
+
+  # Check that no variable is repeated:
+  cut --fields=1 --delimiter="=" all.def | uniq --repeated >plouf_$$
+  if [[ -s plouf_$$ ]]
+      then
+      echo
+      echo "Error: a variable is repeated in directory \"$my_directory\"."
+      echo
+      echo "Here is the list of repeated variables in directory \"$my_directory\":"
+      echo
+      cat plouf_$$
+      rm plouf_$$
+      exit 1
+  fi
+  rm plouf_$$
+
+  cd - >/dev/null
+done
+
+
+sort $1/all.def $2/all.def | uniq --repeated >common_lines
+
+for my_directory in $*
+  do
+  sort $my_directory/all.def common_lines | uniq --unique \
+      >$my_directory/uniq_lines
+done
+
+sort --field-separator="=" --key=1,1 --unique $2/uniq_lines $1/uniq_lines \
+    | sort - $2/uniq_lines | uniq --unique >$1/uniq_var
+sort --field-separator="=" --key=1,1 --unique $1/uniq_lines $2/uniq_lines \
+    | sort - $1/uniq_lines | uniq --unique >$2/uniq_var
+
+for my_directory in $*
+  do
+  cd $my_directory
+  echo "Created file \"$my_directory/uniq_var\"."
+  sort uniq_lines uniq_var | uniq --unique >common_var
+  rm uniq_lines
+  cd - >/dev/null
+done
+
+$script_dir/compare_real.py $*
+sort common_lines --output=common_lines # was modified by the Python script
+echo "Created files \"./common_lines\" and \"./uniq_val\"."
+
+# Clean up:
+for my_directory in $*
+  do
+    rm $my_directory/common_var $my_directory/all.def
+done
