[3792] | 1 | subroutine SISVAT_TS2 |
---|
| 2 | c #ES. (ETSo_0,ETSo_1,ETSo_d) |
---|
| 3 | |
---|
| 4 | C +------------------------------------------------------------------------+ |
---|
| 5 | C | MAR SISVAT_TS2 Mon 16-08-2009 MAR | |
---|
| 6 | C | SubRoutine SISVAT_TS2 computes the Soil/Snow temperature and fluxes | |
---|
| 7 | C | using the same method as in LMDZ for consistency. | |
---|
| 8 | C | The corresponding LMDZ routines are soil (soil.F90) and calcul_fluxs | |
---|
| 9 | C | (calcul_fluxs_mod.F90). | |
---|
| 10 | C +------------------------------------------------------------------------+ |
---|
| 11 | C | | |
---|
| 12 | C | | |
---|
| 13 | C | PARAMETERS: klonv: Total Number of columns = | |
---|
| 14 | C | ^^^^^^^^^^ = Total Number of grid boxes of surface type | |
---|
| 15 | C | (land ice for now) | |
---|
| 16 | C | | |
---|
| 17 | C | INPUT: isnoSV = total Nb of Ice/Snow Layers | |
---|
| 18 | C | ^^^^^ sol_SV : Downward Solar Radiation [W/m2] | |
---|
| 19 | C | IRd_SV : Surface Downward Longwave Radiation [W/m2] | |
---|
| 20 | C | VV__SV : SBL Top Wind Speed [m/s] | |
---|
| 21 | C | TaT_SV : SBL Top Temperature [K] | |
---|
| 22 | C | QaT_SV : SBL Top Specific Humidity [kg/kg] | |
---|
| 23 | C | dzsnSV : Snow Layer Thickness [m] | |
---|
| 24 | C | dt__SV : Time Step [s] | |
---|
| 25 | C | | |
---|
| 26 | C | SoSosv : Absorbed Solar Radiation by Surfac.(Normaliz)[-] | |
---|
| 27 | C | Eso_sv : Soil+Snow Emissivity [-] | |
---|
| 28 | C | ? rah_sv : Aerodynamic Resistance for Heat [s/m] | |
---|
| 29 | C | | |
---|
| 30 | C | dz1_SV : "inverse" layer thickness (centered) [1/m] | |
---|
| 31 | C | dz2_SV : layer thickness (layer above (?)) [m] | |
---|
| 32 | C | AcoHSV : coefficient for Enthalpy evolution, from atm. | |
---|
| 33 | C | AcoHSV : coefficient for Enthalpy evolution, from atm. | |
---|
| 34 | C | AcoQSV : coefficient for Humidity evolution, from atm. | |
---|
| 35 | C | BcoQSV : coefficient for Humidity evolution, from atm. | |
---|
| 36 | C | ps__SV : surface pressure [Pa] | |
---|
| 37 | C | p1l_SV : 1st atmospheric layer pressure [Pa] | |
---|
| 38 | C | cdH_SV : drag coeff Energy (?) | |
---|
| 39 | C | rsolSV : Radiation balance surface [W/m2] | |
---|
| 40 | C | lambSV : Coefficient for soil layer geometry [-] | |
---|
| 41 | C | | |
---|
| 42 | C | INPUT / TsisSV : Soil/Ice Temperatures (layers -nsol,-nsol+1,..,0)| |
---|
| 43 | C | OUTPUT: & Snow Temperatures (layers 1,2,...,nsno) [K] | |
---|
| 44 | C | ^^^^^^ rsolSV : Radiation balance surface [W/m2] | |
---|
| 45 | C | | |
---|
| 46 | C | OUTPUT: IRs_SV : Soil IR Radiation [W/m2] | |
---|
| 47 | C | ^^^^^^ HSs_sv : Sensible Heat Flux [W/m2] | |
---|
| 48 | C | HLs_sv : Latent Heat Flux [W/m2] | |
---|
| 49 | C | TsfnSV : new surface temperature [K] | |
---|
| 50 | C | Evp_sv : Evaporation [kg/m2] | |
---|
| 51 | C | dSdTSV : Sensible Heat Flux temp. derivative [W/m2/K] | |
---|
| 52 | C | dLdTSV : Latent Heat Flux temp. derivative [W/m2/K] | |
---|
| 53 | C | | |
---|
| 54 | C | ? ETSo_0 : Snow/Soil Energy Power, before Forcing [W/m2] | |
---|
| 55 | C | ? ETSo_1 : Snow/Soil Energy Power, after Forcing [W/m2] | |
---|
| 56 | C | ? ETSo_d : Snow/Soil Energy Power Forcing [W/m2] | |
---|
| 57 | C | | |
---|
| 58 | C |________________________________________________________________________| |
---|
| 59 | |
---|
| 60 | USE VAR_SV |
---|
| 61 | USE VARdSV |
---|
| 62 | |
---|
| 63 | USE VARySV |
---|
| 64 | USE VARtSV |
---|
| 65 | USE VARxSV |
---|
| 66 | USE VARphy |
---|
| 67 | USE indice_sol_mod |
---|
| 68 | |
---|
| 69 | |
---|
| 70 | IMPLICIT NONE |
---|
| 71 | |
---|
| 72 | |
---|
| 73 | C +--Global Variables |
---|
| 74 | C + ================ |
---|
| 75 | |
---|
| 76 | INCLUDE "YOMCST.h" |
---|
| 77 | INCLUDE "YOETHF.h" |
---|
| 78 | INCLUDE "FCTTRE.h" |
---|
| 79 | ! INCLUDE "indicesol.h" |
---|
| 80 | INCLUDE "comsoil.h" |
---|
| 81 | ! include "LMDZphy.inc" |
---|
| 82 | |
---|
| 83 | C +--OUTPUT for Stand Alone NetCDF File |
---|
| 84 | C + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
| 85 | c #NC real*8 SOsoKL(klonv) ! Absorbed Solar Radiation |
---|
| 86 | c #NC real*8 IRsoKL(klonv) ! Absorbed IR Radiation |
---|
| 87 | c #NC real*8 HSsoKL(klonv) ! Absorbed Sensible Heat Flux |
---|
| 88 | c #NC real*8 HLsoKL(klonv) ! Absorbed Latent Heat Flux |
---|
| 89 | c #NC real*8 HLs_KL(klonv) ! Evaporation |
---|
| 90 | c #NC real*8 HLv_KL(klonv) ! Transpiration |
---|
| 91 | c #NC common/DumpNC/SOsoKL,IRsoKL |
---|
| 92 | c #NC . ,HSsoKL,HLsoKL |
---|
| 93 | c #NC . ,HLs_KL,HLv_KL |
---|
| 94 | |
---|
| 95 | C +--Internal Variables |
---|
| 96 | C + ================== |
---|
| 97 | |
---|
| 98 | integer ig,jk,isl |
---|
| 99 | real mu |
---|
| 100 | real Tsrf(klonv) ! surface temperature as extrapolated from soil |
---|
| 101 | real mug(klonv) !hj coef top layers |
---|
| 102 | real ztherm_i(klonv),zdz2(klonv,-nsol:nsno),z1s |
---|
| 103 | real pfluxgrd(klonv), pcapcal(klonv), cal(klonv) |
---|
| 104 | real beta(klonv), dif_grnd(klonv) |
---|
| 105 | real C_coef(klonv,-nsol:nsno),D_coef(klonv,-nsol:nsno) |
---|
| 106 | |
---|
| 107 | REAL, DIMENSION(klonv) :: zx_mh, zx_nh, zx_oh |
---|
| 108 | REAL, DIMENSION(klonv) :: zx_mq, zx_nq, zx_oq |
---|
| 109 | REAL, DIMENSION(klonv) :: zx_pkh, zx_dq_s_dt, zx_qsat, zx_coef |
---|
| 110 | REAL, DIMENSION(klonv) :: zx_sl, zx_k1 |
---|
| 111 | REAL, DIMENSION(klonv) :: d_ts |
---|
| 112 | REAL :: zdelta, zcvm5, zx_qs, zcor, zx_dq_s_dh |
---|
| 113 | REAL :: qsat_new, q1_new |
---|
| 114 | C REAL, PARAMETER :: t_grnd = 271.35, t_coup = 273.15 |
---|
| 115 | C REAL, PARAMETER :: max_eau_sol = 150.0 |
---|
| 116 | REAL, DIMENSION(klonv) :: IRs__D, dIRsdT |
---|
| 117 | |
---|
| 118 | |
---|
| 119 | REAL t_grnd ! not used |
---|
| 120 | parameter(t_grnd = 271.35) ! |
---|
| 121 | REAL t_coup ! distinguish evap/sublimation |
---|
| 122 | parameter(t_coup = 273.15) ! |
---|
| 123 | REAL max_eau_sol |
---|
| 124 | parameter(max_eau_sol = 150.0) |
---|
| 125 | |
---|
| 126 | |
---|
| 127 | ! write(*,*)'T check' |
---|
| 128 | ! |
---|
| 129 | ! DO ig = 1,knonv |
---|
| 130 | ! DO jk = 1,isnoSV(ig) !nsno |
---|
| 131 | ! IF (TsisSV(ig,jk) <= 1.) THEN !hj check |
---|
| 132 | ! TsisSV(ig,jk) = TsisSV(ig,isnoSV(ig)) |
---|
| 133 | ! ENDIF |
---|
| 134 | ! |
---|
| 135 | ! IF (TsisSV(ig,jk) <= 1.) THEN !hj check |
---|
| 136 | ! TsisSV(ig,jk) = 273.15 |
---|
| 137 | ! ENDIF |
---|
| 138 | ! END DO |
---|
| 139 | ! END DO |
---|
| 140 | |
---|
| 141 | C!======================================================================= |
---|
| 142 | C! I. First part: corresponds to soil.F90 in LMDZ |
---|
| 143 | C!======================================================================= |
---|
| 144 | |
---|
| 145 | DO ig = 1,knonv |
---|
| 146 | DO jk =1,isnoSV(ig) |
---|
| 147 | dz2_SV(ig,jk)=dzsnSV(ig,jk) |
---|
| 148 | C! use arithmetic center between layers to derive dz1 for snow layers for simplicity: |
---|
| 149 | dz1_SV(ig,jk)=2./(dzsnSV(ig,jk)+dzsnSV(ig,jk-1)) |
---|
| 150 | ENDDO |
---|
| 151 | ENDDO |
---|
| 152 | |
---|
| 153 | DO ig = 1,knonv |
---|
| 154 | ztherm_i(ig) = inertie_lic |
---|
| 155 | IF (isnoSV(ig) > 0) ztherm_i(ig) = inertie_sno |
---|
| 156 | ENDDO |
---|
| 157 | |
---|
| 158 | C!----------------------------------------------------------------------- |
---|
| 159 | C! 1) |
---|
| 160 | C! Calculation of Cgrf and Dgrd coefficients using soil temperature from |
---|
| 161 | C! previous time step. |
---|
| 162 | C! |
---|
| 163 | C! These variables are recalculated on the local compressed grid instead |
---|
| 164 | C! of saved in restart file. |
---|
| 165 | C!----------------------------------------------------------------------- |
---|
| 166 | DO ig=1,knonv |
---|
| 167 | DO jk=-nsol,nsno |
---|
| 168 | zdz2(ig,jk)=dz2_SV(ig,jk)/dt__SV !ptimestep |
---|
| 169 | ENDDO |
---|
| 170 | ENDDO |
---|
| 171 | |
---|
| 172 | DO ig=1,knonv |
---|
| 173 | z1s = zdz2(ig,-nsol)+dz1_SV(ig,-nsol+1) |
---|
| 174 | C_coef(ig,-nsol+1)=zdz2(ig,-nsol)*TsisSV(ig,-nsol)/z1s |
---|
| 175 | D_coef(ig,-nsol+1)=dz1_SV(ig,-nsol+1)/z1s |
---|
| 176 | ENDDO |
---|
| 177 | |
---|
| 178 | DO ig=1,knonv |
---|
| 179 | DO jk=-nsol+1,isnoSV(ig)-1,1 |
---|
| 180 | z1s = 1./(zdz2(ig,jk)+dz1_SV(ig,jk+1)+dz1_SV(ig,jk) & |
---|
| 181 | & *(1.-D_coef(ig,jk))) |
---|
| 182 | C_coef(ig,jk+1)= & |
---|
| 183 | & (TsisSV(ig,jk)*zdz2(ig,jk) & |
---|
| 184 | & +dz1_SV(ig,jk)*C_coef(ig,jk)) * z1s |
---|
| 185 | D_coef(ig,jk+1)=dz1_SV(ig,jk+1)*z1s |
---|
| 186 | ENDDO |
---|
| 187 | ENDDO |
---|
| 188 | |
---|
| 189 | C!----------------------------------------------------------------------- |
---|
| 190 | C! 2) |
---|
| 191 | C! Computation of the soil temperatures using the Cgrd and Dgrd |
---|
| 192 | C! coefficient computed above |
---|
| 193 | C! |
---|
| 194 | C!----------------------------------------------------------------------- |
---|
| 195 | C! Extrapolate surface Temperature !hj check |
---|
| 196 | mu=1./((2.**1.5-1.)/(2.**(0.5)-1.)-1.) |
---|
| 197 | |
---|
| 198 | ! IF (knonv>0) THEN |
---|
| 199 | ! DO ig=1,8 |
---|
| 200 | ! write(*,*)ig,'sisvat: Tsis ',TsisSV(ig,isnoSV(ig)) |
---|
| 201 | ! write(*,*)'max-1 ',TsisSV(ig,isnoSV(ig)-1) |
---|
| 202 | ! write(*,*)'max-2 ',TsisSV(ig,isnoSV(ig)-2) |
---|
| 203 | ! write(*,*)'0 ',TsisSV(ig,0) |
---|
| 204 | !! write(*,*)min(max(isnoSV(ig),0),1),max(1-isnoSV(ig),0) |
---|
| 205 | ! ENDDO |
---|
| 206 | ! END IF |
---|
| 207 | |
---|
| 208 | DO ig=1,knonv |
---|
| 209 | IF (isnoSV(ig).GT.0) THEN |
---|
| 210 | IF (isnoSV(ig).GT.1) THEN |
---|
| 211 | mug(ig)=1./(1.+dzsnSV(ig,isnoSV(ig)-1)/dzsnSV(ig,isnoSV(ig))) !mu |
---|
| 212 | ELSE |
---|
| 213 | mug(ig) = 1./(1.+dzsnSV(ig,isnoSV(ig)-1)/dz_dSV(0)) !mu |
---|
| 214 | ENDIF |
---|
| 215 | ELSE |
---|
| 216 | mug(ig) = lambSV |
---|
| 217 | ENDIF |
---|
| 218 | |
---|
| 219 | IF (mug(ig) .LE. 0.05) THEN |
---|
| 220 | write(*,*)'Attention mu low', mug(ig) |
---|
| 221 | ENDIF |
---|
| 222 | IF (mug(ig) .GE. 0.98) THEN |
---|
| 223 | write(*,*)'Attention mu high', mug(ig) |
---|
| 224 | ENDIF |
---|
| 225 | |
---|
| 226 | Tsrf(ig)=(1.5*TsisSV(ig,isnoSV(ig))-0.5*TsisSV(ig,isnoSV(ig)-1))& |
---|
| 227 | & *min(max(isnoSV(ig),0),1)+ & |
---|
| 228 | & ((mug(ig)+1)*TsisSV(ig,0)-mug(ig)*TsisSV(ig,-1)) & |
---|
| 229 | & *max(1-isnoSV(ig),0) |
---|
| 230 | ENDDO |
---|
| 231 | |
---|
| 232 | |
---|
| 233 | |
---|
| 234 | C! Surface temperature |
---|
| 235 | DO ig=1,knonv |
---|
| 236 | TsisSV(ig,isnoSV(ig))=(mug(ig)*C_coef(ig,isnoSV(ig))+Tsf_SV(ig))/ & |
---|
| 237 | & (mug(ig)*(1.-D_coef(ig,isnoSV(ig)))+1.) |
---|
| 238 | ENDDO |
---|
| 239 | |
---|
| 240 | C! Other temperatures |
---|
| 241 | DO ig=1,knonv |
---|
| 242 | DO jk=isnoSV(ig),-nsol+1,-1 |
---|
| 243 | TsisSV(ig,jk-1)=C_coef(ig,jk)+D_coef(ig,jk) & |
---|
| 244 | & *TsisSV(ig,jk) |
---|
| 245 | ENDDO |
---|
| 246 | ENDDO |
---|
| 247 | C write(*,*)ig,'Tsis',TsisSV(ig,0) |
---|
| 248 | |
---|
| 249 | C IF (indice == is_sic) THEN |
---|
| 250 | C DO ig = 1,knonv |
---|
| 251 | C TsisSV(ig,-nsol) = RTT - 1.8 |
---|
| 252 | C END DO |
---|
| 253 | C ENDIF |
---|
| 254 | |
---|
| 255 | CC !hj new 11 03 2010 |
---|
| 256 | DO ig=1,knonv |
---|
| 257 | isl = isnoSV(ig) |
---|
| 258 | C dIRsdT(ig) = Eso_sv(ig)* SteBo * 4. & ! - d(IR)/d(T) |
---|
| 259 | C & * Tsf_SV(ig) & !T TsisSV(ig,isl) ! |
---|
| 260 | C & * Tsf_SV(ig) & !TsisSV(ig,isl) ! |
---|
| 261 | C & * Tsf_SV(ig) !TsisSV(ig,isl) ! |
---|
| 262 | C IRs__D(ig) = dIRsdT(ig)* Tsf_SV(ig) * 0.75 !TsisSV(ig,isl) * 0.75 !: |
---|
| 263 | dIRsdT(ig) = Eso_sv(ig)* StefBo * 4. & ! - d(IR)/d(T) |
---|
| 264 | & * TsisSV(ig,isl) & ! |
---|
| 265 | & * TsisSV(ig,isl) & ! |
---|
| 266 | & * TsisSV(ig,isl) & ! |
---|
| 267 | IRs__D(ig) = dIRsdT(ig)* TsisSV(ig,isl) * 0.75 !: |
---|
| 268 | END DO |
---|
| 269 | !hj |
---|
| 270 | C!----------------------------------------------------------------------- |
---|
| 271 | C! 3) |
---|
| 272 | C! Calculate the Cgrd and Dgrd coefficient corresponding to actual soil |
---|
| 273 | C! temperature |
---|
| 274 | C!----------------------------------------------------------------------- |
---|
| 275 | DO ig=1,knonv |
---|
| 276 | z1s = zdz2(ig,-nsol)+dz1_SV(ig,-nsol+1) |
---|
| 277 | C_coef(ig,-nsol+1) = zdz2(ig,-nsol)*TsisSV(ig,-nsol)/z1s |
---|
| 278 | D_coef(ig,-nsol+1) = dz1_SV(ig,-nsol+1)/z1s |
---|
| 279 | ENDDO |
---|
| 280 | |
---|
| 281 | DO ig=1,knonv |
---|
| 282 | DO jk=-nsol+1,isnoSV(ig)-1,1 |
---|
| 283 | z1s = 1./(zdz2(ig,jk)+dz1_SV(ig,jk+1)+dz1_SV(ig,jk) & |
---|
| 284 | & *(1.-D_coef(ig,jk))) |
---|
| 285 | C_coef(ig,jk+1) = (TsisSV(ig,jk)*zdz2(ig,jk)+ & |
---|
| 286 | & dz1_SV(ig,jk)*C_coef(ig,jk)) * z1s |
---|
| 287 | D_coef(ig,jk+1) = dz1_SV(ig,jk+1)*z1s |
---|
| 288 | ENDDO |
---|
| 289 | ENDDO |
---|
| 290 | |
---|
| 291 | C!----------------------------------------------------------------------- |
---|
| 292 | C! 4) |
---|
| 293 | C! Computation of the surface diffusive flux from ground and |
---|
| 294 | C! calorific capacity of the ground |
---|
| 295 | C!----------------------------------------------------------------------- |
---|
| 296 | DO ig=1,knonv |
---|
| 297 | C! (pfluxgrd) |
---|
| 298 | pfluxgrd(ig) = ztherm_i(ig)*dz1_SV(ig,isnoSV(ig))* & |
---|
| 299 | & (C_coef(ig,isnoSV(ig))+(D_coef(ig,isnoSV(ig))-1.) & |
---|
| 300 | & *TsisSV(ig,isnoSV(ig))) |
---|
| 301 | C! (pcapcal) |
---|
| 302 | pcapcal(ig) = ztherm_i(ig)* & |
---|
| 303 | & (dz2_SV(ig,isnoSV(ig))+dt__SV*(1.-D_coef(ig,isnoSV(ig))) & |
---|
| 304 | & *dz1_SV(ig,isnoSV(ig))) |
---|
| 305 | z1s = mug(ig)*(1.-D_coef(ig,isnoSV(ig)))+1. |
---|
| 306 | pcapcal(ig) = pcapcal(ig)/z1s |
---|
| 307 | pfluxgrd(ig) = ( pfluxgrd(ig) & |
---|
| 308 | & + pcapcal(ig) * (TsisSV(ig,isnoSV(ig)) * z1s & |
---|
| 309 | & - mug(ig)* C_coef(ig,isnoSV(ig)) & |
---|
| 310 | & - Tsf_SV(ig)) /dt__SV ) |
---|
| 311 | ENDDO |
---|
| 312 | |
---|
| 313 | |
---|
| 314 | cal(1:knonv) = RCPD / pcapcal(1:knonv) |
---|
| 315 | rsolSV(1:knonv) = rsolSV(1:knonv) + pfluxgrd(1:knonv) |
---|
| 316 | C!======================================================================= |
---|
| 317 | C! II. Second part: corresponds to calcul_fluxs_mod.F90 in LMDZ |
---|
| 318 | C!======================================================================= |
---|
| 319 | |
---|
| 320 | Evp_sv = 0. |
---|
| 321 | c #NC HSsoKL=0. |
---|
| 322 | c #NC HLsoKL=0. |
---|
| 323 | dSdTSV = 0. |
---|
| 324 | dLdTSV = 0. |
---|
| 325 | |
---|
| 326 | beta(:) = 1.0 |
---|
| 327 | dif_grnd(:) = 0.0 |
---|
| 328 | |
---|
| 329 | C! zx_qs = qsat en kg/kg |
---|
| 330 | C!**********************************************************************x*************** |
---|
| 331 | |
---|
| 332 | DO ig = 1,knonv |
---|
| 333 | IF (ps__SV(ig).LT.1.) THEN |
---|
| 334 | ! write(*,*)'ig',ig,'ps',ps__SV(ig) |
---|
| 335 | ps__SV(ig)=max(ps__SV(ig),1.e-8) |
---|
| 336 | ENDIF |
---|
| 337 | IF (p1l_SV(ig).LT.1.) THEN |
---|
| 338 | ! write(*,*)'ig',ig,'p1l',p1l_SV(ig) |
---|
| 339 | p1l_SV(ig)=max(p1l_SV(ig),1.e-8) |
---|
| 340 | ENDIF |
---|
| 341 | IF (TaT_SV(ig).LT.180.) THEN |
---|
| 342 | ! write(*,*)'ig',ig,'TaT',TaT_SV(ig) |
---|
| 343 | TaT_SV(ig)=max(TaT_SV(ig),180.) |
---|
| 344 | ENDIF |
---|
| 345 | IF (QaT_SV(ig).LT.1.e-8) THEN |
---|
| 346 | ! write(*,*)'ig',ig,'QaT',QaT_SV(ig) |
---|
| 347 | QaT_SV(ig)=max(QaT_SV(ig),1.e-8) |
---|
| 348 | ENDIF |
---|
| 349 | IF (Tsf_SV(ig).LT.100.) THEN |
---|
| 350 | ! write(*,*)'ig',ig,'Tsf',Tsf_SV(ig) |
---|
| 351 | Tsf_SV(ig)=max(Tsf_SV(ig),180.) |
---|
| 352 | ENDIF |
---|
| 353 | IF (Tsf_SV(ig).GT.500.) THEN |
---|
| 354 | ! write(*,*)'ig',ig,'Tsf',Tsf_SV(ig) |
---|
| 355 | Tsf_SV(ig)=min(Tsf_SV(ig),400.) |
---|
| 356 | ENDIF |
---|
| 357 | ! IF (Tsrf(ig).LT.1.) THEN |
---|
| 358 | !! write(*,*)'ig',ig,'Tsrf',Tsrf(ig) |
---|
| 359 | ! Tsrf(ig)=max(Tsrf(ig),TaT_SV(ig)-20.) |
---|
| 360 | ! ENDIF |
---|
| 361 | IF (cdH_SV(ig).LT.1.e-10) THEN |
---|
| 362 | ! IF (ig.le.3) write(*,*)'ig',ig,'cdH',cdH_SV(ig) |
---|
| 363 | cdH_SV(ig)=.5 |
---|
| 364 | ENDIF |
---|
| 365 | ENDDO |
---|
| 366 | |
---|
| 367 | |
---|
| 368 | DO ig = 1,knonv |
---|
| 369 | zx_pkh(ig) = 1. ! (ps__SV(ig)/ps__SV(ig))**RKAPPA |
---|
| 370 | IF (thermcep) THEN |
---|
| 371 | zdelta=MAX(0.,SIGN(1.,rtt-Tsf_SV(ig))) |
---|
| 372 | zcvm5 = R5LES*LhvH2O*(1.-zdelta) + R5IES*LhsH2O*zdelta |
---|
| 373 | zcvm5 = zcvm5 / RCPD / (1.0+RVTMP2*QaT_SV(ig)) |
---|
| 374 | zx_qs= r2es * FOEEW(Tsf_SV(ig),zdelta)/ps__SV(ig) |
---|
| 375 | zx_qs=MIN(0.5,zx_qs) |
---|
| 376 | !write(*,*)'zcor',retv*zx_qs |
---|
| 377 | zcor=1./(1.-retv*zx_qs) |
---|
| 378 | zx_qs=zx_qs*zcor |
---|
| 379 | zx_dq_s_dh = FOEDE(Tsf_SV(ig),zdelta,zcvm5,zx_qs,zcor) & |
---|
| 380 | & /LhvH2O / zx_pkh(ig) |
---|
| 381 | ELSE |
---|
| 382 | IF (Tsf_SV(ig).LT.t_coup) THEN |
---|
| 383 | zx_qs = qsats(Tsf_SV(ig)) / ps__SV(ig) |
---|
| 384 | zx_dq_s_dh = dqsats(Tsf_SV(ig),zx_qs)/LhvH2O & |
---|
| 385 | & / zx_pkh(ig) |
---|
| 386 | ELSE |
---|
| 387 | zx_qs = qsatl(Tsf_SV(ig)) / ps__SV(ig) |
---|
| 388 | zx_dq_s_dh = dqsatl(Tsf_SV(ig),zx_qs)/LhvH2O & |
---|
| 389 | & / zx_pkh(ig) |
---|
| 390 | ENDIF |
---|
| 391 | ENDIF |
---|
| 392 | zx_dq_s_dt(ig) = RCPD * zx_pkh(ig) * zx_dq_s_dh |
---|
| 393 | zx_qsat(ig) = zx_qs |
---|
| 394 | C zx_coef(ig) = cdH_SV(ig) * & |
---|
| 395 | C & (1.0+SQRT(u1lay(ig)**2+v1lay(ig)**2)) * & |
---|
| 396 | C & p1l_SV(ig)/(RD*t1lay(ig)) |
---|
| 397 | zx_coef(ig) = cdH_SV(ig) * & |
---|
| 398 | & (1.0+VV__SV(ig)) * & |
---|
| 399 | & p1l_SV(ig)/(RD*TaT_SV(ig)) |
---|
| 400 | |
---|
| 401 | ENDDO |
---|
| 402 | |
---|
| 403 | |
---|
| 404 | C! === Calcul de la temperature de surface === |
---|
| 405 | C! zx_sl = chaleur latente d'evaporation ou de sublimation |
---|
| 406 | C!**************************************************************************************** |
---|
| 407 | |
---|
| 408 | DO ig = 1,knonv |
---|
| 409 | zx_sl(ig) = LhvH2O |
---|
| 410 | IF (Tsf_SV(ig) .LT. RTT) zx_sl(ig) = LhsH2O |
---|
| 411 | zx_k1(ig) = zx_coef(ig) |
---|
| 412 | ENDDO |
---|
| 413 | |
---|
| 414 | |
---|
| 415 | DO ig = 1,knonv |
---|
| 416 | C! Q |
---|
| 417 | zx_oq(ig) = 1. - (beta(ig) * zx_k1(ig) * BcoQSV(ig) * dt__SV) |
---|
| 418 | zx_mq(ig) = beta(ig) * zx_k1(ig) * & |
---|
| 419 | & (AcoQSV(ig) - zx_qsat(ig) + & |
---|
| 420 | & zx_dq_s_dt(ig) * Tsf_SV(ig)) & |
---|
| 421 | & / zx_oq(ig) |
---|
| 422 | zx_nq(ig) = beta(ig) * zx_k1(ig) * (-1. * zx_dq_s_dt(ig)) & |
---|
| 423 | & / zx_oq(ig) |
---|
| 424 | |
---|
| 425 | C! H |
---|
| 426 | zx_oh(ig) = 1. - (zx_k1(ig) * BcoHSV(ig) * dt__SV) |
---|
| 427 | zx_mh(ig) = zx_k1(ig) * AcoHSV(ig) / zx_oh(ig) |
---|
| 428 | zx_nh(ig) = - (zx_k1(ig) * RCPD * zx_pkh(ig))/ zx_oh(ig) |
---|
| 429 | |
---|
| 430 | C! surface temperature |
---|
| 431 | TsfnSV(ig) = (Tsf_SV(ig) + cal(ig)/RCPD * zx_pkh(ig) * dt__SV * & |
---|
| 432 | & (rsolSV(ig) + zx_mh(ig) + zx_sl(ig) * zx_mq(ig)) & |
---|
| 433 | & + dif_grnd(ig) * t_grnd * dt__SV)/ & |
---|
| 434 | & ( 1. - dt__SV * cal(ig)/(RCPD * zx_pkh(ig)) * & |
---|
| 435 | & (zx_nh(ig) + zx_sl(ig) * zx_nq(ig)) & |
---|
| 436 | & + dt__SV * dif_grnd(ig)) |
---|
| 437 | |
---|
| 438 | !hj rajoute 22 11 2010 tuning... |
---|
| 439 | TsfnSV(ig) = min(RTT+0.02,TsfnSV(ig)) |
---|
| 440 | |
---|
| 441 | d_ts(ig) = TsfnSV(ig) - Tsf_SV(ig) |
---|
| 442 | |
---|
| 443 | |
---|
| 444 | C!== flux_q est le flux de vapeur d'eau: kg/(m**2 s) positive vers bas |
---|
| 445 | C!== flux_t est le flux de cpt (energie sensible): j/(m**2 s) |
---|
| 446 | Evp_sv(ig) = - zx_mq(ig) - zx_nq(ig) * TsfnSV(ig) |
---|
| 447 | HLs_sv(ig) = - Evp_sv(ig) * zx_sl(ig) |
---|
| 448 | HSs_sv(ig) = zx_mh(ig) + zx_nh(ig) * TsfnSV(ig) |
---|
| 449 | |
---|
| 450 | C! Derives des flux dF/dTs (W m-2 K-1): |
---|
| 451 | dSdTSV(ig) = zx_nh(ig) |
---|
| 452 | dLdTSV(ig) = zx_sl(ig) * zx_nq(ig) |
---|
| 453 | |
---|
| 454 | |
---|
| 455 | !hj new 11 03 2010 |
---|
| 456 | isl = isnoSV(ig) |
---|
| 457 | ! TsisSV(ig,isl) = TsfnSV(ig) |
---|
| 458 | IRs_SV(ig) = IRs__D(ig) &! |
---|
| 459 | & - dIRsdT(ig) * TsfnSV(ig) !TsisSV(ig,isl)? ! |
---|
| 460 | |
---|
| 461 | ! hj |
---|
| 462 | c #NC SOsoKL(ig) = sol_SV(ig) * SoSosv(ig) ! Absorbed Sol. |
---|
| 463 | c #NC IRsoKL(ig) = IRs_SV(ig) & !Up Surf. IR |
---|
| 464 | c #NC& + tau_sv(ig) *IRd_SV(ig)*Eso_sv(ig) & !Down Atm IR |
---|
| 465 | c #NC& -(1.0-tau_sv(ig)) *0.5*IRv_sv(ig) ! Down Veg IR |
---|
| 466 | c #NC HLsoKL(ig) = HLs_sv(ig) |
---|
| 467 | c #NC HSsoKL(ig) = HSs_sv(ig) |
---|
| 468 | c #NC HLs_KL(ig) = Evp_sv(ig) |
---|
| 469 | |
---|
| 470 | C! Nouvelle valeure de l'humidite au dessus du sol |
---|
| 471 | qsat_new=zx_qsat(ig) + zx_dq_s_dt(ig) * d_ts(ig) |
---|
| 472 | q1_new = AcoQSV(ig) - BcoQSV(ig)* Evp_sv(ig)*dt__SV |
---|
| 473 | QaT_SV(ig)=q1_new*(1.-beta(ig)) + beta(ig)*qsat_new |
---|
| 474 | |
---|
| 475 | ENDDO |
---|
| 476 | |
---|
| 477 | end ! subroutine SISVAT_TS2 |
---|