      1  C*************************************************************************
      2  C COPYRIGHT (C) 1999 - 2003  EDF R&D
      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        print *,'Ouverture du fichier test21.med'
     42  C
     43  C     Lecture du nombre de variable scalaire
     44  C
     45        if (cret .eq. 0) then
     46           call efnsca(fid,n,cret)
     47           print *,cret
     48           print *,'Nombre de variables scalaires : ',n
     49        endif
     50  C
     51  C     Lecture des infos (type,description) propres
     52  C     a chaque variable
     53  C
     54        if (cret .eq.0) then
     55  C
     56           do 10 i=1,n
     57              if (cret .eq. 0) then
     58                 call efscai(fid,i,nom,type,desc,cret)
     59                 print *,cret
     60                 print *,'- Scalaire de nom : ',nom
     61                 if (type .eq. MED_FLOAT64) then
     62                    print *,'  de type flottant'
     63                 else
     64                    print *,'  de type entier'
     65                 endif
     66                 print *,'  Description associee : ',desc
     67              endif
     68  C
     69  C     Pour chaque scalaire, on regarde les valeurs associees
     70  C     eventuellement a un pas de temps et/ou un numero d'ordre
     71  C
     72              if (cret .eq. 0) then
     73                 call efnspd(fid,nom,npdt,cret)
     74                 print *,cret
     75                 print *,'  Nombre de valeurs : ',npdt
     76              endif
     77  C
     78              if (cret .eq. 0) then
     79                 do 20 j=1,npdt
     80                    call efspdi(fid,nom,j,numdt,dtunit,dt,numo,cret)
     81                    print *,'   Valeur ', j
     82                    if (numdt .eq. MED_NOPDT) then
     83                       print *,'     - Aucun pas de temps'
     84                    else
     85                       print *,'     - Pas de temps de numero ',numdt
     86                       print *,'      de valeur : ',dt
     87                       print *,'      unite : ',dtunit
     88                    endif
     89                    if (numo .eq. MED_NONOR) then
     90                       print *,'     - Aucun numero ordre'
     91                    else
     92                       print *,'     - Numero ordre : ',numo
     93                    endif
     94  C
     95                    if (cret .eq. 0) then
     96                       if (type .eq. MED_FLOAT64) then
     97  C                       ** Lecture de la valeur flottante associee
     98  C                       ** au pas de temps
     99                          call efscfl(fid,nom,valr,numdt,numo,cret)
    100                          print *,cret
    101                          print *,'     - Valeur : ',valr
    102                       else
    103  C                       ** Lecture de la valeur entiere associee
    104  C                       ** au pas de temps
    105                          call efscel(fid,nom,vali,numdt,numo,cret)
    106                          print *,cret
    107                          print *,'     - Valeur : ',vali
    108                       endif
    109                    endif
    110  C
    111   20            continue
    112              endif
    113  C
    114   10      continue
    115  C
    116        endif
    117  C
    118  C     Fermeture du fichier
    119  C
    120        call efferm(fid,cret)
    121        print *,cret
    122        print *,'Fermeture du fichier test21.med'
    123  C
    124        end
    125  C