Changeset 3267 for trunk/LMDZ.GENERIC
- Timestamp:
- Mar 13, 2024, 5:50:44 PM (9 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/phystd/hydrol.F90
r3266 r3267 28 28 ! ------- 29 29 ! Calculate the surface hydrology and albedo changes. 30 ! Both for oceanic and continental regions 30 31 ! 31 32 ! Authors … … 109 110 !$OMP THREADPRIVATE(firstcall) 110 111 111 real :: runoffamount(ngrid)112 real :: runoffamount(ngrid) 112 113 !#ifdef CPP_PARA 113 114 real :: runoffamount_glo(klon_glo) … … 130 131 call getin_p("activerunoff",activerunoff) 131 132 write(*,*)" activerunoff = ",activerunoff 132 133 134 133 135 134 if (activerunoff) then … … 197 196 do ig = 1, ngrid 198 197 199 ! Ocean 200 ! ----- 198 ! Ocean regions (rnat = 0) 199 ! ----------------------- 201 200 if(nint(rnat(ig)).eq.0)then 202 201 203 ! re-calculate oceanic albedo 202 ! Parameterization (not used for the moment) to compute the effect of solar zenith angle on the albedo 203 ! -------------------------- 204 ! 204 205 ! if(diurnal.and.oceanalbvary)then 205 206 ! fauxo = ( 1.47 - ACOS( mu0(ig) ) )/0.15 ! where does this come from (Benjamin)? … … 207 208 ! albedo(ig) = MAX(MIN(albedo(ig),0.60),0.04) 208 209 ! else 209 do nw=1,L_NSPECTV 210 albedo(ig,nw) = alb_ocean ! For now, alb_ocean is defined in inifis_mod.F90. Later we could introduce spectral dependency for alb_ocean. 211 enddo 210 ! 211 ! do nw=1,L_NSPECTV 212 ! albedo(ig,nw) = alb_ocean ! For now, alb_ocean is defined in inifis_mod.F90. Later we could introduce spectral dependency for alb_ocean. 213 ! enddo 212 214 ! end if 213 215 214 215 if(ok_slab_ocean) then 216 ! we first start by fixing the albedo of oceanic grid to that of the ocean 217 do nw=1,L_NSPECTV 218 albedo(ig,nw) = alb_ocean ! For now, alb_ocean is defined in inifis_mod.F90. Later we could introduce spectral dependency for alb_ocean. 219 enddo 220 221 if(ok_slab_ocean) then ! if ocean heat transport param activated 216 222 217 223 zfra = MAX(0.0,MIN(1.0,zqsurf(ig,iice)/45.0)) ! Snow Fraction (Critical height 45kg/m2~15cm) … … 227 233 ! Oceanic ice height, just for diagnostics 228 234 hice(ig) = MIN(10.,sea_ice(ig)/rhowater) 229 else !ok_slab_ocean 230 231 232 !calculate oceanic ice height including the latent heat of ice formation233 !hice is the height of oceanic ice with a maximum of maxicethick.235 else !ok_slab_ocean ; here this is the case where we are dealing with a static ocean 236 237 238 ! calculate oceanic ice height including the latent heat of ice formation 239 ! hice is the height of oceanic ice with a maximum of maxicethick. 234 240 hice(ig) = zqsurf(ig,iice)/rhowater ! update hice to include recent snowfall 235 236 ! twater(ig) = tsurf(ig) + ptimestep*zdtsurf(ig) & 237 twater(ig) = ztsurf(ig) - hice(ig)*RLFTT*rhowater/pcapcal(ig) 238 ! this is temperature water would have if we melted entire ocean ice layer 241 twater(ig) = ztsurf(ig) - hice(ig)*RLFTT*rhowater/pcapcal(ig) ! this is the temperature water would have if we melted the entire ocean ice layer 239 242 hicebis(ig) = hice(ig) 240 243 hice(ig) = 0. … … 272 275 273 276 274 ! Continent 275 ! --------- 277 ! Continental regions (rnat = 1) 278 ! ----------------------- 276 279 elseif (nint(rnat(ig)).eq.1) then 277 280 278 !melt the snow281 ! melt the snow 279 282 if(ztsurf(ig).gt.T_h2O_ice_liq)then 280 283 if(zqsurf(ig,iice).gt.1.0e-8)then … … 287 290 zqsurf(ig,iliq) = zqsurf(ig,iliq) + fsnoi 288 291 289 !thermal effects292 ! thermal effects 290 293 pdtsurf_hyd(ig) = -fsnoi*RLFTT/pcapcal(ig)/ptimestep 291 294 … … 293 296 else 294 297 295 !freeze the water298 ! freeze the water 296 299 if(zqsurf(ig,iliq).gt.1.0e-8)then 297 300 … … 304 307 zqsurf(ig,iliq) = zqsurf(ig,iliq) - fsnoi 305 308 306 !thermal effects309 ! thermal effects 307 310 pdtsurf_hyd(ig) = +fsnoi*RLFTT/pcapcal(ig)/ptimestep 308 311 … … 310 313 endif 311 314 312 ! deal with runoff 315 ! add runoff (to simulate transport of water from continental regions to oceanic regions ; in practice, this prevents liquid water to build up too much on continental regions) 313 316 if(activerunoff)then 314 317 runoff(ig) = max(zqsurf(ig,iliq) - mx_eau_sol, 0.0) … … 316 319 if(runoff(ig).ne.0.0)then 317 320 zqsurf(ig,iliq) = mx_eau_sol 318 !runoff is added to ocean at end321 ! note: runoff is added to ocean at end 319 322 endif 320 323 end if … … 322 325 endif 323 326 324 !re-calculate continental albedo327 ! re-calculate continental albedo 325 328 DO nw=1,L_NSPECTV 326 329 albedo(ig,nw) = albedo_bareground(ig) … … 389 392 enddo 390 393 391 !collect on the full grid394 ! collect on the full grid 392 395 call gather(runoffamount,runoffamount_glo) 393 396 call gather(zqsurf(1:ngrid,iliq),zqsurf_iliq_glo) … … 416 419 endif! is_master 417 420 418 !scatter the field back on all processes421 ! scatter the field back on all processes 419 422 call scatter(zqsurf_iliq_glo,zqsurf(1:ngrid,iliq)) 420 423
Note: See TracChangeset
for help on using the changeset viewer.