c
c $Header$
c
c
cIM on initialise les champs en debut du jour ou du mois 
c
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,tsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,usumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,vsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,wsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,phisumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,qsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,rhsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,uvsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,vqsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,vTsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,wqsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,vphisumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,wTsumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,u2sumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,v2sumSTD)
        CALL ini_undefSTD(nlevSTD,itap,
     $           dtime,ecrit_day,ecrit_mth,
     $                    tnondef,T2sumSTD)
c
cIM on interpole sur les niveaux STD de pression a chaque pas de temps de la physique
c
c-------------------------------------------------------c
c positionnement de l'argument logique a .false.        c
c pour ne pas recalculer deux fois la meme chose !      c
c a cet effet un appel a plevel_new a ete deplace       c
c a la fin de la serie d'appels                         c
c la boucle 'DO k=1, nlevSTD' a ete internalisee        c
c dans plevel_new, d'ou la creation de cette routine... c
c-------------------------------------------------------c
c
        CALL plevel_new(klon,klev,nlevSTD,.true.,pplay,rlevSTD,
     &              t_seri,tlevSTD)
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             u_seri,ulevSTD)
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             v_seri,vlevSTD)
c

c
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zphi/RG,philevSTD)
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             qx(:,:,ivap),qlevSTD)
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_rh*100.,rhlevSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=u_seri(i,l)*v_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,uvSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=v_seri(i,l)*q_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,vqSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=v_seri(i,l)*t_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,vTSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=omega(i,l)*qx(i,l,ivap)
         ENDDO !i 
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,wqSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=v_seri(i,l)*zphi(i,l)/RG
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,vphiSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=omega(i,l)*t_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,wTSTD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=u_seri(i,l)*u_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,u2STD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=v_seri(i,l)*v_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,v2STD)
c
        DO l=1, klev
         DO i=1, klon
          zx_tmp_fi3d(i,l)=t_seri(i,l)*t_seri(i,l)
         ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.false.,pplay,rlevSTD,
     &             zx_tmp_fi3d,T2STD)


        DO l=1, klev
        DO i=1, klon
         zx_tmp_fi3d(i,l)=paprs(i,l)
        ENDDO !i
        ENDDO !l
        CALL plevel_new(klon,klev,nlevSTD,.true.,zx_tmp_fi3d,rlevSTD,
     &             omega,wlevSTD)

c
cIM on somme les valeurs definies a chaque pas de temps de la physique ou 
cIM toutes les 6 heures
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.TRUE.
       CALL undefSTD(nlevSTD,itap,tlevSTD,
     $               dtime,ecrit_hf,
     $               oknondef,tnondef,tsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,ulevSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,usumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,vlevSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,vsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,wlevSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,wsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,philevSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,phisumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,qlevSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,qsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,rhlevSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,rhsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,uvSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,uvsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,vqSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,vqsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,vTSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,vTsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,wqSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,wqsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,vphiSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,vphisumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,wTSTD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,wTsumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,u2STD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,u2sumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,v2STD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,v2sumSTD)
c
       oknondef(1:klon,1:nlevSTD,1:nout)=.FALSE.
       CALL undefSTD(nlevSTD,itap,T2STD,
     $           dtime,ecrit_hf,
     $               oknondef,tnondef,T2sumSTD)
c
cIM on moyenne a la fin du jour ou du mois 
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,tsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,usumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,vsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,wsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,phisumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,qsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,rhsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,uvsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,vqsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,vTsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,wqsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,vphisumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,wTsumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,u2sumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,v2sumSTD)
c
       CALL moy_undefSTD(nlevSTD,itap,
     $      dtime,ecrit_day,ecrit_mth,ecrit_hf2mth,
     $                   tnondef,T2sumSTD)
c
cIM interpolation a chaque pas de temps du SWup(clr) et SWdn(clr) a 200 hPa
c
      CALL plevel(klon,klevp1,.true.,paprs,20000.,
     $     swdn0,SWdn200clr)
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     swdn,SWdn200)
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     swup0,SWup200clr)
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     swup,SWup200)
c
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     lwdn0,LWdn200clr)
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     lwdn,LWdn200)
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     lwup0,LWup200clr)
      CALL plevel(klon,klevp1,.false.,paprs,20000.,
     $     lwup,LWup200)
c
