--- trunk/phylmd/yamada.f 2014/09/11 15:09:15 107 +++ trunk/phylmd/yamada.f 2014/09/16 14:00:41 108 @@ -1,166 +1,182 @@ +module yamada_m -! $Header: /home/cvsroot/LMDZ4/libf/phylmd/yamada.F,v 1.1 2004/06/22 11:45:36 -! lmdzadmin Exp $ - -SUBROUTINE yamada(ngrid, g, rconst, plev, temp, zlev, zlay, u, v, teta, q2, & - km, kn, ustar, l_mix) - USE dimens_m - USE dimphy IMPLICIT NONE - ! ....................................................................... - ! ....................................................................... - ! g : g - ! zlev : altitude a chaque niveau (interface inferieure de la couche - ! de meme indice) - ! zlay : altitude au centre de chaque couche - ! u,v : vitesse au centre de chaque couche - ! (en entree : la valeur au debut du pas de temps) - ! teta : temperature potentielle au centre de chaque couche - ! (en entree : la valeur au debut du pas de temps) - ! q2 : $q^2$ au bas de chaque couche - ! (en entree : la valeur au debut du pas de temps) - ! (en sortie : la valeur a la fin du pas de temps) - ! km : diffusivite turbulente de quantite de mouvement (au bas de chaque - ! couche) - ! (en sortie : la valeur a la fin du pas de temps) - ! kn : diffusivite turbulente des scalaires (au bas de chaque couche) - ! (en sortie : la valeur a la fin du pas de temps) - - ! ....................................................................... - REAL, INTENT (IN) :: g - REAL rconst - REAL plev(klon, klev+1), temp(klon, klev) - REAL ustar(klon), snstable - REAL zlev(klon, klev+1) - REAL zlay(klon, klev) - REAL u(klon, klev) - REAL v(klon, klev) - REAL teta(klon, klev) - REAL q2(klon, klev+1) - REAL km(klon, klev+1) - REAL kn(klon, klev+1) - INTEGER l_mix, ngrid - - - INTEGER nlay, nlev - PARAMETER (nlay=klev) - PARAMETER (nlev=klev+1) - - LOGICAL first - SAVE first - DATA first/.TRUE./ - - - INTEGER ig, k - - REAL ri, zrif, zalpha, zsm - REAL rif(klon, klev+1), sm(klon, klev+1), alpha(klon, klev) - - REAL m2(klon, klev+1), dz(klon, klev+1), zq, n2(klon, klev+1) - REAL l(klon, klev+1), l0(klon) - - REAL sq(klon), sqz(klon), zz(klon, klev+1) - INTEGER iter - - REAL ric, rifc, b1, kap - SAVE ric, rifc, b1, kap - DATA ric, rifc, b1, kap/0.195, 0.191, 16.6, 0.3/ - - REAL frif, falpha, fsm - - frif(ri) = 0.6588*(ri+0.1776-sqrt(ri*ri-0.3221*ri+0.03156)) - falpha(ri) = 1.318*(0.2231-ri)/(0.2341-ri) - fsm(ri) = 1.96*(0.1912-ri)*(0.2341-ri)/((1.-ri)*(0.2231-ri)) - - IF (0==1 .AND. first) THEN - DO ig = 1, 1000 - ri = (ig-800.)/500. - IF (ri