-
Notifications
You must be signed in to change notification settings - Fork 169
Move sfc emis alb calculation to its own scheme and z0 composite consistent #627
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
Changes from 18 commits
756f2cf
67ddbbd
25611d7
25f789f
21df401
ed7db4d
ad1ad67
ea0c6f0
b7cbcce
d4531cd
e140651
efcc07c
e871573
c4e0873
cbbafc5
8367123
823f6ed
ff766e5
1a2d365
a6ade33
d83c1a1
21c87c4
7525515
4f4be0e
0119e95
11daddb
0fc7b40
2ed6a7c
b51c5b3
b6d0ede
986211f
d2100a4
45849a9
1477edd
5be81f1
5da36fc
a46ae1a
55b4733
d224b13
c31b1ba
e0b1eb6
0918b56
79739c7
ec07fc0
f1e2db9
1a8a1bf
c661a57
60b873f
329364b
7468bf8
a20fc32
38f28a2
c3375bb
01bb2d5
0a8aa3a
a6df017
0350697
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 |
|---|---|---|
|
|
@@ -75,7 +75,8 @@ subroutine GFS_phys_time_vary_init ( | |
| isot, ivegsrc, nlunit, sncovr, sncovr_ice, lsm, lsm_noahmp, lsm_ruc, min_seaice, & | ||
| fice, landfrac, vtype, weasd, lsoil, zs, dzs, lsnow_lsm_lbound, lsnow_lsm_ubound, & | ||
| tvxy, tgxy, tahxy, canicexy, canliqxy, eahxy, cmxy, chxy, fwetxy, sneqvoxy, alboldxy,& | ||
| qsnowxy, wslakexy, albdvis, albdnir, albivis, albinir, emiss, taussxy, waxy, wtxy, & | ||
| qsnowxy, wslakexy, albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, albdvis_ice, & | ||
| albdnir_ice, albivis_ice, albinir_ice, emiss_lnd, emiss_ice, taussxy, waxy, wtxy, & | ||
| zwtxy, xlaixy, xsaixy, lfmassxy, stmassxy, rtmassxy, woodxy, stblcpxy, fastcpxy, & | ||
| smcwtdxy, deeprechxy, rechxy, snowxy, snicexy, snliqxy, tsnoxy , smoiseq, zsnsoxy, & | ||
| slc, smc, stc, tsfcl, snowd, canopy, tg3, stype, con_t0c, nthrds, errmsg, errflg) | ||
|
|
@@ -125,11 +126,16 @@ subroutine GFS_phys_time_vary_init ( | |
| real(kind_phys), intent(inout) :: alboldxy(:) | ||
| real(kind_phys), intent(inout) :: qsnowxy(:) | ||
| real(kind_phys), intent(inout) :: wslakexy(:) | ||
| real(kind_phys), intent(inout) :: albdvis(:) | ||
| real(kind_phys), intent(inout) :: albdnir(:) | ||
| real(kind_phys), intent(inout) :: albivis(:) | ||
| real(kind_phys), intent(inout) :: albinir(:) | ||
| real(kind_phys), intent(inout) :: emiss(:) | ||
| real(kind_phys), intent(inout) :: albdvis_lnd(:) | ||
| real(kind_phys), intent(inout) :: albdnir_lnd(:) | ||
| real(kind_phys), intent(inout) :: albivis_lnd(:) | ||
| real(kind_phys), intent(inout) :: albinir_lnd(:) | ||
| real(kind_phys), intent(inout) :: albdvis_ice(:) | ||
| real(kind_phys), intent(inout) :: albdnir_ice(:) | ||
| real(kind_phys), intent(inout) :: albivis_ice(:) | ||
| real(kind_phys), intent(inout) :: albinir_ice(:) | ||
| real(kind_phys), intent(inout) :: emiss_lnd(:) | ||
| real(kind_phys), intent(inout) :: emiss_ice(:) | ||
| real(kind_phys), intent(inout) :: taussxy(:) | ||
| real(kind_phys), intent(inout) :: waxy(:) | ||
| real(kind_phys), intent(inout) :: wtxy(:) | ||
|
|
@@ -385,6 +391,41 @@ subroutine GFS_phys_time_vary_init ( | |
| if (errflg/=0) return | ||
| end if | ||
|
|
||
| !--- For Noah MP or RUC LSMs: initialize four components of albedo for | ||
| !--- land and ice | ||
| if (lsm == lsm_noahmp .or. lsm == lsm_ruc) then | ||
| if (me == master ) write(0,'(a)') 'GFS_phys_time_vary_init: initialize albedo for land and ice' | ||
| albdvis_lnd(:) = missing_value | ||
| albdnir_lnd(:) = missing_value | ||
| albivis_lnd(:) = missing_value | ||
| albinir_lnd(:) = missing_value | ||
| emiss_lnd(:) = missing_value | ||
|
|
||
| do ix=1,im | ||
| albdvis_lnd(ix) = 0.2_kind_phys | ||
| albdnir_lnd(ix) = 0.2_kind_phys | ||
| albivis_lnd(ix) = 0.2_kind_phys | ||
| albinir_lnd(ix) = 0.2_kind_phys | ||
| emiss_lnd(ix) = 0.95_kind_phys | ||
| enddo | ||
| endif | ||
|
Collaborator
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. Minor code-readability quibble: the if/endif pairs do not line up, which can make this logic more confusing than it needs to be.
Collaborator
Author
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. This contains unneccessary code as well, I am cleaning it up as part of the bugfix for restart runs. |
||
|
|
||
| if (lsm == lsm_ruc) then | ||
| albdvis_ice(:) = missing_value | ||
| albdnir_ice(:) = missing_value | ||
| albivis_ice(:) = missing_value | ||
| albinir_ice(:) = missing_value | ||
| emiss_ice(:) = missing_value | ||
|
|
||
| do ix=1,im | ||
| albdvis_ice(ix) = 0.6_kind_phys | ||
| albdnir_ice(ix) = 0.6_kind_phys | ||
| albivis_ice(ix) = 0.6_kind_phys | ||
| albinir_ice(ix) = 0.6_kind_phys | ||
| emiss_ice(ix) = 0.97_kind_phys | ||
| enddo | ||
| endif | ||
|
|
||
| if (lsm == lsm_noahmp) then | ||
| if (all(tvxy < zero)) then | ||
|
|
||
|
|
@@ -406,11 +447,6 @@ subroutine GFS_phys_time_vary_init ( | |
| alboldxy(:) = missing_value | ||
| qsnowxy(:) = missing_value | ||
| wslakexy(:) = missing_value | ||
| albdvis(:) = missing_value | ||
| albdnir(:) = missing_value | ||
| albivis(:) = missing_value | ||
| albinir(:) = missing_value | ||
| emiss(:) = missing_value | ||
| taussxy(:) = missing_value | ||
| waxy(:) = missing_value | ||
| wtxy(:) = missing_value | ||
|
|
@@ -441,7 +477,7 @@ subroutine GFS_phys_time_vary_init ( | |
| !$OMP shared(im,lsoil,con_t0c,landfrac,tsfcl,tvxy,tgxy,tahxy) & | ||
| !$OMP shared(snowd,canicexy,canliqxy,canopy,eahxy,cmxy,chxy) & | ||
| !$OMP shared(fwetxy,sneqvoxy,weasd,alboldxy,qsnowxy,wslakexy) & | ||
| !$OMP shared(taussxy,albdvis,albdnir,albivis,albinir,emiss) & | ||
| !$OMP shared(taussxy) & | ||
| !$OMP shared(waxy,wtxy,zwtxy,imn,vtype,xlaixy,xsaixy,lfmassxy) & | ||
| !$OMP shared(stmassxy,rtmassxy,woodxy,stblcpxy,fastcpxy) & | ||
| !$OMP shared(isbarren_table,isice_table,isurban_table) & | ||
|
|
@@ -480,11 +516,6 @@ subroutine GFS_phys_time_vary_init ( | |
| ! already set to 0.0 | ||
| wslakexy(ix) = zero | ||
| taussxy(ix) = zero | ||
| albdvis(ix) = 0.2_kind_phys | ||
| albdnir(ix) = 0.2_kind_phys | ||
| albivis(ix) = 0.2_kind_phys | ||
| albinir(ix) = 0.2_kind_phys | ||
| emiss(ix) = 0.95_kind_phys | ||
|
|
||
| waxy(ix) = 4900.0_kind_phys | ||
| wtxy(ix) = waxy(ix) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -755,47 +755,92 @@ | |
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albdvis] | ||
| standard_name = surface_albedo_direct_visible | ||
| long_name = direct surface albedo visible band | ||
| [albdvis_lnd] | ||
| standard_name = surface_albedo_direct_visible_over_land | ||
| long_name = direct surface albedo visible band over land | ||
| units = frac | ||
| dimensions = (horizontal_dimension) | ||
| dimensions = (horizontal_loop_extent) | ||
|
Collaborator
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. Since these changes correspond to the init stage, shouldn't the dimensions be 'horizontal_dimension' instead of 'horizontal_loop_extent'? (same for all changes in this file)
Collaborator
Author
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. Thanks a lot, Grant. Fixed. |
||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albdnir] | ||
| standard_name = surface_albedo_direct_NIR | ||
| long_name = direct surface albedo NIR band | ||
| [albdnir_lnd] | ||
| standard_name = surface_albedo_direct_NIR_over_land | ||
| long_name = direct surface albedo NIR band over land | ||
| units = frac | ||
| dimensions = (horizontal_dimension) | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albivis] | ||
| standard_name = surface_albedo_diffuse_visible | ||
| long_name = diffuse surface albedo visible band | ||
| [albivis_lnd] | ||
| standard_name = surface_albedo_diffuse_visible_over_land | ||
| long_name = diffuse surface albedo visible band over land | ||
| units = frac | ||
| dimensions = (horizontal_dimension) | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albinir] | ||
| standard_name = surface_albedo_diffuse_NIR | ||
| long_name = diffuse surface albedo NIR band | ||
| [albinir_lnd] | ||
| standard_name = surface_albedo_diffuse_NIR_over_land | ||
| long_name = diffuse surface albedo NIR band over land | ||
| units = frac | ||
| dimensions = (horizontal_dimension) | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [emiss] | ||
| standard_name = surface_emissivity_lsm | ||
| long_name = surface emissivity from lsm | ||
| [albdvis_ice] | ||
| standard_name = surface_albedo_direct_visible_over_ice | ||
| long_name = direct surface albedo visible band over ice | ||
| units = frac | ||
| dimensions = (horizontal_dimension) | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albdnir_ice] | ||
| standard_name = surface_albedo_direct_NIR_over_ice | ||
| long_name = direct surface albedo NIR band over ice | ||
| units = frac | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albivis_ice] | ||
| standard_name = surface_albedo_diffuse_visible_over_ice | ||
| long_name = diffuse surface albedo visible band over ice | ||
| units = frac | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [albinir_ice] | ||
| standard_name = surface_albedo_diffuse_NIR_over_ice | ||
| long_name = diffuse surface albedo NIR band over ice | ||
| units = frac | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [emiss_lnd] | ||
| standard_name = surface_longwave_emissivity_over_land | ||
| long_name = surface lw emissivity in fraction over land | ||
| units = frac | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
| optional = F | ||
| [emiss_ice] | ||
| standard_name = surface_longwave_emissivity_over_ice | ||
| long_name = surface lw emissivity in fraction over ice | ||
| units = frac | ||
| dimensions = (horizontal_loop_extent) | ||
| type = real | ||
| kind = kind_phys | ||
| intent = inout | ||
|
|
||
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.
@climbfuji This change should also go into the SCM version of this scheme. Should I do a follow-up SCM-only PR that includes these changes or add them to this PR (which of course should not affect UFS RTs in any way)?
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.
You can create a PR for my branch and we can merge it together. Note that I am just working on a bugfix/update of this code, because it should only be executed when the model is cold started.