[3489] | 1 | SUBROUTINE borne_var_surf(klon,klev,nbsrf, & |
---|
| 2 | iflag_bug_t2m_stab_ipslcm61, & |
---|
| 3 | t1,q1,u1,v1, & |
---|
| 4 | ftsol, qsurf, pctsrf, paprs, & |
---|
| 5 | t2m, q2m, u10m, v10m, & |
---|
| 6 | zt2m_cor, zq2m_cor, zu10m_cor, zv10m_cor, & |
---|
| 7 | zrh2m_cor, zqsat2m_cor) |
---|
| 8 | |
---|
[5274] | 9 | USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO & |
---|
| 10 | , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA & |
---|
| 11 | , R_ecc, R_peri, R_incl & |
---|
| 12 | , RA, RG, R1SA & |
---|
| 13 | , RSIGMA & |
---|
| 14 | , R, RMD, RMV, RD, RV, RCPD & |
---|
| 15 | , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12 & |
---|
| 16 | , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w & |
---|
| 17 | , RCW, RCS & |
---|
| 18 | , RLVTT, RLSTT, RLMLT, RTT, RATM & |
---|
| 19 | , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS & |
---|
| 20 | , RALPD, RBETD, RGAMD |
---|
[3489] | 21 | IMPLICIT NONE |
---|
| 22 | |
---|
| 23 | !================================================================== |
---|
| 24 | ! Declarations |
---|
| 25 | !================================================================== |
---|
| 26 | |
---|
| 27 | ! arguments |
---|
| 28 | INTEGER klon,klev,nbsrf,iflag_bug_t2m_stab_ipslcm61 |
---|
| 29 | REAL,DIMENSION(klon),INTENT(IN) :: t1, q1, u1, v1 |
---|
| 30 | REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: t2m, q2m, u10m, v10m |
---|
| 31 | REAL,DIMENSION(klon,nbsrf),INTENT(IN) :: ftsol, pctsrf |
---|
[5274] | 32 | REAL,DIMENSION(klon,klev+1),INTENT(IN) :: paprs |
---|
[3489] | 33 | REAL,DIMENSION(klon),INTENT(IN) :: qsurf |
---|
| 34 | REAL,DIMENSION (klon),INTENT(OUT) :: zt2m_cor, zq2m_cor, zu10m_cor, zv10m_cor |
---|
| 35 | REAL,DIMENSION (klon),INTENT(OUT) :: zrh2m_cor, zqsat2m_cor |
---|
| 36 | |
---|
| 37 | |
---|
| 38 | ! local |
---|
| 39 | INTEGER i,nsrf |
---|
| 40 | REAL,DIMENSION (klon,nbsrf) :: t2m_cor, q2m_cor, u10m_cor, v10m_cor |
---|
| 41 | REAL :: zx_qs1, zcor1, zdelta1 |
---|
[5274] | 42 | |
---|
[3489] | 43 | include "YOETHF.h" |
---|
| 44 | include "FCTTRE.h" |
---|
| 45 | !================================================================== |
---|
| 46 | ! Correction of sub surface variables |
---|
| 47 | !================================================================== |
---|
| 48 | |
---|
| 49 | zrh2m_cor=0. |
---|
| 50 | zqsat2m_cor=0. |
---|
| 51 | |
---|
| 52 | DO nsrf=1,nbsrf |
---|
| 53 | DO i=1,klon |
---|
| 54 | t2m_cor(i,nsrf)=t2m(i,nsrf) |
---|
| 55 | q2m_cor(i,nsrf)=q2m(i,nsrf) |
---|
| 56 | u10m_cor(i,nsrf)=u10m(i,nsrf) |
---|
| 57 | v10m_cor(i,nsrf)=v10m(i,nsrf) |
---|
| 58 | IF(iflag_bug_t2m_stab_ipslcm61.EQ.-2.AND.q2m(i,nsrf).LT.0.) THEN |
---|
| 59 | t2m_cor(i,nsrf)=MIN(t2m(i,nsrf),MAX(t1(i),ftsol(i,nsrf))) |
---|
| 60 | t2m_cor(i,nsrf)=MAX(t2m_cor(i,nsrf),MIN(t1(i),ftsol(i,nsrf))) |
---|
| 61 | q2m_cor(i,nsrf)=MIN(q2m(i,nsrf),MAX(q1(i),qsurf(i))) |
---|
| 62 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),MIN(q1(i),qsurf(i))) |
---|
| 63 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),0.) |
---|
| 64 | u10m_cor(i,nsrf)=SIGN(MIN(ABS(u1(i)),ABS(u10m(i,nsrf))),u1(i)) |
---|
| 65 | v10m_cor(i,nsrf)=SIGN(MIN(ABS(v1(i)),ABS(v10m(i,nsrf))),v1(i)) |
---|
| 66 | ELSEIF(iflag_bug_t2m_stab_ipslcm61.EQ.-1.AND.(ftsol(i,nsrf).LE.t1(i).OR.q2m(i,nsrf).LT.0.)) THEN |
---|
| 67 | t2m_cor(i,nsrf)=MIN(t2m(i,nsrf),MAX(t1(i),ftsol(i,nsrf))) |
---|
| 68 | t2m_cor(i,nsrf)=MAX(t2m_cor(i,nsrf),MIN(t1(i),ftsol(i,nsrf))) |
---|
| 69 | q2m_cor(i,nsrf)=MIN(q2m(i,nsrf),MAX(q1(i),qsurf(i))) |
---|
| 70 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),MIN(q1(i),qsurf(i))) |
---|
| 71 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),0.) |
---|
| 72 | u10m_cor(i,nsrf)=SIGN(MIN(ABS(u1(i)),ABS(u10m(i,nsrf))),u1(i)) |
---|
| 73 | v10m_cor(i,nsrf)=SIGN(MIN(ABS(v1(i)),ABS(v10m(i,nsrf))),v1(i)) |
---|
| 74 | ELSEIF(iflag_bug_t2m_stab_ipslcm61.EQ.1.AND.ftsol(i,nsrf).LE.t1(i)) THEN |
---|
| 75 | t2m_cor(i,nsrf)=MIN(t2m(i,nsrf),MAX(t1(i),ftsol(i,nsrf))) |
---|
| 76 | t2m_cor(i,nsrf)=MAX(t2m_cor(i,nsrf),MIN(t1(i),ftsol(i,nsrf))) |
---|
| 77 | q2m_cor(i,nsrf)=MIN(q2m(i,nsrf),MAX(q1(i),qsurf(i))) |
---|
| 78 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),MIN(q1(i),qsurf(i))) |
---|
| 79 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),0.) |
---|
| 80 | u10m_cor(i,nsrf)=SIGN(MIN(ABS(u1(i)),ABS(u10m(i,nsrf))),u1(i)) |
---|
| 81 | v10m_cor(i,nsrf)=SIGN(MIN(ABS(v1(i)),ABS(v10m(i,nsrf))),v1(i)) |
---|
| 82 | ELSEIF(iflag_bug_t2m_stab_ipslcm61.EQ.0) THEN |
---|
| 83 | t2m_cor(i,nsrf)=MIN(t2m(i,nsrf),MAX(t1(i),ftsol(i,nsrf))) |
---|
| 84 | t2m_cor(i,nsrf)=MAX(t2m_cor(i,nsrf),MIN(t1(i),ftsol(i,nsrf))) |
---|
| 85 | q2m_cor(i,nsrf)=MIN(q2m(i,nsrf),MAX(q1(i),qsurf(i))) |
---|
| 86 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),MIN(q1(i),qsurf(i))) |
---|
| 87 | q2m_cor(i,nsrf)=MAX(q2m_cor(i,nsrf),0.) |
---|
| 88 | u10m_cor(i,nsrf)=SIGN(MIN(ABS(u1(i)),ABS(u10m(i,nsrf))),u1(i)) |
---|
| 89 | v10m_cor(i,nsrf)=SIGN(MIN(ABS(v1(i)),ABS(v10m(i,nsrf))),v1(i)) |
---|
| 90 | ENDIF |
---|
| 91 | !!! |
---|
| 92 | zdelta1 = MAX(0.,SIGN(1., rtt-t2m_cor(i,nsrf) )) |
---|
| 93 | zx_qs1 = r2es * FOEEW(t2m_cor(i,nsrf),zdelta1)/paprs(i,1) |
---|
| 94 | zx_qs1 = MIN(0.5,zx_qs1) |
---|
| 95 | zcor1 = 1./(1.-RETV*zx_qs1) |
---|
| 96 | zx_qs1 = zx_qs1*zcor1 |
---|
| 97 | zrh2m_cor(i) = zrh2m_cor(i) + q2m_cor(i,nsrf)/zx_qs1 * pctsrf(i,nsrf) |
---|
| 98 | zqsat2m_cor(i) = zqsat2m_cor(i) + zx_qs1 * pctsrf(i,nsrf) |
---|
| 99 | !!! |
---|
| 100 | ENDDO |
---|
| 101 | ENDDO |
---|
| 102 | |
---|
| 103 | !================================================================== |
---|
| 104 | ! Agregation of sub surfaces |
---|
| 105 | !================================================================== |
---|
| 106 | |
---|
| 107 | zt2m_cor=0. |
---|
| 108 | zq2m_cor=0. |
---|
| 109 | zu10m_cor=0. |
---|
| 110 | zv10m_cor=0. |
---|
| 111 | DO nsrf = 1, nbsrf |
---|
| 112 | DO i = 1, klon |
---|
| 113 | zt2m_cor(i) = zt2m_cor(i) + t2m_cor(i,nsrf) * pctsrf(i,nsrf) |
---|
| 114 | zq2m_cor(i) = zq2m_cor(i) + q2m_cor(i,nsrf) * pctsrf(i,nsrf) |
---|
| 115 | zu10m_cor(i) = zu10m_cor(i) + u10m_cor(i,nsrf) * pctsrf(i,nsrf) |
---|
| 116 | zv10m_cor(i) = zv10m_cor(i) + v10m_cor(i,nsrf) * pctsrf(i,nsrf) |
---|
| 117 | ENDDO |
---|
| 118 | ENDDO |
---|
| 119 | |
---|
| 120 | RETURN |
---|
| 121 | END |
---|
| 122 | |
---|
| 123 | |
---|