-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Land surface upgrades for HR4 #219
Changes from 8 commits
14d0aad
0ff86ac
9e5eeb8
e039a94
31bca4e
1816f72
3a361b2
8b6379e
35b15e3
002e029
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1989,7 +1989,7 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in | |
|
||
real (kind=kind_phys), parameter :: mpe = 1.e-6 | ||
real (kind=kind_phys), parameter :: psiwlt = -150. !metric potential for wilting point (m) | ||
real (kind=kind_phys), parameter :: z0 = 0.002 ! bare-soil roughness length (m) (i.e., under the canopy) | ||
real (kind=kind_phys), parameter :: z0 = 0.015 ! bare-soil roughness length (m) (i.e., under the canopy) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. where does "0.015" come from? Is it tuned? I did not find this value in the Noah-MP. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it is tuned based on wind speed bias over bare soil and vegetated areas with low vegetation fraction There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. got it. thanks! |
||
|
||
! --------------------------------------------------------------------------------------------------- | ||
! initialize fluxes from veg. fraction | ||
|
@@ -2629,10 +2629,10 @@ subroutine csnow (parameters,isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso | |
! thermal conductivity of snow | ||
|
||
do iz = isnow+1, 0 | ||
! tksno(iz) = 3.2217e-6*bdsnoi(iz)**2. ! stieglitz(yen,1965) | ||
! tksno(iz) = 3.2217e-6*bdsnoi(iz)**2. ! stieglitz(yen,1965) | ||
! tksno(iz) = 2e-2+2.5e-6*bdsnoi(iz)*bdsnoi(iz) ! anderson, 1976 | ||
! tksno(iz) = 0.35 ! constant | ||
tksno(iz) = 2.576e-6*bdsnoi(iz)**2. + 0.074 ! verseghy (1991) | ||
tksno(iz) = 0.35 ! constant | ||
! tksno(iz) = 2.576e-6*bdsnoi(iz)**2. + 0.074 ! verseghy (1991) | ||
! tksno(iz) = 2.22*(bdsnoi(iz)/1000.)**1.88 ! douvill(yen, 1981) | ||
enddo | ||
|
||
|
@@ -4056,11 +4056,6 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & | |
|
||
end if | ||
|
||
! prepare for longwave rad. | ||
|
||
air = -emv*(1.+(1.-emv)*(1.-emg))*lwdn - emv*emg*sb*tg**4 | ||
cir = (2.-emv*(1.-emg))*emv*sb | ||
! | ||
if(opt_sfc == 4) then | ||
|
||
gdx = sqrt(garea1) | ||
|
@@ -4207,6 +4202,11 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & | |
end if | ||
end if | ||
|
||
! prepare for longwave rad. | ||
|
||
air = -emv*(1.+(1.-emv)*(1.-emg))*lwdn - emv*emg*sb*tg**4 | ||
cir = (2.-emv*(1.-emg))*emv*sb | ||
|
||
! prepare for sensible heat flux above veg. | ||
|
||
cah = 1./rahc | ||
|
@@ -4269,7 +4269,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & | |
|
||
! update vegetation surface temperature | ||
tv = tv + dtv | ||
! tah = ata + bta*tv ! canopy air t; update here for consistency | ||
tah = ata + bta*tv ! canopy air t; update here for consistency | ||
|
||
! for computing m-o length in the next iteration | ||
h = rhoair*cpair*(tah - sfctmp) /rahc | ||
|
@@ -4282,15 +4282,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & | |
qfx = (qsfc-qair)*rhoair*caw | ||
endif | ||
|
||
|
||
if (liter == 1) then | ||
exit loop1 | ||
endif | ||
if (iter >= 5 .and. abs(dtv) <= 0.01 .and. liter == 0) then | ||
liter = 1 | ||
endif | ||
|
||
end do loop1 ! end stability iteration | ||
! after canopy balance, do the under-canopy ground balance | ||
|
||
! under-canopy fluxes and tg | ||
|
||
|
@@ -4300,8 +4292,6 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & | |
cev = rhoair*cpair / (gammag*(rawg+rsurf)) ! barlage: change to ground v3.6 | ||
cgh = 2.*df(isnow+1)/dzsnso(isnow+1) | ||
|
||
loop2: do iter = 1, niterg | ||
|
||
t = tdc(tg) | ||
call esat(t, esatw, esati, dsatw, dsati) | ||
if (t .gt. 0.) then | ||
|
@@ -4327,7 +4317,14 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & | |
gh = gh + cgh*dtg | ||
tg = tg + dtg | ||
|
||
end do loop2 | ||
if (liter == 1) then | ||
exit loop1 | ||
endif | ||
if (iter >= 5 .and. abs(dtv) <= 0.01 .and. abs(dtg) <= 0.01 .and. liter == 0) then | ||
liter = 1 ! if conditions are met, then do one final loop | ||
endif | ||
|
||
end do loop1 | ||
|
||
! tah = (cah*sfctmp + cvh*tv + cgh*tg)/(cah + cvh + cgh) | ||
|
||
|
@@ -5824,7 +5821,8 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, | |
|
||
if (opt_trs == z0heqz0m) then | ||
|
||
z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) | ||
! z0m_out = exp(fveg * log(z0m) + (1.0 - fveg) * log(z0mg)) | ||
z0m_out = fveg * z0m + (1.0 - fveg) * z0mg | ||
z0h_out = z0m_out | ||
|
||
elseif (opt_trs == chen09) then | ||
|
@@ -5841,7 +5839,7 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, | |
endif | ||
|
||
z0h_out = exp( fveg * log(z0m * exp(-czil*0.4*258.2*sqrt(ustarx*z0m))) + & | ||
(1.0 - fveg) * log(max(z0m/exp(kb_sigma_f0),1.0e-6)) ) | ||
(1.0 - fveg) * log(max(z0mg/exp(kb_sigma_f0),1.0e-6)) ) | ||
|
||
elseif (opt_trs == tessel) then | ||
|
||
|
@@ -5880,15 +5878,15 @@ subroutine thermalz0(parameters, fveg, z0m, z0mg, zlvl, | |
|
||
z0h_out = z0m_out | ||
|
||
elseif (opt_trs == chen09 .or. opt_trs == tessel) then | ||
elseif (opt_trs == tessel) then | ||
|
||
if (vegtyp <= 5) then | ||
z0h_out = z0m_out | ||
else | ||
z0h_out = z0m_out * 0.01 | ||
endif | ||
|
||
elseif (opt_trs == blumel99) then | ||
elseif (opt_trs == chen09 .or. opt_trs == blumel99) then | ||
|
||
reyn = ustarx*z0m_out/viscosity ! Blumel99 eqn 36c | ||
if (reyn > 2.0) then | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
probably best to clean this up by removing all the comments
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done