Index: trunk/SophyaLib/TArray/tarrinit.cc
===================================================================
--- trunk/SophyaLib/TArray/tarrinit.cc	(revision 3751)
+++ trunk/SophyaLib/TArray/tarrinit.cc	(revision 3809)
@@ -5,4 +5,5 @@
 
 #include "fioarr.h"
+#include "fiospsqmtx.h"
 
 /*!
@@ -23,5 +24,9 @@
 //   V= 2.1 , Avr/Jul 2007: Constr.copie/extrac sous-tableaux thread-safe
 //   V= 2.2 , Fev/Nars 2010: Tableaux en long double 
-#define MOD_VERS   2.2
+//   V= 2.3 , Juillet 2010: Ajout des matrices carres Diagonal, Triangulaire, Symmetrique
+#define MOD_VERS   2.3
+
+// Fonction d'enregistrement des handlers matrices carres speciales 
+static void RegisterSSQM_PPFHandlers();
 
 TArrayInitiator::TArrayInitiator()
@@ -108,4 +113,6 @@
 #endif
 
+  RegisterSSQM_PPFHandlers();   // Enregistrement des gestionnaires PPF des matrices carrees speciales
+
   SophyaInitiator::RegisterModule("TArray", MOD_VERS);  // Module name and version number registration
 }
@@ -116,4 +123,85 @@
 }
 
+// --- Fonction d'initialisation / enregistrement des handlers PPF pour matrices carres speciales 
+static void RegisterSSQM_PPFHandlers()
+{
+// Enregistrement des gestionnaires PPF 
+  PPRegister(FIO_SpecialSquareMatrix<uint_1>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_1>, DiagonalMatrix<uint_1>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_1>, LowerTriangularMatrix<uint_1>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_1>, SymmetricMatrix<uint_1>);
+
+  PPRegister(FIO_SpecialSquareMatrix<uint_2>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_2>, DiagonalMatrix<uint_2>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_2>, LowerTriangularMatrix<uint_2>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_2>, SymmetricMatrix<uint_2>);
+
+  PPRegister(FIO_SpecialSquareMatrix<uint_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_4>, DiagonalMatrix<uint_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_4>, LowerTriangularMatrix<uint_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_4>, SymmetricMatrix<uint_4>);
+
+  PPRegister(FIO_SpecialSquareMatrix<uint_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_8>, DiagonalMatrix<uint_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_8>, LowerTriangularMatrix<uint_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<uint_8>, SymmetricMatrix<uint_8>);
+
+  PPRegister(FIO_SpecialSquareMatrix<int_1>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_1>, DiagonalMatrix<int_1>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_1>, LowerTriangularMatrix<int_1>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_1>, SymmetricMatrix<int_1>);
+
+  PPRegister(FIO_SpecialSquareMatrix<int_2>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_2>, DiagonalMatrix<int_2>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_2>, LowerTriangularMatrix<int_2>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_2>, SymmetricMatrix<int_2>);
+
+  PPRegister(FIO_SpecialSquareMatrix<int_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_4>, DiagonalMatrix<int_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_4>, LowerTriangularMatrix<int_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_4>, SymmetricMatrix<int_4>);
+
+  PPRegister(FIO_SpecialSquareMatrix<int_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_8>, DiagonalMatrix<int_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_8>, LowerTriangularMatrix<int_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<int_8>, SymmetricMatrix<int_8>);
+
+  PPRegister(FIO_SpecialSquareMatrix<r_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_4>, DiagonalMatrix<r_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_4>, LowerTriangularMatrix<r_4>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_4>, SymmetricMatrix<r_4>);
+
+  PPRegister(FIO_SpecialSquareMatrix<r_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_8>, DiagonalMatrix<r_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_8>, LowerTriangularMatrix<r_8>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_8>, SymmetricMatrix<r_8>);
+
+  PPRegister(FIO_SpecialSquareMatrix< complex<r_4> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_4> >, DiagonalMatrix< complex<r_4> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_4> >, LowerTriangularMatrix< complex<r_4> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_4> >, SymmetricMatrix< complex<r_4> >);
+
+  PPRegister(FIO_SpecialSquareMatrix< complex<r_8> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_8> >, DiagonalMatrix< complex<r_8> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_8> >, LowerTriangularMatrix< complex<r_8> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_4> >, SymmetricMatrix< complex<r_8> >);
+
+#ifdef SO_LDBLE128
+  PPRegister(FIO_SpecialSquareMatrix<r_16>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_16>, DiagonalMatrix<r_16>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_16>, LowerTriangularMatrix<r_16>);
+  DObjRegister(FIO_SpecialSquareMatrix<r_16>, SymmetricMatrix<r_16>);
+
+  PPRegister(FIO_SpecialSquareMatrix< complex<r_16> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_16> >, DiagonalMatrix< complex<r_16> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_16> >, LowerTriangularMatrix< complex<r_16> >);
+  DObjRegister(FIO_SpecialSquareMatrix< complex<r_16> >, SymmetricMatrix< complex<r_16> >);
+#endif 
+
+  return;
+}
+
+
+
 
 // On met un objet initiator en statique, pour les loaders qui savent 
