1 C*************************************************************************
  2 C COPYRIGHT (C) 1999 - 2007  EDF R&D, CEA/DEN
  3 C THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  4 C IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
  5 C AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
  6 C EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
  7 C
  8 C THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
  9 C WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
 10 C MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
 11 C LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 12 C
 13 C YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
 14 C ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
 15 C INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
 16 C
 17 C**************************************************************************
 18 
 19 C******************************************************************************
 20 C* - Nom du fichier : test22.f
 21 C*
 22 C* - Description : lecture des valeurs scalaires numeriques dans un fichier MED
 23 C ******************************************************************************
 24       program test22
 25 C     
 26       implicit none
 27       include 'med.hf'
 28 C
 29       integer fid,cret
 30       character*16 dtunit
 31       character*32 nom
 32       character*200 desc
 33       integer vali
 34       real*8 valr,dt
 35       integer n,npdt,i,j,type,numdt,numo
 36 C     
 37 C     Ouverture du fichier test21.med en lecture seule
 38 C
 39       call efouvr(fid,'test21.med',MED_LECTURE,cret)
 40       print *,cret
 41       if (cret .ne. 0 ) then
 42          print *,'Erreur ouverture du fichier'
 43          call efexit(-1)
 44       endif
 45       print *,'Ouverture du fichier test21.med'
 46 C
 47 C     Lecture du nombre de variable scalaire
 48 C
 49       call efnsca(fid,n,cret)
 50       print *,cret
 51       if (cret .ne. 0 ) then
 52          print *,'Erreur lecture du nombre de variable'
 53          call efexit(-1)
 54       endif
 55       print *,'Nombre de variables scalaires : ',n
 56 C
 57 C     Lecture des infos (type,description) propres 
 58 C     a chaque variable
 59 C
 60       do 10 i=1,n
 61          call efscai(fid,i,nom,type,desc,cret)
 62          print *,cret
 63          if (cret .ne. 0 ) then
 64             print *,'Erreur lecture des infos'
 65             call efexit(-1)
 66          endif
 67          print *,'- Scalaire de nom : ',nom
 68          if (type .eq. MED_FLOAT64) then
 69             print *,'  de type flottant'
 70          else
 71             print *,'  de type entier'
 72          endif
 73          print *,'  Description associee : ',desc
 74 C
 75 C     Pour chaque scalaire, on regarde les valeurs associees
 76 C     eventuellement a un pas de temps et/ou un numero d'ordre 
 77 C
 78          call efnspd(fid,nom,npdt,cret)
 79          if (cret .ne. 0 ) then
 80             print *,'Erreur lecture du nombre de pas de temps'
 81             call efexit(-1)
 82          endif
 83          print *,cret
 84          print *,'  Nombre de valeurs : ',npdt
 85 C
 86          do 20 j=1,npdt
 87             call efspdi(fid,nom,j,numdt,dtunit,dt,numo,cret)
 88             print *,cret
 89             if (cret .ne. 0 ) then
 90                print *,'Erreur infos pas de temps'
 91                call efexit(-1)
 92             endif
 93             print *,'   Valeur ', j
 94 C
 95             if (numdt .eq. MED_NOPDT) then
 96                print *,'     - Aucun pas de temps'
 97             else
 98                print *,'     - Pas de temps de numero ',numdt
 99                print *,'      de valeur : ',dt
100                print *,'      unite : ',dtunit
101             endif
102 C
103             if (numo .eq. MED_NONOR) then
104                print *,'     - Aucun numero ordre'
105             else
106                print *,'     - Numero ordre : ',numo
107             endif
108 C
109             if (type .eq. MED_FLOAT64) then
110 C           ** Lecture de la valeur flottante associee 
111 C           ** au pas de temps
112                call efscfl(fid,nom,valr,numdt,numo,cret)
113                print *,cret
114                if (cret .ne. 0 ) then
115                   print *,'Erreur lecture valeur'
116                   call efexit(-1)
117                endif
118                print *,'     - Valeur : ',valr
119             else
120 C           ** Lecture de la valeur entiere associee 
121 C           ** au pas de temps
122                call efscel(fid,nom,vali,numdt,numo,cret)
123                print *,cret
124                if (cret .ne. 0 ) then
125                   print *,'Erreur lecture valeur'
126                   call efexit(-1)
127                endif
128                print *,'     - Valeur : ',vali
129             endif
130 C
131  20      continue
132 C
133  10   continue
134 C
135 C     Fermeture du fichier      
136 C
137       call efferm(fid,cret)
138       print *,cret
139       if (cret .ne. 0 ) then
140          print *,'Erreur fermeture du fichier'
141          call efexit(-1)
142       endif
143       print *,'Fermeture du fichier test21.med'
144 C
145       end