C*************************************************************************
C COPYRIGHT (C) 1999 - 2003  EDF R&D
C THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
C IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
C AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
C EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
C
C THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
C WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
C MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
C LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
C
C YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
C ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
C INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
C
C**************************************************************************

C******************************************************************************
C* - Nom du fichier : test22.f
C*
C* - Description : lecture des valeurs scalaires numeriques dans un fichier MED
C ******************************************************************************
      program test22
C     
      implicit none
      include 'med.hf'
C
      integer fid,cret
      character*16 dtunit
      character*32 nom
      character*200 desc
      integer vali
      real*8 valr,dt
      integer n,npdt,i,j,type,numdt,numo
C     
C     Ouverture du fichier test21.med en lecture seule
C
      call efouvr(fid,'test21.med',MED_LECTURE,cret)
      print *,cret
      print *,'Ouverture du fichier test21.med'
C
C     Lecture du nombre de variable scalaire
C
      if (cret .eq. 0) then
         call efnsca(fid,n,cret)
         print *,cret
         print *,'Nombre de variables scalaires : ',n
      endif
C
C     Lecture des infos (type,description) propres 
C     a chaque variable
C
      if (cret .eq.0) then
C
         do 10 i=1,n
            if (cret .eq. 0) then
               call efscai(fid,i,nom,type,desc,cret)
               print *,cret
               print *,'- Scalaire de nom : ',nom
               if (type .eq. MED_FLOAT64) then
                  print *,'  de type flottant' 
               else
                  print *,'  de type entier'
               endif
               print *,'  Description associee : ',desc
            endif
C
C     Pour chaque scalaire, on regarde les valeurs associees
C     eventuellement a un pas de temps et/ou un numero d'ordre 
C
            if (cret .eq. 0) then
               call efnspd(fid,nom,npdt,cret)
               print *,cret
               print *,'  Nombre de valeurs : ',npdt
            endif
C
            if (cret .eq. 0) then
               do 20 j=1,npdt
                  call efspdi(fid,nom,j,numdt,dtunit,dt,numo,cret)
                  print *,'   Valeur ', j
                  if (numdt .eq. MED_NOPDT) then
                     print *,'     - Aucun pas de temps'
                  else
                     print *,'     - Pas de temps de numero ',numdt
                     print *,'      de valeur : ',dt
                     print *,'      unite : ',dtunit
                  endif
                  if (numo .eq. MED_NONOR) then
                     print *,'     - Aucun numero ordre'
                  else
                     print *,'     - Numero ordre : ',numo
                  endif
C
                  if (cret .eq. 0) then
                     if (type .eq. MED_FLOAT64) then
C                       ** Lecture de la valeur flottante associee 
C                       ** au pas de temps
                        call efscfl(fid,nom,valr,numdt,numo,cret)
                        print *,cret
                        print *,'     - Valeur : ',valr
                     else
C                       ** Lecture de la valeur entiere associee 
C                       ** au pas de temps
                        call efscel(fid,nom,vali,numdt,numo,cret)
                        print *,cret
                        print *,'     - Valeur : ',vali
                     endif
                  endif
C
 20            continue
            endif
C
 10      continue
C
      endif
C
C     Fermeture du fichier      
C
      call efferm(fid,cret)
      print *,cret
      print *,'Fermeture du fichier test21.med'
C
      end
C
