Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/med.git] / src / MEDMEM / MEDMEM_MedFieldDriver21.hxx
index e96d5703f6546bb3fa3fbe18e16e5d28741f1cdc..7cf3a66381b7d5ec79c8a4cd454db9dd9aacf9df 100644 (file)
@@ -1,21 +1,23 @@
-// Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-// 
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either 
-// version 2.1 of the License.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-// Lesser General Public License for more details.
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 #ifndef MED_FIELD_DRIVER21_HXX
 #define MED_FIELD_DRIVER21_HXX
@@ -102,18 +104,26 @@ public :
   void open() throw (MEDEXCEPTION)
   {
     const char * LOC = "MED_FIELD_DRIVER21::open() ";
-    BEGIN_OF(LOC);
+    BEGIN_OF_MED(LOC);
 
     // we must set fieldname before open, because we must find field number in file (if it exist !!!)
-    if ( MED_FIELD_DRIVER<T>::_fileName == "" )
+    if ( MED_FIELD_DRIVER<T>::_fileName == "" ) {
       throw MED_EXCEPTION ( LOCALIZED( STRING(LOC) 
                                       << "_fileName is |\"\"|, please set a correct fileName before calling open()"
                                       )
                            );
-
-    MESSAGE(LOC<<"_fileName.c_str : "<< MED_FIELD_DRIVER<T>::_fileName.c_str()<<",mode : "<< MED_FIELD_DRIVER<T>::_accessMode);
-    _medIdt = med_2_1::MEDouvrir( (const_cast <char *> (MED_FIELD_DRIVER<T>::_fileName.c_str())),(med_2_1::med_mode_acces) MED_FIELD_DRIVER<T>::_accessMode);
-    MESSAGE(LOC<<"_medIdt : "<< _medIdt );
+    }
+    if ( MED_FIELD_DRIVER<T>::_status==MED_OPENED )
+      return;
+
+    MED_EN::med_mode_acces mode = dynamic_cast<GENDRIVER*>(this)->getAccessMode();
+    med_2_1::med_mode_acces m21mode = (med_2_1::med_mode_acces)getMedAccessMode(mode,MED_EN::V21);
+    MESSAGE_MED(LOC<<"_fileName.c_str : "<< MED_FIELD_DRIVER<T>::_fileName.c_str()<<",mode : "<< MED_FIELD_DRIVER<T>::_accessMode);
+    _medIdt = med_2_1::MEDouvrir( (const_cast <char *> (MED_FIELD_DRIVER<T>::_fileName.c_str())),
+                                  //(med_2_1::med_mode_acces) MED_FIELD_DRIVER<T>::_accessMode);
+                                  m21mode);
+    //                             (med_2_1::med_mode_acces) mode);
+    MESSAGE_MED(LOC<<"_medIdt : "<< _medIdt );
     if (_medIdt > 0) 
       MED_FIELD_DRIVER<T>::_status=MED_OPENED;
     else {
@@ -126,21 +136,22 @@ public :
                           );
     }
 
-    END_OF(LOC);
+  END_OF_MED(LOC);
   }
   
   void close() {
-    BEGIN_OF("MED_FIELD_DRIVER21::close()");
+  const char* LOC = "MED_FIELD_DRIVER21::close()";
+  BEGIN_OF_MED(LOC);
     med_2_1::med_int err = 0;
     if (MED_FIELD_DRIVER<T>::_status == MED_OPENED) {
       err=med_2_1::MEDfermer(MED_FIELD_DRIVER21<T>::_medIdt);
       //H5close(); // If we call H5close() all the files are closed.
       MED_FIELD_DRIVER<T>::_status = MED_CLOSED;
       MED_FIELD_DRIVER21<T>::_medIdt = MED_INVALID;
-      MESSAGE(" MED_FIELD_DRIVER21::close() : MEDfermer : MED_FIELD_DRIVER21<T>::_medIdt= " << _medIdt );
-      MESSAGE(" MED_FIELD_DRIVER21::close() : MEDfermer : err    = " << err );
+      MESSAGE_MED(" MED_FIELD_DRIVER21::close() : MEDfermer : MED_FIELD_DRIVER21<T>::_medIdt= " << _medIdt );
+      MESSAGE_MED(" MED_FIELD_DRIVER21::close() : MEDfermer : err    = " << err );
     }
-    END_OF("MED_FIELD_DRIVER21::close()");
+  END_OF_MED(LOC);
   }
 
 
@@ -162,7 +173,10 @@ public :
   /*!
     Constructor.
   */
-  MED_FIELD_RDONLY_DRIVER21():MED_FIELD_DRIVER<T>() {};
+  MED_FIELD_RDONLY_DRIVER21():MED_FIELD_DRIVER<T>()
+  {
+    this->GENDRIVER::_accessMode = MED_EN::RDONLY;
+  };
   
   /*!
     Constructor.
@@ -170,12 +184,13 @@ public :
   template <class INTERLACING_TAG>
   MED_FIELD_RDONLY_DRIVER21(const string & fileName,
                            FIELD<T, INTERLACING_TAG> * ptrField):
-    MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_RDONLY),
-    MED_FIELD_DRIVER21<T>(fileName,ptrField,MED_EN::MED_RDONLY),
+    MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::RDONLY),
+    MED_FIELD_DRIVER21<T>(fileName,ptrField,MED_EN::RDONLY),
     IMED_FIELD_RDONLY_DRIVER<T>(fileName,ptrField)
   { 
-    BEGIN_OF("MED_FIELD_RDONLY_DRIVER21::MED_FIELD_RDONLY_DRIVER21(const string & fileName, const FIELD<T,INTERLACING_TAG> * ptrField)");
-    END_OF("MED_FIELD_RDONLY_DRIVER21::MED_FIELD_RDONLY_DRIVER21(const string & fileName, const FIELD<T,INTERLACING_TAG> * ptrField)");
+  const char* LOC = "MED_FIELD_RDONLY_DRIVER21::MED_FIELD_RDONLY_DRIVER21(const string & fileName, const FIELD<T,INTERLACING_TAG> * ptrField)";
+  BEGIN_OF_MED(LOC);
+  END_OF_MED(LOC);
   }
   
   /*!
@@ -223,7 +238,10 @@ public :
   /*!
     Constructor.
   */
-  MED_FIELD_WRONLY_DRIVER21():MED_FIELD_DRIVER<T>() {}
+  MED_FIELD_WRONLY_DRIVER21():MED_FIELD_DRIVER<T>()
+  {
+    this->GENDRIVER::_accessMode = MED_EN::WRONLY;
+  }
   
   /*!
     Constructor.
@@ -232,11 +250,12 @@ public :
   MED_FIELD_WRONLY_DRIVER21(const string & fileName,
                            FIELD<T, INTERLACING_TAG> * ptrField):
     IMED_FIELD_WRONLY_DRIVER<T>(fileName,ptrField),
-    MED_FIELD_DRIVER21<T>(fileName,ptrField,MED_EN::MED_WRONLY),
-    MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_WRONLY)
+    MED_FIELD_DRIVER21<T>(fileName,ptrField,MED_EN::WRONLY),
+    MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::WRONLY)
   {
-    BEGIN_OF("MED_FIELD_WRONLY_DRIVER21::MED_FIELD_WRONLY_DRIVER21(const string & fileName, const FIELD<T,INTERLACING_TAG> * ptrField)");
-    END_OF("MED_FIELD_WRONLY_DRIVER21::MED_FIELD_WRONLY_DRIVER21(const string & fileName, const FIELD<T,INTERLACING_TAG> * ptrField)");
+  const char* LOC = "MED_FIELD_WRONLY_DRIVER21::MED_FIELD_WRONLY_DRIVER21(const string & fileName, const FIELD<T,INTERLACING_TAG> * ptrField)";
+  BEGIN_OF_MED(LOC);
+  END_OF_MED(LOC);
   }
 
   /*!
@@ -283,7 +302,10 @@ public :
   /*!
     Constructor.
   */
-  MED_FIELD_RDWR_DRIVER21():MED_FIELD_DRIVER21<T>() {}
+  MED_FIELD_RDWR_DRIVER21():MED_FIELD_DRIVER21<T>()
+  {
+    this->GENDRIVER::_accessMode = MED_EN::RDWR;
+  }
   
   /*!
     Constructor.
@@ -295,13 +317,14 @@ public :
     MED_FIELD_RDONLY_DRIVER21<T>(fileName,ptrField),
     IMED_FIELD_RDONLY_DRIVER<T>(fileName,ptrField),
     IMED_FIELD_WRONLY_DRIVER<T>(fileName,ptrField),
-    MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::MED_RDWR),
+    MED_FIELD_DRIVER<T>(fileName,ptrField,MED_EN::RDWR),
     IMED_FIELD_RDWR_DRIVER<T>(fileName,ptrField)
   {
-    BEGIN_OF("MED_FIELD_RDWR_DRIVER21::MED_FIELD_RDWR_DRIVER21(const string & fileName, const FIELD<T> * ptrField)");
+  const char* LOC = "MED_FIELD_RDWR_DRIVER21::MED_FIELD_RDWR_DRIVER21(const string & fileName, const FIELD<T> * ptrField)";
+  BEGIN_OF_MED(LOC);
     //_accessMode = MED_RDWR ;
-    END_OF("MED_FIELD_RDWR_DRIVER21::MED_FIELD_RDWR_DRIVER21(const string & fileName, const FIELD<T> * ptrField)");
-  };
+  END_OF_MED(LOC);
+  }
 
   /*!
     Copy constructor.
@@ -346,10 +369,10 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
                                           string & meshName) const throw (MEDEXCEPTION)
 {
 
-  //EF : Gérer le meshName pour le driver 2.2
+  //EF : Gérer le meshName pour le driver 2.2
   const char * LOC="MED_FIELD_DRIVER<T>::search_field(...)";
 
-  BEGIN_OF(LOC);
+  BEGIN_OF_MED(LOC);
 
   map<int, list<MED_EN::medGeometryElement> > CellAndNodeEntities;
   map<int, list<MED_EN::medGeometryElement> >::iterator currentEntity;
@@ -407,7 +430,7 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
 
       numberOfElements = (numberOfElements1>numberOfElements2)?numberOfElements1:numberOfElements2;
 
-      SCRUTE(numberOfElements);
+      SCRUTE_MED(numberOfElements);
 
       if ( numberOfElements <=  0 )
        continue;
@@ -424,8 +447,8 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
                                        (med_2_1::med_entite_maillage) entityCurrent,
                                        (med_2_1::med_geometrie_element)  *currentGeometry );
 
-      SCRUTE(nbPdtIt);
-      SCRUTE(numberOfElements);
+      SCRUTE_MED(nbPdtIt);
+      SCRUTE_MED(numberOfElements);
 
       if ( nbPdtIt < 0 )
        throw MEDEXCEPTION(LOCALIZED(STRING(LOC)<<" Field |" << fieldName << "| with (ndt,or) = ("
@@ -456,8 +479,8 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
 
              //                  if ( nmaa > 1 )
              {
-               //EF : Gérer le meshName pour le driver 2.2
-               //                    MESSAGE(STRING(LOC)<<" Field |" << fieldName << "| with (ndt,or) = (" << ndt << ","
+               //EF : Gérer le meshName pour le driver 2.2
+               //                    MESSAGE_MED(STRING(LOC)<<" Field |" << fieldName << "| with (ndt,or) = (" << ndt << ","
                //                            << ot << ") is  defined on " << nmaa << " meshes, using mesh |"
                //                            << maa << "|");
                //                  }
@@ -472,7 +495,7 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
        }
       }
 
-      MESSAGE(LOC << " a (dt,it) is found ?? " << alreadyFoundPdtIt);
+      MESSAGE_MED(LOC << " a (dt,it) is found ?? " << alreadyFoundPdtIt);
 
       if ( !alreadyFoundPdtIt )
        throw MEDEXCEPTION(LOCALIZED(STRING(LOC)<<" Field |" << fieldName << "| with (ndt,or) = ("
@@ -487,7 +510,7 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
                                     << MED_EN::entNames[entityCurrent] << ","
                                     << MED_EN::geoNames[*currentGeometry] << ")" ));
       if ( ngauss > 1000 ) { // some gabage
-        INFOS( "Set to 1 invalid nb of Gauss points " << ngauss << " for  Field |" << fieldName
+        INFOS_MED( "Set to 1 invalid nb of Gauss points " << ngauss << " for  Field |" << fieldName
                << "| with (ndt,or) = (" << ndt << "," << od << ") for (entityType,geometricType)=("
                << MED_EN::entNames[entityCurrent] << ","
                << MED_EN::geoNames[*currentGeometry] << ")" );
@@ -507,22 +530,22 @@ MED_FIELD_DRIVER21<T>::createFieldSupport(med_2_1::med_idt id,
 
   if ( alreadyFoundAnEntity) {
     support.setName(fieldName+"Support");
-    support.setMeshName(string(maa)); // Vérifier que les différents noms de maillages lus soient identiques
+    support.setMeshName(string(maa)); // Vérifier que les différents noms de maillages lus soient identiques
     support.setEntity(entity);
-    // REM : Signification précédente erronée pour un champ qui ne repose pas sur toutes les entités géométriques 
-    // du maillage mais dont le SUPPORT a été crée à partir des informations d'un maillage, comme
-    // celà fût la plupart du temps.
+    // REM : Signification précédente erronée pour un champ qui ne repose pas sur toutes les entités géométriques 
+    // du maillage mais dont le SUPPORT a été crée à partir des informations d'un maillage, comme
+    // celà fût la plupart du temps.
     support.setNumberOfGeometricType(numberOfGeometricType);
     support.setGeometricType(geometricType); // Utile uniquement si setAll == false
     support.setNumberOfElements(numberOfElementsOfType);    //setNumberOfElements effectue une copie
     support.setAll(true);
 
-    END_OF(LOC);
+  END_OF_MED(LOC);
 
     return alreadyFoundAnEntity;
   } else
     {
-      END_OF(LOC);
+  END_OF_MED(LOC);
 
       return false;
     }
@@ -535,7 +558,7 @@ MED_FIELD_DRIVER21<T>::getMeshGeometricType(med_2_1::med_idt id,
                                          vector<MED_EN::medGeometryElement> & geoType,
                                          vector<int> &nbOfElOfType) const
 {
-  const char LOC[] = "MED_FIELD_DRIVER<T>::getMeshGeometricType(...)";
+  //const char LOC[] = "MED_FIELD_DRIVER<T>::getMeshGeometricType(...)";
 
   int numberOfGeometricType=0;
   MED_EN::medGeometryElement geometricType[MED_NBR_GEOMETRIE_MAILLE];
@@ -546,7 +569,7 @@ MED_FIELD_DRIVER21<T>::getMeshGeometricType(med_2_1::med_idt id,
   else
     if (entity == MED_EN::MED_NODE) quoi=med_2_1::MED_COOR;
     else
-      MESSAGE(LOC<<" Support Creation from Mesh |"  << meshName
+      MESSAGE_MED("MED_FIELD_DRIVER<T>::getMeshGeometricType(...)"<<" Support Creation from Mesh |"  << meshName
                                   << "| on entity " << MED_EN::entNames[entity]
                                   << "| is impossible,  must be  on MED_NODE or MED_CELL");
 
@@ -593,7 +616,7 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
   throw (MEDEXCEPTION)
 {
   const char * LOC = " MED_FIELD_RDONLY_DRIVER21::read() " ;
-  BEGIN_OF(LOC);
+  BEGIN_OF_MED(LOC);
 
   typedef typename MEDMEM_ArrayInterface<T,NoInterlace,NoGauss>::Array       ArrayNo;
   typedef typename MEDMEM_ArrayInterface<T,NoInterlace,Gauss>::Array         ArrayNoWg;
@@ -613,13 +636,13 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     MED_FIELD_DRIVER<T>::_fieldName=MED_FIELD_DRIVER<T>::_ptrField->_name;
 
   if ( MED_FIELD_DRIVER<T>::_fieldName.size() > MED_TAILLE_NOM )
-    MESSAGE(LOC << "Warning <fieldName> size in object driver FIELD is > MED_TAILLE_NOM .");
+    MESSAGE_MED(LOC << "Warning <fieldName> size in object driver FIELD is > MED_TAILLE_NOM .");
    
 //     throw MEDEXCEPTION(LOCALIZED(STRING(LOC)
 //                              <<" <fieldName> size in object driver FIELD is > MED_TAILLE_NOM ."));
 
 
-  MESSAGE("###### "<<LOC<<" fieldNameDRIVER : "<< MED_FIELD_DRIVER<T>::_fieldName << 
+  MESSAGE_MED("###### "<<LOC<<" fieldNameDRIVER : "<< MED_FIELD_DRIVER<T>::_fieldName << 
          " fieldName : "<<MED_FIELD_DRIVER<T>::_fieldName);
 
 
@@ -627,22 +650,22 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     throw MEDEXCEPTION(LOCALIZED(STRING(LOC)<<": Method open must be called before method read.")) ;
 
 // EF :
-//   Si un support a été donnée au champ, pour des raisons de compatibilité avec
-//   les versions précédentes, ce support sera utilisé pour
+//   Si un support a été donnée au champ, pour des raisons de compatibilité avec
+//   les versions précédentes, ce support sera utilisé pour
 //   - Obtenir le nom du maillage sur lequel on veut lire le champ
 //     (eventuellement on pourrait l'utiliser pour selectionner un champ qui
 //      repose sur plusieurs maillages cf HOMARD-ASTER)
-//   -  vérifier le type d'entité (MED_NOEUD xor  MED_MAILLE xor MED_FACE xor MED_ARETE ) sur lequel
-//      il faut lire le champ qui est également  retouvé.
-//   - Si le support défini une liste d'entité ( différente de MED_ALL_ELEMENTS), celle-ci est ignorée
-//     à la lecture et écrasé par les listes de profils lus s'il en existe
-
-//   Si aucun support n'a été donné au champ :
-//   - A la lecture : Un support est crée et le type d'entité unique est lu
-//                    (cf decision gt MED qu'un champ repose sur une entité unique ?),
-//                    l'ensemble des types géométriques est lu,
-//                    l'ensemble des profils par type géométrique est lu
-//                    Le nom du maillage associé est lu mais le pointeur SUPPORT-MESH non initialisé
+//   -  vérifier le type d'entité (MED_NOEUD xor  MED_MAILLE xor MED_FACE xor MED_ARETE ) sur lequel
+//      il faut lire le champ qui est également  retouvé.
+//   - Si le support défini une liste d'entité ( différente de MED_ALL_ELEMENTS), celle-ci est ignorée
+//     à la lecture et écrasé par les listes de profils lus s'il en existe
+
+//   Si aucun support n'a été donné au champ :
+//   - A la lecture : Un support est crée et le type d'entité unique est lu
+//                    (cf decision gt MED qu'un champ repose sur une entité unique ?),
+//                    l'ensemble des types géométriques est lu,
+//                    l'ensemble des profils par type géométrique est lu
+//                    Le nom du maillage associé est lu mais le pointeur SUPPORT-MESH non initialisé
 
   char fieldName[MED_TAILLE_NOM+1] ;
 
@@ -668,9 +691,9 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
          numberOfComponents = med_2_1::MEDnChamp(id,i) ;
          if ( numberOfComponents <= 0 ) 
            //                throw MED_EXCEPTION ( LOCALIZED( STRING(LOC) 
-           //                                                 <<  "Be careful there is no compound for field n°" 
+           //                                                 <<  "Be careful there is no compound for field n°" 
            //                                                 << i << "in file |"<<_fileName<<"| !"));
-           MESSAGE(LOC<<"Be careful there is no compound for field n°"<<i<<"in file |"<<MED_FIELD_DRIVER<T>::_fileName<<"| !");
+           MESSAGE_MED(LOC<<"Be careful there is no compound for field n°"<<i<<"in file |"<<MED_FIELD_DRIVER<T>::_fileName<<"| !");
 
          componentName = new char[numberOfComponents*MED_TAILLE_PNOM21+1] ;
          unitName      = new char[numberOfComponents*MED_TAILLE_PNOM21+1] ;   
@@ -678,10 +701,10 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
          err = med_2_1::MEDchampInfo(id, i, fieldName, &type, componentName, 
                                      unitName, numberOfComponents) ;
 
-         MESSAGE("Champ "<<i<<" : #" << fieldName <<"# et recherche #"<<MED_FIELD_DRIVER<T>::_fieldName.c_str()<<"#");
+         MESSAGE_MED("Champ "<<i<<" : #" << fieldName <<"# et recherche #"<<MED_FIELD_DRIVER<T>::_fieldName.c_str()<<"#");
          if ( !strcmp(fieldName,MED_FIELD_DRIVER<T>::_fieldName.c_str()) )
            {
-             MESSAGE("FOUND FIELD "<< fieldName <<" : "<<i);
+             MESSAGE_MED("FOUND FIELD "<< fieldName <<" : "<<i);
              MED_FIELD_DRIVER<T>::_fieldNum = i ;
              break ;
            }
@@ -696,7 +719,7 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
   if (MED_FIELD_DRIVER<T>::_fieldNum==MED_INVALID)
     throw MEDEXCEPTION(LOCALIZED( STRING(LOC) << ": Field "<<MED_FIELD_DRIVER<T>::_fieldName << " not found in file " << MED_FIELD_DRIVER<T>::_fileName ) );
 
-  MESSAGE ("FieldNum : "<<MED_FIELD_DRIVER<T>::_fieldNum);
+  MESSAGE_MED ("FieldNum : "<<MED_FIELD_DRIVER<T>::_fieldNum);
 
   if (numberOfComponents < 1)
     {
@@ -730,9 +753,9 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     haveSupport = true;
   }
 
-  // Cherche le type d'entité, le nombre d'entité  par type géométrique sur le type d'entité
-  // (MED_MAILLE ou MED_NOEUD uniquement car MEDMEMOIRE ne gère pas la connectivité descendante).
-  // et crée le support correspondant.
+  // Cherche le type d'entité, le nombre d'entité  par type géométrique sur le type d'entité
+  // (MED_MAILLE ou MED_NOEUD uniquement car MEDMEMOIRE ne gère pas la connectivité descendante).
+  // et crée le support correspondant.
   SUPPORT * mySupport = new SUPPORT();
   vector<int> numberOfGaussPoints;
   bool found = createFieldSupport(id,MED_FIELD_DRIVER<T>::_fieldName,
@@ -774,7 +797,7 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     mySupport->setDescription(MED_FIELD_DRIVER<T>::_ptrField->getSupport()->getDescription());
   }
 
-  // Test si le Support du Champ repose ou non sur toutes les entités géométriques du maillage.
+  // Test si le Support du Champ repose ou non sur toutes les entités géométriques du maillage.
   // Pour tester les profils aussi ?
   vector< MED_EN::medGeometryElement >  meshGeoType;
   vector< int >  meshNbOfElOfType;
@@ -793,19 +816,24 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
   // If an error occurs while reading the field, these allocated FIELD member will be deleted
   MED_FIELD_DRIVER<T>::_ptrField->_name =  MED_FIELD_DRIVER<T>::_fieldName;
   MED_FIELD_DRIVER<T>::_ptrField->_numberOfComponents = numberOfComponents ;
-  MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes = new int[numberOfComponents] ;
-  MED_FIELD_DRIVER<T>::_ptrField->_componentsNames = new string[numberOfComponents] ;
-  MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits = new UNIT[numberOfComponents] ;
-  MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions = new string[numberOfComponents] ;
-  MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits = new string[numberOfComponents] ;
+  //MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes = new int[numberOfComponents] ;
+  //MED_FIELD_DRIVER<T>::_ptrField->_componentsNames = new string[numberOfComponents] ;
+  //MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits = new UNIT[numberOfComponents] ;
+  //MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions = new string[numberOfComponents] ;
+  //MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits = new string[numberOfComponents] ;
+  MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes.resize(numberOfComponents);
+  MED_FIELD_DRIVER<T>::_ptrField->_componentsNames.resize(numberOfComponents);
+  MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits.resize(numberOfComponents);
+  MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions.resize(numberOfComponents);
+  MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits.resize(numberOfComponents);
 
   for (int i=0; i<numberOfComponents; i++)
     {
       MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes[i] = 1 ;
       MED_FIELD_DRIVER<T>::_ptrField->_componentsNames[i] = string(componentName+i*MED_TAILLE_PNOM21,MED_TAILLE_PNOM21) ;
-      SCRUTE(MED_FIELD_DRIVER<T>::_ptrField->_componentsNames[i]);
+      SCRUTE_MED(MED_FIELD_DRIVER<T>::_ptrField->_componentsNames[i]);
       MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits[i] = string(unitName+i*MED_TAILLE_PNOM21,MED_TAILLE_PNOM21) ;
-      SCRUTE(MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits[i]);
+      SCRUTE_MED(MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits[i]);
     }
 
   delete[] componentName;
@@ -817,7 +845,7 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
   T ** myValues = new T*[NumberOfTypes] ;
   int * NumberOfValues = new int[NumberOfTypes] ;
   int TotalNumberOfValues = 0 ; // Profils a gerer en 2.2 Rmq from EF
-  MESSAGE ("NumberOfTypes :"<< NumberOfTypes);
+  MESSAGE_MED ("NumberOfTypes :"<< NumberOfTypes);
   MED_FIELD_DRIVER<T>::_ptrField->_numberOfValues=0 ;
   bool anyGauss=false;
 
@@ -834,8 +862,8 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     modswt = med_2_1::MED_FULL_INTERLACE;
 
   for (int i=0; i<NumberOfTypes; i++) {
-    MESSAGE ("Type["<<i+1<<"] :"<< Types[i]);
-    MESSAGE ("Entity :"<< mySupport->getEntity());
+    MESSAGE_MED ("Type["<<i+1<<"] :"<< Types[i]);
+    MESSAGE_MED ("Entity :"<< mySupport->getEntity());
 
     int refNumberOfValues = 
       MEDnVal(MED_FIELD_DRIVER21<T>::_medIdt,
@@ -861,14 +889,14 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     myValues[i] = new T[ NumberOfValues[i]*numberOfComponents ] ;
     TotalNumberOfValues+=NumberOfValues[i] ;
     char * ProfilName = new char[MED_TAILLE_NOM+1];
-    MESSAGE ("NumberOfValues :"<< NumberOfValues[i]);
-    MESSAGE ("NumberOfComponents :"<< numberOfComponents);
-    MESSAGE ("MESH_NAME :"<< meshName.c_str());
-    MESSAGE ("FIELD_NAME :"<< MED_FIELD_DRIVER<T>::_fieldName.c_str());
-    MESSAGE ("MED_ENTITE :"<< (med_2_1::med_entite_maillage) mySupport->getEntity());
-    MESSAGE("MED_GEOM :"<<(med_2_1::med_geometrie_element)Types[i]);
-    MESSAGE("Iteration :"<<MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber());
-    MESSAGE("Order :"<<MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber());
+    MESSAGE_MED ("NumberOfValues :"<< NumberOfValues[i]);
+    MESSAGE_MED ("NumberOfComponents :"<< numberOfComponents);
+    MESSAGE_MED ("MESH_NAME :"<< meshName.c_str());
+    MESSAGE_MED ("FIELD_NAME :"<< MED_FIELD_DRIVER<T>::_fieldName.c_str());
+    MESSAGE_MED ("MED_ENTITE :"<< (med_2_1::med_entite_maillage) mySupport->getEntity());
+    MESSAGE_MED("MED_GEOM :"<<(med_2_1::med_geometrie_element)Types[i]);
+    MESSAGE_MED("Iteration :"<<MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber());
+    MESSAGE_MED("Order :"<<MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber());
     MED_FIELD_DRIVER<T>::_ptrField->_numberOfValues+=mySupport->getNumberOfElements(Types[i]); // Ne doit pas prendre en compte les points de Gauss
 
     med_2_1::med_err ret;
@@ -913,16 +941,21 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
        delete[] myValues;
        delete[] NumberOfValues ;
        delete[] ProfilName;
-       delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes ;
-       delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsNames ;
-       delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits ;
-       delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions ;
-       delete[] MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits ;
-       MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes = NULL ;
-       MED_FIELD_DRIVER<T>::_ptrField->_componentsNames = NULL ;
-       MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits = NULL ;
-       MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions = NULL ;
-       MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits = NULL ;
+       //delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes ;
+       //delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsNames ;
+       //delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits ;
+       //delete[] MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions ;
+       //delete[] MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits ;
+       //MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes = NULL ;
+       //MED_FIELD_DRIVER<T>::_ptrField->_componentsNames = NULL ;
+       //MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits = NULL ;
+       //MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions = NULL ;
+       //MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits = NULL ;
+       MED_FIELD_DRIVER<T>::_ptrField->_componentsTypes.clear();
+       MED_FIELD_DRIVER<T>::_ptrField->_componentsNames.clear();
+       MED_FIELD_DRIVER<T>::_ptrField->_componentsUnits.clear();
+       MED_FIELD_DRIVER<T>::_ptrField->_componentsDescriptions.clear();
+       MED_FIELD_DRIVER<T>::_ptrField->_MEDComponentsUnits.clear();
        MED_FIELD_DRIVER<T>::_fieldNum = MED_INVALID ; // we have not found right field, so reset the field number 
        throw MEDEXCEPTION( LOCALIZED( STRING(LOC) <<": ERROR when read value")) ;
       }
@@ -1085,7 +1118,7 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
   }
   MED_FIELD_DRIVER<T>::_ptrField->_isRead = true ;
 
-  MED_FIELD_DRIVER<T>::_ptrField->_support=mySupport; //Prévenir l'utilisateur ?
+  MED_FIELD_DRIVER<T>::_ptrField->_support=mySupport; //Prévenir l'utilisateur ?
 
   // check support entity and isOnAllElements
   if ( haveSupport && mySupport->getEntity() != MED_EN::MED_NODE ) {
@@ -1133,7 +1166,7 @@ template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::read(void)
     }
   }
       
-  //  END_OF(LOC);
+  //  END_OF_MED();
 }
 
 template <class T> void MED_FIELD_RDONLY_DRIVER21<T>::write( void ) const
@@ -1159,7 +1192,7 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
   throw (MEDEXCEPTION)
 {
   const char * LOC = "MED_FIELD_WRONLY_DRIVER21::write(void) const " ;
-  BEGIN_OF(LOC);
+  BEGIN_OF_MED(LOC);
 
   typedef typename MEDMEM_ArrayInterface<T,NoInterlace,NoGauss>::Array ArrayNo;
   typedef typename MEDMEM_ArrayInterface<T,FullInterlace,NoGauss>::Array ArrayFull;
@@ -1167,10 +1200,24 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
 
   //if (MED_FIELD_DRIVER<T>::_status==MED_OPENED &&
   //    MED_FIELD_DRIVER<T>::_ptrField->_isRead )
-  if (MED_FIELD_DRIVER<T>::_status==MED_OPENED)
-    {
+       if (MED_FIELD_DRIVER<T>::_status!=MED_OPENED)
+               throw MEDEXCEPTION ("MEDMEM_MedFieldDriver21: Trying to write before opening");
+  else {
       int err ;
 
+      const SUPPORT * mySupport = MED_FIELD_DRIVER<T>::_ptrField->getSupport() ;
+      if (! mySupport->isOnAllElements())
+       throw MEDEXCEPTION( LOCALIZED (STRING(LOC)
+                                      <<": Field must be on all entity"
+                                      )
+                            );
+//       MESH * myMesh = mySupport->getMesh() ;
+//       if(!myMesh)
+//     throw MEDEXCEPTION( LOCALIZED (STRING(LOC)
+//                                    <<": Mesh in support is null"
+//                                    )
+//                             );
+
       int component_count=MED_FIELD_DRIVER<T>::_ptrField->getNumberOfComponents();
       string   component_name(component_count*MED_TAILLE_PNOM21,' ') ;
       string   component_unit(component_count*MED_TAILLE_PNOM21,' ') ;
@@ -1191,12 +1238,12 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
                               listcomponent_unit[i],0,length);
       }
 
-      MESSAGE("component_name=|"<<component_name<<"|");
-      MESSAGE("component_unit=|"<<component_unit<<"|");
+      MESSAGE_MED("component_name=|"<<component_name<<"|");
+      MESSAGE_MED("component_unit=|"<<component_unit<<"|");
 
       MED_EN::med_type_champ ValueType=MED_FIELD_DRIVER<T>::_ptrField->getValueType() ;
       
-      MESSAGE("Template Type =|"<<ValueType<<"|");
+      MESSAGE_MED("Template Type =|"<<ValueType<<"|");
       
       // le champ existe deja ???
       char * champName = new char[MED_TAILLE_NOM+1] ;
@@ -1208,6 +1255,7 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
       int nbComp ;
       for (int i=1; i<=n; i++) {
        nbComp = med_2_1::MEDnChamp(MED_FIELD_DRIVER21<T>::_medIdt,i);
+        if ( nbComp < 1 ) continue; // nbComp can be -1
        compName = new char[MED_TAILLE_PNOM21*nbComp+1];
        compUnit = new char[MED_TAILLE_PNOM21*nbComp+1];
        err = med_2_1::MEDchampInfo(MED_FIELD_DRIVER21<T>::_medIdt,i,champName,&type,compName,compUnit,nbComp);
@@ -1228,10 +1276,10 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
                                         )
                              );
        // component name and unit
-       MESSAGE(LOC<<" Component name in file : "<<compName);
-       MESSAGE(LOC<<" Component name in memory : "<<component_name);
-       MESSAGE(LOC<<" Component unit in file : "<<compUnit);
-       MESSAGE(LOC<<" Component unit in memory : "<<component_unit);
+       MESSAGE_MED(LOC<<" Component name in file : "<<compName);
+       MESSAGE_MED(LOC<<" Component name in memory : "<<component_name);
+       MESSAGE_MED(LOC<<" Component unit in file : "<<compUnit);
+       MESSAGE_MED(LOC<<" Component unit in memory : "<<component_unit);
        delete[] compName ;
        delete[] compUnit ;
 
@@ -1240,7 +1288,7 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
 
         string dataGroupName =  "/CHA/";
         dataGroupName        += MED_FIELD_DRIVER<T>::_ptrField->getName();
-        MESSAGE(LOC << "|" << dataGroupName << "|" );
+        MESSAGE_MED(LOC << "|" << dataGroupName << "|" );
         med_2_1::med_idt gid =  H5Gopen(MED_FIELD_DRIVER21<T>::_medIdt, dataGroupName.c_str() );
         
         if ( gid < 0 ) {
@@ -1260,16 +1308,8 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
         else H5Gclose(gid);
       }
 
-      const SUPPORT * mySupport = MED_FIELD_DRIVER<T>::_ptrField->getSupport() ;
-
-      if (! mySupport->isOnAllElements())
-       throw MEDEXCEPTION( LOCALIZED (STRING(LOC)
-                                      <<": Field must be on all entity"
-                                      )
-                           );
-      
-      MESH * myMesh = mySupport->getMesh() ;
-      string MeshName = myMesh->getName() ;
+      MESH * myMesh = mySupport->getMesh();
+      string MeshName = myMesh ? myMesh->getName() : mySupport->getMeshName();
       //MED_EN::medModeSwitch Mode = MED_FIELD_DRIVER<T>::_ptrField->_value->getMode() ;
       // on boucle sur tout les types pour ecrire les tableaux de valeur
       int NumberOfType = mySupport->getNumberOfTypes() ;
@@ -1291,7 +1331,7 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
       }
       else {
        // En attendant la convertion de FIELD, on utilise le ArrayConvert
-       // ( les infos _ptrField-> sont les mêmes )
+       // ( les infos _ptrField-> sont les mêmes )
        myArray = ArrayConvert( *( dynamic_cast< ArrayNo * >
                                   (MED_FIELD_DRIVER<T>::_ptrField->getArrayNoGauss()
                                    ))
@@ -1309,17 +1349,17 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
         else {
           value = myArray->getRow(Index) ;
        }
-       MESSAGE("MED_FIELD_DRIVER21<T>::_medIdt                         : "<<MED_FIELD_DRIVER21<T>::_medIdt);
-       MESSAGE("MeshName.c_str()                : "<<MeshName.c_str());
-       MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getName()            : "<<MED_FIELD_DRIVER<T>::_ptrField->getName());
-       MESSAGE("value                           : "<<value);
-       MESSAGE("NumberOfElements                : "<<NumberOfElements);
-       MESSAGE("NumberOfGaussPoints             : "<<NumberOfGaussPoints);
-       MESSAGE("mySupport->getEntity()          : "<<mySupport->getEntity());
-       MESSAGE("Types[i]                        : "<<Types[i]);
-       MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber() : "<<MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber());
-       MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getTime()            : "<<MED_FIELD_DRIVER<T>::_ptrField->getTime());
-       MESSAGE("MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()     : "<<MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber());
+       MESSAGE_MED("MED_FIELD_DRIVER21<T>::_medIdt                         : "<<MED_FIELD_DRIVER21<T>::_medIdt);
+       MESSAGE_MED("MeshName.c_str()                : "<<MeshName.c_str());
+       MESSAGE_MED("MED_FIELD_DRIVER<T>::_ptrField->getName()            : "<<MED_FIELD_DRIVER<T>::_ptrField->getName());
+       MESSAGE_MED("value                           : "<<value);
+       MESSAGE_MED("NumberOfElements                : "<<NumberOfElements);
+       MESSAGE_MED("NumberOfGaussPoints             : "<<NumberOfGaussPoints);
+       MESSAGE_MED("mySupport->getEntity()          : "<<mySupport->getEntity());
+       MESSAGE_MED("Types[i]                        : "<<Types[i]);
+       MESSAGE_MED("MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber() : "<<MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber());
+       MESSAGE_MED("MED_FIELD_DRIVER<T>::_ptrField->getTime()            : "<<MED_FIELD_DRIVER<T>::_ptrField->getTime());
+       MESSAGE_MED("MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()     : "<<MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber());
        
 /*     char chanom[MED_TAILLE_NOM+1];
        char chacomp[MED_TAILLE_NOM+1];
@@ -1343,10 +1383,10 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
 #if defined(IRIX64) || defined(OSF1) || defined(VPP5000) || defined(PCLINUX64) || defined(PCLINUX64_32)
        if(MED_FIELD_DRIVER<T>::_ptrField->getValueType()==MED_EN::MED_INT32)
          {
-           int lgth2=MED_FIELD_DRIVER<T>::_ptrField->getNumberOfValues();
-           med_2_1::med_int *temp=new med_2_1::med_int[lgth2];
+           int lgth2=MED_FIELD_DRIVER<T>::_ptrField->getValueLength();
+           T *temp=new T[lgth2];
            for(int i2=0;i2<lgth2;i2++)
-             temp[i2]=(int)(value[i2]);
+             temp[i2]=(T)(value[i2]);
            err=med_2_1::MEDchampEcr(MED_FIELD_DRIVER21<T>::_medIdt, 
                                    const_cast <char*> ( MeshName.c_str()) ,                         //( string(mesh_name).resize(MED_TAILLE_NOM).c_str())
                                    const_cast <char*> ( (MED_FIELD_DRIVER<T>::_ptrField->getName()).c_str()),
@@ -1356,7 +1396,7 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
                                    NumberOfGaussPoints,
                                    MED_ALL,
                                    MED_NOPFL,
-                                   med_2_1::MED_REMP,  // PROFIL NON GERE, mode de remplacement non géré
+                                   med_2_1::MED_REMP,  // PROFIL NON GERE, mode de remplacement non géré
                                    (med_2_1::med_entite_maillage)mySupport->getEntity(),
                                    (med_2_1::med_geometrie_element)Types[i],
                                    MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber(),
@@ -1369,19 +1409,19 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
        else
 #endif
        err=med_2_1::MEDchampEcr(MED_FIELD_DRIVER21<T>::_medIdt, 
-                               const_cast <char*> ( MeshName.c_str()) ,                         //( string(mesh_name).resize(MED_TAILLE_NOM).c_str())
-                               const_cast <char*> ( (MED_FIELD_DRIVER<T>::_ptrField->getName()).c_str()),
-                               (unsigned char*)value, 
+                                const_cast <char*> ( MeshName.c_str()) ,                         //( string(mesh_name).resize(MED_TAILLE_NOM).c_str())
+                                const_cast <char*> ( (MED_FIELD_DRIVER<T>::_ptrField->getName()).c_str()),
+                                (unsigned char*)value, 
                                 modswt /*med_2_1::MED_FULL_INTERLACE*/, //PAL17011
                                NumberOfElements,
                                NumberOfGaussPoints,
                                MED_ALL,
-                               MED_NOPFL,
-                               med_2_1::MED_REMP,  // PROFIL NON GERE, mode de remplacement non géré
+                                 (char *)MED_NOPFL,
+                               med_2_1::MED_REMP,  // PROFIL NON GERE, mode de remplacement non géré
                                (med_2_1::med_entite_maillage)mySupport->getEntity(),
                                (med_2_1::med_geometrie_element)Types[i],
                                MED_FIELD_DRIVER<T>::_ptrField->getIterationNumber(),
-                               "        ",
+                                 (char *) "        ",
                                MED_FIELD_DRIVER<T>::_ptrField->getTime(),
                                MED_FIELD_DRIVER<T>::_ptrField->getOrderNumber()
                                );
@@ -1402,7 +1442,7 @@ template <class T> void MED_FIELD_WRONLY_DRIVER21<T>::write(void) const
 
     }
   
-  END_OF(LOC);
+  END_OF_MED(LOC);
 }
 
 /*--------------------- RDWR PART -------------------------------*/
@@ -1415,17 +1455,19 @@ template <class T> GENDRIVER * MED_FIELD_RDWR_DRIVER21<T>::copy(void) const
 template <class T> void MED_FIELD_RDWR_DRIVER21<T>::write(void) const
   throw (MEDEXCEPTION)
 {
-  BEGIN_OF("MED_FIELD_RDWR_DRIVER21::write(void)");
+  const char* LOC = "MED_FIELD_RDWR_DRIVER21::write(void)";
+  BEGIN_OF_MED(LOC);
   MED_FIELD_WRONLY_DRIVER21<T>::write(); 
-  END_OF("MED_FIELD_RDWR_DRIVER21::write(void)");
+  END_OF_MED(LOC);
 } 
 
 template <class T> void MED_FIELD_RDWR_DRIVER21<T>::read (void)
   throw (MEDEXCEPTION)
 {
-  BEGIN_OF("MED_FIELD_RDWR_DRIVER21::read(void)");
+  const char* LOC = "MED_FIELD_RDWR_DRIVER21::read(void)";
+  BEGIN_OF_MED(LOC);
   MED_FIELD_RDONLY_DRIVER21<T>::read();
-  END_OF("MED_FIELD_RDWR_DRIVER21::read(void)");
+  END_OF_MED(LOC);
 }
 }//End namespace MEDMEM
 /*-----------------------------------------------------------------*/