[2175] | 1 | SUBROUTINE bl_for_dms(u,v,paprs,pplay,cdragh,cdragm |
---|
| 2 | . ,t,q,tsol,ustar,obklen) |
---|
| 3 | USE dimphy |
---|
| 4 | IMPLICIT NONE |
---|
| 5 | c |
---|
| 6 | c=================================================================== |
---|
| 7 | c Auteur : E. Cosme |
---|
| 8 | c Calcul de la vitesse de friction (ustar) et de la longueur de |
---|
| 9 | c Monin-Obukhov (obklen), necessaires pour calculer les flux de DMS |
---|
| 10 | c par la methode de Nightingale. |
---|
| 11 | c Cette subroutine est plus que fortement inspiree de la subroutine |
---|
| 12 | c 'nonlocal' dans clmain.F . |
---|
| 13 | c reference : Holtslag, A.A.M., and B.A. Boville, 1993: |
---|
| 14 | c Local versus nonlocal boundary-layer diffusion in a global climate |
---|
| 15 | c model. J. of Climate, vol. 6, 1825-1842. (a confirmer) |
---|
| 16 | c 31 08 01 |
---|
| 17 | c=================================================================== |
---|
| 18 | c |
---|
| 19 | #include "dimensions.h" |
---|
| 20 | c #include "../phylmd/dimphy.h" |
---|
| 21 | #include "../phylmd/YOMCST.h" |
---|
| 22 | #include "../phylmd/YOETHF.h" |
---|
| 23 | #include "../phylmd/FCTTRE.h" |
---|
| 24 | c |
---|
| 25 | c Arguments : |
---|
| 26 | REAL u(klon,klev) ! vent zonal |
---|
| 27 | REAL v(klon,klev) ! vent meridien |
---|
| 28 | REAL paprs(klon,klev+1) ! niveaux de pression aux intercouches (Pa) |
---|
| 29 | REAL pplay(klon,klev) ! niveaux de pression aux milieux... (Pa) |
---|
| 30 | REAL cdragh(klon) ! coefficient de trainee pour la chaleur |
---|
| 31 | REAL cdragm(klon) ! coefficient de trainee pour le vent |
---|
| 32 | REAL t(klon,klev) ! temperature |
---|
| 33 | REAL q(klon,klev) ! humidite kg/kg |
---|
| 34 | REAL tsol(klon) ! temperature du sol |
---|
| 35 | REAL ustar(klon) ! vitesse de friction |
---|
| 36 | REAL obklen(klon) ! longueur de Monin-Obukhov |
---|
| 37 | c |
---|
| 38 | c Locales : |
---|
| 39 | REAL vk |
---|
| 40 | PARAMETER (vk=0.35) |
---|
| 41 | REAL beta ! coefficient d'evaporation reelle (/evapotranspiration) |
---|
| 42 | ! entre 0 et 1, mais 1 au-dessus de la mer |
---|
| 43 | PARAMETER (beta=1.) |
---|
| 44 | INTEGER i,k |
---|
| 45 | REAL zxt, zxu, zxv, zxq, zxqs, zxmod, taux, tauy |
---|
| 46 | REAL zcor, zdelta, zcvm5 |
---|
| 47 | REAL z(klon,klev) |
---|
| 48 | REAL zx_alf1, zx_alf2 ! parametres pour extrapolation |
---|
| 49 | REAL khfs(klon) ! surface kinematic heat flux [mK/s] |
---|
| 50 | REAL kqfs(klon) ! sfc kinematic constituent flux [m/s] |
---|
| 51 | REAL heatv(klon) ! surface virtual heat flux |
---|
| 52 | |
---|
| 53 | |
---|
| 54 | c |
---|
| 55 | c====================================================================== |
---|
| 56 | c |
---|
| 57 | c Calculer les hauteurs de chaque couche |
---|
| 58 | c |
---|
| 59 | r2es=611.14 *18.0153/28.9644 |
---|
| 60 | DO i = 1, klon |
---|
| 61 | z(i,1) = RD * t(i,1) / (0.5*(paprs(i,1)+pplay(i,1))) |
---|
| 62 | . * (paprs(i,1)-pplay(i,1)) / RG |
---|
| 63 | ENDDO |
---|
| 64 | DO k = 2, klev |
---|
| 65 | DO i = 1, klon |
---|
| 66 | z(i,k) = z(i,k-1) |
---|
| 67 | . + RD * 0.5*(t(i,k-1)+t(i,k)) / paprs(i,k) |
---|
| 68 | . * (pplay(i,k-1)-pplay(i,k)) / RG |
---|
| 69 | ENDDO |
---|
| 70 | ENDDO |
---|
| 71 | |
---|
| 72 | DO i = 1, klon |
---|
| 73 | c |
---|
| 74 | zdelta=MAX(0.,SIGN(1.,RTT-tsol(i))) |
---|
| 75 | zcvm5 = R5LES*RLVTT*(1.-zdelta) + R5IES*RLSTT*zdelta |
---|
| 76 | zcvm5 = zcvm5 / RCPD / (1.0+RVTMP2*q(i,1)) |
---|
| 77 | zxqs= r2es * FOEEW(tsol(i),zdelta)/paprs(i,1) |
---|
| 78 | zxqs=MIN(0.5,zxqs) |
---|
| 79 | zcor=1./(1.-retv*zxqs) |
---|
| 80 | zxqs=zxqs*zcor |
---|
| 81 | c |
---|
| 82 | zx_alf1 = 1.0 |
---|
| 83 | zx_alf2 = 1.0 - zx_alf1 |
---|
| 84 | zxt = (t(i,1)+z(i,1)*RG/RCPD/(1.+RVTMP2*q(i,1))) |
---|
| 85 | . *(1.+RETV*q(i,1))*zx_alf1 |
---|
| 86 | . + (t(i,2)+z(i,2)*RG/RCPD/(1.+RVTMP2*q(i,2))) |
---|
| 87 | . *(1.+RETV*q(i,2))*zx_alf2 |
---|
| 88 | zxu = u(i,1)*zx_alf1+u(i,2)*zx_alf2 |
---|
| 89 | zxv = v(i,1)*zx_alf1+v(i,2)*zx_alf2 |
---|
| 90 | zxq = q(i,1)*zx_alf1+q(i,2)*zx_alf2 |
---|
| 91 | zxmod = 1.0+SQRT(zxu**2+zxv**2) |
---|
| 92 | khfs(i) = (tsol(i)*(1.+RETV*q(i,1))-zxt) *zxmod*cdragh(i) |
---|
| 93 | kqfs(i) = (zxqs-zxq) *zxmod*cdragh(i) * beta |
---|
| 94 | heatv(i) = khfs(i) + 0.61*zxt*kqfs(i) |
---|
| 95 | taux = zxu *zxmod*cdragm(i) |
---|
| 96 | tauy = zxv *zxmod*cdragm(i) |
---|
| 97 | ustar(i) = SQRT(taux**2+tauy**2) |
---|
| 98 | ustar(i) = MAX(SQRT(ustar(i)),0.01) |
---|
| 99 | c |
---|
| 100 | ENDDO |
---|
| 101 | c |
---|
| 102 | DO i = 1, klon |
---|
| 103 | obklen(i) = -t(i,1)*ustar(i)**3/(RG*vk*heatv(i)) |
---|
| 104 | ENDDO |
---|
| 105 | c |
---|
| 106 | END SUBROUTINE |
---|