diff --git a/Common/Options.cpp b/Common/Options.cpp
index 4b65de5966cb0191ed447d2456c8c9612c41d453..a534e0e0b759a83644e98a0cef4b9975666f78de 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.277 2006-04-05 19:00:59 geuzaine Exp $
+// $Id: Options.cpp,v 1.278 2006-04-18 07:49:18 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -6323,6 +6323,33 @@ double opt_view_tensor_type(OPT_ARGS_NUM)
      case DRAW_POST_LMGC90:
        WID->view_choice[4]->value(1);
        break;
+     case DRAW_POST_LMGC90_TYPE:
+       WID->view_choice[4]->value(2);
+       break;
+     case DRAW_POST_LMGC90_COORD:
+       WID->view_choice[4]->value(3);
+       break;
+     case DRAW_POST_LMGC90_PRES:
+       WID->view_choice[4]->value(4);
+       break;
+     case DRAW_POST_LMGC90_SN:
+       WID->view_choice[4]->value(5);
+       break;
+     case DRAW_POST_LMGC90_DEPX:
+       WID->view_choice[4]->value(6);
+       break;
+     case DRAW_POST_LMGC90_DEPY:
+       WID->view_choice[4]->value(7);
+       break;
+     case DRAW_POST_LMGC90_DEPZ:
+       WID->view_choice[4]->value(8);
+       break;
+     case DRAW_POST_LMGC90_DEPAV:
+       WID->view_choice[4]->value(9);
+       break;
+     case DRAW_POST_LMGC90_DEPNORM:
+       WID->view_choice[4]->value(10);
+       break;
      case DRAW_POST_VONMISES:
      default:
        WID->view_choice[4]->value(0);
diff --git a/Common/Views.h b/Common/Views.h
index 37ef0cd2c15660a258672f6f6f47c91279f7ea0b..98e4a75b2aa838e81f073bb6393bc4e844df1158 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -179,9 +179,17 @@ class Post_View{
 #define DRAW_POST_LOCATE_VERTEX 2
 
 // TensorType
-#define DRAW_POST_VONMISES     0
-#define DRAW_POST_LMGC90       1
-
+#define DRAW_POST_VONMISES     		1
+#define DRAW_POST_LMGC90       		2
+#define DRAW_POST_LMGC90_TYPE  		3
+#define DRAW_POST_LMGC90_COORD  	4
+#define DRAW_POST_LMGC90_PRES   	5
+#define DRAW_POST_LMGC90_SN     	6
+#define DRAW_POST_LMGC90_DEPX   	7	
+#define DRAW_POST_LMGC90_DEPY   	8
+#define DRAW_POST_LMGC90_DEPZ   	9
+#define DRAW_POST_LMGC90_DEPAV  	10
+#define DRAW_POST_LMGC90_DEPNORM  	11
 // RangeType
 #define DRAW_POST_RANGE_DEFAULT  1
 #define DRAW_POST_RANGE_CUSTOM   2
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 4d4ca2e8f9537239ef32015aa7f02c5402e66ff0..fd30a41ef8b4fbdc5023893c9de23c60ae615913 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.415 2006-04-15 13:01:15 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.416 2006-04-18 07:49:18 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -3883,7 +3883,34 @@ void view_options_ok_cb(CALLBACK_ARGS)
      case 0:
  	val = DRAW_POST_VONMISES;
       break;
-     default:
+     case 2:
+ 	val = DRAW_POST_LMGC90_TYPE;
+      break;
+     case 3:
+ 	val = DRAW_POST_LMGC90_COORD;
+      break;
+     case 4:
+ 	val = DRAW_POST_LMGC90_PRES;
+      break;
+     case 5:
+ 	val = DRAW_POST_LMGC90_SN;
+      break;
+     case 6:
+ 	val = DRAW_POST_LMGC90_DEPX;
+      break;
+     case 7:
+ 	val = DRAW_POST_LMGC90_DEPY;
+      break;
+     case 8:
+ 	val = DRAW_POST_LMGC90_DEPZ;
+      break;
+     case 9:
+ 	val = DRAW_POST_LMGC90_DEPAV;
+      break;
+     case 10:
+ 	val = DRAW_POST_LMGC90_DEPNORM;
+      break;
+     default:		//1
  	val = DRAW_POST_LMGC90;
  	break;
      }
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 84f93632190846132b3179bd2a5ce792cbb77183..770052e58fd4f6baa9a2f7b7c88517db4a502876 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.499 2006-04-15 13:01:15 geuzaine Exp $
+// $Id: GUI.cpp,v 1.500 2006-04-18 07:49:19 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -3151,7 +3151,16 @@ void GUI::create_option_window()
 
 	static Fl_Menu_Item menu_tensor[] = {
 	  {"Von-Mises", 0, 0, 0},
-          {"LMGC90", 0, 0, 0}, //not implemented yet
+          {"LMGC90", 0, 0, 0}, 
+          {"LMGC90 Type", 0, 0, 0}, 
+          {"LMGC90 Coordinance", 0, 0, 0}, 
+          {"LMGC90 Pression", 0, 0, 0}, 
+          {"LMGC90 Normal stress", 0, 0, 0}, 
+          {"LMGC90 X displacement", 0, 0, 0}, 
+          {"LMGC90 Y displacement", 0, 0, 0}, 
+          {"LMGC90 Z displacement", 0, 0, 0}, 
+          {"LMGC90 Average displacement", 0, 0, 0}, 
+          {"LMGC90 Norm of displacement", 0, 0, 0}, 
           {0}
         };
         view_choice[4] = new Fl_Choice(L + 2 * WB, 2 * WB + 11 * BH, IW, BH, "Tensor display");
diff --git a/Graphics/PostElement.cpp b/Graphics/PostElement.cpp
index 32c1da90f6824d8d6e41e56f2d5762e5cc09d108..030ee99ad8233a6153a2a1c6f72de612ef208f2c 100644
--- a/Graphics/PostElement.cpp
+++ b/Graphics/PostElement.cpp
@@ -1,4 +1,4 @@
-// $Id: PostElement.cpp,v 1.71 2006-01-14 16:24:54 geuzaine Exp $
+// $Id: PostElement.cpp,v 1.72 2006-04-18 07:49:20 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -31,7 +31,15 @@
 #include "Iso.h"
 #include "Context.h"
 #include "Numeric.h"
+#include <iostream>
+#include <math.h>
 
+using namespace std;
+
+int state = -1;		// to distinguish the different LMGC cases to output
+double zmin[1],zmax[1];
+int k = 0;
+int kk =0;
 extern Context_T CTX;
 
 void Draw_ElementBoundary(int type, Post_View * View, 
@@ -470,7 +478,7 @@ void Draw_ScalarTriangle(Post_View * View, int preproNormals,
       }
       else{
 	if(View->Light) glEnable(GL_LIGHTING);
-	if(CTX.polygon_offset) glEnable(GL_POLYGON_OFFSET_FILL);
+	if(CTX.polygon_offset)
 	glBegin(GL_TRIANGLES);
 	for(int i = 0; i < 3; i++){
 	  PaletteContinuous(View, ValMin, ValMax, Val[i]);
@@ -1207,7 +1215,6 @@ void Draw_VectorPoint(ARGS)
 {
   Draw_VectorElement(POST_POINT, View, preproNormals, ValMin, ValMax, X, Y, Z, V);
 }
-
 void Draw_VectorLine(ARGS)
 {
   Draw_VectorElement(POST_LINE, View, preproNormals, ValMin, ValMax, X, Y, Z, V);
@@ -1268,18 +1275,427 @@ void Draw_TensorElement(int type, Post_View * View, int preproNormals,
   /// their Von Mises invariant (J2 invariant); this will simply call
   /// the scalar function...
 
-  // View->TensorType == DRAW_POST_VONMISES 
-  int ts = View->TimeStep;
-  View->TimeStep = 0;
+  if(View->TensorType == DRAW_POST_VONMISES){
+  	int ts = View->TimeStep;
+ 	View->TimeStep = 0;
 
-  double V_VonMises[8];
-  for(int i = 0; i < nbnod; i++){
-    V_VonMises[i] = ComputeVonMises(V + 9*(i + nbnod * ts));
-  }
+  	double V_VonMises[8];
+  	for(int i = 0; i < nbnod; i++){
+  	  	V_VonMises[i] = ComputeVonMises(V + 9*(i + nbnod * ts));
+  	}
+  	Draw_ScalarElement(type, View, preproNormals, ValMin, ValMax, X, Y, Z, V_VonMises);
+
+  	View->TimeStep = ts;
+	
+   }
+
+     if(View->TensorType == DRAW_POST_LMGC90 || View->TensorType == DRAW_POST_LMGC90_TYPE || View->TensorType == DRAW_POST_LMGC90_COORD || View->TensorType == DRAW_POST_LMGC90_PRES || View->TensorType == DRAW_POST_LMGC90_SN || View->TensorType == DRAW_POST_LMGC90_DEPX || View->TensorType == DRAW_POST_LMGC90_DEPY|| View->TensorType == DRAW_POST_LMGC90_DEPZ || View->TensorType == DRAW_POST_LMGC90_DEPAV || View->TensorType == DRAW_POST_LMGC90_DEPNORM){
+//cout << View->TensorType << endl;
+	int ts = View->TimeStep;
+	int it;
+	double DEP[3];	// déplacement relatif cdf % a config de référence
+	double CDG[3];	// coordonnées du centre de gravité au tps t0
+	double VIT[3];  // vitesse en x,y,z du cdg % au repère absolu
+	double ROT[3]; 	// angles de rotation du cdg % au repère absolu
+	double VAR[3];	// valeur des 3 variables supplémentaires
+	double a11,a12,a13,a21,a22,a23,a31,a32,a33;
+	double ztmp[3];
+
+	View->TimeStep = 0;
+
+	List_T * list = (*(View->Grains))[(int)V[6]];
+	// Liste contenant toutes les info sur les lignes TP : (x,x,x) et {x,x,x,x,x,x,x,x,x, ...}
+	// info rangé à la suite
+	List_T * listt = View->TP;
+
+	k = k+1;
+	it = (k-1)*List_Nbr(listt)/View->NbTP;
+		
+	// Lecture des coordonnées du cdg dans le repère absolu
+	List_Read(listt,0+it,&CDG[0]);
+	List_Read(listt,1+it,&CDG[1]);
+	List_Read(listt,2+it,&CDG[2]);
+
+	// Lecture des déplacements par rapport au cdg initital
+	List_Read(listt,3+ts*9+it,&DEP[0]);
+	List_Read(listt,4+ts*9+it,&DEP[1]);
+	List_Read(listt,5+ts*9+it,&DEP[2]);
+
+	// Lecture des rotations du centre de gravité
+	List_Read(listt,6+ts*9+it,&ROT[0]);
+	List_Read(listt,7+ts*9+it,&ROT[1]);
+	List_Read(listt,8+ts*9+it,&ROT[2]);
+
+	/*if(vz==0 || vy == 0){
+		ROT[0] = 0;
+	else{
+		ROT[0] = atan(vz/vy);}
+	if(vx==0 || vz == 0){
+		ROT[1] = 0;}
+	else{
+		ROT[1] = atan(vx/vz);}
+	if(vy==0 || vx == 0){
+		ROT[2] = 0;}
+	else{
+		ROT[2] = atan(vy/vx);}	*/
+
+	// Lecture des valeurs des variables supplémentaires
+	List_Read(listt,9+ts*9+it,&VAR[0]);
+	List_Read(listt,10+ts*9+it,&VAR[1]);
+	List_Read(listt,11+ts*9+it,&VAR[2]);
+//	cout << "var8 " << VAR[1] << endl;
+//	cout << "var9 " << VAR[2] << endl;
+	// calcule les valeurs min et max d'une info 1 seule fois
+	if(state != View->TensorType){
+	switch (View->TensorType) {
+  		case DRAW_POST_LMGC90: 
+			// couleur uniforme
+			zmin[0]=1;
+			zmax[0]=1;
+			state = DRAW_POST_LMGC90;
+		break;
+  		case DRAW_POST_LMGC90_TYPE: 
+			// couleur en fonction du type de grain
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,9,&zmin[0]);
+			List_Read(listt,9,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				List_Read(listt,i*it+9,&ztmp[0]);
+				if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+				if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+			}
+			state = DRAW_POST_LMGC90_TYPE;
+		break;
+  		case DRAW_POST_LMGC90_COORD: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,9,&zmin[0]);
+			List_Read(listt,9,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9-1; j++){
+					List_Read(listt,i*it+18+j*9,&ztmp[0]); // on part pas du premier
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_COORD;
+		break;
+  		case DRAW_POST_LMGC90_PRES: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,10,&zmin[0]);
+			List_Read(listt,10,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+10+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_PRES;
+		break;
+  		case DRAW_POST_LMGC90_SN: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,11,&zmin[0]);
+			List_Read(listt,11,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+11+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_SN;
+		break;
+  		case DRAW_POST_LMGC90_DEPX: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,3,&zmin[0]);
+			List_Read(listt,3,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+3+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPX;
+		break;
+  		case DRAW_POST_LMGC90_DEPY: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,4,&zmin[0]);
+			List_Read(listt,4,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+4+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPY;
+		break;
+  		case DRAW_POST_LMGC90_DEPZ:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,5,&zmin[0]);
+			List_Read(listt,5,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+5+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPZ;
+		break;
+  		case DRAW_POST_LMGC90_DEPAV:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,3,&ztmp[0]);
+			List_Read(listt,4,&ztmp[1]);
+			List_Read(listt,5,&ztmp[2]);
+			zmin[0]=(ztmp[0]+ztmp[1]+ztmp[2])/3;
+			List_Read(listt,3,&ztmp[0]);
+			List_Read(listt,4,&ztmp[1]);
+			List_Read(listt,5,&ztmp[2]);
+			zmax[0]=(ztmp[0]+ztmp[1]+ztmp[2])/3;
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+3+j*9,&ztmp[0]);
+					List_Read(listt,i*it+4+j*9,&ztmp[1]);
+					List_Read(listt,i*it+5+j*9,&ztmp[2]);
+					ztmp[0]=(ztmp[0]+ztmp[1]+ztmp[2])/3;
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPAV ;
+		break;
+  		case DRAW_POST_LMGC90_DEPNORM:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,3,&ztmp[0]);
+			List_Read(listt,4,&ztmp[1]);
+			List_Read(listt,5,&ztmp[2]);
+			zmin[0]=sqrt(ztmp[0]*ztmp[0]+ztmp[1]*ztmp[1]+ztmp[2]*ztmp[2]);
+			List_Read(listt,3,&ztmp[0]);
+			List_Read(listt,4,&ztmp[1]);
+			List_Read(listt,5,&ztmp[2]);
+			zmax[0]=sqrt(ztmp[0]*ztmp[0]+ztmp[1]*ztmp[1]+ztmp[2]*ztmp[2]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+3+j*9,&ztmp[0]);
+					List_Read(listt,i*it+4+j*9,&ztmp[1]);
+					List_Read(listt,i*it+5+j*9,&ztmp[2]);
+					ztmp[0]=sqrt(ztmp[0]*ztmp[0]+ztmp[1]*ztmp[1]+ztmp[2]*ztmp[2]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPNORM ;
+		break;
+	
+/*
+  		case DRAW_POST_LMGC90_DEPX: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,3,&zmin[0]);
+			List_Read(listt,3,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+3+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPX;
+		break;
+  		case DRAW_POST_LMGC90_DEPY: 
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,4,&zmin[0]);
+			List_Read(listt,4,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+4+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPY;
+		break;
+  		case DRAW_POST_LMGC90_DEPZ:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,5,&zmin[0]);
+			List_Read(listt,5,&zmax[0]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+5+j*9,&ztmp[0]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEP;
+		break;
+  		case DRAW_POST_LMGC90_DEPAV:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,3,&ztmp[0]);
+			List_Read(listt,4,&ztmp[1]);
+			List_Read(listt,5,&ztmp[2]);
+			zmin[0]=(ztemp[0]+ztemp[1]+ztemp[2])/3;
+			List_Read(listt,3,&zmax[0]);
+			List_Read(listt,4,&zmax[1]);
+			List_Read(listt,5,&zmax[2]);
+			zmax[0]=(ztemp[0]+ztemp[1]+ztemp[2])/3;
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+3+j*9,&ztmp[0]);
+					List_Read(listt,i*it+4+j*9,&ztmp[0]);
+					List_Read(listt,i*it+5+j*9,&ztmp[0]);
+					ztmp[0]=(ztemp[0]+ztemp[1]+ztemp[2])/3;
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPAV ;
+		break;
+  		case DRAW_POST_LMGC90_DEPNORM:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,3,&ztmp[0]);
+			List_Read(listt,4,&ztmp[1]);
+			List_Read(listt,5,&ztmp[2]);
+			zmin[0]=sqrt(ztemp[0]*ztemp[0]+ztemp[1]*ztemp[1]+ztemp[2]*ztemp[2]);
+			List_Read(listt,3,&zmax[0]);
+			List_Read(listt,4,&zmax[1]);
+			List_Read(listt,5,&zmax[2]);
+			zmax[0]=sqrt(ztemp[0]*ztemp[0]+ztemp[1]*ztemp[1]+ztemp[2]*ztemp[2]);
+			for(int i = 0; i < View->NbTP; i++){
+				for(int j = 0; j< ((List_Nbr(listt)/View->NbTP)-3)/9; j++){
+					List_Read(listt,i*it+3+j*9,&ztmp[0]);
+					List_Read(listt,i*it+4+j*9,&ztmp[0]);
+					List_Read(listt,i*it+5+j*9,&ztmp[0]);
+				if(k==View->NbTP){
+		k = 0;	
+	}	ztmp[0]=sqrt(ztemp[0]*ztemp[0]+ztemp[1]*ztemp[1]+ztemp[2]*ztemp[2]);
+					if(ztmp[0]<zmin[0]){zmin[0] = ztmp[0];}
+					if(ztmp[0]>zmax[0]){zmax[0] = ztmp[0];}
+				}
+			}
+			state = DRAW_POST_LMGC90_DEPNORM ;
+		break;*/
+		} //end switch
+	} //end if
+
+	// matrice de changement de base, pour la rotation
+	a11 = cos(ROT[0])*cos(ROT[1]); a12 = -sin(ROT[0])*cos(ROT[1]); 	a13 = -sin(ROT[1]);
+	a21 = sin(ROT[0])*cos(ROT[2])-cos(ROT[0])*sin(ROT[1])*sin(ROT[2]);
+	a22 = cos(ROT[0])*cos(ROT[2])+sin(ROT[0])*sin(ROT[1])*sin(ROT[2]);
+	a23 = -cos(ROT[1])*sin(ROT[2]);
+	a31 = sin(ROT[0])*sin(ROT[2])+cos(ROT[0])*sin(ROT[1])*cos(ROT[2]);
+	a32 = cos(ROT[0])*sin(ROT[2])-sin(ROT[0])*sin(ROT[1])*cos(ROT[2]);
+	a33 = cos(ROT[1])*cos(ROT[2]);	
+
+	for(int i = 0; i < List_Nbr(list) ; i = i+9){
+		double tmp[9];
+		List_Read(list,i,&tmp[0]);	//X
+		List_Read(list,i+1,&tmp[1]);	//Y
+		List_Read(list,i+2,&tmp[2]);	//Z
+		List_Read(list,i+3,&tmp[3]);
+		List_Read(list,i+4,&tmp[4]);
+		List_Read(list,i+5,&tmp[5]);
+		List_Read(list,i+6,&tmp[6]);
+		List_Read(list,i+7,&tmp[7]);
+		List_Read(list,i+8,&tmp[8]);
+
+		X[0] = ((tmp[0])*a11+(tmp[1])*a12+(tmp[2])*a13)+CDG[0]+DEP[0];
+		Y[0] = ((tmp[0])*a21+(tmp[1])*a22+(tmp[2])*a23)+CDG[1]+DEP[1]; 
+		Z[0] = ((tmp[0])*a31+(tmp[1])*a32+(tmp[2])*a33)+CDG[2]+DEP[2];
+
+		X[1] = ((tmp[3])*a11+(tmp[4])*a12+(tmp[5])*a13)+CDG[0]+DEP[0];
+		Y[1] = ((tmp[3])*a21+(tmp[4])*a22+(tmp[5])*a23)+CDG[1]+DEP[1];
+		Z[1] = ((tmp[3])*a31+(tmp[4])*a32+(tmp[5])*a33)+CDG[2]+DEP[2];
+
+		X[2] = ((tmp[6])*a11+(tmp[7])*a12+(tmp[8])*a13)+CDG[0]+DEP[0];
+		Y[2] = ((tmp[6])*a21+(tmp[7])*a22+(tmp[8])*a23)+CDG[1]+DEP[1];
+		Z[2] = ((tmp[6])*a31+(tmp[7])*a32+(tmp[8])*a33)+CDG[2]+DEP[2];
+
+		double n[3];
+     		double n1[3];
+		double n2[3];
+		double n3[3];
+		double racine;
+      		normal3points(X[0], Y[0], Z[0], X[1], Y[1], Z[1], X[2], Y[2], Z[2], n);
+		//vertex 1
+/*		n1[0] = X[0]+X[1]-2*(CDG[0]+DEP[0]);
+		n1[1] = Y[0]+Y[1]-2*(CDG[1]+DEP[1]);
+		n1[2] = Z[0]+Z[1]-2*(CDG[2]+DEP[2]);
+		racine = sqrt(n1[0]*n1[0]+n1[1]*n1[1]+n1[2]*n1[2]);
+		n1[0] = n1[0]/racine;	n1[1] = n1[1]/racine; 	n1[2] = n1[2]/racine;
+		//vertex 2
+		n2[0] = X[2]+X[1]-2*(CDG[0]+DEP[0]);
+		n2[1] = Y[2]+Y[1]-2*(CDG[1]+DEP[1]);
+		n2[2] = Z[2]+Z[1]-2*(CDG[2]+DEP[2]);
+		racine = sqrt(n2[0]*n2[0]+n2[1]*n2[1]+n2[2]*n2[2]);
+		n2[0] = n2[0]/racine;	n2[1] = n2[1]/racine; 	n2[2] = n1[2]/racine;
+		//vertex 3
+		n3[0] = X[0]+X[2]-2*(CDG[0]+DEP[0]);
+		n3[1] = Y[0]+Y[2]-2*(CDG[1]+DEP[1]);
+		n3[2] = Z[0]+Z[2]-2*(CDG[2]+DEP[2]);
+		racine = sqrt(n3[0]*n3[0]+n3[1]*n3[1]+n3[2]*n3[2]);
+		n3[0] = n3[0]/racine;	n3[1] = n3[1]/racine; 	n3[2] = n3[2]/racine;*/
+	switch (View->TensorType) {
+  		case DRAW_POST_LMGC90: 
+			PaletteContinuous(View,zmin[0],zmax[0],1);
+		break;
+  		case DRAW_POST_LMGC90_TYPE:
+			it = List_Nbr(listt)/View->NbTP;
+			List_Read(listt,(k-1)*it+9,&ztmp[0]);
+			PaletteContinuous(View,zmin[0],zmax[0],ztmp[0]); 
+		break;
+		case DRAW_POST_LMGC90_COORD:
+			if(ts!=0){
+				PaletteContinuous(View,zmin[0],zmax[0],VAR[0]);} 
+			else{
+				it = List_Nbr(listt)/View->NbTP;
+				List_Read(listt,(k-1)*it+18,&ztmp[0]);
+				PaletteContinuous(View,zmin[0],zmax[0],ztmp[0]); 
+			}
+		break;
+		case DRAW_POST_LMGC90_PRES:
+			PaletteContinuous(View,zmin[0],zmax[0],VAR[1]); 
+		break;
+		case DRAW_POST_LMGC90_SN:
+			PaletteContinuous(View,zmin[0],zmax[0],VAR[2]); 
+		break;
+		case DRAW_POST_LMGC90_DEPX:
+			PaletteContinuous(View,zmin[0],zmax[0],DEP[0]); 
+		break;
+		case DRAW_POST_LMGC90_DEPY:
+			PaletteContinuous(View,zmin[0],zmax[0],DEP[1]); 
+		break;
+  		case DRAW_POST_LMGC90_DEPZ: 
+			PaletteContinuous(View,zmin[0],zmax[0],DEP[2]);
+		break;
+  		case DRAW_POST_LMGC90_DEPAV:
+			PaletteContinuous(View,zmin[0],zmax[0],(DEP[0]+DEP[1]+DEP[2])/3);
+		break;
+		case DRAW_POST_LMGC90_DEPNORM:
+			PaletteContinuous(View,zmin[0],zmax[0],sqrt(DEP[0]*DEP[0]+DEP[1]*DEP[1]+DEP[2]*DEP[2]));
+		break;
+
+	}
+		glEnable(GL_LIGHTING);
+		glBegin(GL_TRIANGLES);
+			glNormal3dv(n);			
+			glVertex3d(X[0], Y[0], Z[0]);
+//			glNormal3dv(n2);
+			glVertex3d(X[1], Y[1], Z[1]);
+//			glNormal3dv(n3);			
+			glVertex3d(X[2], Y[2], Z[2]);
+		glEnd();
+		glDisable(GL_LIGHTING);
+	}
 
-  Draw_ScalarElement(type, View, preproNormals, ValMin, ValMax, X, Y, Z, V_VonMises);
+	View->TimeStep = ts;
+	if(k==View->NbTP){
+		k = 0;	
+	}
+ 
+   }	
 
-  View->TimeStep = ts;
+	
 }
 
 #define ARGS Post_View *View, int preproNormals, \