! $Header$ SUBROUTINE yamada(ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, & cd, q2, km, kn, ustar, l_mix) USE dimphy IMPLICIT NONE ! dt : pas de temps ! 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) ! cd : cdrag ! (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 dt, g, 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 cd(klon) REAL q2(klon, klev+1) REAL km(klon, klev+1) REAL kn(klon, klev+1) INTEGER l_mix, ngrid INTEGER nlay, nlev ! ym PARAMETER (nlay=klev) ! ym PARAMETER (nlev=klev+1) LOGICAL first SAVE first DATA first/.TRUE./ !$OMP THREADPRIVATE(first) 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/ !$OMP THREADPRIVATE(ric,rifc,b1,kap) 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)) nlay = klev nlev = klev + 1 IF (0==1 .AND. first) THEN DO ig = 1, 1000 ri = (ig-800.)/500. IF (ri