!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software 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 above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
***s/r
*

      subroutine geophy
      implicit none
*
*author   M.Desgagne June 2001
*
*revision
* v2_31 - V.Lee  -removed ni1,nj1,nk1, placed all fstprm calls to be
* v2_31           before allocation of memory
* v3_11 - V.Lee  -added qqexit(1) if program stops/goto 9876(aborts)
* v3_21 - Y. Delage -add fields for surface scheme CLASS
* v3_21 - A. Plante - give to I7(1) and I9(1) TS instead of I0(1) as a
*                     default
* v3_30 - M. Desgagne- read I1 field and write in geophy.bin, removed
*                      the original set value of 0.04
* v3_30 - C. Charette- use ip1_all
*
      integer fnom,fstouv,fstinf,fstinl,fstprm,fstluk,fstlir,
     $        fstecr,fstfrm,fclos,fstopl,fstsel,fstlis,longueur,
     $        ip1_all
      external fnom,fstouv,fstinf,fstinl,fstprm,fstluk,fstlir,
     $         fstecr,fstfrm,fclos,fstopl,fstsel,fstlis,longueur,
     $        ip1_all
*
      character*1  typ_S, grd_S
      character*2  var_S, nomvar_S(1000), nvar
      character*8  lab_S, lste_S(2)
      character*256 def1_S(2), def2_S(2), filename_S
      integer iun1,iun2
      parameter (iun1 = 51, iun2 = 52)
      integer dte, det, ipas, p1, p2, p3, g1, g2, g3, g4, bit,
     $        dty, swa, lng, dlf, ubc, ex1, ex2, ex3, ip3_ts,ip3
      integer i,j,key_i9,key_i7,ni,nj,nk,key_ts,
     $        err,p1_1,p1_2,p1_3,key_ts1,key_ts2,key_ts3,key_tp,
     $        key_ws2,key_ws3,key_is1,key_is2,key_is3,key_sma,
     $        key_sdp,key_vgr,key_tsa,key_tvg,key_tsn,
     $        key_tpd,key_zpd,key_tbs,key_is0,key_wvg,key_ivg
      integer, parameter :: nmax=4000
      real, dimension (:), allocatable :: w1
      real, dimension (:,:,:), allocatable :: i1
      real C2K,TCDK,TI7D
      parameter (TCDK=273.15, TI7D=271.2)
      integer nlis,lislon,header
      parameter (nlis = 1024)
      integer liste (nlis)
      data header /4/
      data lste_S,def1_S,def2_S /'anal.','geof.','','','',''/
*
*--------------------------------------------------------------------
*  
      call convip ( p1_1, 1., 3, 1, lab_S, .false. )
      call convip ( p1_2, 2., 3, 1, lab_S, .false. )
      call convip ( p1_3, 3., 3, 1, lab_S, .false. )
      write(6,*) 'GEOPHY: Version ip1_all'
*
* SPECIAL NOTES:
*              err = fstopl ('IMAGE',.true.,.false.)
*     This option forces the data read to be exactly copied when
*     written out. If the field is 32 bits, then extra memory is
*     needed for the 128bit header. So the dynamic allocation 
*     is ni*nj + header in case the data is unpacked (32bits) or
*     to make sure there is enough memory, use "lng" from the fstprm.
*
*              err = fstopl ('IMAGE',.false.,.false.)
*     This is the default option where data read is not exactly
*     copied but can be manipulated to different values
*
      call ccard (lste_S, def1_S, def2_S, 2, err)
*
      if ((def2_S(1).ne."").and.(def2_S(1).ne." ")) then
*
*        fichier d'analyse
*
         if (fnom(iun2,def2_S(1),'RND+OLD',0).ge.0) then
            if (fstouv(iun2,'RND').lt.0) then
               write (6,8001) def2_S(1)
               call qqexit(1)
               stop
            endif
         else
            write (6,8000) def2_S(1)
            call qqexit(1)
            stop
         endif
*
*
* TSOIL(1) - tsoil(1), tair_1.5m(0) [K]
*
         key_ts1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1,' '
     &        ,'I0')
         write(6,*)'geophy:ip1_all(1.0,3)de I0:key_ts1= ',key_ts1
         if (key_ts1.lt.0) then
            ip3_ts  = -1
            key_tsa = fstinf(iun2,ni,nj,nk,-1,' ',0,-1,ip3_ts,' ','TS')
            if (key_tsa.lt.0) then
               print*, 'TS(1) NOT AVAILABLE --ABORT--'
               goto 9876
            else

               write (6,210) 'TS',ip3_ts,'I0',p1_1
               err = fstopl ('IMAGE',.false.,.false.)
               err= fstprm (key_tsa, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
               allocate (w1(ni*nj+header))
               err= fstluk( w1, key_tsa, ni,nj,nk)      
               write(6,210) 'TS',ip3_ts,'TS',p1_1
               do i=1,ni*nj
                    w1(i)=w1(i)+TCDK
               enddo
               err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                       1, p1_1, p2, 0, typ_S, "I0", lab_S, grd_S,
     $                      g1, g2, g3, g4, dty, .true.)
               deallocate (w1)
            endif
         endif
*
* TSOIL(2) - tsoil(2), tp(0) [K]
*
         key_tp  = fstinf(iun2,ni,nj,nk,-1,' ',0   ,-1,-1,' ','TP')
         key_ts2 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(2.0,3),-1,-1,' '
     &        ,'I0')
         write(6,*)'geophy:ip1_all(2.0,3)de I0:key_ts2= ',key_ts2
*
         if (key_ts2.lt.0) then
            if (key_tp.lt.0) then
               print*, 'TP NOT AVAILABLE --ABORT--'
               goto 9876
            else
               write(6,210) 'TP',0,'I0',p1_2
               err = fstopl ('IMAGE',.false.,.false.)
               err= fstprm (key_tp, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
               allocate (w1(ni*nj+header))
               err= fstluk( w1, key_tp, ni,nj,nk)      
               do i=1,ni*nj
                    w1(i)=w1(i)+TCDK
               enddo

               err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_2, p2, 0, typ_S, "I0", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
               deallocate (w1)
            endif
         endif
*
* TSOIL(3) - tsoil(3), tsoil(3) from climatological file (in e_gemntr) [K]
*
* WSOIL(3) - wsoil(3), minimum value [vol. fraction]
*
         key_ws3 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(3.0,3),-1,-1,' '
     &        ,'I1')
         write(6,*)'geophy:ip1_all(3.0,3)de I1:key_ws3= ',key_ws3
*
         if (key_ws3.lt.0 ) then
           key_ws2= fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(2.0,3),-1,-1,' '
     &          ,'I1')
         write(6,*)'geophy:ip1_all(2.0,3)de I1:key_ws2= ',key_ws2
            if(key_ws2.lt.0) go to 555
            err= fstprm (key_ws2, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk (w1, key_ws2, ni, nj, nk)
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_3, p2, 0, typ_S, "I1", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* ISOIL(1) - isoil(1), isoil(0) [vol. fraction]
*
         key_is0 = fstinf(iun2,ni,nj,nk,-1,' ',-1  ,-1,-1,' ','I2')
         key_is1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1,' '
     &        ,'I2')
         write(6,*)'geophy:ip1_all(1.0,3)de I2:key_is1= ',key_is1
*
         if(key_is0.lt.0) go to 555
         if(key_is1.lt.0 .and. key_is0.ge.0) then
            err= fstprm (key_is0, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_is0, ni,nj,nk)
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_1, p2, 0, typ_S, "I2", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
*
* ISOIL(2) - isoil(2), isoil(1) [vol. fraction]
* ISOIL(3) - isoil(3), zero     [vol. fraction]
*
         key_is1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1,' '
     &        ,'I2')
         write(6,*)'geophy:ip1_all(1.0,3)de I2:key_1s1= ',key_is1
         key_is2 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(2.0,3),-1,-1,' '
     &        ,'I2')
         write(6,*)'geophy:ip1_all(2.0,3)de I2:key_is2= ',key_is2
*
         if(key_is2.lt.0 .and. key_is1.ge.0) then
            err= fstprm (key_is1, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_is1, ni,nj,nk)
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_2, p2, 0, typ_S, "I2", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            do i=1,ni*nj
                 w1(i)=0.
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_3, p2, 0, typ_S, "I2", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* WVEG(0) - wveg(0), zero [kg/m2]
*
         key_wvg = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','I3')
*
         if(key_wvg.lt.0) then
            allocate (w1(ni*nj+header))
            do i=1,ni*nj
                 w1(i)=0.
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "I3", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* IVEG(0) - iveg(0), zero [kg/m2]
*
         key_ivg = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','SK')
*
         if(key_ivg.lt.0) then
            allocate (w1(ni*nj+header))
            do i=1,ni*nj
                 w1(i)=0.
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "SK", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* SNOMA(0) - snoma(0), snodp(0)*3.0 [kg/m3]
*             note: snodp is in cm, which explains the 3.0 (300 * 0.01)
*
         key_sma = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','I5')
         key_sdp = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','SD')
*
         if(key_sma.lt.0 .and. key_sdp.ge.0)   then
            err= fstprm (key_sdp, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_sdp, ni,nj,nk)
            do i=1,ni*nj
               w1(i) = w1(i) * 3.0
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "I5", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* VEGGRO(0) - veggro(0), max(-1.,min(1.,0.1*tair_1.5m))
*             note: tair_1.5m is in degrees Celsius
*
         key_vgr = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','GR')
*
         if(key_vgr.lt.0) then
            key_tsa = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','TS')
            if(key_tsa.ge.0) then
              key_ts = key_tsa
            else
              key_ts1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &             ,' ','I0')
         write(6,*)'geophy:ip1_all(1.0,3)de I0:key_ts1= ',key_ts1
              key_ts = key_ts1
            endif
            err= fstprm (key_ts, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)    
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_ts, ni,nj,nk)
            do i=1,ni*nj
               w1(i) = max(-1.,min(1.,0.1*(w1(i)-TCDK)))
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "GR", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* TVEG(0) - tveg(0), tair_1.5m(0) [K]
*
        key_tvg = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','TE')
*
        if(key_tvg.lt.0) then
          key_tsa = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','TS')
          if(key_tsa.ge.0) then
            err= fstprm (key_tsa, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_tsa, ni,nj,nk)
            do i=1,ni*nj
               w1(i) = w1(i) + TCDK
            enddo
          else
            key_ts1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &           ,' ','I0')
         write(6,*)'geophy:ip1_all(1.0,3)de I0:key_ts1= ',key_ts1
            err= fstprm (key_ts1, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_ts1, ni,nj,nk)
          endif
          err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "TE", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
          deallocate (w1)
        endif
*
* TSNO(0) - tsno(0), min(tsoil(1),0 Celsius) [K]
*
         key_tsn = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','TN')
*
         if(key_tsn.lt.0) then
            key_ts1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &           ,' ','I0')
         write(6,*)'geophy:ip1_all(1.0,3)de I0:key_ts1= ',key_ts1
            err= fstprm (key_ts1, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_ts1, ni,nj,nk)
            do i=1,ni*nj
               w1(i) = min(w1(i), TCDK)
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "TN", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* ZPOND(0) - zpond(0), zero [m]
*
         key_zpd = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','M9')
*
         if(key_zpd.lt.0) then
            key_ts1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &          ,' ','I0')
         write(6,*)'geophy:ip1_all(1.0,3)de I0:key_ts1= ',key_ts1
            err= fstprm (key_ts1, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            do i=1,ni*nj
                 w1(i)=0.
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "M9", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* TPOND(0) - tpond(0), tsoil(1) [K]
*
         key_tpd = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','Q4')
*
         if(key_tpd.lt.0) then
            key_ts1 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &           ,' ','I0')
         write(6,*)'geophy:ip1_all(1.0,3)de I0:key_ts1= ',key_ts1
            err= fstprm (key_ts1, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, key_ts1, ni,nj,nk)
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "Q4", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* TBASE(0) - tbase(0), tsoil(2) [K]
*
         key_tbs = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','R2')
*
         if(key_tbs.lt.0) then
c            key_ts2 = fstinf(iun2,ni,nj,nk,-1,' ',p1_2,-1,-1,' ','I0')
           key_ts2 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(2.0,3),-1,-1
     &          ,' ','I0')
         write(6,*)'geophy:ip1_all(2.0,3)de I0:key_ts2= ',key_ts2
            err= fstprm (key_ts2, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3,
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            do i=1,ni*nj
                 w1(i)= -1.
            enddo
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, 0, p2, 0, typ_S, "R2", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
  555 continue
*
          key_tsa = fstinf(iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ','TS')
         write(6,*)'geophy:apres fstinf de TS:key_tsa= ',key_tsa

*
* I7(1) - i7(1), ts(1) [K]
*
         write(6,*)'geophy:avant key_i7:ip1_all(1.0,3)= ',ip1_all(1.0,3)
         key_i7 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &       ,' ','I7')
         write(6,*)'geophy:ip1_all(1.0,3)de I7:key_i7= ',key_i7
         if (key_i7.lt.0) then
             key_i7 = fstinf(iun2,ni,nj,nk,-1,' ',  0,-1,-1,' ','I7')
             if (key_i7.lt.0) then
                 key_i7=key_tsa
                 write(6,210) 'TS',ip3_ts,'I7',p1_1
                 err = fstopl ('IMAGE',.false.,.false.)
                 err= fstprm (key_i7, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
                 allocate (w1(ni*nj))
                 err= fstluk( w1, key_i7, ni,nj,nk)    
                 do i=1,ni*nj
                    w1(i)=w1(i)+TCDK
                 enddo
             else
                 write(6,210) 'I7',0,'I7',p1_1
                 err = fstopl ('IMAGE',.true.,.false.)
                 err= fstprm (key_i7, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
                 allocate (w1(ni*nj+header))
                 err= fstluk( w1, key_i7, ni,nj,nk)      
             endif
             err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $              1, p1_1, p2, 0, typ_S, "I7", lab_S, grd_S,
     $              g1, g2, g3, g4, dty, .true.) 
             deallocate (w1)
         endif
*
* I7(2) - i7(2),tp(0) [K]
*
         key_i7 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(2.0,3),-1,-1,' '
     &       ,'I7')
         write(6,*)'geophy:ip1_all(2.0,3)de I7:key_i7= ',key_i7
         if (key_i7.lt.0) then
             if (key_tp.lt.0) then
                 print*, 'NOR I7(2) NOR TP ARE AVAILABLE --ABORT--'
                 goto 9876
             else
                 key_i7=key_tp
             endif
             write(6,210) 'TP',0,'I7',p1_2
             err = fstopl ('IMAGE',.false.,.false.)
             err= fstprm (key_i7, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
             allocate (w1(ni*nj))
             err= fstluk( w1, key_i7, ni,nj,nk)      
             do i=1,ni*nj
                w1(i)=w1(i)+TCDK
             enddo
             err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $              1, p1_2, p2, 0, typ_S, "I7", lab_S, grd_S,
     $              g1, g2, g3, g4, dty, .true.) 
             deallocate (w1)
         endif
*
* I7(3) - i7(3),(tp(0)-271.2)/2 [K]
*
         key_i7 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(3.0,3),-1,-1
     &       ,' ','I7')
         write(6,*)'geophy:ip1_all(3.0,3)de I7:key_i7= ',key_i7
         if (key_i7.lt.0) then
             if (key_tp.lt.0) then
                 print*, 'NOR I7(3) NOR TP ARE AVAILABLE --ABORT--'
                 goto 9876
             else
                 key_i7=key_tp
             endif
 
             write(6,211) 'TP',0,'I7',p1_3
             err = fstopl ('IMAGE',.false.,.false.)
             err= fstprm (key_i7, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
             allocate (w1(ni*nj))
             err= fstluk( w1, key_i7, ni,nj,nk)      
             do i=1,ni*nj
                w1(i)=(w1(i)+TCDK+TI7D)*0.5
             enddo
             err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $              1, p1_3, p2, 0, typ_S, "I7", lab_S, grd_S,
     $              g1, g2, g3, g4, dty, .true.) 
             deallocate (w1)
         endif
*
* I9(1) - i9(1),ts(1) [K]
*
         key_i9 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(1.0,3),-1,-1
     &       ,' ','I9')
         write(6,*)'geophy:ip1_all(1.0,3)de I9:key_i9= ',key_i9
         if (key_i9.lt.0) then
            nvar='I9'
            ip3  = 1
            key_i9 = fstinf(iun2,ni,nj,nk,-1,' ',0,-1,ip3,' ',nvar)
            if (key_i9.lt.0) then
                key_i9=key_tsa 
                write(6,210) 'TS',ip3_ts,'I9',p1_1
                err = fstopl ('IMAGE',.false.,.false.)
                err= fstprm (key_i9, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
                allocate (w1(ni*nj))
                err= fstluk( w1, key_i9, ni,nj,nk)      
                do i=1,ni*nj
                   w1(i)=w1(i)+TCDK
                enddo
            else
                write(6,210) nvar,ip3,'I9',p1_1
                err = fstopl ('IMAGE',.true.,.false.)
                err= fstprm (key_i9, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
                allocate (w1(ni*nj+header))
                err= fstluk( w1, key_i9, ni,nj,nk)      
            endif
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_1, p2, 0, typ_S, "I9", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*
* I9(1) - i9(1),tp(0) [K]
*
         key_i9 = fstinf(iun2,ni,nj,nk,-1,' ',ip1_all(2.0,3),-1,-1
     &       ,' ','I9')
         write(6,*)'geophy:ip1_all(2.0,3)de I9:key_i9= ',key_i9
         if (key_i9.lt.0) then
            nvar='I9'
            ip3  = 2
            key_i9 = fstinf(iun2,ni,nj,nk,-1,' ',0,-1,ip3,' ',nvar)
            if (key_i9.lt.0) then
                if (key_tp.lt.0) then
                    print*, 'NOR I9(2) NOR TP ARE AVAILABLE --ABORT--'
                    goto 9876
                else
                    key_i9=key_tp
                endif
                write(6,210) 'TP',0,'I9',p1_2
                err = fstopl ('IMAGE',.false.,.false.)
                err= fstprm (key_i9, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
                allocate (w1(ni*nj))
                err= fstluk( w1, key_i9, ni,nj,nk)      
                do i=1,ni*nj
                   w1(i)=w1(i)+TCDK
                enddo
            else
                write(6,210) nvar,ip3,'I9',p1_2
                err = fstopl ('IMAGE',.true.,.false.)
                err= fstprm (key_i9, dte, det, ipas, ni, nj, nk, bit, dty,
     $              p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, g3, 
     $              g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
                allocate (w1(ni*nj+header))
                err= fstluk( w1, key_i9, ni,nj,nk)     
            endif
            err= fstecr (w1, w1, -bit, iun2, dte, det, ipas, ni, nj,
     $                    1, p1_2, p2, 0, typ_S, "I9", lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         endif
*     
         err = fstfrm(iun2)
         err = fclos(iun2)
*     
      endif
*
      if ((def2_S(2).ne."").and.(def2_S(2).ne." ")) then
         err = fstopl ('IMAGE',.true.,.false.)
*
*        fichier de champs geophysiques
*
         if (fnom(iun2,def2_S(2),'RND+OLD',0).ge.0) then
            if (fstouv(iun2,'RND').lt.0) then
               write (6,8001) def2_S(2)
               call qqexit(1)
               stop
            endif
         else
            write (6,8000) def2_S(2)
            call qqexit(1)
            stop
         endif
         filename_S = def2_S(2)(1:longueur(def2_S(2)))//'_cor'
*
         err = fnom  (iun1,filename_S,'RND',0)
         err = fstouv(iun1,'RND')
*
         err = fstinl (iun2,ni,nj,nk,-1,' ',-1,-1,-1,' ',' ',
     $                                        liste,lislon,nlis)
         do i=1,lislon
            err= fstprm (liste(i), dte, det, ipas, ni, nj, nk, bit, 
     $           dty, p1, p2, p3, typ_S, var_S, lab_S, grd_S, g1, g2, 
     $           g3, g4, swa, lng, dlf, ubc, ex1, ex2, ex3)
            allocate (w1(ni*nj+header))
            err= fstluk( w1, liste(i), ni,nj,nk) 
            if ((var_S.eq.'>>').or.(var_S.eq.'^^')) goto 88
            if (p1.gt.0) then
               p2 = p1
               p1 = 0
            endif
            if (p3.gt.0) then
               call convip ( p1, real(p3), 3, 1, lab_S, .false. )
               p3 = 0
            endif
 88         err= fstecr (w1, w1, -bit, iun1, dte, det, ipas, ni, nj,1,
     $                   p1, p2, p3, typ_S, var_S, lab_S, grd_S,
     $                   g1, g2, g3, g4, dty, .true.)
            deallocate (w1)
         end do
*
        err = fstfrm(iun1)
        err = fclos(iun1)         
        err = fstfrm(iun2)
        err = fclos(iun2)
*            
      endif
      return

 9876 err = fstfrm(iun2)
      err = fclos(iun2)
      call qqexit(1)
      return
*
 210  format (' ***** Putting ',a2,'(',i3,') into ',a2,'(',i10,')')
 211  format (' ***** Putting Avg[',a2,'(',i3,') + 271.2] into ',a2,
     $        '(',i5,')')
 8000 format (/' Unable to fnom: ',a/)
 8001 format (/' Unable to fstouv: ',a/)
*
*---------------------------------------------------------------------
*
      end