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
       DO k=1, nlevSTD
c
        CALL plevel(klon,klev,.true.,pplay,rlevSTD(k),
     .              t_seri,tlevSTD(:,k))
        CALL plevel(klon,klev,.true.,pplay,rlevSTD(k),
     .             u_seri,ulevSTD(:,k))
        CALL plevel(klon,klev,.true.,pplay,rlevSTD(k),
     .             v_seri,vlevSTD(:,k))
c
        DO l=1, klev
        DO i=1, klon
         zx_tmp_fi3d(i,l)=paprs(i,l)
        ENDDO !i
        ENDDO !l
        CALL plevel(klon,klev,.true.,zx_tmp_fi3d,rlevSTD(k),
     .             omega,wlevSTD(:,k))
c
        CALL plevel(klon,klev,.true.,pplay,rlevSTD(k),
     .             zphi/RG,philevSTD(:,k))
        CALL plevel(klon,klev,.true.,pplay,rlevSTD(k),
     .             qx(:,:,ivap),qlevSTD(:,k))
        CALL plevel(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_rh*100.,rhlevSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,uvSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,vqSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,vTSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,wqSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,vphiSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,wTSTD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,u2STD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,v2STD(:,k))
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(klon,klev,.true.,pplay,rlevSTD(k),
     .             zx_tmp_fi3d,T2STD(:,k))
c
       ENDDO !k=1,nlevSTD
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
