--- trunk/Sources/phylmd/stdlevvar.f 2015/04/29 15:47:56 134 +++ trunk/Sources/phylmd/stdlevvar.f 2016/12/07 16:44:53 208 @@ -11,6 +11,7 @@ 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 @@ -18,48 +19,41 @@ ! Reference: Hess, Colman and McAvaney (1995) - ! Author: I. Musat, 01.07.2002 + ! Author: I. Musat, July 1st, 2002 INTEGER, intent(in):: klon ! dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude) - INTEGER, intent(in):: knon - ! knon----input-I- nombre de points pour un type de surface + INTEGER, intent(in):: knon ! 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 - ! 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 + ! indice pour le type de surface; voir indicesol.inc + + LOGICAL, intent(in):: zxli ! calcul des cdrags selon Laurent Li + REAL, dimension(klon), intent(in):: u1 ! vent zonal au 1er niveau du modele + + REAL, dimension(klon), intent(in):: v1 + ! vent meridien au 1er niveau du modele + + REAL, dimension(klon), intent(in):: t1 + ! 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 - ! qsurf---input-R- humidite relative a la surface - REAL, dimension(klon), intent(in):: rugos - ! rugos---input-R- rugosite - 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 - ! 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 + ! humidite relative au 1er niveau du modele + + REAL, dimension(klon), intent(in):: z1 + ! geopotentiel au 1er niveau du modele + + REAL, dimension(klon), intent(in):: ts1 ! temperature de l'air a la surface + REAL, dimension(klon), intent(in):: qsurf ! humidite relative a la surface + REAL, dimension(klon), intent(in):: rugos ! rugosite + REAL, dimension(klon), intent(in):: psol ! pression au sol + REAL, dimension(klon), intent(in):: pat1 ! pression au 1er niveau du modele + REAL, dimension(klon), intent(out):: t_2m ! temperature de l'air a 2m + REAL, dimension(klon), intent(out):: q_2m ! humidite relative a 2m + REAL, dimension(klon), intent(out):: t_10m ! temperature de l'air a 10m + REAL, dimension(klon), intent(out):: q_10m ! humidite specifique a 10m + REAL, dimension(klon), intent(out):: u_10m ! vitesse du vent a 10m REAL, intent(out):: ustar(klon) ! u* ! Local: @@ -67,7 +61,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 @@ -83,14 +77,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 @@ -124,7 +116,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) @@ -157,11 +149,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 @@ -181,7 +168,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)