--- trunk/phylmd/stdlevvar.f 2014/09/04 10:05:52 104 +++ trunk/Sources/phylmd/stdlevvar.f 2016/03/22 16:31:39 188 @@ -9,7 +9,9 @@ ! From LMDZ4/libf/phylmd/stdlevvar.F90, version 1.3 2005/05/25 13:10:09 + use coefcdrag_m, only: coefcdrag USE suphec_m, ONLY: rg, rkappa + use screenp_m, only: screenp ! Objet : calcul de la température et de l'humidité relative à 2 m ! et du module du vent à 10 m à partir des relations de @@ -22,29 +24,40 @@ INTEGER, intent(in):: klon ! dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude) - INTEGER, intent(in):: knon, nsrf + INTEGER, intent(in):: knon ! knon----input-I- nombre de points pour un type de surface + INTEGER, intent(in):: nsrf ! nsrf----input-I- indice pour le type de surface; voir indicesol.inc LOGICAL, intent(in):: zxli ! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li - REAL, dimension(klon), intent(in):: u1, v1, t1, q1, z1, ts1 + REAL, dimension(klon), intent(in):: u1 ! u1------input-R- vent zonal au 1er niveau du modele + REAL, dimension(klon), intent(in):: v1 ! v1------input-R- vent meridien au 1er niveau du modele + REAL, dimension(klon), intent(in):: t1 ! t1------input-R- temperature de l'air au 1er niveau du modele + REAL, dimension(klon), intent(in):: q1 ! q1------input-R- humidite relative au 1er niveau du modele + REAL, dimension(klon), intent(in):: z1 ! z1------input-R- geopotentiel au 1er niveau du modele + REAL, dimension(klon), intent(in):: ts1 ! ts1-----input-R- temperature de l'air a la surface - REAL, dimension(klon), intent(in):: qsurf, rugos + REAL, dimension(klon), intent(in):: qsurf ! qsurf---input-R- humidite relative a la surface + REAL, dimension(klon), intent(in):: rugos ! rugos---input-R- rugosite - REAL, dimension(klon), intent(in):: psol, pat1 + REAL, dimension(klon), intent(in):: psol ! psol----input-R- pression au sol + REAL, dimension(klon), intent(in):: pat1 ! pat1----input-R- pression au 1er niveau du modele - REAL, dimension(klon), intent(out):: t_2m, q_2m, t_10m, q_10m + REAL, dimension(klon), intent(out):: t_2m ! t_2m---output-R- temperature de l'air a 2m + REAL, dimension(klon), intent(out):: q_2m ! q_2m---output-R- humidite relative a 2m + REAL, dimension(klon), intent(out):: t_10m ! t_10m--output-R- temperature de l'air a 10m + REAL, dimension(klon), intent(out):: q_10m ! q_10m--output-R- humidite specifique a 10m REAL, dimension(klon), intent(out):: u_10m ! u_10m--output-R- vitesse du vent a 10m @@ -55,7 +68,7 @@ ! RKAR : constante de von Karman REAL, PARAMETER:: RKAR=0.40 ! niter : nombre iterations calcul "corrector" - INTEGER, parameter:: niter=2, ncon=niter-1 + INTEGER, parameter:: niter=2 ! Variables locales INTEGER i, n @@ -71,14 +84,12 @@ REAL, dimension(klon):: zdte, zdq ! lmon : longueur de Monin-Obukhov selon Hess, Colman and McAvaney DOUBLE PRECISION, dimension(klon):: lmon - DOUBLE PRECISION, parameter:: eps=1.0D-20 REAL, dimension(klon):: delu, delte, delq REAL, dimension(klon):: u_zref, te_zref, q_zref REAL, dimension(klon):: temp, pref LOGICAL okri REAL, dimension(klon):: u_zref_p, temp_p, q_zref_p !convertgence - REAL, dimension(klon):: te_zref_con, q_zref_con REAL, dimension(klon):: u_zref_c, temp_c, q_zref_c REAL, dimension(klon):: ok_pred, ok_corr @@ -112,7 +123,7 @@ ! First aproximation of variables at zref zref = 2.0 - CALL screenp(klon, knon, nsrf, speed, tpot, q1, & + CALL screenp(klon, knon, speed, tpot, q1, & ts1, qsurf, rugos, lmon, & ustar, testar, qstar, zref, & delu, delte, delq) @@ -145,11 +156,6 @@ ! return to normal temperature temp(i) = te_zref(i) * (psol(i)/pref(i))**(-RKAPPA) - - IF(n == ncon) THEN - te_zref_con(i) = te_zref(i) - q_zref_con(i) = q_zref(i) - ENDIF ENDDO ENDDO @@ -169,7 +175,7 @@ ! First aproximation of variables at zref zref = 10.0 - CALL screenp(klon, knon, nsrf, speed, tpot, q1, & + CALL screenp(klon, knon, speed, tpot, q1, & ts1, qsurf, rugos, lmon, & ustar, testar, qstar, zref, & delu, delte, delq)