Skip to content
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

Update ccpp-physics in CMEPS to consider sea surface ocean current in air-sea flux computation #107

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions ufs/ccpp/data/MED_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ module MED_typedefs
integer :: lsm_noahmp !< flag for NOAH MP land surface model
logical :: redrag !< flag for reduced drag coeff. over sea
integer :: sfc_z0_type !< surface roughness options over water
integer :: icplocn2atm !< flag controlling whether to consider ocean current in air-sea flux calculation
logical :: thsfc_loc !< flag for reference pressure in theta calculation
integer :: nstf_name(5) !< NSSTM flag: off/uncoupled/coupled=0/1/2
integer :: lkm !< 0 = no lake model, 1 = lake model, 2 = lake & nsst on lake points
Expand Down Expand Up @@ -249,6 +250,8 @@ module MED_typedefs
real(kind=kind_phys), pointer :: fice(:) => null() !< ice fraction over open water
real(kind=kind_phys), pointer :: hice(:) => null() !< sea ice thickness (m)
real(kind=kind_phys), pointer :: tsfco(:) => null() !< sea surface temperature
real(kind=kind_phys), pointer :: usfco(:) => null() !< sea surface ocean current (zonal)
real(kind=kind_phys), pointer :: vsfco(:) => null() !< sea surface ocean current (merdional)
real(kind=kind_phys), pointer :: uustar(:) => null() !< boundary layer parameter
real(kind=kind_phys), pointer :: tsfc(:) => null() !< surface skin temperature
real(kind=kind_phys), pointer :: snodi(:) => null() !< water equivalent snow depth over ice (mm)
Expand Down Expand Up @@ -640,6 +643,7 @@ subroutine control_initialize(model)
model%ivegsrc = 2
model%redrag = .false.
model%sfc_z0_type = 0
model%icplocn2atm = 0
model%thsfc_loc = .true.
model%lsm = 1
model%lsm_noahmp = 2
Expand Down Expand Up @@ -739,6 +743,10 @@ subroutine sfcprop_create(sfcprop, im, model)
sfcprop%hice = clear_val
allocate(sfcprop%tsfco(im))
sfcprop%tsfco = clear_val
allocate(sfcprop%usfco(im))
sfcprop%usfco = clear_val
allocate(sfcprop%vsfco(im))
sfcprop%vsfco = clear_val
allocate(sfcprop%uustar(im))
sfcprop%uustar = clear_val
allocate(sfcprop%tsfc(im))
Expand Down
20 changes: 20 additions & 0 deletions ufs/ccpp/data/MED_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,12 @@
units = flag
dimensions = ()
type = logical
[icplocn2atm]
standard_name = control_for_air_sea_flux_computation_over_water
long_name = air-sea flux option
units = 1
dimensions = ()
type = integer
[kdt]
standard_name = index_of_timestep
long_name = current forecast iteration
Expand Down Expand Up @@ -1156,6 +1162,20 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[usfco]
standard_name = x_ocean_current
long_name = zonal current at ocean surface
units = m s-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[vsfco]
standard_name = y_ocean_current
long_name = meridional current at ocean surface
units = m s-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[uustar]
standard_name = surface_friction_velocity
long_name = boundary layer parameter
Expand Down