--- trunk/Sources/phylmd/Orography/drag_noro.f 2015/06/18 13:49:26 150 +++ trunk/Sources/phylmd/Orography/drag_noro.f 2018/01/05 14:45:45 247 @@ -4,56 +4,46 @@ contains - SUBROUTINE drag_noro(nlon, nlev, dtime, paprs, pplay, pmea, pstd, psig, & - pgam, pthe, ppic, pval, ktest, t, u, v, pulow, pvlow, pustr, pvstr, & - d_t, d_u, d_v) + SUBROUTINE drag_noro(dtime, paprs, pplay, pmea, pstd, psig, pgam, pthe, & + ppic, pval, ktest, t, u, v, pulow, pvlow, pustr, pvstr, d_t, d_u, d_v) ! From LMDZ4/libf/phylmd/orografi.F, version 1.4 2005/12/01 11:27:29 - USE dimphy, ONLY : klev, klon - USE suphec_m, ONLY : rd, rg + ! Author: F. Lott (LMD/CNRS). Date: 1995/02/01. + ! Objet : frottement de la montagne, interface. - ! Auteur(s): F.Lott (LMD/CNRS) date: 19950201 - ! Objet: Frottement de la montagne Interface - !====================================================================== - ! Arguments: - ! dtime---input-R- pas d'integration (s) - ! paprs---input-R-pression pour chaque inter-couche (en Pa) - ! pplay---input-R-pression pour le mileu de chaque couche (en Pa) - ! t-------input-R-temperature (K) - ! u-------input-R-vitesse horizontale (m/s) - ! v-------input-R-vitesse horizontale (m/s) - - ! d_t-----output-R-increment de la temperature - ! d_u-----output-R-increment de la vitesse u - ! d_v-----output-R-increment de la vitesse v - !====================================================================== - - ! ARGUMENTS - - INTEGER nlon, nlev - REAL, INTENT (IN) :: dtime - REAL, INTENT (IN) :: paprs(klon, klev+1) - REAL, INTENT (IN) :: pplay(klon, klev) - REAL pmea(nlon) - REAL, INTENT (IN):: pstd(nlon), psig(nlon) - REAL pgam(nlon), pthe(nlon) - REAL ppic(nlon), pval(nlon) - REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon) - REAL, INTENT (IN):: t(nlon, nlev) - real, INTENT (IN):: u(nlon, nlev), v(nlon, nlev) - REAL d_t(nlon, nlev), d_u(nlon, nlev), d_v(nlon, nlev) + USE dimphy, ONLY: klev, klon + use orodrag_m, only: orodrag + USE suphec_m, ONLY: rd, rg + + REAL, INTENT (IN):: dtime ! pas d'int\'egration (s) + REAL, INTENT (IN):: paprs(klon, klev+1) ! pression pour chaque + ! inter-couche (en Pa) + REAL, INTENT (IN):: pplay(klon, klev) ! pression pour le mileu de + ! chaque couche (en Pa) + REAL pmea(klon) + REAL, INTENT (IN):: pstd(klon), psig(klon) + REAL pgam(klon), pthe(klon) + REAL ppic(klon), pval(klon) + integer ktest(klon) + REAL, INTENT (IN):: t(klon, klev) ! temperature (K) + real, INTENT (IN):: u(klon, klev), v(klon, klev) ! vitesse horizontale (m/s) + REAL, intent(out):: pulow(klon), pvlow(klon), pustr(klon), pvstr(klon) + REAL, intent(out):: d_t(klon, klev) ! increment de la temperature - INTEGER i, k, ktest(nlon) - - ! Variables locales: + REAL, intent(out):: d_u(klon, klev), d_v(klon, klev) ! increment + ! de la vitesse + ! Local: + INTEGER i, k REAL zgeom(klon, klev) REAL pdtdt(klon, klev), pdudt(klon, klev), pdvdt(klon, klev) REAL pt(klon, klev), pu(klon, klev), pv(klon, klev) REAL papmf(klon, klev), papmh(klon, klev+1) - ! initialiser les variables de sortie (pour securite) + !-------------------------------------------------------------------- + + ! Initialiser les variables de sortie (pour securite) DO i = 1, klon pulow(i) = 0.0 @@ -72,7 +62,7 @@ END DO END DO - ! preparer les variables d'entree (attention: l'ordre des niveaux + ! Preparer les variables d'entree (attention: l'ordre des niveaux ! verticaux augmente du haut vers le bas) DO k = 1, klev @@ -98,20 +88,20 @@ END DO END DO - ! appeler la routine principale + ! Appeler la routine principale - CALL orodrag(klon, klev, ktest, dtime, papmh, papmf, zgeom, & - pt, pu, pv, pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, pvlow, & - pdudt, pdvdt, pdtdt) + CALL orodrag(klon, klev, ktest, dtime, papmh, papmf, zgeom, pt, pu, pv, & + pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, pvlow, pdudt, & + pdvdt, pdtdt) DO k = 1, klev DO i = 1, klon d_u(i, klev+1-k) = dtime*pdudt(i, k) d_v(i, klev+1-k) = dtime*pdvdt(i, k) d_t(i, klev+1-k) = dtime*pdtdt(i, k) - pustr(i) = pustr(i) & + pustr(i) = pustr(i) & + pdudt(i, k)*(papmh(i, k+1)-papmh(i, k))/rg - pvstr(i) = pvstr(i) & + pvstr(i) = pvstr(i) & + pdvdt(i, k)*(papmh(i, k+1)-papmh(i, k))/rg END DO END DO