3 SUBROUTINE cltracrn( itr, dtime,u1lay, v1lay, &
 
    4      cdrag,coef,t,ftsol,pctsrf,               &
 
    6      masktr,fshtr,hsoltr,tautr,vdeptr,        &
 
   50   INTEGER,
INTENT(IN)                     :: itr
 
   51   REAL,
INTENT(IN)                        :: dtime
 
   52   REAL,
DIMENSION(klon),
INTENT(IN)        :: u1lay, v1lay
 
   53   REAL,
DIMENSION(klon),
INTENT(IN)        :: cdrag
 
   54   REAL,
DIMENSION(klon,klev),
INTENT(IN)   :: coef, t
 
   55   REAL,
DIMENSION(klon,nbsrf),
INTENT(IN)  :: ftsol, pctsrf 
 
   56   REAL,
DIMENSION(klon,klev),
INTENT(IN)   :: tr 
 
   57   REAL,
DIMENSION(klon),
INTENT(IN)        :: trs
 
   58   REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs 
 
   59   REAL,
DIMENSION(klon,klev),
INTENT(IN)   :: pplay, delp
 
   60   REAL,
DIMENSION(klon),
INTENT(IN)        :: masktr 
 
   61   REAL,
DIMENSION(klon),
INTENT(IN)        :: fshtr 
 
   62   REAL,
INTENT(IN)                        :: hsoltr
 
   63   REAL,
INTENT(IN)                        :: tautr
 
   64   REAL,
INTENT(IN)                        :: vdeptr
 
   65   REAL,
DIMENSION(klon),
INTENT(IN)        :: lat   
 
   68   REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: d_tr
 
   69   REAL,
DIMENSION(klon),
INTENT(OUT) :: d_trs  
 
   72   REAL,
DIMENSION(klon,klev) :: flux_tr  
 
   74   REAL,
DIMENSION(klon)      :: rotrhi
 
   75   REAL,
DIMENSION(klon,klev) :: zx_coef
 
   76   REAL,
DIMENSION(klon)      :: zx_buf
 
   77   REAL,
DIMENSION(klon,klev) :: zx_ctr
 
   78   REAL,
DIMENSION(klon,klev) :: zx_dtr
 
   79   REAL,
DIMENSION(klon)      :: zx_trs
 
   82   REAL,
DIMENSION(klon,klev) :: local_tr
 
   83   REAL,
DIMENSION(klon)      :: local_trs
 
   84   REAL,
DIMENSION(klon)      :: zts      
 
   85   REAL,
DIMENSION(klon)      :: zx_alpha1, zx_alpha2
 
   97         zts(i) = zts(i) + ftsol(i,n)*pctsrf(i,n)
 
  102      rotrhi(i) = rd * zts(i) / hsoltr 
 
  107         local_tr(i,k) = tr(i,k)
 
  112      local_trs(i) = trs(i)
 
  121      zx_alpha2(i) = 1.0 - zx_alpha1(i)
 
  125      zx_coef(i,1) = cdrag(i)*(1.0+sqrt(u1lay(i)**2+v1lay(i)**2)) &
 
  126           *pplay(i,1)/(rd*t(i,1))
 
  127      zx_coef(i,1) = zx_coef(i,1) * dtime*
rg 
  132         zx_coef(i,k) = coef(i,k)*
rg/(pplay(i,k-1)-pplay(i,k)) &
 
  133              *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/rd)**2
 
  134         zx_coef(i,k) = zx_coef(i,k) * dtime*
rg 
  139      zx_buf(i)      = delp(i,
klev) + zx_coef(i,
klev)
 
  140      zx_ctr(i,
klev) = local_tr(i,
klev)*delp(i,
klev)/zx_buf(i)
 
  141      zx_dtr(i,
klev) = zx_coef(i,
klev) / zx_buf(i)
 
  144   DO l = 
klev-1, 2 , -1
 
  146         zx_buf(i) = delp(i,l)+zx_coef(i,l)      &
 
  147              +zx_coef(i,l+1)*(1.-zx_dtr(i,l+1))
 
  149         zx_ctr(i,l) = ( local_tr(i,l)*delp(i,l) &
 
  150              + zx_coef(i,l+1)*zx_ctr(i,l+1) )/zx_buf(i)
 
  151         zx_dtr(i,l) = zx_coef(i,l) / zx_buf(i)
 
  156      zx_buf(i) = delp(i,1) + zx_coef(i,2)*(1.-zx_dtr(i,2))  &
 
  157           + masktr(i) * zx_coef(i,1)                        &
 
  158           *( zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2) )
 
  160      zx_ctr(i,1) = ( local_tr(i,1)*delp(i,1)                &
 
  163           - masktr(i) * zx_coef(i,1)                        &
 
  164           *zx_alpha2(i) ) ) / zx_buf(i)
 
  165      zx_dtr(i,1) = masktr(i) * zx_coef(i,1) / zx_buf(i)
 
  179      IF ( nint(masktr(i)) .EQ. 1 ) 
THEN 
  180         zx_trs(i) = local_trs(i)
 
  182              +fshtr(i)*dtime*rotrhi(i)                             &
 
  183              +rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg                  &
 
  184              *(zx_ctr(i,1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2)) &
 
  185              +zx_alpha2(i)*zx_ctr(i,2))
 
  187         zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg            &
 
  189              *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2)))             &
 
  191              + dtime * vdeptr / hsoltr 
 
  192         zx_trs(i) = zx_a / zx_b
 
  193         local_trs(i) = zx_trs(i)
 
  199      IF ( (itr.eq.
id_rn.AND.nint(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.).OR.      &
 
  200           (itr.eq.
id_pb.AND.nint(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.) ) 
THEN 
  201         zx_trs(i) = local_trs(i)
 
  203              +(fshtr(i)/2.)*dtime*rotrhi(i)                        & 
 
  204              +rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg                  &
 
  205              *(zx_ctr(i,1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2)) &
 
  206              +zx_alpha2(i)*zx_ctr(i,2))
 
  208         zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg  &
 
  210              *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2)))   &
 
  212              + dtime * vdeptr / hsoltr
 
  214         zx_trs(i) = zx_a / zx_b
 
  215         local_trs(i) = zx_trs(i)
 
  225      IF ( (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.0).OR.       &
 
  226           (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.1.AND.lat(i).LT.-60.)) 
THEN 
  234      IF ( (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.0).OR.    &
 
  235           (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.1.AND.lat(i).GT.70.)) 
THEN 
  243      IF (itr.eq.
id_rn.AND.nint(masktr(i)).EQ.0) 
THEN 
  255      local_tr(i,1) = zx_ctr(i,1)+zx_dtr(i,1)*zx_trs(i)
 
  259         local_tr(i,l) = zx_ctr(i,l) + zx_dtr(i,l)*local_tr(i,l-1)
 
  266      flux_tr(i,1) = masktr(i)*zx_coef(i,1)/
rg                      &
 
  267           * (zx_alpha1(i)*local_tr(i,1)+zx_alpha2(i)*local_tr(i,2) &
 
  272         flux_tr(i,l) = zx_coef(i,l)/
rg                    &
 
  273              * (local_tr(i,l)-local_tr(i,l-1)) / dtime
 
  281         d_tr(i,l) = local_tr(i,l) - tr(i,l)
 
  285      d_trs(i) = local_trs(i) - trs(i)
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL pplay
 
subroutine cltracrn(itr, dtime, u1lay, v1lay, cdrag, coef, t, ftsol, pctsrf, tr, trs, paprs, pplay, delp, masktr, fshtr, hsoltr, tautr, vdeptr, lat, d_tr, d_trs)
 
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL &zphi geo500!IM on interpole a chaque pas de temps le paprs
 
subroutine cdrag(knon, nsrf, speed, t1, q1, zgeop1, psol, tsurf, qsurf, z0m, z0h, pcfm, pcfh, zri, pref)