diff --git a/Common/ColorTable.cpp b/Common/ColorTable.cpp
index ba1d8ee1be90e4be16c6a8f4400c0af7369e7726..952fb4a1fe85cc2a822226ea0d0d0bc8afe1f8d7 100644
--- a/Common/ColorTable.cpp
+++ b/Common/ColorTable.cpp
@@ -1,4 +1,4 @@
-// $Id: ColorTable.cpp,v 1.5 2002-02-13 09:20:14 stainier Exp $
+// $Id: ColorTable.cpp,v 1.6 2002-02-14 15:39:09 colignon Exp $
 
 #include "Gmsh.h"
 #include "ColorTable.h"
@@ -104,7 +104,7 @@ void ColorTable_Recompute(GmshColorTable *ct, int rgb_flag, int alpha_flag){
           r = 255 ; g = 0 ; b = 0 ; 
         }
         break;
-      case 4: /* blue-yellow-white */
+      case 4: /* rainbow modified to add black and white , from EMC2000 */
 #define myfct(a,b,c,d) ((a)+\
                         (b)*(s-bias)+\
                         (c)*(s-bias)*(s-bias)+\
@@ -125,6 +125,32 @@ void ColorTable_Recompute(GmshColorTable *ct, int rgb_flag, int alpha_flag){
       case 6: /* monochrome */
         r = g = b = 0 ;
         break;
+      case 7: /* rainbow modified to add black and white , from EMC2000 */
+        if (s-bias<=0.00) {
+          r = 0 ; g = 0 ; b = 0 ; 
+        }
+        else if(s-bias<=0.2){
+          r = 57*(1-100*((s-bias)-0.1)*((s-bias)-0.1)) ; g = 0 ; b = (int)((s-bias)*(255./0.2)) ;
+        }
+        else if(s-bias<=0.3624){
+          r = 0 ; g = (int)((s-bias-0.2)*(255./0.1624)) ; b = 255 ; 
+        }
+        else if(s-bias<=0.50) {
+          r = 0 ; g = 255 ; b = (int)(255.-(255./0.1376)*(s-bias-0.3624)); 
+        }
+        else if(s-bias<=0.6376){
+          r = (int)((s-bias-0.5)*(255./0.1376)) ; g = 255 ; b = 0 ; 
+        }
+        else if(s-bias<=0.8) {
+          r = 255; g = (int)(255.-(255./0.1624)*(s-bias-0.6376)) ; b = 0 ;
+        }
+        else if(s-bias<=1.0) {
+          r = 255; g = (int)((255./0.2)*(s-bias-0.8)) ; b = (int)(-3187.66*(s-bias)*(s-bias)+7012.76*(s-bias)-3570.61) ;
+        } 
+        else { 
+          r = 255 ; g = 255 ; b = 255 ; 
+        }
+        break;
       default: /* grayscale without white */
         if      (s-bias<=0.00){ r = g = b = 0 ; }
         else if (s-bias<=1.00){ r = g = b = (int)(220*(s-bias)); }