--- trunk/phylmd/stdlevvar.f 2018/02/05 10:39:38 254 +++ trunk/phylmd/stdlevvar.f 2018/07/11 14:51:28 272 @@ -4,8 +4,8 @@ contains - SUBROUTINE stdlevvar(klon, knon, nsrf, u1, v1, t1, q1, z1, ts1, qsurf, & - rugos, psol, pat1, t_2m, q_2m, t_10m, q_10m, wind10m, ustar) + SUBROUTINE stdlevvar(nsrf, u1, v1, t1, q1, z1, ts1, qsurf, rugos, psol, & + pat1, t_2m, q_2m, t_10m, q_10m, wind10m, ustar) ! From LMDZ4/libf/phylmd/stdlevvar.F90, version 1.3, 2005/05/25 13:10:09 @@ -17,15 +17,14 @@ ! Author: I. Musat, July 1st, 2002 + use nr_util, only: assert_eq + use coefcdrag_m, only: coefcdrag + USE dimphy, ONLY: klon USE suphec_m, ONLY: rg, rkappa use screenc_m, only: screenc use screenp_m, only: screenp - INTEGER, intent(in):: klon - ! dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude) - - INTEGER, intent(in):: knon ! nombre de points pour un type de surface INTEGER, intent(in):: nsrf ! indice pour le type de surface REAL, intent(in):: u1(:) ! (knon) vent zonal au 1er niveau du modele REAL, intent(in):: v1(:) ! (knon) vent meridien au 1er niveau du modele @@ -46,6 +45,7 @@ REAL, intent(out):: ustar(:) ! (knon) u* ! Local: + INTEGER knon ! nombre de points pour un type de surface REAL, PARAMETER:: RKAR = 0.4 ! constante de von Karman INTEGER, parameter:: niter = 2 ! nombre iterations calcul "corrector" INTEGER i, n @@ -53,32 +53,31 @@ REAL, dimension(klon):: speed ! tpot : temperature potentielle REAL, dimension(klon):: tpot - REAL, dimension(klon):: zri1, cdran REAL cdram(klon), cdrah(klon) - ! ri1 : nb. de Richardson entre la surface --> la 1ere couche - REAL, dimension(klon):: ri1 REAL, dimension(klon):: testar, qstar REAL, dimension(klon):: zdte, zdq ! lmon : longueur de Monin-Obukhov selon Hess, Colman and McAvaney DOUBLE PRECISION, dimension(klon):: lmon REAL, dimension(klon):: delu, delte, delq REAL, dimension(klon):: u_zref, te_zref, q_zref - REAL, dimension(klon):: temp, pref + REAL, dimension(klon):: temp + real pref(size(u1)) ! (knon) !------------------------------------------------------------------------- + knon = assert_eq([size(u1), size(v1), size(t1), size(wind10m), & + size(ustar)], "stdlevvar knon") + DO i=1, knon speed(i)=SQRT(u1(i)**2+v1(i)**2) - ri1(i) = 0.0 ENDDO CALL coefcdrag(nsrf, speed(:knon), t1(:knon), q1(:knon), z1(:knon), & - psol(:knon), ts1, qsurf, rugos, cdram, cdrah, cdran, zri1, pref) + psol(:knon), ts1, qsurf, rugos, cdram, cdrah) ! Star variables DO i = 1, knon - ri1(i) = zri1(i) tpot(i) = t1(i)* (psol(i)/pat1(i))**RKAPPA ustar(i) = sqrt(cdram(i) * speed(i) * speed(i)) zdte(i) = tpot(i) - ts1(i)