diff --git a/physics/GFS_PBL_generic.meta b/physics/GFS_PBL_generic.meta index 87b3f33b8..8f4bc90fc 100644 --- a/physics/GFS_PBL_generic.meta +++ b/physics/GFS_PBL_generic.meta @@ -1272,8 +1272,8 @@ intent = in optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -1281,8 +1281,8 @@ intent = in optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1290,8 +1290,8 @@ intent = in optional = F [evap_wat] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_cloud_diagnostics.meta b/physics/GFS_cloud_diagnostics.meta index 840b3b21a..e87b19f75 100644 --- a/physics/GFS_cloud_diagnostics.meta +++ b/physics/GFS_cloud_diagnostics.meta @@ -160,4 +160,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index af3f4e147..d46dc6752 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -434,8 +434,10 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%tisfc' , Sfcprop%tisfc) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%snowd' , Sfcprop%snowd) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorl' , Sfcprop%zorl) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlo' , Sfcprop%zorlo) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlw' , Sfcprop%zorlw) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorll' , Sfcprop%zorll) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorli' , Sfcprop%zorli) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%zorlwav' , Sfcprop%zorlwav) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%fice' , Sfcprop%fice) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%hprime' , Sfcprop%hprime) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Sfcprop%sncovr' , Sfcprop%sncovr) @@ -1022,7 +1024,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup ! Print all other variables call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_land ', Interstitial%adjsfculw_land ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_ice ', Interstitial%adjsfculw_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_ocean ', Interstitial%adjsfculw_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjsfculw_water ', Interstitial%adjsfculw_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirbmd ', Interstitial%adjnirbmd ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirbmu ', Interstitial%adjnirbmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%adjnirdfd ', Interstitial%adjnirdfd ) @@ -1037,14 +1039,14 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd ', Interstitial%cd ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_ice ', Interstitial%cd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_land ', Interstitial%cd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_ocean ', Interstitial%cd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cd_water ', Interstitial%cd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq ', Interstitial%cdq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_ice ', Interstitial%cdq_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_land ', Interstitial%cdq_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_ocean ', Interstitial%cdq_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cdq_water ', Interstitial%cdq_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_ice ', Interstitial%chh_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_land ', Interstitial%chh_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_ocean ', Interstitial%chh_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%chh_water ', Interstitial%chh_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldf ', Interstitial%cldf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldsa ', Interstitial%cldsa ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cldtaulw ', Interstitial%cldtaulw ) @@ -1055,7 +1057,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%clouds ', Interstitial%clouds ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_ice ', Interstitial%cmm_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_land ', Interstitial%cmm_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_ocean ', Interstitial%cmm_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cmm_water ', Interstitial%cmm_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cnvc ', Interstitial%cnvc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%cnvw ', Interstitial%cnvw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ctei_r ', Interstitial%ctei_r ) @@ -1072,7 +1074,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dqsfc1 ', Interstitial%dqsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%drain ', Interstitial%drain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdt ', Interstitial%dtdt ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtdtc ', Interstitial%dtdtc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtsfc1 ', Interstitial%dtsfc1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dtzm ', Interstitial%dtzm ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%dt_mf ', Interstitial%dt_mf ) @@ -1088,32 +1089,32 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d ', Interstitial%ep1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_ice ', Interstitial%ep1d_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_land ', Interstitial%ep1d_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_ocean ', Interstitial%ep1d_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ep1d_water ', Interstitial%ep1d_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evapq ', Interstitial%evapq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_ice ', Interstitial%evap_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_land ', Interstitial%evap_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_ocean ', Interstitial%evap_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evap_water ', Interstitial%evap_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evbs ', Interstitial%evbs ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%evcw ', Interstitial%evcw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%faerlw ', Interstitial%faerlw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%faersw ', Interstitial%faersw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_ice ', Interstitial%ffhh_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_land ', Interstitial%ffhh_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_ocean ', Interstitial%ffhh_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffhh_water ', Interstitial%ffhh_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2 ', Interstitial%fh2 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_ice ', Interstitial%fh2_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_land ', Interstitial%fh2_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_ocean ', Interstitial%fh2_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fh2_water ', Interstitial%fh2_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_cice ', Interstitial%flag_cice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_guess ', Interstitial%flag_guess ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%flag_iter ', Interstitial%flag_iter ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_ice ', Interstitial%ffmm_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_land ', Interstitial%ffmm_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_ocean ', Interstitial%ffmm_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ffmm_water ', Interstitial%ffmm_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10 ', Interstitial%fm10 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_ice ', Interstitial%fm10_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_land ', Interstitial%fm10_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_ocean ', Interstitial%fm10_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fm10_water ', Interstitial%fm10_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%frain ', Interstitial%frain ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%frland ', Interstitial%frland ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%fscav ', Interstitial%fscav ) @@ -1121,7 +1122,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw ', Interstitial%gabsbdlw ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_ice ', Interstitial%gabsbdlw_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_land ', Interstitial%gabsbdlw_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_ocean ', Interstitial%gabsbdlw_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gabsbdlw_water ', Interstitial%gabsbdlw_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamma ', Interstitial%gamma ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamq ', Interstitial%gamq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gamt ', Interstitial%gamt ) @@ -1129,7 +1130,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx ', Interstitial%gflx ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_ice ', Interstitial%gflx_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_land ', Interstitial%gflx_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_ocean ', Interstitial%gflx_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gflx_water ', Interstitial%gflx_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gwdcu ', Interstitial%gwdcu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%gwdcv ', Interstitial%gwdcv ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hefac ', Interstitial%hefac ) @@ -1137,7 +1138,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflxq ', Interstitial%hflxq ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_ice ', Interstitial%hflx_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_land ', Interstitial%hflx_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_ocean ', Interstitial%hflx_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%hflx_water ', Interstitial%hflx_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htlwc ', Interstitial%htlwc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htlw0 ', Interstitial%htlw0 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%htswc ', Interstitial%htswc ) @@ -1171,7 +1172,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qlyr ', Interstitial%qlyr ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_ice ', Interstitial%qss_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_land ', Interstitial%qss_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_ocean ', Interstitial%qss_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%qss_water ', Interstitial%qss_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%radar_reset ', Interstitial%radar_reset ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%raddt ', Interstitial%raddt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%raincd ', Interstitial%raincd ) @@ -1181,7 +1182,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb ', Interstitial%rb ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_ice ', Interstitial%rb_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_land ', Interstitial%rb_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_ocean ', Interstitial%rb_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rb_water ', Interstitial%rb_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%reset ', Interstitial%reset ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rhc ', Interstitial%rhc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%runoff ', Interstitial%runoff ) @@ -1199,7 +1200,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%scmpsw%visdf ', Interstitial%scmpsw%visdf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_ice ', Interstitial%semis_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_land ', Interstitial%semis_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_ocean ', Interstitial%semis_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%semis_water ', Interstitial%semis_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sfcalb ', Interstitial%sfcalb ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sigma ', Interstitial%sigma ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%sigmaf ', Interstitial%sigmaf ) @@ -1209,43 +1210,43 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowc ', Interstitial%snowc ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_ice ', Interstitial%snowd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_land ', Interstitial%snowd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_ocean ', Interstitial%snowd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowd_water ', Interstitial%snowd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snohf ', Interstitial%snohf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%snowmt ', Interstitial%snowmt ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%soiltype ', Interstitial%soiltype ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress ', Interstitial%stress ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_ice ', Interstitial%stress_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_land ', Interstitial%stress_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_ocean ', Interstitial%stress_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%stress_water ', Interstitial%stress_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%theta ', Interstitial%theta ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tice ', Interstitial%tice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tlvl ', Interstitial%tlvl ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tlyr ', Interstitial%tlyr ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_ice ', Interstitial%tprcp_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_land ', Interstitial%tprcp_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_ocean ', Interstitial%tprcp_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tprcp_water ', Interstitial%tprcp_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%trans ', Interstitial%trans ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tseal ', Interstitial%tseal ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfa ', Interstitial%tsfa ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_ice ', Interstitial%tsfc_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_land ', Interstitial%tsfc_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_ocean ', Interstitial%tsfc_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfc_water ', Interstitial%tsfc_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsfg ', Interstitial%tsfg ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf ', Interstitial%tsurf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ice ', Interstitial%tsurf_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_land ', Interstitial%tsurf_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ocean ', Interstitial%tsurf_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_water ', Interstitial%tsurf_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ud_mf ', Interstitial%ud_mf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ice ', Interstitial%uustar_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_land ', Interstitial%uustar_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ocean ', Interstitial%uustar_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_water ', Interstitial%uustar_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vdftra ', Interstitial%vdftra ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vegf1d ', Interstitial%vegf1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%vegtype ', Interstitial%vegtype ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%wcbmax ', Interstitial%wcbmax ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_ice ', Interstitial%weasd_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_land ', Interstitial%weasd_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_ocean ', Interstitial%weasd_ocean ) + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%weasd_water ', Interstitial%weasd_water ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%wind ', Interstitial%wind ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%work1 ', Interstitial%work1 ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%work2 ', Interstitial%work2 ) @@ -1254,9 +1255,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xlai1d ', Interstitial%xlai1d ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%xmu ', Interstitial%xmu ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%z01d ', Interstitial%z01d ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ice ', Interstitial%zorl_ice ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_land ', Interstitial%zorl_land ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zorl_ocean ', Interstitial%zorl_ocean ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%zt1d ', Interstitial%zt1d ) ! UGWP call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tau_mtb ', Interstitial%tau_mtb ) @@ -1451,7 +1449,8 @@ end subroutine GFS_checkland_finalize subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_guess, & flag_init, flag_restart, frac_grid, isot, ivegsrc, stype, vtype, slope, & soiltyp, vegtype, slopetyp, dry, icy, wet, lake, ocean, & - oceanfrac, landfrac, lakefrac, slmsk, islmsk, errmsg, errflg ) + oceanfrac, landfrac, lakefrac, slmsk, islmsk, & + zorl, zorlw, zorll, zorli, fice, errmsg, errflg ) use machine, only: kind_phys @@ -1487,6 +1486,11 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ real(kind_phys), intent(in ) :: lakefrac(im) real(kind_phys), intent(in ) :: slmsk(im) integer, intent(in ) :: islmsk(im) + real(kind_phys), intent(in ) :: zorl(im) + real(kind_phys), intent(in ) :: zorlw(im) + real(kind_phys), intent(in ) :: zorll(im) + real(kind_phys), intent(in ) :: zorli(im) + real(kind_phys), intent(in ) :: fice(im) character(len=*), intent( out) :: errmsg integer, intent( out) :: errflg @@ -1509,6 +1513,7 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,i5)') 'YYY: ivegsrc :', ivegsrc do i=1,im + !if (fice(i)>0.999) then !if (vegtype(i)==15) then write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_iter(i) :', i, blkno, flag_iter(i) write(0,'(a,2i5,1x,1x,l)') 'YYY: i, blk, flag_guess(i) :', i, blkno, flag_guess(i) @@ -1526,8 +1531,13 @@ subroutine GFS_checkland_run (me, master, blkno, im, kdt, iter, flag_iter, flag_ write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, oceanfrac(i) :', i, blkno, oceanfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, landfrac(i) :', i, blkno, landfrac(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, lakefrac(i) :', i, blkno, lakefrac(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, fice(i) :', i, blkno, fice(i) write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, slmsk(i) :', i, blkno, slmsk(i) write(0,'(a,2i5,1x,i5)') 'YYY: i, blk, islmsk(i) :', i, blkno, islmsk(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorl(i) :', i, blkno, zorl(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorlw(i) :', i, blkno, zorlw(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorli(i) :', i, blkno, zorli(i) + write(0,'(a,2i5,1x,e16.7)')'YYY: i, blk, zorll(i) :', i, blkno, zorll(i) !end if end do diff --git a/physics/GFS_debug.meta b/physics/GFS_debug.meta index 3b044904b..f2a991426 100644 --- a/physics/GFS_debug.meta +++ b/physics/GFS_debug.meta @@ -646,6 +646,51 @@ type = integer intent = in optional = F +[zorl] + standard_name = surface_roughness_length + long_name = surface roughness length + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorlw] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F +[fice] + standard_name = sea_ice_concentration + long_name = ice fraction over open water + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = in + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 0cc6a66b8..0f53edc35 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -305,8 +305,8 @@ subroutine GFS_phys_time_vary_init ( call setindxh2o (im, xlat_d, jindx1_h, jindx2_h, ddy_h) endif -!> - Call setindxaer() to initialize aerosols data !$OMP section +!> - Call setindxaer() to initialize aerosols data if (iaerclm) then call setindxaer (im, xlat_d, jindx1_aer, & jindx2_aer, ddy_aer, xlon_d, & @@ -317,8 +317,8 @@ subroutine GFS_phys_time_vary_init ( jamin=min(minval(jindx1_aer), jamin) jamax=max(maxval(jindx2_aer), jamax) endif -!$OMP section +!$OMP section !> - Call setindxci() to initialize IN and CCN data if (iccn == 1) then call setindxci (im, xlat_d, jindx1_ci, & @@ -376,10 +376,14 @@ subroutine GFS_phys_time_vary_init ( !$OMP end sections !$OMP end parallel + + if (errflg/=0) return + if (iaerclm) then - call read_aerdataf (iamin, iamax, jamin, jamax, me,master,iflip, & - idate,errmsg,errflg) - endif + call read_aerdataf (iamin, iamax, jamin, jamax, me, master, iflip, & + idate, errmsg, errflg) + if (errflg/=0) return + end if if (lsm == lsm_noahmp) then if (all(tvxy < zero)) then @@ -431,15 +435,34 @@ subroutine GFS_phys_time_vary_init ( smoiseq(:,:) = missing_value zsnsoxy(:,:) = missing_value + imn = idate(2) + +!$OMP parallel do num_threads(nthrds) default(none) & +!$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(waxy,wtxy,zwtxy,imn,vtype,xlaixy,xsaixy,lfmassxy) & +!$OMP shared(stmassxy,rtmassxy,woodxy,stblcpxy,fastcpxy) & +!$OMP shared(isbarren_table,isice_table,isurban_table) & +!$omp shared(iswater_table,laim_table,sla_table,bexp_table) & +!$omp shared(stc,smc,slc,tg3,snowxy,tsnoxy,snicexy,snliqxy) & +!$omp shared(zsnsoxy,STYPE,SMCMAX_TABLE,SMCWLT_TABLE,zs,dzs) & +!$omp shared(DWSAT_TABLE,DKSAT_TABLE,PSISAT_TABLE,smoiseq) & +!$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) & +!$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) & +!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat,ddz) do ix=1,im if (landfrac(ix) >= drythresh) then tvxy(ix) = tsfcl(ix) tgxy(ix) = tsfcl(ix) tahxy(ix) = tsfcl(ix) - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tvxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tgxy(ix) = con_t0c - if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) tahxy(ix) = con_t0c + if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) then + tvxy(ix) = con_t0c + tgxy(ix) = con_t0c + tahxy(ix) = con_t0c + end if canicexy(ix) = 0.0_kind_phys canliqxy(ix) = canopy(ix) @@ -463,14 +486,12 @@ subroutine GFS_phys_time_vary_init ( albinir(ix) = 0.2_kind_phys emiss(ix) = 0.95_kind_phys - waxy(ix) = 4900.0_kind_phys wtxy(ix) = waxy(ix) zwtxy(ix) = (25.0_kind_phys + 2.0_kind_phys) - waxy(ix) / 1000.0_kind_phys / 0.2_kind_phys vegtyp = vtype(ix) if (vegtyp == 0) vegtyp = 7 - imn = idate(2) if ((vegtyp == isbarren_table) .or. (vegtyp == isice_table) .or. (vegtyp == isurban_table) .or. (vegtyp == iswater_table)) then @@ -552,7 +573,6 @@ subroutine GFS_phys_time_vary_init ( else errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' errflg = 1 - return endif ! Now we have the snowxy field @@ -628,6 +648,9 @@ subroutine GFS_phys_time_vary_init ( endif enddo ! ix +!$OMP end parallel do + + if (errflg/=0) return deallocate(dzsno) deallocate(dzsnso) @@ -748,6 +771,20 @@ subroutine GFS_phys_time_vary_timestep_init ( return end if +!$OMP parallel num_threads(nthrds) default(none) & +!$OMP shared(kdt,nsswr,lsswr,clstp,imfdeepcnv,cal_pre,random_clds) & +!$OMP shared(fhswr,fhour,seed0,cnx,cny,nrcm,wrk,rannie,rndval) & +!$OMP shared(rann,im,isc,jsc,imap,jmap,ntoz,me,idate,jindx1_o3,jindx2_o3) & +!$OMP shared(ozpl,ddy_o3,h2o_phys,jindx1_h,jindx2_h,h2opl,ddy_h,iaerclm,master) & +!$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) & +!$OMP shared(ddx_ci,in_nm,ccn_nm,do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau) & +!$OMP shared(ddy_j2tau,tau_amf) & +!$OMP private(iseed,iskip,i,j,k) + +!$OMP sections + +!$OMP section + !--- switch for saving convective clouds - cnvc90.f !--- aka Ken Campana/Yu-Tai Hou legacy if ((mod(kdt,nsswr) == 0) .and. (lsswr)) then @@ -764,6 +801,8 @@ subroutine GFS_phys_time_vary_timestep_init ( clstp = 0100 endif +!$OMP section + !--- random number needed for RAS and old SAS and when cal_pre=.true. ! imfdeepcnv < 0 when ras = .true. if ( (imfdeepcnv <= 0 .or. cal_pre) .and. random_clds ) then @@ -789,6 +828,7 @@ subroutine GFS_phys_time_vary_timestep_init ( endif ! imfdeepcnv, cal_re, random_clds +!$OMP section !> - Call ozinterpol() to make ozone interpolation if (ntoz > 0) then call ozinterpol (me, im, idate, fhour, & @@ -796,6 +836,7 @@ subroutine GFS_phys_time_vary_timestep_init ( ozpl, ddy_o3) endif +!$OMP section !> - Call h2ointerpol() to make stratospheric water vapor data interpolation if (h2o_phys) then call h2ointerpol (me, im, idate, fhour, & @@ -803,15 +844,7 @@ subroutine GFS_phys_time_vary_timestep_init ( h2opl, ddy_h) endif -!> - Call aerinterpol() to make aerosol interpolation - if (iaerclm) then - call aerinterpol (me, master, im, idate, fhour, & - jindx1_aer, jindx2_aer, & - ddy_aer, iindx1_aer, & - iindx2_aer, ddx_aer, & - levs, prsl, aer_nm) - endif - +!$OMP section !> - Call ciinterpol() to make IN and CCN data interpolation if (iccn == 1) then call ciinterpol (me, im, idate, fhour, & @@ -821,6 +854,7 @@ subroutine GFS_phys_time_vary_timestep_init ( levs, prsl, in_nm, ccn_nm) endif +!$OMP section !> - Call cires_indx_ugwp to read monthly-mean GW-tau diagnosed from FV3GFS-runs that resolve GW-activ if (do_ugwp_v1) then call tau_amf_interp(me, master, im, idate, fhour, & @@ -828,6 +862,20 @@ subroutine GFS_phys_time_vary_timestep_init ( ddy_j1tau, ddy_j2tau, tau_amf) endif +!$OMP end sections +!$OMP end parallel + +!> - Call aerinterpol() to make aerosol interpolation + if (iaerclm) then + ! aerinterpol is using threading inside, don't + ! move into OpenMP parallel section above + call aerinterpol (me, master, nthrds, im, idate, & + fhour, jindx1_aer, jindx2_aer,& + ddy_aer, iindx1_aer, & + iindx2_aer, ddx_aer, & + levs, prsl, aer_nm) + endif + !> - Call gcycle() to repopulate specific time-varying surface properties for AMIP/forecast runs if (nscyc > 0) then if (mod(kdt,nscyc) == 1) THEN diff --git a/physics/GFS_phys_time_vary.fv3.meta b/physics/GFS_phys_time_vary.fv3.meta index 06192eb6a..373e36846 100644 --- a/physics/GFS_phys_time_vary.fv3.meta +++ b/physics/GFS_phys_time_vary.fv3.meta @@ -1793,8 +1793,8 @@ intent = inout optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_dimension) type = real diff --git a/physics/GFS_rrtmgp_thompsonmp_pre.meta b/physics/GFS_rrtmgp_thompsonmp_pre.meta index 54d266b67..920b9eea7 100644 --- a/physics/GFS_rrtmgp_thompsonmp_pre.meta +++ b/physics/GFS_rrtmgp_thompsonmp_pre.meta @@ -448,4 +448,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/GFS_suite_interstitial.F90 b/physics/GFS_suite_interstitial.F90 index 93106d2de..9f8c14614 100644 --- a/physics/GFS_suite_interstitial.F90 +++ b/physics/GFS_suite_interstitial.F90 @@ -159,7 +159,7 @@ end subroutine GFS_suite_interstitial_2_finalize !> \section arg_table_GFS_suite_interstitial_2_run Argument Table !! \htmlinclude GFS_suite_interstitial_2_run.html !! - subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplflx, flag_cice, shal_cnv, old_monin, mstrat, & + subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, flag_cice, shal_cnv, old_monin, mstrat, & do_shoc, frac_grid, imfshalcnv, dtf, xcosz, adjsfcdsw, adjsfcdlw, cice, pgr, ulwsfc_cice, lwhd, htrsw, htrlw, xmu, ctei_rm, & work1, work2, prsi, tgrs, prsl, qgrs_water_vapor, qgrs_cloud_water, cp, hvap, prslk, suntim, adjsfculw, adjsfculw_lnd, & adjsfculw_ice, adjsfculw_wat, dlwsfc, ulwsfc, psmean, dt3dt_lw, dt3dt_sw, dt3dt_pbl, dt3dt_dcnv, dt3dt_scnv, dt3dt_mp, & @@ -169,7 +169,7 @@ subroutine GFS_suite_interstitial_2_run (im, levs, lssav, ldiag3d, lsidea, cplfl ! interface variables integer, intent(in ) :: im, levs, imfshalcnv - logical, intent(in ) :: lssav, ldiag3d, lsidea, cplflx, shal_cnv + logical, intent(in ) :: lssav, ldiag3d, lsidea, shal_cnv logical, intent(in ) :: old_monin, mstrat, do_shoc, frac_grid, use_LW_jacobian real(kind=kind_phys), intent(in ) :: dtf, cp, hvap diff --git a/physics/GFS_suite_interstitial.meta b/physics/GFS_suite_interstitial.meta index 5b4b0dbf9..be72b671b 100644 --- a/physics/GFS_suite_interstitial.meta +++ b/physics/GFS_suite_interstitial.meta @@ -321,14 +321,6 @@ type = logical intent = in optional = F -[cplflx] - standard_name = flag_for_flux_coupling - long_name = flag controlling cplflx collection (default off) - units = flag - dimensions = () - type = logical - intent = in - optional = F [flag_cice] standard_name = flag_for_cice long_name = flag for cice @@ -628,8 +620,8 @@ intent = in optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_surface_composites.F90 b/physics/GFS_surface_composites.F90 index d0f1829df..75c25cccb 100644 --- a/physics/GFS_surface_composites.F90 +++ b/physics/GFS_surface_composites.F90 @@ -13,6 +13,8 @@ module GFS_surface_composites_pre real(kind=kind_phys), parameter :: zero = 0.0_kind_phys, one = 1.0_kind_phys, epsln = 1.0e-10_kind_phys + real(kind=kind_phys), parameter :: huge = 9.9692099683868690E36 ! NetCDF float FillValue + contains subroutine GFS_surface_composites_pre_init () @@ -25,15 +27,16 @@ end subroutine GFS_surface_composites_pre_finalize !! \htmlinclude GFS_surface_composites_pre_run.html !! subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx, cplwav2atm, & - landfrac, lakefrac, lakedepth, oceanfrac, frland, & - dry, icy, lake, ocean, wet, hice, cice, zorl, zorlo, zorll, zorli, zorl_wat, & - zorl_lnd, zorl_ice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & + landfrac, lakefrac, lakedepth, oceanfrac, frland, dry, icy, lake, ocean, wet, & + hice, cice, snowd, snowd_wat, snowd_lnd, snowd_ice, tprcp, tprcp_wat, & tprcp_lnd, tprcp_ice, uustar, uustar_wat, uustar_lnd, uustar_ice, & weasd, weasd_wat, weasd_lnd, weasd_ice, ep1d_ice, tsfc, tsfco, tsfcl, tsfc_wat, & tsfc_lnd, tsfc_ice, tisfc, tice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & gflx_ice, tgice, islmsk, islmsk_cice, slmsk, semis_rad, semis_wat, semis_lnd, semis_ice, & qss, qss_wat, qss_lnd, qss_ice, hflx, hflx_wat, hflx_lnd, hflx_ice, & - min_lakeice, min_seaice, errmsg, errflg) + min_lakeice, min_seaice, & + zorlo, zorll, zorli, & + errmsg, errflg) implicit none @@ -45,12 +48,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx real(kind=kind_phys), dimension(im), intent(in ) :: landfrac, lakefrac, lakedepth, oceanfrac real(kind=kind_phys), dimension(im), intent(inout) :: cice, hice real(kind=kind_phys), dimension(im), intent( out) :: frland - real(kind=kind_phys), dimension(im), intent(in ) :: zorl, snowd, tprcp, uustar, weasd, qss, hflx + real(kind=kind_phys), dimension(im), intent(in ) :: snowd, tprcp, uustar, weasd, qss, hflx - real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli, tsfc, tsfco, tsfcl, tisfc, tsurf + real(kind=kind_phys), dimension(im), intent(inout) :: tsfc, tsfco, tsfcl, tisfc, tsurf real(kind=kind_phys), dimension(im), intent(inout) :: snowd_wat, snowd_lnd, snowd_ice, tprcp_wat, & - tprcp_lnd, tprcp_ice, zorl_wat, zorl_lnd, zorl_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat, & - tsurf_lnd, tsurf_ice, uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & + tprcp_lnd, tprcp_ice, tsfc_wat, tsfc_lnd, tsfc_ice, tsurf_wat,tsurf_lnd, tsurf_ice, & + uustar_wat, uustar_lnd, uustar_ice, weasd_wat, weasd_lnd, weasd_ice, & qss_wat, qss_lnd, qss_ice, hflx_wat, hflx_lnd, hflx_ice, ep1d_ice, gflx_ice real(kind=kind_phys), dimension(im), intent( out) :: tice real(kind=kind_phys), intent(in ) :: tgice @@ -58,7 +61,9 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx real(kind=kind_phys), dimension(im), intent(in ) :: semis_rad real(kind=kind_phys), dimension(im), intent(inout) :: semis_wat, semis_lnd, semis_ice, slmsk real(kind=kind_phys), intent(in ) :: min_lakeice, min_seaice - + ! + real(kind=kind_phys), dimension(im), intent(inout) :: zorlo, zorll, zorli + ! real(kind=kind_phys), parameter :: timin = 173.0_kind_phys ! minimum temperature allowed for snow/ice ! CCPP error handling @@ -169,26 +174,12 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx enddo endif -! if (.not. cplflx .or. .not. frac_grid) then -! if (cplwav2atm) then -! do i=1,im -! zorll(i) = zorl(i) -! enddo -! else -! do i=1,im -! zorll(i) = zorl(i) -! zorlo(i) = zorl(i) -! enddo -! endif -! endif - do i=1,im tprcp_wat(i) = tprcp(i) tprcp_lnd(i) = tprcp(i) tprcp_ice(i) = tprcp(i) if (wet(i)) then ! Water uustar_wat(i) = uustar(i) - zorl_wat(i) = zorlo(i) tsfc_wat(i) = tsfco(i) tsurf_wat(i) = tsfco(i) ! weasd_wat(i) = weasd(i) @@ -198,22 +189,28 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_wat(i) = 0.984_kind_phys qss_wat(i) = qss(i) hflx_wat(i) = hflx(i) + ! DH* + else + zorlo(i) = huge + ! *DH endif if (dry(i)) then ! Land uustar_lnd(i) = uustar(i) weasd_lnd(i) = weasd(i) - zorl_lnd(i) = zorll(i) tsfc_lnd(i) = tsfcl(i) tsurf_lnd(i) = tsfcl(i) snowd_lnd(i) = snowd(i) semis_lnd(i) = semis_rad(i) qss_lnd(i) = qss(i) hflx_lnd(i) = hflx(i) + ! DH* + else + zorll(i) = huge + ! *DH end if if (icy(i)) then ! Ice uustar_ice(i) = uustar(i) weasd_ice(i) = weasd(i) - zorl_ice(i) = zorli(i) tsfc_ice(i) = tisfc(i) tsurf_ice(i) = tisfc(i) snowd_ice(i) = snowd(i) @@ -222,7 +219,11 @@ subroutine GFS_surface_composites_pre_run (im, lkm, frac_grid, flag_cice, cplflx semis_ice(i) = 0.95_kind_phys qss_ice(i) = qss(i) hflx_ice(i) = hflx(i) - endif + ! DH* + else + zorli(i) = huge + ! *DH + end if if (nint(slmsk(i)) /= 1) slmsk(i) = islmsk(i) enddo @@ -345,14 +346,12 @@ end subroutine GFS_surface_composites_post_init subroutine GFS_surface_composites_post_finalize() end subroutine GFS_surface_composites_post_finalize -#if 0 !> \section arg_table_GFS_surface_composites_post_run Argument Table !! \htmlinclude GFS_surface_composites_post_run.html !! -#endif subroutine GFS_surface_composites_post_run ( & im, kice, km, cplflx, cplwav2atm, frac_grid, flag_cice, islmsk, dry, wet, icy, landfrac, lakefrac, oceanfrac, & - zorl, zorlo, zorll, zorli, zorl_wat, zorl_lnd, zorl_ice, & + zorl, zorlo, zorll, zorli, & cd, cd_wat, cd_lnd, cd_ice, cdq, cdq_wat, cdq_lnd, cdq_ice, rb, rb_wat, rb_lnd, rb_ice, stress, stress_wat, stress_lnd, & stress_ice, ffmm, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh, ffhh_wat, ffhh_lnd, ffhh_ice, uustar, uustar_wat, uustar_lnd, & uustar_ice, fm10, fm10_wat, fm10_lnd, fm10_ice, fh2, fh2_wat, fh2_lnd, fh2_ice, tsurf, tsurf_wat, tsurf_lnd, tsurf_ice, & @@ -368,7 +367,7 @@ subroutine GFS_surface_composites_post_run ( logical, dimension(im), intent(in) :: flag_cice, dry, wet, icy integer, dimension(im), intent(in) :: islmsk real(kind=kind_phys), dimension(im), intent(in) :: landfrac, lakefrac, oceanfrac, & - zorl_wat, zorl_lnd, zorl_ice, cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & + cd_wat, cd_lnd, cd_ice, cdq_wat, cdq_lnd, cdq_ice, rb_wat, rb_lnd, rb_ice, stress_wat, & stress_lnd, stress_ice, ffmm_wat, ffmm_lnd, ffmm_ice, ffhh_wat, ffhh_lnd, ffhh_ice, uustar_wat, uustar_lnd, uustar_ice, & fm10_wat, fm10_lnd, fm10_ice, fh2_wat, fh2_lnd, fh2_ice, tsurf_wat, tsurf_lnd, tsurf_ice, cmm_wat, cmm_lnd, cmm_ice, & chh_wat, chh_lnd, chh_ice, gflx_wat, gflx_lnd, gflx_ice, ep1d_wat, ep1d_lnd, ep1d_ice, weasd_wat, weasd_lnd, weasd_ice, & @@ -408,7 +407,7 @@ subroutine GFS_surface_composites_post_run ( txi = cice(i) * wfrac ! txi = ice fraction wrt whole cell txo = max(zero, wfrac-txi) ! txo = open water fraction - zorl(i) = txl*zorl_lnd(i) + txi*zorl_ice(i) + txo*zorl_wat(i) + zorl(i) = txl*zorll(i) + txi*zorli(i) + txo*zorlo(i) cd(i) = txl*cd_lnd(i) + txi*cd_ice(i) + txo*cd_wat(i) cdq(i) = txl*cdq_lnd(i) + txi*cdq_ice(i) + txo*cdq_wat(i) rb(i) = txl*rb_lnd(i) + txi*rb_ice(i) + txo*rb_wat(i) @@ -443,10 +442,6 @@ subroutine GFS_surface_composites_post_run ( endif tsfc(i) = txl*tsfc_lnd(i) + txi*tice(i) + txo*tsfc_wat(i) - zorll(i) = zorl_lnd(i) - zorli(i) = zorl_ice(i) - zorlo(i) = zorl_wat(i) - if (dry(i)) then tsfcl(i) = tsfc_lnd(i) ! over land elseif (wet(i)) then @@ -496,7 +491,7 @@ subroutine GFS_surface_composites_post_run ( do i=1,im if (islmsk(i) == 1) then - zorl(i) = zorl_lnd(i) + zorl(i) = zorll(i) cd(i) = cd_lnd(i) cdq(i) = cdq_lnd(i) rb(i) = rb_lnd(i) @@ -524,7 +519,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero elseif (islmsk(i) == 0) then - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) cd(i) = cd_wat(i) cdq(i) = cdq_wat(i) rb(i) = rb_wat(i) @@ -552,7 +547,7 @@ subroutine GFS_surface_composites_post_run ( hice(i) = zero cice(i) = zero else ! islmsk(i) == 2 - zorl(i) = zorl_ice(i) + zorl(i) = zorli(i) cd(i) = cd_ice(i) cdq(i) = cdq_ice(i) rb(i) = rb_ice(i) @@ -578,7 +573,7 @@ subroutine GFS_surface_composites_post_run ( tisfc(i) = tice(i) if (.not. flag_cice(i)) then ! tisfc(i) = tice(i) ! over lake ice (and sea ice when uncoupled) - zorl(i) = cice(i) * zorl_ice(i) + (one - cice(i)) * zorl_wat(i) + zorl(i) = cice(i) * zorli(i) + (one - cice(i)) * zorlo(i) tsfc(i) = tsfc_ice(i) ! over lake (and ocean when uncoupled) elseif (wet(i)) then if (cice(i) >= min_seaice) then ! this was already done for lake ice in sfc_sice @@ -590,7 +585,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = txi * stress_ice(i) + txo * stress_wat(i) qss(i) = txi * qss_ice(i) + txo * qss_wat(i) ep1d(i) = txi * ep1d_ice(i) + txo * ep1d_wat(i) - zorl(i) = txi * zorl_ice(i) + txo * zorl_wat(i) + zorl(i) = txi * zorli(i) + txo * zorlo(i) else evap(i) = evap_wat(i) hflx(i) = hflx_wat(i) @@ -598,7 +593,7 @@ subroutine GFS_surface_composites_post_run ( stress(i) = stress_wat(i) qss(i) = qss_wat(i) ep1d(i) = ep1d_wat(i) - zorl(i) = zorl_wat(i) + zorl(i) = zorlo(i) endif endif if (wet(i)) then @@ -612,10 +607,6 @@ subroutine GFS_surface_composites_post_run ( end do endif - zorll(i) = zorl_lnd(i) - zorlo(i) = zorl_wat(i) - zorli(i) = zorl_ice(i) - enddo endif ! if (frac_grid) diff --git a/physics/GFS_surface_composites.meta b/physics/GFS_surface_composites.meta index 21b308357..ff07c1de2 100644 --- a/physics/GFS_surface_composites.meta +++ b/physics/GFS_surface_composites.meta @@ -158,69 +158,6 @@ kind = kind_phys intent = inout optional = F -[zorl] - standard_name = surface_roughness_length - long_name = surface roughness length - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorll] - standard_name = surface_roughness_length_over_land - long_name = surface roughness length over land - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorli] - standard_name = surface_roughness_length_over_ice - long_name = surface roughness length over ice - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F -[zorl_ice] - standard_name = surface_roughness_length_over_ice_interstitial - long_name = surface roughness length over ice (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = inout - optional = F [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -231,8 +168,8 @@ intent = in optional = F [snowd_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -267,8 +204,8 @@ intent = in optional = F [tprcp_wat] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -303,8 +240,8 @@ intent = in optional = F [uustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -339,8 +276,8 @@ intent = in optional = F [weasd_wat] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -402,8 +339,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -456,8 +393,8 @@ intent = inout optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -535,8 +472,8 @@ intent = in optional = F [semis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -571,8 +508,8 @@ intent = in optional = F [qss_wat] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -607,8 +544,8 @@ intent = in optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -651,6 +588,33 @@ kind = kind_phys intent = in optional = F +[zorlo] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorll] + standard_name = surface_roughness_length_over_land + long_name = surface roughness length over land + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F +[zorli] + standard_name = surface_roughness_length_over_ice + long_name = surface roughness length over ice + units = cm + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout + optional = F [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP @@ -712,8 +676,8 @@ intent = in optional = F [semis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -766,8 +730,8 @@ intent = inout optional = F [gabsbdlw_wat] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -954,8 +918,8 @@ intent = inout optional = F [zorlo] - standard_name = surface_roughness_length_over_ocean - long_name = surface roughness length over ocean + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water units = cm dimensions = (horizontal_loop_extent) type = real @@ -980,33 +944,6 @@ kind = kind_phys intent = inout optional = F -[zorl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_lnd] - standard_name = surface_roughness_length_over_land_interstitial - long_name = surface roughness length over land (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F -[zorl_ice] - standard_name = surface_roughness_length_over_ice_interstitial - long_name = surface roughness length over ice (temporary use as interstitial) - units = cm - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - intent = in - optional = F [cd] standard_name = surface_drag_coefficient_for_momentum_in_air long_name = surface exchange coeff for momentum @@ -1017,8 +954,8 @@ intent = inout optional = F [cd_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1053,8 +990,8 @@ intent = inout optional = F [cdq_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1089,8 +1026,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1125,8 +1062,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -1161,8 +1098,8 @@ intent = inout optional = F [ffmm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1197,8 +1134,8 @@ intent = inout optional = F [ffhh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1233,8 +1170,8 @@ intent = inout optional = F [uustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1269,8 +1206,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1305,8 +1242,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -1341,8 +1278,8 @@ intent = inout optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -1377,8 +1314,8 @@ intent = inout optional = F [cmm_wat] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1413,8 +1350,8 @@ intent = inout optional = F [chh_wat] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -1449,8 +1386,8 @@ intent = inout optional = F [gflx_wat] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -1485,8 +1422,8 @@ intent = inout optional = F [ep1d_wat] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -1521,8 +1458,8 @@ intent = inout optional = F [weasd_wat] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -1557,8 +1494,8 @@ intent = inout optional = F [snowd_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -1593,8 +1530,8 @@ intent = inout optional = F [tprcp_wat] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -1629,8 +1566,8 @@ intent = inout optional = F [evap_wat] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1665,8 +1602,8 @@ intent = inout optional = F [hflx_wat] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -1701,8 +1638,8 @@ intent = inout optional = F [qss_wat] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -1755,8 +1692,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/GFS_surface_generic.meta b/physics/GFS_surface_generic.meta index d4c8b1bca..47b685f72 100644 --- a/physics/GFS_surface_generic.meta +++ b/physics/GFS_surface_generic.meta @@ -656,8 +656,8 @@ intent = in optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -746,8 +746,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/aerclm_def.F b/physics/aerclm_def.F index 426881fe4..3862aa1b1 100644 --- a/physics/aerclm_def.F +++ b/physics/aerclm_def.F @@ -13,7 +13,7 @@ module aerclm_def real (kind=kind_phys), allocatable, dimension(:,:,:,:) :: aer_pres real (kind=kind_phys), allocatable, dimension(:,:,:,:,:) :: aerin - data aer_time/15.5, 45., 74.5, 105., 135.5, 166., 196.5, + data aer_time/15.5, 45., 74.5, 105., 135.5, 166., 196.5, & 227.5, 258., 288.5, 319., 349.5, 380.5/ data specname /'DU001','DU002','DU003','DU004','DU005', diff --git a/physics/aerinterp.F90 b/physics/aerinterp.F90 index bed73c5be..25472632f 100644 --- a/physics/aerinterp.F90 +++ b/physics/aerinterp.F90 @@ -43,15 +43,23 @@ SUBROUTINE read_aerdata (me, master, iflip, idate, errmsg, errflg) endif ! !! =================================================================== +!! check if all necessary files exist +!! =================================================================== + do imon = 1, timeaer + write(mn,'(i2.2)') imon + fname=trim("aeroclim.m"//mn//".nc") + inquire (file = fname, exist = file_exist) + if (.not. file_exist) then + errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' + errflg = 1 + return + endif + enddo +! +!! =================================================================== !! fetch dim spec and lat/lon from m01 data set !! =================================================================== fname=trim("aeroclim.m"//'01'//".nc") - inquire (file = fname, exist = file_exist) - if (.not. file_exist) then - errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' - errflg = 1 - return - endif call nf_open(fname , nf90_NOWRITE, ncid) vname = trim(specname(1)) @@ -117,13 +125,9 @@ SUBROUTINE read_aerdataf (iamin, iamax, jamin, jamax, & endif ! allocate local working arrays - if (.not. allocated(buff)) then - allocate (buff(lonsaer, latsaer, levsw)) - allocate (pres_tmp(lonsaer,levsw)) - endif - if (.not. allocated(buffx)) then - allocate (buffx(lonsaer, latsaer, levsw,1)) - endif + allocate (buff(lonsaer, latsaer, levsw)) + allocate (pres_tmp(lonsaer, levsw)) + allocate (buffx(lonsaer, latsaer, levsw, 1)) !! =================================================================== !! loop thru m01 - m12 for aer/pres array @@ -131,13 +135,6 @@ SUBROUTINE read_aerdataf (iamin, iamax, jamin, jamax, & do imon = 1, timeaer write(mn,'(i2.2)') imon fname=trim("aeroclim.m"//mn//".nc") - inquire (file = fname, exist = file_exist) - if (.not. file_exist) then - errmsg = 'Error in read_aerdata: file ' // trim(fname) // ' not found' - errflg = 1 - return - endif - call nf_open(fname , nf90_NOWRITE, ncid) ! ====> construct 3-d pressure array (Pa) @@ -259,7 +256,7 @@ END SUBROUTINE setindxaer !********************************************************************** !********************************************************************** ! - SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & + SUBROUTINE aerinterpol(me,master,nthrds,npts,IDATE,FHOUR,jindx1,jindx2, & ddy,iindx1,iindx2,ddx,lev,prsl,aerout) ! USE MACHINE, ONLY : kind_phys @@ -270,7 +267,7 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & ! integer JINDX1(npts), JINDX2(npts),iINDX1(npts),iINDX2(npts) - integer me,idate(4), master + integer me,idate(4), master, nthrds integer IDAT(8),JDAT(8) ! real(kind=kind_phys) DDY(npts), ddx(npts),ttt @@ -317,7 +314,16 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & tx2 = 1.0 - tx1 if (n2 > 12) n2 = n2 -12 -! +#ifndef __GFORTRAN__ +!$OMP parallel num_threads(nthrds) default(none) & +!$OMP shared(npts,ntrcaer,aerin,aer_pres,prsl) & +!$OMP shared(ddx,ddy,jindx1,jindx2,iindx1,iindx2) & +!$OMP shared(aerpm,aerpres,aerout,n1,n2,lev,nthrds) & +!$OMP private(l,j,k,ii,i1,i2,j1,j2,temj,temi) & +!$OMP copyin(tx1,tx2) firstprivate(tx1,tx2) + +!$OMP do +#endif DO L=1,levsaer DO J=1,npts J1 = JINDX1(J) @@ -341,8 +347,12 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & +TEMI*DDY(j)*aer_pres(I1,J2,L,n2)+DDX(j)*TEMJ*aer_pres(I2,J1,L,n2)) ENDDO ENDDO +#ifndef __GFORTRAN__ +!$OMP end do ! don't flip, input is the same direction as GFS (bottom-up) +!$OMP do +#endif DO J=1,npts DO L=1,lev if(prsl(j,L).ge.aerpres(j,1)) then @@ -371,7 +381,12 @@ SUBROUTINE aerinterpol(me,master,npts,IDATE,FHOUR,jindx1,jindx2, & endif ENDDO !L-loop ENDDO !J-loop -! +#ifndef __GFORTRAN__ +!$OMP end do + +!$OMP end parallel +#endif + RETURN END SUBROUTINE aerinterpol diff --git a/physics/dcyc2.meta b/physics/dcyc2.meta index e4a22477d..c11ab47d1 100644 --- a/physics/dcyc2.meta +++ b/physics/dcyc2.meta @@ -89,8 +89,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -143,8 +143,8 @@ intent = in optional = F [sfcemis_wat] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -441,8 +441,8 @@ intent = out optional = F [adjsfculw_wat] - standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial - long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) + standard_name = surface_upwelling_longwave_flux_over_water_interstitial + long_name = surface upwelling longwave flux at current time over water (temporary use as interstitial) units = W m-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/flake_driver.meta b/physics/flake_driver.meta index 2b857e509..0dd90b4c7 100644 --- a/physics/flake_driver.meta +++ b/physics/flake_driver.meta @@ -96,8 +96,8 @@ intent = in optional = F [dlwflx] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -114,8 +114,8 @@ intent = in optional = F [weasd] - standard_name = water_equivalent_accumulated_snow_depth_over_ocean - long_name = water equiv of acc snow depth over ocean + standard_name = water_equivalent_accumulated_snow_depth_over_water + long_name = water equiv of acc snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -217,8 +217,8 @@ intent = in optional = F [snwdph] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -235,8 +235,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -253,8 +253,8 @@ intent = inout optional = F [t_sfc] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -262,8 +262,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -271,8 +271,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -280,8 +280,8 @@ intent = inout optional = F [ustar] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -289,8 +289,8 @@ intent = inout optional = F [qsfc] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -298,8 +298,8 @@ intent = inout optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -307,8 +307,8 @@ intent = inout optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -316,8 +316,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -325,8 +325,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/gfdl_sfc_layer.F90 b/physics/gfdl_sfc_layer.F90 index 008e716e2..73c172546 100644 --- a/physics/gfdl_sfc_layer.F90 +++ b/physics/gfdl_sfc_layer.F90 @@ -103,12 +103,12 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & lsm_noah, lsm_noahmp, lsm_ruc, lsm_noah_wrfv4, icoef_sf, cplwav, & cplwav2atm, lcurr_sf, pert_Cd, ntsflg, sfenth, z1, shdmax, ivegsrc, & vegtype, sigmaf, dt, wet, dry, icy, isltyp, rd, grav, ep1, ep2, smois, & - psfc, prsl1, q1, t1, u1, v1, wspd, u10, v10, gsw, glw, tsurf_ocn, & - tsurf_lnd, tsurf_ice, tskin_ocn, tskin_lnd, tskin_ice, ustar_ocn, & - ustar_lnd, ustar_ice, znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, & - cdm_ice, stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & - fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, qss_ocn, & + psfc, prsl1, q1, t1, u1, v1, wspd, u10, v10, gsw, glw, tsurf_wat, & + tsurf_lnd, tsurf_ice, tskin_wat, tskin_lnd, tskin_ice, ustar_wat, & + ustar_lnd, ustar_ice, znt_wat, znt_lnd, znt_ice, cdm_wat, cdm_lnd, & + cdm_ice, stress_wat, stress_lnd, stress_ice, rib_wat, rib_lnd, rib_ice, & + fm_wat, fm_lnd, fm_ice, fh_wat, fh_lnd, fh_ice, fh2_wat, fh2_lnd, & + fh2_ice, ch_wat, ch_lnd, ch_ice, fm10_wat, fm10_lnd, fm10_ice, qss_wat, & qss_lnd, qss_ice, errmsg, errflg) use funcphys, only: fpvs @@ -137,15 +137,15 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & real(kind=kind_phys), dimension(im,nsoil), intent(in) :: smois real(kind=kind_phys), dimension(im), intent(in) :: psfc, prsl1, & q1, t1, u1, v1, wspd, u10, v10, gsw, glw, z1, shdmax, sigmaf, xlat, & - xlon, tsurf_ocn, tsurf_lnd, tsurf_ice + xlon, tsurf_wat, tsurf_lnd, tsurf_ice - real(kind=kind_phys), intent(inout), dimension(im) :: tskin_ocn, & - tskin_lnd, tskin_ice, ustar_ocn, ustar_lnd, ustar_ice, & - znt_ocn, znt_lnd, znt_ice, cdm_ocn, cdm_lnd, cdm_ice, & - stress_ocn, stress_lnd, stress_ice, rib_ocn, rib_lnd, rib_ice, & - fm_ocn, fm_lnd, fm_ice, fh_ocn, fh_lnd, fh_ice, fh2_ocn, fh2_lnd, & - fh2_ice, ch_ocn, ch_lnd, ch_ice, fm10_ocn, fm10_lnd, fm10_ice, & - qss_ocn, qss_lnd, qss_ice + real(kind=kind_phys), intent(inout), dimension(im) :: tskin_wat, & + tskin_lnd, tskin_ice, ustar_wat, ustar_lnd, ustar_ice, & + znt_wat, znt_lnd, znt_ice, cdm_wat, cdm_lnd, cdm_ice, & + stress_wat, stress_lnd, stress_ice, rib_wat, rib_lnd, rib_ice, & + fm_wat, fm_lnd, fm_ice, fh_wat, fh_lnd, fh_ice, fh2_wat, fh2_lnd, & + fh2_ice, ch_wat, ch_lnd, ch_ice, fm10_wat, fm10_lnd, fm10_ice, & + qss_wat, qss_lnd, qss_ice character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -613,24 +613,24 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & wetc(i) = 1.0 !GJF: the lower boundary temperature passed in to MFLUX2 either follows GFS: - tstrc(i) = 0.5*(tskin_ocn(i) + tsurf_ocn(i)) !averaging tskin_ocn and tsurf_ocn as in GFS surface layer breaks ntsflg functionality + tstrc(i) = 0.5*(tskin_wat(i) + tsurf_wat(i)) !averaging tskin_wat and tsurf_wat as in GFS surface layer breaks ntsflg functionality !GJF: or WRF module_sf_gfdl.F: - !tstrc(i) = tskin_ocn(i) + !tstrc(i) = tskin_wat(i) ! DH* 20201009: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) - znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) + znt_wat(i)=min(2.85e-1,max(znt_wat(i),1.27e-5)) !GJF: from WRF's module_sf_gfdl.F if (wind10(i) <= 1.0e-10 .or. wind10(i) > 150.0) then - wind10(i)=wspd(i)*alog(10.0/(0.01*znt_ocn(i)))/alog(z1(i)/(0.01*znt_ocn(i))) + wind10(i)=wspd(i)*alog(10.0/(0.01*znt_wat(i)))/alog(z1(i)/(0.01*znt_wat(i))) end if wind10(i)=wind10(i)*100.0 !! m/s to cm/s !GJF: mflux2 expects negative roughness length for ocean points - znt_ocn(i) = -znt_ocn(i) + znt_wat(i) = -znt_wat(i) - call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_ocn(i), rib_ocn(i), & - xxfh(i), znt_ocn(i), mznt(i), tstrc(i), & + call mflux2 (fxh(i), fxe(i), fxmx(i), fxmy(i), cdm_wat(i), rib_wat(i), & + xxfh(i), znt_wat(i), mznt(i), tstrc(i), & pspc(i), pkmax(i), wetc(i), slwdc(i), z1_cm(i), icoef_sf, iwavecpl, lcurr_sf, charn(i), msang(i), & scurx(i), scury(i), pert_Cd, ens_random_seed, ens_Cdamp, upc(i), vpc(i), t1(i), q1(i), & dt, wind10(i), xxfh2(i), ntsflg, sfenth, tzot(i), ep2, errmsg, & @@ -639,14 +639,14 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & !GJF: this is broken when tstrc is set to an average of two variables if (ntsflg==1) then - tskin_ocn(i) = tstrc(i) ! gopal's doing + tskin_wat(i) = tstrc(i) ! gopal's doing end if - znt_ocn(i)= abs(znt_ocn(i)) + znt_wat(i)= abs(znt_wat(i)) mznt(i)= abs(mznt(i)) !GJF: these bounds on ocean roughness lengths are from Chunxi Zhang's module_sf_sfclayrev.f90 (in cm) - znt_ocn(i)=min(2.85e-1,max(znt_ocn(i),1.27e-5)) + znt_wat(i)=min(2.85e-1,max(znt_wat(i),1.27e-5)) if (diag_wind10m) then u10_ocn(i) = u1(i)*(0.01*wind10(i)/wspd(i)) @@ -654,67 +654,67 @@ subroutine gfdl_sfc_layer_run (im, nsoil, km, xlat, xlon, flag_iter, lsm, & end if !GJF: these variables are not needed in a GFS-based suite, but are found in WRF's module_sf_gfdl.F and kept in comments for legacy - !gz1oz0(i) = alog(zkmax(i)/znt_ocn(i)) + !gz1oz0(i) = alog(zkmax(i)/znt_wat(i)) !taux(i) = fxmx(i)/10. ! gopal's doing for Ocean coupling !tauy(i) = fxmy(i)/10. ! gopal's doing for Ocean coupling - cdm_ocn(i) = max(cdm_ocn(i), cd_low_limit) - cdm_ocn(i) = min(cdm_ocn(i), cd_high_limit) - fm_ocn(i) = karman/sqrt(cdm_ocn(i)) + cdm_wat(i) = max(cdm_wat(i), cd_low_limit) + cdm_wat(i) = min(cdm_wat(i), cd_high_limit) + fm_wat(i) = karman/sqrt(cdm_wat(i)) - !1) try fh_ocn from MFLUX2 - fh_ocn(i) = karman*xxfh(i) + !1) try fh_wat from MFLUX2 + fh_wat(i) = karman*xxfh(i) - !2) calc ch_ocn from fm_ocn and fh_ocn - ch_ocn(i) = karman*karman/(fm_ocn(i) * fh_ocn(i)) + !2) calc ch_wat from fm_wat and fh_wat + ch_wat(i) = karman*karman/(fm_wat(i) * fh_wat(i)) !3) check if ch_lnd is out of bounds (if so, recalculate fh_lnd from bounded value) ch_bound_excursion = .false. - if (ch_ocn(i) < ch_low_limit) then + if (ch_wat(i) < ch_low_limit) then ch_bound_excursion = .true. - ch_ocn(i) = ch_low_limit - else if (ch_ocn(i) > ch_high_limit) then + ch_wat(i) = ch_low_limit + else if (ch_wat(i) > ch_high_limit) then ch_bound_excursion = .true. - ch_ocn(i) = ch_high_limit + ch_wat(i) = ch_high_limit end if - fh2_ocn(i) = karman*xxfh2(i) + fh2_wat(i) = karman*xxfh2(i) if (ch_bound_excursion) then fh2_fh_ratio = min(xxfh2(i)/xxfh(i), 1.0) - fh_ocn(i) = karman*karman/(fm_ocn(i)*ch_ocn(i)) - fh2_ocn(i) = fh2_fh_ratio*fh_ocn(i) + fh_wat(i) = karman*karman/(fm_wat(i)*ch_wat(i)) + fh2_wat(i) = fh2_fh_ratio*fh_wat(i) end if !Other CCPP schemes (PBL) ask for fm/fh instead of psim/psih - !psim_ocn(i)=gz1oz0(i)-fm_ocn(i) - !psih_ocn(i)=gz1oz0(i)-fh_ocn(i) + !psim_ocn(i)=gz1oz0(i)-fm_wat(i) + !psih_ocn(i)=gz1oz0(i)-fh_wat(i) - ustar_ocn(i) = 0.01*sqrt(cdm_ocn(i)* & + ustar_wat(i) = 0.01*sqrt(cdm_wat(i)* & (upc(i)*upc(i) + vpc(i)*vpc(i))) !GJF: from Chunxi Zhang's module_sf_sfclayrev.f90 (I'm not sure it's necessary.) - ustar_ocn(i) = amax1(ustar_ocn(i),0.001) + ustar_wat(i) = amax1(ustar_wat(i),0.001) - stress_ocn(i) = cdm_ocn(i)*wspd(i)*wspd(i) + stress_wat(i) = cdm_wat(i)*wspd(i)*wspd(i) !GJF: from WRF's module_sf_gfdl.F !!! convert cd, ch to values at 10m, for output - cd10 = cdm_ocn(i) + cd10 = cdm_wat(i) if ( wind10(i) .ge. 0.1 ) then - cd10=cdm_ocn(i)* (wspd(i)/(0.01*wind10(i)) )**2 + cd10=cdm_wat(i)* (wspd(i)/(0.01*wind10(i)) )**2 !tmp9=0.01*abs(tzot(i)) - !ch_out(i)=ch_ocn(i)*(wspd(i)/(0.01*wind10(i)) ) * & + !ch_out(i)=ch_wat(i)*(wspd(i)/(0.01*wind10(i)) ) * & ! (alog(zkmax(i)/tmp9)/alog(10.0/tmp9)) end if - fm10_ocn(i) = karman/sqrt(cd10) + fm10_wat(i) = karman/sqrt(cd10) !GJF: conductances aren't used in other CCPP schemes - !chs_ocn(i)=ch_ocn(i)*wspd (i) !conductance - !chs2_ocn(i)=ustar_ocn(i)*karman/fh2_ocn(i) !2m conductance + !chs_ocn(i)=ch_wat(i)*wspd (i) !conductance + !chs2_ocn(i)=ustar_wat(i)*karman/fh2_wat(i) !2m conductance if (diag_qss) then - esat = fpvs(tskin_ocn(i)) - qss_ocn(i) = ep2*esat/(psfc(i)-esat) + esat = fpvs(tskin_wat(i)) + qss_wat(i) = ep2*esat/(psfc(i)-esat) end if end if !wet diff --git a/physics/gfdl_sfc_layer.meta b/physics/gfdl_sfc_layer.meta index a9829fec3..c8cbaf294 100644 --- a/physics/gfdl_sfc_layer.meta +++ b/physics/gfdl_sfc_layer.meta @@ -8,8 +8,8 @@ name = gfdl_sfc_layer_init type = scheme [icoef_sf] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -168,8 +168,8 @@ intent = in optional = F [icoef_sf] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -452,9 +452,9 @@ kind = kind_phys intent = in optional = F -[tsurf_ocn] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean +[tsurf_wat] + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -479,9 +479,9 @@ kind = kind_phys intent = in optional = F -[tskin_ocn] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tskin_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -506,9 +506,9 @@ kind = kind_phys intent = inout optional = F -[ustar_ocn] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean +[ustar_wat] + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -533,9 +533,9 @@ kind = kind_phys intent = inout optional = F -[znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) +[znt_wat] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -543,7 +543,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -552,7 +552,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -560,9 +560,9 @@ kind = kind_phys intent = inout optional = F -[cdm_ocn] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean +[cdm_wat] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -587,9 +587,9 @@ kind = kind_phys intent = inout optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -614,9 +614,9 @@ kind = kind_phys intent = inout optional = F -[rib_ocn] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean +[rib_wat] + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -641,9 +641,9 @@ kind = kind_phys intent = inout optional = F -[fm_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean +[fm_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -668,9 +668,9 @@ kind = kind_phys intent = inout optional = F -[fh_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean +[fh_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -695,9 +695,9 @@ kind = kind_phys intent = inout optional = F -[fh2_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean +[fh2_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -722,9 +722,9 @@ kind = kind_phys intent = inout optional = F -[ch_ocn] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean +[ch_wat] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -749,9 +749,9 @@ kind = kind_phys intent = inout optional = F -[fm10_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean +[fm10_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -776,9 +776,9 @@ kind = kind_phys intent = inout optional = F -[qss_ocn] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean +[qss_wat] + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/h2o_def.meta b/physics/h2o_def.meta index 21f3b903f..94ec7be2c 100644 --- a/physics/h2o_def.meta +++ b/physics/h2o_def.meta @@ -26,4 +26,4 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys - active = (flag_for_stratospheric_water_vapor_physics) \ No newline at end of file + active = (flag_for_stratospheric_water_vapor_physics) diff --git a/physics/module_MYJSFC_wrapper.meta b/physics/module_MYJSFC_wrapper.meta index e1e6ab2b9..f048683a3 100644 --- a/physics/module_MYJSFC_wrapper.meta +++ b/physics/module_MYJSFC_wrapper.meta @@ -472,8 +472,8 @@ intent = inout optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (interstitial) + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -481,7 +481,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -490,7 +490,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -499,8 +499,8 @@ intent = inout optional = F [ustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -526,8 +526,8 @@ intent = inout optional = F [cm_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -553,8 +553,8 @@ intent = inout optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -580,8 +580,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -607,8 +607,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -634,8 +634,8 @@ intent = inout optional = F [fm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity funct for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity funct for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -661,8 +661,8 @@ intent = inout optional = F [fh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -688,8 +688,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -715,8 +715,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_MYNNPBL_wrapper.F90 b/physics/module_MYNNPBL_wrapper.F90 index 6011c203e..4ea29b1f5 100644 --- a/physics/module_MYNNPBL_wrapper.F90 +++ b/physics/module_MYNNPBL_wrapper.F90 @@ -62,7 +62,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & dtsfc_diag,dqsfc_diag, & & dusfc_cice,dvsfc_cice, & & dtsfc_cice,dqsfc_cice, & - & hflx_ocn,qflx_ocn,stress_ocn, & + & hflx_wat,qflx_wat,stress_wat, & & oceanfrac,fice,wet,icy,dry, & & dusfci_cpl,dvsfci_cpl, & & dtsfci_cpl,dqsfci_cpl, & @@ -292,7 +292,7 @@ SUBROUTINE mynnedmf_wrapper_run( & real(kind=kind_phys), dimension(im), intent(in) :: & & dusfc_cice,dvsfc_cice,dtsfc_cice,dqsfc_cice, & - & stress_ocn,hflx_ocn,qflx_ocn, & + & stress_wat,hflx_wat,qflx_wat, & & oceanfrac,fice logical, dimension(im), intent(in) :: & @@ -560,14 +560,14 @@ SUBROUTINE mynnedmf_wrapper_run( & dqsfci_cpl(i) = dqsfc_cice(i) elseif (icy(i) .or. dry(i)) then ! use stress_ocean for opw component at mixed point if (wspd(i) > zero) then - dusfci_cpl(i) = -1.*rho(i,1)*stress_ocn(i)*u(i,1)/wspd(i) ! U-momentum flux - dvsfci_cpl(i) = -1.*rho(i,1)*stress_ocn(i)*v(i,1)/wspd(i) ! V-momentum flux + dusfci_cpl(i) = -1.*rho(i,1)*stress_wat(i)*u(i,1)/wspd(i) ! U-momentum flux + dvsfci_cpl(i) = -1.*rho(i,1)*stress_wat(i)*v(i,1)/wspd(i) ! V-momentum flux else dusfci_cpl(i) = zero dvsfci_cpl(i) = zero endif - dtsfci_cpl(i) = cp*rho(i,1)*hflx_ocn(i) ! sensible heat flux over open ocean - dqsfci_cpl(i) = XLV*rho(i,1)*qflx_ocn(i) ! latent heat flux over open ocean + dtsfci_cpl(i) = cp*rho(i,1)*hflx_wat(i) ! sensible heat flux over open ocean + dqsfci_cpl(i) = XLV*rho(i,1)*qflx_wat(i) ! latent heat flux over open ocean else ! use results from this scheme for 100% open ocean dusfci_cpl(i) = dusfci_diag(i) dvsfci_cpl(i) = dvsfci_diag(i) diff --git a/physics/module_MYNNPBL_wrapper.meta b/physics/module_MYNNPBL_wrapper.meta index 9b9d4cb52..36ff3b067 100644 --- a/physics/module_MYNNPBL_wrapper.meta +++ b/physics/module_MYNNPBL_wrapper.meta @@ -514,27 +514,27 @@ kind = kind_phys intent = in optional = F -[hflx_ocn] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean +[hflx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[qflx_ocn] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean +[qflx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys intent = in optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_MYNNSFC_wrapper.F90 b/physics/module_MYNNSFC_wrapper.F90 index e46a17d9a..f42aaedb7 100644 --- a/physics/module_MYNNSFC_wrapper.F90 +++ b/physics/module_MYNNSFC_wrapper.F90 @@ -57,22 +57,22 @@ SUBROUTINE mynnsfc_wrapper_run( & & u, v, t3d, qvsh, qc, prsl, phii, & & exner, ps, PBLH, slmsk, & & wet, dry, icy, & !intent(in) - & tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - & tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - & qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - & snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - & znt_ocn, znt_lnd, znt_ice, & !intent(inout) - & ust_ocn, ust_lnd, ust_ice, & !intent(inout) - & cm_ocn, cm_lnd, cm_ice, & !intent(inout) - & ch_ocn, ch_lnd, ch_ice, & !intent(inout) - & rb_ocn, rb_lnd, rb_ice, & !intent(inout) - & stress_ocn,stress_lnd,stress_ice, & !intent(inout) - & fm_ocn, fm_lnd, fm_ice, & !intent(inout) - & fh_ocn, fh_lnd, fh_ice, & !intent(inout) - & fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - & fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout) - & hflx_ocn, hflx_lnd, hflx_ice, & - & qflx_ocn, qflx_lnd, qflx_ice, & + & tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + & tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + & qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + & snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + & znt_wat, znt_lnd, znt_ice, & !intent(inout) + & ust_wat, ust_lnd, ust_ice, & !intent(inout) + & cm_wat, cm_lnd, cm_ice, & !intent(inout) + & ch_wat, ch_lnd, ch_ice, & !intent(inout) + & rb_wat, rb_lnd, rb_ice, & !intent(inout) + & stress_wat,stress_lnd,stress_ice, & !intent(inout) + & fm_wat, fm_lnd, fm_ice, & !intent(inout) + & fh_wat, fh_lnd, fh_ice, & !intent(inout) + & fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + & fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) + & hflx_wat, hflx_lnd, hflx_ice, & + & qflx_wat, qflx_lnd, qflx_ice, & & QSFC, qsfc_lnd_ruc, qsfc_ice_ruc, & & USTM, ZOL, MOL, & & RMOL, WSPD, ch, HFLX, QFLX, LH, & @@ -160,24 +160,24 @@ SUBROUTINE mynnsfc_wrapper_run( & logical, dimension(im), intent(in) :: wet, dry, icy real(kind=kind_phys), dimension(im), intent(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice real(kind=kind_phys), dimension(im), intent(inout) :: & - & znt_ocn, znt_lnd, znt_ice, & - & ust_ocn, ust_lnd, ust_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & fm_ocn, fm_lnd, fm_ice, & - & fh_ocn, fh_lnd, fh_ice, & - & fm10_ocn, fm10_lnd, fm10_ice, & - & fh2_ocn, fh2_lnd, fh2_ice, & - & hflx_ocn, hflx_lnd, hflx_ice, & - & qflx_ocn, qflx_lnd, qflx_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & znt_wat, znt_lnd, znt_ice, & + & ust_wat, ust_lnd, ust_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & fm_wat, fm_lnd, fm_ice, & + & fh_wat, fh_lnd, fh_ice, & + & fm10_wat, fm10_lnd, fm10_ice, & + & fh2_wat, fh2_lnd, fh2_ice, & + & hflx_wat, hflx_lnd, hflx_ice, & + & qflx_wat, qflx_lnd, qflx_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice !MYNN-2D real(kind=kind_phys), dimension(:), intent(in) :: & @@ -227,14 +227,14 @@ SUBROUTINE mynnsfc_wrapper_run( & mavail(i)=1.0 !snowh(i)=snowd(i)*800. !mm -> m !znt_lnd(i)=znt_lnd(i)*0.01 !cm -> m - !znt_ocn(i)=znt_ocn(i)*0.01 !cm -> m + !znt_wat(i)=znt_wat(i)*0.01 !cm -> m !znt_ice(i)=znt_ice(i)*0.01 !cm -> m cpm(i)=cp enddo ! cm -> m where (dry) znt_lnd=znt_lnd*0.01 - where (wet) znt_ocn=znt_ocn*0.01 + where (wet) znt_wat=znt_wat*0.01 where (icy) znt_ice=znt_ice*0.01 ! qsfc ruc @@ -255,15 +255,15 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"dz:",dz(1,1)," qsfc=",qsfc(1)," rmol:",rmol(1) ! write(0,*)" land water ice" ! write(0,*)dry(1),wet(1),icy(1) -! write(0,*)"ust:",ust_lnd(1),ust_ocn(1),ust_ice(1) -! write(0,*)"Tsk:",tskin_lnd(1),tskin_ocn(1),tskin_ice(1) -! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_ocn(1),tsurf_ice(1) -! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_ocn(1),qsfc_ice(1) -! write(0,*)"sno:",snowh_lnd(1),snowh_ocn(1),snowh_ice(1) -! write(0,*)"znt:",znt_lnd(1),znt_ocn(1),znt_ice(1) +! write(0,*)"ust:",ust_lnd(1),ust_wat(1),ust_ice(1) +! write(0,*)"Tsk:",tskin_lnd(1),tskin_wat(1),tskin_ice(1) +! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_wat(1),tsurf_ice(1) +! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_wat(1),qsfc_ice(1) +! write(0,*)"sno:",snowh_lnd(1),snowh_wat(1),snowh_ice(1) +! write(0,*)"znt:",znt_lnd(1),znt_wat(1),znt_ice(1) ! !write(0,*)"HFX:",hfx(1)," qfx",qfx(1) ! write(0,*)"qsfc:",qsfc(1)," ps:",ps(1) -! write(0,*)"wspd:",wspd(1),"rb=",rb_ocn(1) +! write(0,*)"wspd:",wspd(1),"rb=",rb_wat(1) ! write(0,*)"delt=",delt," im=",im," levs=",levs ! write(0,*)"flag_init=",flag_init ! write(0,*)"flag_restart=",flag_restart @@ -287,22 +287,22 @@ SUBROUTINE mynnsfc_wrapper_run( & & redrag=redrag,sfc_z0_type=sfc_z0_type, & !intent(in) itimestep=itimestep,iter=iter, & wet=wet, dry=dry, icy=icy, & !intent(in) - tskin_ocn=tskin_ocn, tskin_lnd=tskin_lnd, tskin_ice=tskin_ice, & !intent(in) - tsurf_ocn=tsurf_ocn, tsurf_lnd=tsurf_lnd, tsurf_ice=tsurf_ice, & !intent(in) - qsfc_ocn=qsfc_ocn, qsfc_lnd=qsfc_lnd, qsfc_ice=qsfc_ice, & !intent(in) - snowh_ocn=snowh_ocn, snowh_lnd=snowh_lnd, snowh_ice=snowh_ice, & !intent(in) - znt_ocn=znt_ocn, znt_lnd=znt_lnd, znt_ice=znt_ice, & !intent(inout) - ust_ocn=ust_ocn, ust_lnd=ust_lnd, ust_ice=ust_ice, & !intent(inout) - cm_ocn=cm_ocn, cm_lnd=cm_lnd, cm_ice=cm_ice, & !intent(inout) - ch_ocn=ch_ocn, ch_lnd=ch_lnd, ch_ice=ch_ice, & !intent(inout) - rb_ocn=rb_ocn, rb_lnd=rb_lnd, rb_ice=rb_ice, & !intent(inout) - stress_ocn=stress_ocn,stress_lnd=stress_lnd,stress_ice=stress_ice, & !intent(inout) - fm_ocn=fm_ocn, fm_lnd=fm_lnd, fm_ice=fm_ice, & !intent(inout) - fh_ocn=fh_ocn, fh_lnd=fh_lnd, fh_ice=fh_ice, & !intent(inout) - fm10_ocn=fm10_ocn, fm10_lnd=fm10_lnd, fm10_ice=fm10_ice, & !intent(inout) - fh2_ocn=fh2_ocn, fh2_lnd=fh2_lnd, fh2_ice=fh2_ice, & !intent(inout) - hflx_ocn=hflx_ocn, hflx_lnd=hflx_lnd, hflx_ice=hflx_ice, & - qflx_ocn=qflx_ocn, qflx_lnd=qflx_lnd, qflx_ice=qflx_ice, & + tskin_wat=tskin_wat, tskin_lnd=tskin_lnd, tskin_ice=tskin_ice, & !intent(in) + tsurf_wat=tsurf_wat, tsurf_lnd=tsurf_lnd, tsurf_ice=tsurf_ice, & !intent(in) + qsfc_wat=qsfc_wat, qsfc_lnd=qsfc_lnd, qsfc_ice=qsfc_ice, & !intent(in) + snowh_wat=snowh_wat, snowh_lnd=snowh_lnd, snowh_ice=snowh_ice, & !intent(in) + znt_wat=znt_wat, znt_lnd=znt_lnd, znt_ice=znt_ice, & !intent(inout) + ust_wat=ust_wat, ust_lnd=ust_lnd, ust_ice=ust_ice, & !intent(inout) + cm_wat=cm_wat, cm_lnd=cm_lnd, cm_ice=cm_ice, & !intent(inout) + ch_wat=ch_wat, ch_lnd=ch_lnd, ch_ice=ch_ice, & !intent(inout) + rb_wat=rb_wat, rb_lnd=rb_lnd, rb_ice=rb_ice, & !intent(inout) + stress_wat=stress_wat,stress_lnd=stress_lnd,stress_ice=stress_ice, & !intent(inout) + fm_wat=fm_wat, fm_lnd=fm_lnd, fm_ice=fm_ice, & !intent(inout) + fh_wat=fh_wat, fh_lnd=fh_lnd, fh_ice=fh_ice, & !intent(inout) + fm10_wat=fm10_wat, fm10_lnd=fm10_lnd, fm10_ice=fm10_ice, & !intent(inout) + fh2_wat=fh2_wat, fh2_lnd=fh2_lnd, fh2_ice=fh2_ice, & !intent(inout) + hflx_wat=hflx_wat, hflx_lnd=hflx_lnd, hflx_ice=hflx_ice, & + qflx_wat=qflx_wat, qflx_lnd=qflx_lnd, qflx_ice=qflx_ice, & ch=ch,CHS=chs,CHS2=chs2,CQS2=cqs2,CPM=cpm, & ZNT=znt,USTM=ustm,ZOL=zol,MOL=mol,RMOL=rmol, & psim=psim,psih=psih, & @@ -330,13 +330,13 @@ SUBROUTINE mynnsfc_wrapper_run( & ! !evap(i)=QFX(i) !or /rho ?? ! ! DH* note - this could be automated (CCPP knows how to convert m to cm) ! znt_lnd(i)=znt_lnd(i)*100. !m -> cm - ! znt_ocn(i)=znt_ocn(i)*100. + ! znt_wat(i)=znt_wat(i)*100. ! znt_ice(i)=znt_ice(i)*100. !enddo ! m -> cm where (dry) znt_lnd=znt_lnd*100. - where (wet) znt_ocn=znt_ocn*100. + where (wet) znt_wat=znt_wat*100. where (icy) znt_ice=znt_ice*100. ! if (lprnt) then @@ -344,17 +344,17 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"finished with mynn_surface layer; output:" ! write(0,*)" land water ice" ! write(0,*)dry(1),wet(1),icy(1) -! write(0,*)"ust:",ust_lnd(1),ust_ocn(1),ust_ice(1) -! write(0,*)"Tsk:",tskin_lnd(1),tskin_ocn(1),tskin_ice(1) -! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_ocn(1),tsurf_ice(1) -! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_ocn(1),qsfc_ice(1) -! write(0,*)"sno:",snowh_lnd(1),snowh_ocn(1),snowh_ice(1) -! write(0,*)"znt (cm):",znt_lnd(1),znt_ocn(1),znt_ice(1) -! write(0,*)"cm:",cm_lnd(1),cm_ocn(1),cm_ice(1) -! write(0,*)"ch:",ch_lnd(1),ch_ocn(1),ch_ice(1) -! write(0,*)"fm:",fm_lnd(1),fm_ocn(1),fm_ice(1) -! write(0,*)"fh:",fh_lnd(1),fh_ocn(1),fh_ice(1) -! write(0,*)"rb:",rb_lnd(1),rb_ocn(1),rb_ice(1) +! write(0,*)"ust:",ust_lnd(1),ust_wat(1),ust_ice(1) +! write(0,*)"Tsk:",tskin_lnd(1),tskin_wat(1),tskin_ice(1) +! write(0,*)"Tsurf:",tsurf_lnd(1),tsurf_wat(1),tsurf_ice(1) +! write(0,*)"Qsfc:",qsfc_lnd(1),qsfc_wat(1),qsfc_ice(1) +! write(0,*)"sno:",snowh_lnd(1),snowh_wat(1),snowh_ice(1) +! write(0,*)"znt (cm):",znt_lnd(1),znt_wat(1),znt_ice(1) +! write(0,*)"cm:",cm_lnd(1),cm_wat(1),cm_ice(1) +! write(0,*)"ch:",ch_lnd(1),ch_wat(1),ch_ice(1) +! write(0,*)"fm:",fm_lnd(1),fm_wat(1),fm_ice(1) +! write(0,*)"fh:",fh_lnd(1),fh_wat(1),fh_ice(1) +! write(0,*)"rb:",rb_lnd(1),rb_wat(1),rb_ice(1) ! write(0,*)"xland=",xland(1)," wstar:",wstar(1) ! write(0,*)"HFX:",hfx(1)," qfx:",qfx(1) ! write(0,*)"HFLX:",hflx(1)," evap:",evap(1) diff --git a/physics/module_MYNNSFC_wrapper.meta b/physics/module_MYNNSFC_wrapper.meta index e3e870ff2..1f16ff161 100644 --- a/physics/module_MYNNSFC_wrapper.meta +++ b/physics/module_MYNNSFC_wrapper.meta @@ -154,8 +154,8 @@ intent = in optional = F [sfc_z0_type] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -302,9 +302,9 @@ type = logical intent = in optional = F -[tskin_ocn] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) +[tskin_wat] + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -329,9 +329,9 @@ kind = kind_phys intent = in optional = F -[tsurf_ocn] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean +[tsurf_wat] + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -356,9 +356,9 @@ kind = kind_phys intent = in optional = F -[qsfc_ocn] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean +[qsfc_wat] + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -383,9 +383,9 @@ kind = kind_phys intent = inout optional = F -[snowh_ocn] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean +[snowh_wat] + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -410,9 +410,9 @@ kind = kind_phys intent = in optional = F -[znt_ocn] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) +[znt_wat] + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -420,7 +420,7 @@ intent = inout optional = F [znt_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -429,7 +429,7 @@ intent = inout optional = F [znt_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -437,9 +437,9 @@ kind = kind_phys intent = inout optional = F -[ust_ocn] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean +[ust_wat] + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -464,9 +464,9 @@ kind = kind_phys intent = inout optional = F -[cm_ocn] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean +[cm_wat] + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -491,9 +491,9 @@ kind = kind_phys intent = inout optional = F -[ch_ocn] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean +[ch_wat] + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -518,9 +518,9 @@ kind = kind_phys intent = inout optional = F -[rb_ocn] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean +[rb_wat] + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -545,9 +545,9 @@ kind = kind_phys intent = inout optional = F -[stress_ocn] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean +[stress_wat] + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -572,9 +572,9 @@ kind = kind_phys intent = inout optional = F -[fm_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean +[fm_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -599,9 +599,9 @@ kind = kind_phys intent = inout optional = F -[fh_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean +[fh_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -626,9 +626,9 @@ kind = kind_phys intent = inout optional = F -[fm10_ocn] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean +[fm10_wat] + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -653,9 +653,9 @@ kind = kind_phys intent = inout optional = F -[fh2_ocn] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean +[fh2_wat] + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -680,9 +680,9 @@ kind = kind_phys intent = inout optional = F -[hflx_ocn] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean +[hflx_wat] + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -707,9 +707,9 @@ kind = kind_phys intent = inout optional = F -[qflx_ocn] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean +[qflx_wat] + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real diff --git a/physics/module_sf_exchcoef.f90 b/physics/module_sf_exchcoef.f90 old mode 100755 new mode 100644 diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index 340fb703a..21ef4e1da 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -137,22 +137,22 @@ SUBROUTINE SFCLAY_mynn( & & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & !in wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn,stress_lnd,stress_ice, & !intent(inout) - fm_ocn, fm_lnd, fm_ice, & !intent(inout) - fh_ocn, fh_lnd, fh_ice, & !intent(inout) - fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - fh2_ocn, fh2_lnd, fh2_ice, & !intent(inout) - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat,stress_lnd,stress_ice, & !intent(inout) + fm_wat, fm_lnd, fm_ice, & !intent(inout) + fh_wat, fh_lnd, fh_ice, & !intent(inout) + fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & CH,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -332,25 +332,25 @@ SUBROUTINE SFCLAY_mynn( & & wet, dry, icy REAL, DIMENSION( ims:ime ), INTENT(IN) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice, & + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice, & & qsfc_ruc REAL, DIMENSION( ims:ime), INTENT(INOUT) :: & - & ZNT_ocn, ZNT_lnd, ZNT_ice, & - & UST_ocn, UST_lnd, UST_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & fm_ocn, fm_lnd, fm_ice, & - & fh_ocn, fh_lnd, fh_ice, & - & fm10_ocn, fm10_lnd, fm10_ice, & - & fh2_ocn, fh2_lnd, fh2_ice, & - & HFLX_ocn, HFLX_lnd, HFLX_ice, & - & QFLX_ocn, QFLX_lnd, QFLX_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & ZNT_wat, ZNT_lnd, ZNT_ice, & + & UST_wat, UST_lnd, UST_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & fm_wat, fm_lnd, fm_ice, & + & fh_wat, fh_lnd, fh_ice, & + & fm10_wat, fm10_lnd, fm10_ice, & + & fh2_wat, fh2_lnd, fh2_ice, & + & HFLX_wat, HFLX_lnd, HFLX_ice, & + & QFLX_wat, QFLX_lnd, QFLX_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice !ADDITIONAL OUTPUT !JOE-begin @@ -406,12 +406,12 @@ SUBROUTINE SFCLAY_mynn( & IF (itimestep==1 .AND. iter==1) THEN DO i=its,ite !Everything here is used before calculated - UST_OCN(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) + UST_WAT(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) UST_LND(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) UST_ICE(i)=MAX(0.04*SQRT(U1D(i)*U1D(i) + V1D(i)*V1D(i)),0.001) MOL(i)=0.0 QSFC(i)=QV3D(i,kts)/(1.+QV3D(i,kts)) - QSFC_OCN(i)=QSFC(i) + QSFC_WAT(i)=QSFC(i) QSFC_LND(i)=QSFC(i) QSFC_ICE(i)=QSFC(i) qstar(i)=0.0 @@ -440,22 +440,22 @@ SUBROUTINE SFCLAY_mynn( & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn, stress_lnd, stress_ice, & !intent(inout) - fm_ocn, fm_lnd, fm_ice, & !intent(inout) - fh_ocn, fh_lnd, fh_ice, & !intent(inout) - fm10_ocn, fm10_lnd, fm10_ice, & !intent(inout) - fh2_ocn, fh2_lnd, fh2_ice, & - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat, stress_lnd, stress_ice, & !intent(inout) + fm_wat, fm_lnd, fm_ice, & !intent(inout) + fh_wat, fh_lnd, fh_ice, & !intent(inout) + fm10_wat, fm10_lnd, fm10_ice, & !intent(inout) + fh2_wat, fh2_lnd, fh2_ice, & + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & ch,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -487,22 +487,22 @@ SUBROUTINE SFCLAY1D_mynn( & redrag,sfc_z0_type, & !intent(in) itimestep,iter, & wet, dry, icy, & !intent(in) - tskin_ocn, tskin_lnd, tskin_ice, & !intent(in) - tsurf_ocn, tsurf_lnd, tsurf_ice, & !intent(in) - qsfc_ocn, qsfc_lnd, qsfc_ice, & !intent(in) - snowh_ocn, snowh_lnd, snowh_ice, & !intent(in) - ZNT_ocn, ZNT_lnd, ZNT_ice, & !intent(inout) - UST_ocn, UST_lnd, UST_ice, & !intent(inout) - cm_ocn, cm_lnd, cm_ice, & !intent(inout) - ch_ocn, ch_lnd, ch_ice, & !intent(inout) - rb_ocn, rb_lnd, rb_ice, & !intent(inout) - stress_ocn, stress_lnd, stress_ice, & !intent(inout) - psix_ocn, psix_lnd, psix_ice, & !=fm, intent(inout) - psit_ocn, psit_lnd, psit_ice, & !=fh, intent(inout) - psix10_ocn, psix10_lnd, psix10_ice, & !=fm10, intent(inout) - psit2_ocn, psit2_lnd, psit2_ice, & !=fh2, intent(inout) - HFLX_ocn, HFLX_lnd, HFLX_ice, & - QFLX_ocn, QFLX_lnd, QFLX_ice, & + tskin_wat, tskin_lnd, tskin_ice, & !intent(in) + tsurf_wat, tsurf_lnd, tsurf_ice, & !intent(in) + qsfc_wat, qsfc_lnd, qsfc_ice, & !intent(in) + snowh_wat, snowh_lnd, snowh_ice, & !intent(in) + ZNT_wat, ZNT_lnd, ZNT_ice, & !intent(inout) + UST_wat, UST_lnd, UST_ice, & !intent(inout) + cm_wat, cm_lnd, cm_ice, & !intent(inout) + ch_wat, ch_lnd, ch_ice, & !intent(inout) + rb_wat, rb_lnd, rb_ice, & !intent(inout) + stress_wat, stress_lnd, stress_ice, & !intent(inout) + psix_wat, psix_lnd, psix_ice, & !=fm, intent(inout) + psit_wat, psit_lnd, psit_ice, & !=fh, intent(inout) + psix10_wat, psix10_lnd, psix10_ice, & !=fm10, intent(inout) + psit2_wat, psit2_lnd, psit2_ice, & !=fh2, intent(inout) + HFLX_wat, HFLX_lnd, HFLX_ice, & + QFLX_wat, QFLX_lnd, QFLX_ice, & ch,CHS,CHS2,CQS2,CPM, & ZNT,USTM,ZOL,MOL,RMOL, & PSIM,PSIH, & @@ -583,24 +583,24 @@ SUBROUTINE SFCLAY1D_mynn( & & wet, dry, icy REAL, DIMENSION( ims:ime ), INTENT(in) :: & - & tskin_ocn, tskin_lnd, tskin_ice, & - & tsurf_ocn, tsurf_lnd, tsurf_ice, & - & snowh_ocn, snowh_lnd, snowh_ice + & tskin_wat, tskin_lnd, tskin_ice, & + & tsurf_wat, tsurf_lnd, tsurf_ice, & + & snowh_wat, snowh_lnd, snowh_ice REAL, DIMENSION( ims:ime ), INTENT(inout) :: & - & ZNT_ocn, ZNT_lnd, ZNT_ice, & - & UST_ocn, UST_lnd, UST_ice, & - & cm_ocn, cm_lnd, cm_ice, & - & ch_ocn, ch_lnd, ch_ice, & - & rb_ocn, rb_lnd, rb_ice, & - & stress_ocn,stress_lnd,stress_ice, & - & psix_ocn, psix_lnd, psix_ice, & - & psit_ocn, psit_lnd, psit_ice, & - & psix10_ocn,psix10_lnd,psix10_ice, & - & psit2_ocn, psit2_lnd, psit2_ice, & - & HFLX_ocn, HFLX_lnd, HFLX_ice, & - & QFLX_ocn, QFLX_lnd, QFLX_ice, & - & qsfc_ocn, qsfc_lnd, qsfc_ice + & ZNT_wat, ZNT_lnd, ZNT_ice, & + & UST_wat, UST_lnd, UST_ice, & + & cm_wat, cm_lnd, cm_ice, & + & ch_wat, ch_lnd, ch_ice, & + & rb_wat, rb_lnd, rb_ice, & + & stress_wat,stress_lnd,stress_ice, & + & psix_wat, psix_lnd, psix_ice, & + & psit_wat, psit_lnd, psit_ice, & + & psix10_wat,psix10_lnd,psix10_ice, & + & psit2_wat, psit2_lnd, psit2_ice, & + & HFLX_wat, HFLX_lnd, HFLX_ice, & + & QFLX_wat, QFLX_lnd, QFLX_ice, & + & qsfc_wat, qsfc_lnd, qsfc_ice REAL, DIMENSION( its:ite ), INTENT(IN) :: rstoch1D @@ -632,27 +632,27 @@ SUBROUTINE SFCLAY1D_mynn( & PSFC, & !press at surface (Pa/1000) QSFCMR, & !qv at surface (mixing ratio, kg/kg) THCON, & !conversion from temp to theta - zratio_lnd, zratio_ice, zratio_ocn, & !z0/zt - TSK_lnd, TSK_ice, TSK_ocn, & !absolute temperature - THSK_lnd, THSK_ice, THSK_ocn, & !theta - THVSK_lnd, THVSK_ice, THVSK_ocn, & !theta-v - GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_ocn, & !LOG((ZA(I)+ZNT(i))/ZNT(i)) - GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_ocn, & !LOG((ZA(I)+ZT(i))/ZT(i)) - GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_ocn, & !LOG((2.0+ZNT(I))/ZNT(I)) - GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_ocn, & !LOG((2.0+ZT(I))/ZT(I)) - GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_ocn, & !LOG((10.+ZNT(I))/ZNT(I)) - GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_ocn, & !LOG((10.+ZT(I))/ZT(I)) - ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_ocn, & - ZT_lnd, ZT_ice, ZT_ocn, & - ZQ_lnd, ZQ_ice, ZQ_ocn, & - PSIQ_lnd, PSIQ_ice, PSIQ_ocn, & - PSIQ2_lnd, PSIQ2_ice, PSIQ2_ocn, & - QSFCMR_lnd, QSFCMR_ice, QSFCMR_ocn + zratio_lnd, zratio_ice, zratio_wat, & !z0/zt + TSK_lnd, TSK_ice, TSK_wat, & !absolute temperature + THSK_lnd, THSK_ice, THSK_wat, & !theta + THVSK_lnd, THVSK_ice, THVSK_wat, & !theta-v + GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_wat, & !LOG((ZA(I)+ZNT(i))/ZNT(i)) + GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_wat, & !LOG((ZA(I)+ZT(i))/ZT(i)) + GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_wat, & !LOG((2.0+ZNT(I))/ZNT(I)) + GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_wat, & !LOG((2.0+ZT(I))/ZT(I)) + GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_wat, & !LOG((10.+ZNT(I))/ZNT(I)) + GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_wat, & !LOG((10.+ZT(I))/ZT(I)) + ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_wat, & + ZT_lnd, ZT_ice, ZT_wat, & + ZQ_lnd, ZQ_ice, ZQ_wat, & + PSIQ_lnd, PSIQ_ice, PSIQ_wat, & + PSIQ2_lnd, PSIQ2_ice, PSIQ2_wat, & + QSFCMR_lnd, QSFCMR_ice, QSFCMR_wat INTEGER :: N,I,K,L,yesno REAL :: PL,E1,TABS - REAL :: WSPD_lnd, WSPD_ice, WSPD_ocn + REAL :: WSPD_lnd, WSPD_ice, WSPD_wat REAL :: DTHVDZ,DTHVM,VCONV,ZOL2,ZOL10,ZOLZA,ZOLZ0,ZOLZT REAL :: DTG,DTTHX,PSIQ,PSIQ2,PSIQ10,PSIT10 REAL :: FLUXC,VSGD @@ -676,9 +676,9 @@ SUBROUTINE SFCLAY1D_mynn( & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF IF (wet(i)) THEN - write(0,*)"wet=",wet(i)," pblh=",pblh(i)," tsk=", tskin_ocn(i),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"wet=",wet(i)," pblh=",pblh(i)," tsk=", tskin_wat(i),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDDO @@ -690,7 +690,7 @@ SUBROUTINE SFCLAY1D_mynn( & ! DEFINE SKIN TEMPERATURES FOR LAND/WATER/ICE TSK_lnd(I) = 0.5 * (tsurf_lnd(i)+tskin_lnd(i)) TSK_ice(I) = 0.5 * (tsurf_ice(i)+tskin_ice(i)) - TSK_ocn(I) = 0.5 * (tsurf_ocn(i)+tskin_ocn(i)) + TSK_wat(I) = 0.5 * (tsurf_wat(i)+tskin_wat(i)) QVSH(I)=QV1D(I)/(1.+QV1D(I)) !CONVERT TO SPEC HUM (kg/kg) THCON(I)=(100000./PSFCPA(I))**ROVCP ENDDO @@ -699,14 +699,14 @@ SUBROUTINE SFCLAY1D_mynn( & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_lnd(I) = TSK_lnd(I)*THCON(I) !(K) THSK_ice(I) = TSK_ice(I)*THCON(I) !(K) - THSK_ocn(I) = TSK_ocn(I)*THCON(I) !(K) + THSK_wat(I) = TSK_wat(I)*THCON(I) !(K) ENDDO DO I=its,ite ! CONVERT SKIN POTENTIAL TEMPERATURES TO VIRTUAL POTENTIAL TEMPERATURE: THVSK_lnd(I) = THSK_lnd(I)*(1.+EP1*QVSH(I)) !(K) THVSK_ice(I) = THSK_ice(I)*(1.+EP1*QVSH(I)) !(K) - THVSK_ocn(I) = THSK_ocn(I)*(1.+EP1*QVSH(I)) !(K) + THVSK_wat(I) = THSK_wat(I)*(1.+EP1*QVSH(I)) !(K) ENDDO DO I=its,ite @@ -739,8 +739,8 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"=== derived quantities in mynn sfc layer, i:", i write(*,*)" land, ice, water" write(*,*)"dry=",dry(i)," icy=",icy(i)," wet=",wet(i) - write(*,*)"tsk=", tsk_lnd(i),tsk_ice(i),tsk_ocn(i) - write(*,*)"thvsk=", thvsk_lnd(i),thvsk_ice(i),thvsk_ocn(i) + write(*,*)"tsk=", tsk_lnd(i),tsk_ice(i),tsk_wat(i) + write(*,*)"thvsk=", thvsk_lnd(i),thvsk_ice(i),thvsk_wat(i) write(*,*)"THV1D=", THV1D(i)," TV1D=",TV1D(i) write(*,*)"RHO1D=", RHO1D(i)," GOVRTH=",GOVRTH(i) ENDDO @@ -750,16 +750,16 @@ SUBROUTINE SFCLAY1D_mynn( & IF (ITIMESTEP == 1) THEN IF (wet(i)) THEN - IF (TSK_ocn(I) .LT. 273.15) THEN + IF (TSK_wat(I) .LT. 273.15) THEN !SATURATION VAPOR PRESSURE WRT ICE (SVP1=.6112; 10*mb) - E1=SVP1*EXP(4648*(1./273.15 - 1./TSK_ocn(I)) - & - & 11.64*LOG(273.15/TSK_ocn(I)) + 0.02265*(273.15 - TSK_ocn(I))) + E1=SVP1*EXP(4648*(1./273.15 - 1./TSK_wat(I)) - & + & 11.64*LOG(273.15/TSK_wat(I)) + 0.02265*(273.15 - TSK_wat(I))) ELSE !SATURATION VAPOR PRESSURE WRT WATER (Bolton 1980) - E1=SVP1*EXP(SVP2*(TSK_ocn(I)-SVPT0)/(TSK_ocn(i)-SVP3)) + E1=SVP1*EXP(SVP2*(TSK_wat(I)-SVPT0)/(TSK_wat(i)-SVP3)) ENDIF - QSFC_ocn(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity - QSFCMR_ocn(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio + QSFC_wat(I)=EP2*E1/(PSFC(I)-ep_3*E1) !specific humidity + QSFCMR_wat(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio ENDIF IF (dry(i)) THEN TABS = 0.5*(TSK_lnd(I) + T1D(I)) @@ -791,7 +791,7 @@ SUBROUTINE SFCLAY1D_mynn( & ELSE ! Use what comes out of the LSM, NST, and CICE - IF (wet(i)) QSFCMR_ocn(I)=QSFC_ocn(I)/(1.-QSFC_ocn(I)) + IF (wet(i)) QSFCMR_wat(I)=QSFC_wat(I)/(1.-QSFC_wat(I)) IF (dry(i)) QSFCMR_lnd(I)=QSFC_lnd(I)/(1.-QSFC_lnd(I)) IF (icy(i)) QSFCMR_ice(I)=QSFC_ice(I)/(1.-QSFC_ice(I)) @@ -818,7 +818,7 @@ SUBROUTINE SFCLAY1D_mynn( & DO I=its,ite if (wet(i)) then write(*,*)"==== q-bombs, i:",i," wet" - write(*,*)"QSFC_ocn=", QSFC_ocn(I)," QSFCMR_ocn=", QSFCMR_ocn(I)," QGH=",QGH(I) + write(*,*)"QSFC_wat=", QSFC_wat(I)," QSFCMR_wat=", QSFCMR_wat(I)," QGH=",QGH(I) endif if(dry(i)) then write(*,*)"==== q-bombs, i:",i," dry" @@ -837,39 +837,39 @@ SUBROUTINE SFCLAY1D_mynn( & ! by every user, the bug manifests itself in the resulting wind speed WSPD(I) ! being -99.0 despite the assignments in lines 932 and 933. *DH WSPD(I)=SQRT(U1D(I)*U1D(I)+V1D(I)*V1D(I)) - WSPD_ocn = -99. + WSPD_wat = -99. WSPD_ice = -99. WSPD_lnd = -99. IF (wet(i)) THEN - DTHVDZ=(THV1D(I)-THVSK_ocn(I)) + DTHVDZ=(THV1D(I)-THVSK_wat(I)) !-------------------------------------------------------- ! Calculate the convective velocity scale (WSTAR) and ! subgrid-scale velocity (VSGD) following Beljaars (1995, QJRMS) ! and Mahrt and Sun (1995, MWR), respectively !------------------------------------------------------- fluxc = max(hfx(i)/RHO1D(i)/cp & - & + ep1*THVSK_ocn(I)*qfx(i)/RHO1D(i),0.) + & + ep1*THVSK_wat(I)*qfx(i)/RHO1D(i),0.) !WSTAR(I) = vconvc*(g/TSK(i)*pblh(i)*fluxc)**onethird - WSTAR(I) = vconvc*(g/TSK_ocn(i)*pblh(i)*fluxc)**onethird + WSTAR(I) = vconvc*(g/TSK_wat(i)*pblh(i)*fluxc)**onethird !-------------------------------------------------------- ! Mahrt and Sun low-res correction - modified for water points (halved) ! (for 13 km ~ 0.18 m/s; for 3 km == 0 m/s) !-------------------------------------------------------- VSGD = MIN( 0.25 * (max(dx(i)/5000.-1.,0.))**onethird , 0.5) - WSPD_ocn=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd) - WSPD_ocn=MAX(WSPD_ocn,wmin) + WSPD_wat=SQRT(WSPD(I)*WSPD(I)+WSTAR(I)*WSTAR(I)+vsgd*vsgd) + WSPD_wat=MAX(WSPD_wat,wmin) !-------------------------------------------------------- ! CALCULATE THE BULK RICHARDSON NUMBER OF SURFACE LAYER, ! ACCORDING TO AKB(1976), EQ(12). !-------------------------------------------------------- - rb_ocn(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD_ocn*WSPD_ocn) + rb_wat(I)=GOVRTH(I)*ZA(I)*DTHVDZ/(WSPD_wat*WSPD_wat) IF (ITIMESTEP == 1) THEN - rb_ocn(I)=MAX(rb_ocn(I),-2.0) - rb_ocn(I)=MIN(rb_ocn(I), 2.0) + rb_wat(I)=MAX(rb_wat(I),-2.0) + rb_wat(I)=MIN(rb_wat(I), 2.0) ELSE - rb_ocn(I)=MAX(rb_ocn(I),-4.0) - rb_ocn(I)=MIN(rb_ocn(I), 4.0) + rb_wat(I)=MAX(rb_wat(I),-4.0) + rb_wat(I)=MIN(rb_wat(I), 4.0) ENDIF ENDIF ! end water point @@ -948,7 +948,7 @@ SUBROUTINE SFCLAY1D_mynn( & ENDIF ! end ice point !NOW CONDENSE THE POSSIBLE WSPD VALUES BY TAKING THE MAXIMUM - WSPD(I) = MAX(WSPD_ice,WSPD_ocn) + WSPD(I) = MAX(WSPD_ice,WSPD_wat) WSPD(I) = MAX(WSPD_lnd,WSPD(I)) IF (debug_code == 2) THEN @@ -956,7 +956,7 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"ITIMESTEP=",ITIMESTEP write(*,*)"WSPD=", WSPD(I)," WSTAR=", WSTAR(I)," vsgd=",vsgd IF (icy(i))write(*,*)"rb_ice=", rb_ice(I)," DTHVDZ=",DTHVDZ - IF (wet(i))write(*,*)"rb_ocn=", rb_ocn(I)," DTHVDZ=",DTHVDZ + IF (wet(i))write(*,*)"rb_wat=", rb_wat(I)," DTHVDZ=",DTHVDZ IF (dry(i))write(*,*)"rb_lnd=", rb_lnd(I)," DTHVDZ=",DTHVDZ ENDIF @@ -992,118 +992,118 @@ SUBROUTINE SFCLAY1D_mynn( & !-------------------------------------- IF (debug_code == 2) THEN write(*,*)"=============Input to ZNT over water:" - write(*,*)"u*:",UST_ocn(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) + write(*,*)"u*:",UST_wat(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) ENDIF IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN !COARE 3.0 (MISLEADING SUBROUTINE NAME) - CALL charnock_1955(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL charnock_1955(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ELSE !COARE 3.5 - CALL edson_etal_2013(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL edson_etal_2013(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ENDIF ELSEIF ( ISFTCFLX .EQ. 1 .OR. ISFTCFLX .EQ. 2 ) THEN - CALL davis_etal_2008(ZNT_ocn(i),UST_ocn(i)) + CALL davis_etal_2008(ZNT_wat(i),UST_wat(i)) ELSEIF ( ISFTCFLX .EQ. 3 ) THEN - CALL Taylor_Yelland_2001(ZNT_ocn(i),UST_ocn(i),WSPD(i)) + CALL Taylor_Yelland_2001(ZNT_wat(i),UST_wat(i),WSPD(i)) ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS surface layer scheme - CALL GFS_z0_ocn(ZNT_ocn(i),UST_ocn(i),WSPD(i),ZA(I),sfc_z0_type,redrag) + CALL GFS_z0_wat(ZNT_wat(i),UST_wat(i),WSPD(i),ZA(I),sfc_z0_type,redrag) ENDIF ELSE !DEFAULT TO COARE 3.0/3.5 IF (COARE_OPT .EQ. 3.0) THEN !COARE 3.0 - CALL charnock_1955(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL charnock_1955(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ELSE !COARE 3.5 - CALL edson_etal_2013(ZNT_ocn(i),UST_ocn(i),WSPD(i),visc,ZA(I)) + CALL edson_etal_2013(ZNT_wat(i),UST_wat(i),WSPD(i),visc,ZA(I)) ENDIF ENDIF endif !-end wave model check ! add stochastic perturbation of ZNT if (spp_pbl==1) then - ZNTstoch_ocn(I) = MAX(ZNT_ocn(I) + ZNT_ocn(I)*1.0*rstoch1D(i), 1e-6) + ZNTstoch_wat(I) = MAX(ZNT_wat(I) + ZNT_wat(I)*1.0*rstoch1D(i), 1e-6) else - ZNTstoch_ocn(I) = ZNT_ocn(I) + ZNTstoch_wat(I) = ZNT_wat(I) endif IF (debug_code > 1) THEN write(*,*)"==========Output ZNT over water:" - write(*,*)"ZNT:",ZNTstoch_ocn(i) + write(*,*)"ZNT:",ZNTstoch_wat(i) ENDIF !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING NEW ZNT ! AHW: Garrattt formula: Calculate roughness Reynolds number ! Kinematic viscosity of air (linear approx to ! temp dependence at sea level) - restar=MAX(ust_ocn(i)*ZNTstoch_ocn(i)/visc, 0.1) + restar=MAX(ust_wat(i)*ZNTstoch_wat(i)/visc, 0.1) !-------------------------------------- !CALCULATE z_t and z_q !-------------------------------------- IF (debug_code > 1) THEN write(*,*)"=============Input to ZT over water:" - write(*,*)"u*:",UST_ocn(i)," restar=",restar," visc=",visc + write(*,*)"u*:",UST_wat(i)," restar=",restar," visc=",visc ENDIF IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE !presumably, this will be published soon, but hasn't yet - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 1 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 2 ) THEN - CALL garratt_1992(ZT_ocn(i),ZQ_ocn(i),ZNTstoch_ocn(i),restar,2.0) + CALL garratt_1992(ZT_wat(i),ZQ_wat(i),ZNTstoch_wat(i),restar,2.0) ELSEIF ( ISFTCFLX .EQ. 3 ) THEN IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS zt formulation - CALL GFS_zt_ocn(ZT_ocn(i),ZNTstoch_ocn(i),restar,WSPD(i),ZA(i),sfc_z0_type) - ZQ_ocn(i)=ZT_ocn(i) + CALL GFS_zt_wat(ZT_wat(i),ZNTstoch_wat(i),restar,WSPD(i),ZA(i),sfc_z0_type) + ZQ_wat(i)=ZT_wat(i) ENDIF ELSE !DEFAULT TO COARE 3.0/3.5 IF (COARE_OPT .EQ. 3.0) THEN - CALL fairall_etal_2003(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2003(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ELSE - CALL fairall_etal_2014(ZT_ocn(i),ZQ_ocn(i),restar,UST_ocn(i),visc,& + CALL fairall_etal_2014(ZT_wat(i),ZQ_wat(i),restar,UST_wat(i),visc,& rstoch1D(i),spp_pbl) ENDIF ENDIF IF (debug_code > 1) THEN write(*,*)"=============Output ZT & ZQ over water:" - write(*,*)"ZT:",ZT_ocn(i)," ZQ:",ZQ_ocn(i) + write(*,*)"ZT:",ZT_wat(i)," ZQ:",ZQ_wat(i) ENDIF - GZ1OZ0_ocn(I)= LOG((ZA(I)+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ1OZt_ocn(I)= LOG((ZA(I)+ZNTstoch_ocn(i))/ZT_ocn(i)) - GZ2OZ0_ocn(I)= LOG((2.0+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ2OZt_ocn(I)= LOG((2.0+ZNTstoch_ocn(i))/ZT_ocn(i)) - GZ10OZ0_ocn(I)=LOG((10.+ZNTstoch_ocn(I))/ZNTstoch_ocn(I)) - GZ10OZt_ocn(I)=LOG((10.+ZNTstoch_ocn(i))/ZT_ocn(i)) - zratio_ocn(i)=ZNTstoch_ocn(I)/ZT_ocn(I) !need estimate for Li et al. + GZ1OZ0_wat(I)= LOG((ZA(I)+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ1OZt_wat(I)= LOG((ZA(I)+ZNTstoch_wat(i))/ZT_wat(i)) + GZ2OZ0_wat(I)= LOG((2.0+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ2OZt_wat(I)= LOG((2.0+ZNTstoch_wat(i))/ZT_wat(i)) + GZ10OZ0_wat(I)=LOG((10.+ZNTstoch_wat(I))/ZNTstoch_wat(I)) + GZ10OZt_wat(I)=LOG((10.+ZNTstoch_wat(i))/ZT_wat(i)) + zratio_wat(i)=ZNTstoch_wat(I)/ZT_wat(I) !need estimate for Li et al. ENDIF !end water point @@ -1197,7 +1197,7 @@ SUBROUTINE SFCLAY1D_mynn( & IF (dry(i)) THEN ZNT(i)=ZNTstoch_lnd(I) ELSEIF (wet(i)) THEN - ZNT(i)=ZNTstoch_ocn(I) + ZNT(i)=ZNTstoch_wat(I) ELSEIF (icy(i)) THEN ZNT(i)=ZNTstoch_ice(I) ENDIF @@ -1208,43 +1208,43 @@ SUBROUTINE SFCLAY1D_mynn( & !-------------------------------------------------------------------- IF (wet(i)) THEN - IF (rb_ocn(I) .GT. 0.0) THEN + IF (rb_wat(I) .GT. 0.0) THEN !COMPUTE z/L first guess: - CALL Li_etal_2010(ZOL(I),rb_ocn(I),ZA(I)/ZNTstoch_ocn(I),zratio_ocn(I)) - !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_ocn(I)*UST_ocn(I),0.0001)) + CALL Li_etal_2010(ZOL(I),rb_wat(I),ZA(I)/ZNTstoch_wat(I),zratio_wat(I)) + !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_wat(I)*UST_wat(I),0.0001)) ZOL(I)=MAX(ZOL(I),0.0) ZOL(I)=MIN(ZOL(I),20.) IF (debug_code >= 1) THEN - IF (ZNTstoch_ocn(i) < 1E-8 .OR. Zt_ocn(i) < 1E-10) THEN + IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i - write(0,*)"rb=", rb_ocn(I)," ZNT=", ZNTstoch_ocn(i)," ZT=",Zt_ocn(i) - write(0,*)" tsk=", tskin_ocn(i)," prev z/L=",ZOL(I),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"rb=", rb_wat(I)," ZNT=", ZNTstoch_wat(i)," ZT=",Zt_wat(i) + write(0,*)" tsk=", tskin_wat(i)," prev z/L=",ZOL(I),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF !Use Pedros iterative function to find z/L - !zol(I)=zolri(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),ZT_ocn(I),ZOL(I),psi_opt) + !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) !Use brute-force method - zol(I)=zolrib(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),zt_ocn(I),GZ1OZ0_ocn(I),GZ1OZt_ocn(I),ZOL(I),psi_opt) + zol(I)=zolrib(rb_wat(I),ZA(I),ZNTstoch_wat(I),zt_wat(I),GZ1OZ0_wat(I),GZ1OZt_wat(I),ZOL(I),psi_opt) ZOL(I)=MAX(ZOL(I),0.0) ZOL(I)=MIN(ZOL(I),20.) - zolzt = zol(I)*zt_ocn(I)/ZA(I) ! zt/L - zolz0 = zol(I)*ZNTstoch_ocn(I)/ZA(I) ! z0/L - zolza = zol(I)*(za(I)+ZNTstoch_ocn(I))/za(I) ! (z+z0/L - zol10 = zol(I)*(10.+ZNTstoch_ocn(I))/za(I) ! (10+z0)/L - zol2 = zol(I)*(2.+ZNTstoch_ocn(I))/za(I) ! (2+z0)/L + zolzt = zol(I)*zt_wat(I)/ZA(I) ! zt/L + zolz0 = zol(I)*ZNTstoch_wat(I)/ZA(I) ! z0/L + zolza = zol(I)*(za(I)+ZNTstoch_wat(I))/za(I) ! (z+z0/L + zol10 = zol(I)*(10.+ZNTstoch_wat(I))/za(I) ! (10+z0)/L + zol2 = zol(I)*(2.+ZNTstoch_wat(I))/za(I) ! (2+z0)/L !COMPUTE PSIM and PSIH !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) !CALL PSI_Beljaars_Holtslag_1991(PSIM(I),PSIH(I),ZOL(I)) !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_ocn(I),ZNTstoch_ocn(I),ZA(I)) + !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_wat(I),ZNTstoch_wat(I),ZA(I)) !CALL PSI_CB2005(PSIM(I),PSIH(I),zolza,zolz0) ! or use tables psim(I)=psim_stable(zolza,psi_opt)-psim_stable(zolz0,psi_opt) @@ -1256,7 +1256,7 @@ SUBROUTINE SFCLAY1D_mynn( & ! 1.0 over Monin-Obukhov length RMOL(I)= ZOL(I)/ZA(I) - ELSEIF(rb_ocn(I) .EQ. 0.) THEN + ELSEIF(rb_wat(I) .EQ. 0.) THEN !========================================================= !-----CLASS 3; FORCED CONVECTION/NEUTRAL: !========================================================= @@ -1270,46 +1270,46 @@ SUBROUTINE SFCLAY1D_mynn( & ZOL(I) =0. RMOL(I) =0. - ELSEIF(rb_ocn(I) .LT. 0.)THEN + ELSEIF(rb_wat(I) .LT. 0.)THEN !========================================================== !-----CLASS 4; FREE CONVECTION: !========================================================== !COMPUTE z/L first guess: - CALL Li_etal_2010(ZOL(I),rb_ocn(I),ZA(I)/ZNTstoch_ocn(I),zratio_ocn(I)) - !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_ocn(I)*UST_ocn(I),0.001)) + CALL Li_etal_2010(ZOL(I),rb_wat(I),ZA(I)/ZNTstoch_wat(I),zratio_wat(I)) + !ZOL(I)=ZA(I)*KARMAN*G*MOL(I)/(TH1D(I)*MAX(UST_wat(I)*UST_wat(I),0.001)) ZOL(I)=MAX(ZOL(I),-20.0) ZOL(I)=MIN(ZOL(I),0.0) IF (debug_code >= 1) THEN - IF (ZNTstoch_ocn(i) < 1E-8 .OR. Zt_ocn(i) < 1E-10) THEN + IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i - write(0,*)"rb=", rb_ocn(I)," ZNT=", ZNTstoch_ocn(i)," ZT=",Zt_ocn(i) - write(0,*)" tsk=", tskin_ocn(i)," wstar=",wstar(i)," prev z/L=",ZOL(I),& - " tsurf=", tsurf_ocn(i)," qsfc=", qsfc_ocn(i)," znt=", znt_ocn(i),& - " ust=", ust_ocn(i)," snowh=", snowh_ocn(i),"psfcpa=",PSFCPA(i), & + write(0,*)"rb=", rb_wat(I)," ZNT=", ZNTstoch_wat(i)," ZT=",Zt_wat(i) + write(0,*)" tsk=", tskin_wat(i)," wstar=",wstar(i)," prev z/L=",ZOL(I),& + " tsurf=", tsurf_wat(i)," qsfc=", qsfc_wat(i)," znt=", znt_wat(i),& + " ust=", ust_wat(i)," snowh=", snowh_wat(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF !Use Pedros iterative function to find z/L - !zol(I)=zolri(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),ZT_ocn(I),ZOL(I),psi_opt) + !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) !Use brute-force method - zol(I)=zolrib(rb_ocn(I),ZA(I),ZNTstoch_ocn(I),zt_ocn(I),GZ1OZ0_ocn(I),GZ1OZt_ocn(I),ZOL(I),psi_opt) + zol(I)=zolrib(rb_wat(I),ZA(I),ZNTstoch_wat(I),zt_wat(I),GZ1OZ0_wat(I),GZ1OZt_wat(I),ZOL(I),psi_opt) ZOL(I)=MAX(ZOL(I),-20.0) ZOL(I)=MIN(ZOL(I),0.0) - zolzt = zol(I)*zt_ocn(I)/ZA(I) ! zt/L - zolz0 = zol(I)*ZNTstoch_ocn(I)/ZA(I) ! z0/L - zolza = zol(I)*(za(I)+ZNTstoch_ocn(I))/za(I) ! (z+z0/L - zol10 = zol(I)*(10.+ZNTstoch_ocn(I))/za(I) ! (10+z0)/L - zol2 = zol(I)*(2.+ZNTstoch_ocn(I))/za(I) ! (2+z0)/L + zolzt = zol(I)*zt_wat(I)/ZA(I) ! zt/L + zolz0 = zol(I)*ZNTstoch_wat(I)/ZA(I) ! z0/L + zolza = zol(I)*(za(I)+ZNTstoch_wat(I))/za(I) ! (z+z0/L + zol10 = zol(I)*(10.+ZNTstoch_wat(I))/za(I) ! (10+z0)/L + zol2 = zol(I)*(2.+ZNTstoch_wat(I))/za(I) ! (2+z0)/L !COMPUTE PSIM and PSIH !CALL PSI_Suselj_Sood_2010(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), ZT_ocn(I), ZNTstoch_ocn(I), ZA(I)) + !CALL PSI_Hogstrom_1996(PSIM(I),PSIH(I),ZOL(I), ZT_wat(I), ZNTstoch_wat(I), ZA(I)) !CALL PSI_Businger_1971(PSIM(I),PSIH(I),ZOL(I)) - !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_ocn(I),ZNTstoch_ocn(I),ZA(I)) + !CALL PSI_DyerHicks(PSIM(I),PSIH(I),ZOL(I),ZT_wat(I),ZNTstoch_wat(I),ZA(I)) ! use tables psim(I)=psim_unstable(zolza,psi_opt)-psim_unstable(zolz0,psi_opt) psih(I)=psih_unstable(zolza,psi_opt)-psih_unstable(zolzt,psi_opt) @@ -1320,23 +1320,23 @@ SUBROUTINE SFCLAY1D_mynn( & !---LIMIT PSIH AND PSIM IN THE CASE OF THIN LAYERS AND !---HIGH ROUGHNESS. THIS PREVENTS DENOMINATOR IN FLUXES !---FROM GETTING TOO SMALL - PSIH(I)=MIN(PSIH(I),0.9*GZ1OZt_ocn(I)) - PSIM(I)=MIN(PSIM(I),0.9*GZ1OZ0_ocn(I)) - PSIH2(I)=MIN(PSIH2(I),0.9*GZ2OZt_ocn(I)) - PSIM10(I)=MIN(PSIM10(I),0.9*GZ10OZ0_ocn(I)) - PSIH10(I)=MIN(PSIH10(I),0.9*GZ10OZt_ocn(I)) + PSIH(I)=MIN(PSIH(I),0.9*GZ1OZt_wat(I)) + PSIM(I)=MIN(PSIM(I),0.9*GZ1OZ0_wat(I)) + PSIH2(I)=MIN(PSIH2(I),0.9*GZ2OZt_wat(I)) + PSIM10(I)=MIN(PSIM10(I),0.9*GZ10OZ0_wat(I)) + PSIH10(I)=MIN(PSIH10(I),0.9*GZ10OZt_wat(I)) RMOL(I) = ZOL(I)/ZA(I) ENDIF ! CALCULATE THE RESISTANCE: - PSIX_ocn(I) =MAX(GZ1OZ0_ocn(I)-PSIM(I) , 1.0) ! = fm - PSIX10_ocn(I)=MAX(GZ10OZ0_ocn(I)-PSIM10(I), 1.0) ! = fm10 - PSIT_ocn(I) =MAX(GZ1OZt_ocn(I)-PSIH(I) , 1.0) ! = fh - PSIT2_ocn(I) =MAX(GZ2OZt_ocn(I)-PSIH2(I) , 1.0) ! = fh2 - PSIQ_ocn(I) =MAX(LOG((ZA(I)+ZQ_ocn(i))/ZQ_ocn(I))-PSIH(I) ,1.0) - PSIQ2_ocn(I) =MAX(LOG((2.0+ZQ_ocn(i))/ZQ_ocn(I))-PSIH2(I) ,1.0) + PSIX_wat(I) =MAX(GZ1OZ0_wat(I)-PSIM(I) , 1.0) ! = fm + PSIX10_wat(I)=MAX(GZ10OZ0_wat(I)-PSIM10(I), 1.0) ! = fm10 + PSIT_wat(I) =MAX(GZ1OZt_wat(I)-PSIH(I) , 1.0) ! = fh + PSIT2_wat(I) =MAX(GZ2OZt_wat(I)-PSIH2(I) , 1.0) ! = fh2 + PSIQ_wat(I) =MAX(LOG((ZA(I)+ZQ_wat(i))/ZQ_wat(I))-PSIH(I) ,1.0) + PSIQ2_wat(I) =MAX(LOG((2.0+ZQ_wat(i))/ZQ_wat(I))-PSIH2(I) ,1.0) ENDIF ! end water points @@ -1608,18 +1608,18 @@ SUBROUTINE SFCLAY1D_mynn( & IF (wet(I)) THEN ! TO PREVENT OSCILLATIONS AVERAGE WITH OLD VALUE - OLDUST = UST_ocn(I) - UST_ocn(I)=0.5*UST_ocn(I)+0.5*KARMAN*WSPD(I)/PSIX_ocn(I) + OLDUST = UST_wat(I) + UST_wat(I)=0.5*UST_wat(I)+0.5*KARMAN*WSPD(I)/PSIX_wat(I) !NON-AVERAGED: - !UST_ocn(I)=KARMAN*WSPD(I)/PSIX_ocn(I) - stress_ocn(i)=ust_ocn(i)**2 + !UST_wat(I)=KARMAN*WSPD(I)/PSIX_wat(I) + stress_wat(i)=ust_wat(i)**2 ! Compute u* without vconv for use in HFX calc when isftcflx > 0 WSPDI(I)=MAX(SQRT(U1D(I)*U1D(I)+V1D(I)*V1D(I)), wmin) - USTM(I)=0.5*USTM(I)+0.5*KARMAN*WSPDI(I)/PSIX_ocn(I) + USTM(I)=0.5*USTM(I)+0.5*KARMAN*WSPDI(I)/PSIX_wat(I) ! for possible future changes in sea-ice fraction from 0 to >0: - if (.not. icy(i)) ust_ice(i)=ust_ocn(i) + if (.not. icy(i)) ust_ice(i)=ust_wat(i) ENDIF ! end water points IF (dry(I)) THEN @@ -1654,7 +1654,7 @@ SUBROUTINE SFCLAY1D_mynn( & USTM(I)=UST_ice(I) ! for possible future changes in sea-ice fraction from 1 to <1: - if (.not. wet(i)) ust_ocn(i)=ust_ice(i) + if (.not. wet(i)) ust_wat(i)=ust_ice(i) ENDIF ! end ice points !---------------------------------------------------- @@ -1663,14 +1663,14 @@ SUBROUTINE SFCLAY1D_mynn( & !---------------------------------------------------- IF (wet(I)) THEN - DTG=THV1D(I)-THVSK_ocn(I) + DTG=THV1D(I)-THVSK_wat(I) OLDTST=MOL(I) - MOL(I)=KARMAN*DTG/PSIT_ocn(I)/PRT + MOL(I)=KARMAN*DTG/PSIT_wat(I)/PRT !t_star(I) = -HFX(I)/(UST(I)*CPM(I)*RHO1D(I)) !t_star(I) = MOL(I) !---------------------------------------------------- - DQG=(QVSH(i)-qsfc_ocn(i))*1000. !(kg/kg -> g/kg) - qstar(I)=KARMAN*DQG/PSIQ_ocn(I)/PRT + DQG=(QVSH(i)-qsfc_wat(i))*1000. !(kg/kg -> g/kg) + qstar(I)=KARMAN*DQG/PSIQ_wat(I)/PRT ENDIF IF (dry(I)) THEN @@ -1704,13 +1704,13 @@ SUBROUTINE SFCLAY1D_mynn( & IF(icy(i))write(*,*)"==== AT END OF MAIN LOOP, i=",i, "(ice)" write(*,*)"z/L:",ZOL(I)," wspd:",wspd(I)," Tstar:",MOL(I) IF(wet(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& - " DTHV:",THV1D(I)-THVSK_ocn(I) + " DTHV:",THV1D(I)-THVSK_wat(I) IF(dry(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& " DTHV:",THV1D(I)-THVSK_lnd(I) IF(icy(i))write(*,*)"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& " DTHV:",THV1D(I)-THVSK_ice(i) write(*,*)"CPM:",CPM(I)," RHO1D:",RHO1D(I)," q*:",qstar(I)," T*:",MOL(I) - IF(wet(i))write(*,*)"U*:",UST_ocn(I)," Z0:",ZNTstoch_ocn(I)," Zt:",zt_ocn(I) + IF(wet(i))write(*,*)"U*:",UST_wat(I)," Z0:",ZNTstoch_wat(I)," Zt:",zt_wat(I) IF(dry(i))write(*,*)"U*:",UST_lnd(I)," Z0:",ZNTstoch_lnd(I)," Zt:",zt_lnd(I) IF(icy(i))write(*,*)"U*:",UST_ice(I)," Z0:",ZNTstoch_ice(I)," Zt:",zt_ice(I) write(*,*)"hfx:",HFX(I)," MAVAIL:",MAVAIL(I)," QVSH(I):",QVSH(I) @@ -1735,8 +1735,8 @@ SUBROUTINE SFCLAY1D_mynn( & CH(I) = 0. CHS2(i) = 0. CQS2(i) = 0. - ch_ocn(I)= 0. - cm_ocn(I)= 0. + ch_wat(I)= 0. + cm_wat(I)= 0. ch_lnd(I)= 0. cm_lnd(I)= 0. ch_ice(I)= 0. @@ -1792,25 +1792,25 @@ SUBROUTINE SFCLAY1D_mynn( & ! CALCULATE THE EXCHANGE COEFFICIENTS FOR HEAT (FLHC) ! AND MOISTURE (FLQC) !------------------------------------------ - FLQC(I)=RHO1D(I)*MAVAIL(I)*UST_ocn(I)*KARMAN/PSIQ_ocn(i) - FLHC(I)=RHO1D(I)*CPM(I)*UST_ocn(I)*KARMAN/PSIT_ocn(I) + FLQC(I)=RHO1D(I)*MAVAIL(I)*UST_wat(I)*KARMAN/PSIQ_wat(i) + FLHC(I)=RHO1D(I)*CPM(I)*UST_wat(I)*KARMAN/PSIT_wat(I) IF (compute_flux) THEN !---------------------------------- ! COMPUTE SURFACE MOISTURE FLUX: !---------------------------------- - !QFX(I)=FLQC(I)*(QSFCMR_ocn(I)-QV1D(I)) - QFX(I)=FLQC(I)*(QSFC_ocn(I)-QV1D(I)) + !QFX(I)=FLQC(I)*(QSFCMR_wat(I)-QV1D(I)) + QFX(I)=FLQC(I)*(QSFC_wat(I)-QV1D(I)) QFX(I)=MAX(QFX(I),-0.02) !allows small neg QFX LH(I)=XLV*QFX(I) ! BWG, 2020-06-17: Mod next 2 lines for fractional - QFLX_ocn(i)=QFX(i)/RHO1D(i) - QFLX(i)=QFLX_ocn(i) + QFLX_wat(i)=QFX(i)/RHO1D(i) + QFLX(i)=QFLX_wat(i) !---------------------------------- ! COMPUTE SURFACE HEAT FLUX: !---------------------------------- - HFX(I)=FLHC(I)*(THSK_ocn(I)-TH1D(I)) + HFX(I)=FLHC(I)*(THSK_wat(I)-TH1D(I)) IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX.NE.0 ) THEN ! AHW: add dissipative heating term @@ -1818,20 +1818,20 @@ SUBROUTINE SFCLAY1D_mynn( & ENDIF ENDIF ! BWG, 2020-06-17: Mod next 2 lines for fractional - HFLX_ocn(I)=HFX(I)/(RHO1D(I)*cpm(I)) - HFLX(I)=HFLX_ocn(I) + HFLX_wat(I)=HFX(I)/(RHO1D(I)*cpm(I)) + HFLX(I)=HFLX_wat(I) ENDIF !TRANSFER COEFF FOR SOME LSMs: !CHS(I)=UST(I)*KARMAN/(ALOG(KARMAN*UST(I)*ZA(I) & ! /XKA+ZA(I)/ZL)-PSIH(I)) - CHS(I)=UST_ocn(I)*KARMAN/PSIT_ocn(I) + CHS(I)=UST_wat(I)*KARMAN/PSIT_wat(I) !THESE ARE USED FOR 2-M DIAGNOSTICS ONLY - CQS2(I)=UST_ocn(I)*KARMAN/PSIQ2_ocn(i) - CHS2(I)=UST_ocn(I)*KARMAN/PSIT2_ocn(I) + CQS2(I)=UST_wat(I)*KARMAN/PSIQ2_wat(i) + CHS2(I)=UST_wat(I)*KARMAN/PSIT2_wat(I) - QSFC(I)=QSFC_ocn(I) + QSFC(I)=QSFC_wat(I) ELSEIF (icy(i)) THEN @@ -1881,7 +1881,7 @@ SUBROUTINE SFCLAY1D_mynn( & write(*,*)"QFX=",QFX(I),"FLQC=",FLQC(I) if(icy(i))write(*,*)"ice, MAVAIL:",MAVAIL(I)," u*=",UST_ice(I)," psiq=",PSIQ_ice(i) if(dry(i))write(*,*)"lnd, MAVAIL:",MAVAIL(I)," u*=",UST_lnd(I)," psiq=",PSIQ_lnd(i) - if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_ocn(I)," psiq=",PSIQ_ocn(i) + if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_wat(I)," psiq=",PSIQ_wat(i) ENDIF ! The exchange coefficient for cloud water is assumed to be the @@ -1892,8 +1892,8 @@ SUBROUTINE SFCLAY1D_mynn( & !--- COMPUTE EXCHANGE COEFFICIENTS FOR FV3 !----------------------------------------- IF (wet(i)) THEN - ch_ocn(I)=(karman/psix_ocn(I))*(karman/psit_ocn(i)) - cm_ocn(I)=(karman/psix_ocn(I))*(karman/psix_ocn(I)) + ch_wat(I)=(karman/psix_wat(I))*(karman/psit_wat(i)) + cm_wat(I)=(karman/psix_wat(I))*(karman/psix_wat(I)) ENDIF IF (dry(i)) THEN ch_lnd(I)=(karman/psix_lnd(I))*(karman/psit_lnd(i)) @@ -1930,8 +1930,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) V10(I)=V1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) - V10(I)=V1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) + U10(I)=U1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) + V10(I)=V1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) V10(I)=V1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) @@ -1946,8 +1946,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) V10(I)=V1D(I)*log(10./ZNTstoch_lnd(I))/log(ZA(I)/ZNTstoch_lnd(I)) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) - V10(I)=V1D(I)*log(10./ZNTstoch_ocn(I))/log(ZA(I)/ZNTstoch_ocn(I)) + U10(I)=U1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) + V10(I)=V1D(I)*log(10./ZNTstoch_wat(I))/log(ZA(I)/ZNTstoch_wat(I)) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) V10(I)=V1D(I)*log(10./ZNTstoch_ice(I))/log(ZA(I)/ZNTstoch_ice(I)) @@ -1958,8 +1958,8 @@ SUBROUTINE SFCLAY1D_mynn( & U10(I)=U1D(I)*PSIX10_lnd(I)/PSIX_lnd(I) V10(I)=V1D(I)*PSIX10_lnd(I)/PSIX_lnd(I) ELSEIF (wet(i)) THEN - U10(I)=U1D(I)*PSIX10_ocn(I)/PSIX_ocn(I) - V10(I)=V1D(I)*PSIX10_ocn(I)/PSIX_ocn(I) + U10(I)=U1D(I)*PSIX10_wat(I)/PSIX_wat(I) + V10(I)=V1D(I)*PSIX10_wat(I)/PSIX_wat(I) ELSEIF (icy(i)) THEN U10(I)=U1D(I)*PSIX10_ice(I)/PSIX_ice(I) V10(I)=V1D(I)*PSIX10_ice(I)/PSIX_ice(I) @@ -1985,18 +1985,18 @@ SUBROUTINE SFCLAY1D_mynn( & Q2(I)= MAX(Q2(I), MIN(QSFC_lnd(I), QV1D(I))) Q2(I)= MIN(Q2(I), 1.05*QV1D(I)) ELSEIF (wet(i)) THEN - DTG=TH1D(I)-THSK_ocn(I) - TH2(I)=THSK_ocn(I)+DTG*PSIT2_ocn(I)/PSIT_ocn(I) + DTG=TH1D(I)-THSK_wat(I) + TH2(I)=THSK_wat(I)+DTG*PSIT2_wat(I)/PSIT_wat(I) !*** BE CERTAIN THAT THE 2-M THETA IS BRACKETED BY !*** THE VALUES AT THE SURFACE AND LOWEST MODEL LEVEL. - IF ((TH1D(I)>THSK_ocn(I) .AND. (TH2(I)TH1D(I))) .OR. & - (TH1D(I)THSK_ocn(I) .OR. TH2(I)THSK_wat(I) .AND. (TH2(I)TH1D(I))) .OR. & + (TH1D(I)THSK_wat(I) .OR. TH2(I) 4.0 )THEN + IF (UST_wat(I) < 0.0 .OR. UST_wat(I) > 4.0 )THEN print*,"SUSPICIOUS VALUES IN MYNN SFCLAYER",& - I,J, "UST_ocn: ",UST_ocn(I) + I,J, "UST_wat: ",UST_wat(I) yesno = 1 ENDIF ENDIF @@ -2081,15 +2081,15 @@ SUBROUTINE SFCLAY1D_mynn( & IF (yesno == 1) THEN IF (wet(i)) THEN print*," OTHER INFO over water:" - print*,"z/L:",ZOL(I)," U*:",UST_ocn(I)," Tstar:",MOL(I) + print*,"z/L:",ZOL(I)," U*:",UST_wat(I)," Tstar:",MOL(I) print*,"PSIM:",PSIM(I)," PSIH:",PSIH(I)," W*:",WSTAR(I),& - " DTHV:",THV1D(I)-THVSK_ocn(I) + " DTHV:",THV1D(I)-THVSK_wat(I) print*,"CPM:",CPM(I)," RHO1D:",RHO1D(I)," L:",& - ZOL(I)/ZA(I)," DTH:",TH1D(I)-THSK_ocn(I) - print*," Z0:",ZNTstoch_ocn(I)," Zt:",ZT_ocn(I)," za:",za(I) - print*,"MAVAIL:",MAVAIL(I)," QSFC_ocn(I):",& - QSFC_ocn(I)," QVSH(I):",QVSH(I) - print*,"PSIX=",PSIX_ocn(I)," T1D(i):",T1D(i) + ZOL(I)/ZA(I)," DTH:",TH1D(I)-THSK_wat(I) + print*," Z0:",ZNTstoch_wat(I)," Zt:",ZT_wat(I)," za:",za(I) + print*,"MAVAIL:",MAVAIL(I)," QSFC_wat(I):",& + QSFC_wat(I)," QVSH(I):",QVSH(I) + print*,"PSIX=",PSIX_wat(I)," T1D(i):",T1D(i) write(*,*)"=============================================" ENDIF IF (dry(i)) THEN @@ -2565,27 +2565,27 @@ SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) END SUBROUTINE GFS_zt_lnd !-------------------------------------------------------------------- - SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) + SUBROUTINE GFS_z0_wat(z0rl_wat,ustar_wat,WSPD,z1,sfc_z0_type,redrag) - REAL, INTENT(OUT) :: z0rl_ocn - REAL, INTENT(INOUT):: ustar_ocn + REAL, INTENT(OUT) :: z0rl_wat + REAL, INTENT(INOUT):: ustar_wat REAL, INTENT(IN) :: wspd,z1 LOGICAL, INTENT(IN):: redrag INTEGER, INTENT(IN):: sfc_z0_type REAL :: z0,z0max,wind10m REAL, PARAMETER :: charnock = 0.014, z0s_max=.317e-2 -! z0 = 0.01 * z0rl_ocn +! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper - z0 = z0rl_ocn + z0 = z0rl_wat z0max = max(1.0e-6, min(z0,z1)) - ustar_ocn = sqrt(g * z0 / charnock) + ustar_wat = sqrt(g * z0 / charnock) wind10m = wspd*log(10./1e-4)/log(z1/1e-4) !wind10m = sqrt(u10m(i)*u10m(i)+v10m(i)*v10m(i)) ! if (sfc_z0_type >= 0) then if (sfc_z0_type == 0) then - z0 = (charnock / g) * ustar_ocn * ustar_ocn + z0 = (charnock / g) * ustar_wat * ustar_wat ! mbek -- toga-coare flux algorithm ! z0 = (charnock / g) * ustar(i)*ustar(i) + arnu/ustar(i) @@ -2596,47 +2596,47 @@ SUBROUTINE GFS_z0_ocn(z0rl_ocn,ustar_ocn,WSPD,z1,sfc_z0_type,redrag) ! z0 = arnu / (ustar(i) * ff ** pp) if (redrag) then - !z0rl_ocn = 100.0 * max(min(z0, z0s_max), 1.e-7) - z0rl_ocn = max(min(z0, z0s_max), 1.e-7) + !z0rl_wat = 100.0 * max(min(z0, z0s_max), 1.e-7) + z0rl_wat = max(min(z0, z0s_max), 1.e-7) else - !z0rl_ocn = 100.0 * max(min(z0,.1), 1.e-7) - z0rl_ocn = max(min(z0,.1), 1.e-7) + !z0rl_wat = 100.0 * max(min(z0,.1), 1.e-7) + z0rl_wat = max(min(z0,.1), 1.e-7) endif elseif (sfc_z0_type == 6) then ! wang call znot_m_v6(wind10m, z0) ! wind, m/s, z0, m - !z0rl_ocn = 100.0 * z0 ! cm + !z0rl_wat = 100.0 * z0 ! cm elseif (sfc_z0_type == 7) then ! wang call znot_m_v7(wind10m, z0) ! wind, m/s, z0, m - !z0rl_ocn = 100.0 * z0 ! cm + !z0rl_wat = 100.0 * z0 ! cm else - z0rl_ocn = 1.0e-6 + z0rl_wat = 1.0e-6 endif endif - END SUBROUTINE GFS_z0_ocn + END SUBROUTINE GFS_z0_wat !-------------------------------------------------------------------- - SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) + SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type) REAL, INTENT(OUT) :: ztmax - REAL, INTENT(IN) :: wspd,z1,z0rl_ocn,restar + REAL, INTENT(IN) :: wspd,z1,z0rl_wat,restar INTEGER, INTENT(IN):: sfc_z0_type - REAL :: z0,z0max,wind10m,rat,ustar_ocn + REAL :: z0,z0max,wind10m,rat,ustar_wat REAL, PARAMETER :: charnock = 0.014, z0s_max=.317e-2 -! z0 = 0.01 * z0rl_ocn +! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper - z0 = z0rl_ocn + z0 = z0rl_wat z0max = max(1.0e-6, min(z0,z1)) - ustar_ocn = sqrt(g * z0 / charnock) + ustar_wat = sqrt(g * z0 / charnock) wind10m = wspd*log(10./1e-4)/log(z1/1e-4) !** test xubin's new z0 ! ztmax = z0max -!input restar = max(ustar_ocn(i)*z0max*visi, 0.000001) +!input restar = max(ustar_wat(i)*z0max*visi, 0.000001) ! restar = log(restar) ! restar = min(restar,5.) @@ -2657,7 +2657,7 @@ SUBROUTINE GFS_zt_ocn(ztmax,z0rl_ocn,restar,WSPD,z1,sfc_z0_type) stop endif - END SUBROUTINE GFS_zt_ocn + END SUBROUTINE GFS_zt_wat !-------------------------------------------------------------------- !! add fitted z0,zt curves for hurricane application (used in HWRF/HMON) !! Weiguo Wang, 2019-0425 diff --git a/physics/moninedmf.meta b/physics/moninedmf.meta index b14dbd2fc..9320f38f2 100644 --- a/physics/moninedmf.meta +++ b/physics/moninedmf.meta @@ -532,8 +532,8 @@ intent = in optional = F [coef_ric_s] - standard_name = coefficient_for_variable_bulk_richardson_number_over_ocean - long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over ocean + standard_name = coefficient_for_variable_bulk_richardson_number_over_water + long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over water units = none dimensions = () type = real diff --git a/physics/samfdeepcnv.meta b/physics/samfdeepcnv.meta index 8000fb90c..802aeb50a 100644 --- a/physics/samfdeepcnv.meta +++ b/physics/samfdeepcnv.meta @@ -525,8 +525,8 @@ intent = in optional = F [betas] - standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep conv. + standard_name = downdraft_fraction_reaching_surface_over_water_deep_convection + long_name = downdraft fraction reaching surface over water for deep conv. units = frac dimensions = () type = real diff --git a/physics/sascnvn.meta b/physics/sascnvn.meta index d49d287e1..af25b8477 100644 --- a/physics/sascnvn.meta +++ b/physics/sascnvn.meta @@ -522,8 +522,8 @@ intent = in optional = F [betas] - standard_name = downdraft_fraction_reaching_surface_over_ocean_deep_convection - long_name = downdraft fraction reaching surface over ocean for deep convection + standard_name = downdraft_fraction_reaching_surface_over_water_deep_convection + long_name = downdraft fraction reaching surface over water for deep convection units = frac dimensions = () type = real diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index 9f03b3bf1..342eaeea5 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -219,8 +219,8 @@ intent = in optional = F [sfc_z0_type] - standard_name = flag_for_surface_roughness_option_over_ocean - long_name = surface roughness options over ocean + standard_name = flag_for_surface_roughness_option_over_water + long_name = surface roughness options over water units = flag dimensions = () type = integer @@ -251,8 +251,8 @@ intent = in optional = F [tskin_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -278,8 +278,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -305,8 +305,8 @@ intent = in optional = F [snwdph_wat] - standard_name = surface_snow_thickness_water_equivalent_over_ocean - long_name = water equivalent snow depth over ocean + standard_name = surface_snow_thickness_water_equivalent_over_water + long_name = water equivalent snow depth over water units = mm dimensions = (horizontal_loop_extent) type = real @@ -332,8 +332,8 @@ intent = in optional = F [z0rl_wat] - standard_name = surface_roughness_length_over_ocean_interstitial - long_name = surface roughness length over ocean (temporary use as interstitial) + standard_name = surface_roughness_length_over_water + long_name = surface roughness length over water (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) type = real @@ -341,7 +341,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -350,7 +350,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -368,8 +368,8 @@ intent = in optional = F [ustar_wat] - standard_name = surface_friction_velocity_over_ocean - long_name = surface friction velocity over ocean + standard_name = surface_friction_velocity_over_water + long_name = surface friction velocity over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -395,8 +395,8 @@ intent = inout optional = F [cm_wat] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -422,8 +422,8 @@ intent = inout optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -449,8 +449,8 @@ intent = inout optional = F [rb_wat] - standard_name = bulk_richardson_number_at_lowest_model_level_over_ocean - long_name = bulk Richardson number at the surface over ocean + standard_name = bulk_richardson_number_at_lowest_model_level_over_water + long_name = bulk Richardson number at the surface over water units = none dimensions = (horizontal_loop_extent) type = real @@ -476,8 +476,8 @@ intent = inout optional = F [stress_wat] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -503,8 +503,8 @@ intent = inout optional = F [fm_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean - long_name = Monin-Obukhov similarity function for momentum over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_over_water + long_name = Monin-Obukhov similarity function for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -530,8 +530,8 @@ intent = inout optional = F [fh_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_over_ocean - long_name = Monin-Obukhov similarity function for heat over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_over_water + long_name = Monin-Obukhov similarity function for heat over water units = none dimensions = (horizontal_loop_extent) type = real @@ -557,8 +557,8 @@ intent = inout optional = F [fm10_wat] - standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_ocean - long_name = Monin-Obukhov similarity parameter for momentum at 10m over ocean + standard_name = Monin_Obukhov_similarity_function_for_momentum_at_10m_over_water + long_name = Monin-Obukhov similarity parameter for momentum at 10m over water units = none dimensions = (horizontal_loop_extent) type = real @@ -584,8 +584,8 @@ intent = inout optional = F [fh2_wat] - standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_ocean - long_name = Monin-Obukhov similarity parameter for heat at 2m over ocean + standard_name = Monin_Obukhov_similarity_function_for_heat_at_2m_over_water + long_name = Monin-Obukhov similarity parameter for heat at 2m over water units = none dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_drv.meta b/physics/sfc_drv.meta index ff1766774..9f2e51df3 100644 --- a/physics/sfc_drv.meta +++ b/physics/sfc_drv.meta @@ -566,7 +566,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_drv_ruc.meta b/physics/sfc_drv_ruc.meta index 229bce1fc..b77a96713 100644 --- a/physics/sfc_drv_ruc.meta +++ b/physics/sfc_drv_ruc.meta @@ -815,8 +815,8 @@ intent = in optional = F [ch_wat] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -824,8 +824,8 @@ intent = in optional = F [tskin_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -1013,7 +1013,7 @@ intent = inout optional = F [z0rl_lnd] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) @@ -1220,7 +1220,7 @@ intent = inout optional = F [z0rl_ice] - standard_name = surface_roughness_length_over_ice_interstitial + standard_name = surface_roughness_length_over_ice long_name = surface roughness length over ice (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_noah_wrfv4.meta b/physics/sfc_noah_wrfv4.meta index 5cb925808..44e5ff4cc 100644 --- a/physics/sfc_noah_wrfv4.meta +++ b/physics/sfc_noah_wrfv4.meta @@ -402,7 +402,7 @@ intent = inout optional = F [z0k] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = m dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_noahmp_drv.meta b/physics/sfc_noahmp_drv.meta index c0a6393fa..6cdb5901e 100644 --- a/physics/sfc_noahmp_drv.meta +++ b/physics/sfc_noahmp_drv.meta @@ -695,7 +695,7 @@ intent = inout optional = F [zorl] - standard_name = surface_roughness_length_over_land_interstitial + standard_name = surface_roughness_length_over_land long_name = surface roughness length over land (temporary use as interstitial) units = cm dimensions = (horizontal_loop_extent) diff --git a/physics/sfc_nst.meta b/physics/sfc_nst.meta index dce87e8c4..ffd994096 100644 --- a/physics/sfc_nst.meta +++ b/physics/sfc_nst.meta @@ -178,8 +178,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -187,8 +187,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -258,8 +258,8 @@ intent = in optional = F [stress] - standard_name = surface_wind_stress_over_ocean - long_name = surface wind stress over ocean + standard_name = surface_wind_stress_over_water + long_name = surface wind stress over water units = m2 s-2 dimensions = (horizontal_loop_extent) type = real @@ -267,8 +267,8 @@ intent = in optional = F [sfcemis] - standard_name = surface_longwave_emissivity_over_ocean_interstitial - long_name = surface lw emissivity in fraction over ocean (temporary use as interstitial) + standard_name = surface_longwave_emissivity_over_water_interstitial + long_name = surface lw emissivity in fraction over water (temporary use as interstitial) units = frac dimensions = (horizontal_loop_extent) type = real @@ -276,8 +276,8 @@ intent = in optional = F [dlwflx] - standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_ocean - long_name = total sky surface downward longwave flux absorbed by the ground over ocean + standard_name = surface_downwelling_longwave_flux_absorbed_by_ground_over_water + long_name = total sky surface downward longwave flux absorbed by the ground over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -294,8 +294,8 @@ intent = in optional = F [rain] - standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_ocean - long_name = total precipitation amount in each time step over ocean + standard_name = nonnegative_lwe_thickness_of_precipitation_amount_on_dynamics_timestep_over_water + long_name = total precipitation amount in each time step over water units = m dimensions = (horizontal_loop_extent) type = real @@ -412,8 +412,8 @@ intent = inout optional = F [tsurf] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -574,8 +574,8 @@ intent = inout optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -583,8 +583,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -592,8 +592,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -601,8 +601,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -610,8 +610,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -619,8 +619,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -628,8 +628,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -699,8 +699,8 @@ intent = in optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -708,8 +708,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -970,8 +970,8 @@ intent = in optional = F [tsurf_wat] - standard_name = surface_skin_temperature_after_iteration_over_ocean - long_name = surface skin temperature after iteration over ocean + standard_name = surface_skin_temperature_after_iteration_over_water + long_name = surface skin temperature after iteration over water units = K dimensions = (horizontal_loop_extent) type = real @@ -979,8 +979,8 @@ intent = inout optional = F [tsfc_wat] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real diff --git a/physics/sfc_ocean.meta b/physics/sfc_ocean.meta index afdea6c3f..6fdfa0555 100644 --- a/physics/sfc_ocean.meta +++ b/physics/sfc_ocean.meta @@ -79,8 +79,8 @@ intent = in optional = F [tskin] - standard_name = surface_skin_temperature_over_ocean_interstitial - long_name = surface skin temperature over ocean (temporary use as interstitial) + standard_name = surface_skin_temperature_over_water_interstitial + long_name = surface skin temperature over water (temporary use as interstitial) units = K dimensions = (horizontal_loop_extent) type = real @@ -88,8 +88,8 @@ intent = in optional = F [cm] - standard_name = surface_drag_coefficient_for_momentum_in_air_over_ocean - long_name = surface exchange coeff for momentum over ocean + standard_name = surface_drag_coefficient_for_momentum_in_air_over_water + long_name = surface exchange coeff for momentum over water units = none dimensions = (horizontal_loop_extent) type = real @@ -97,8 +97,8 @@ intent = in optional = F [ch] - standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_ocean - long_name = surface exchange coeff heat & moisture over ocean + standard_name = surface_drag_coefficient_for_heat_and_moisture_in_air_over_water + long_name = surface exchange coeff heat surface exchange coeff heat & moisture over ocean moisture over water units = none dimensions = (horizontal_loop_extent) type = real @@ -157,8 +157,8 @@ intent = in optional = F [qsurf] - standard_name = surface_specific_humidity_over_ocean - long_name = surface air saturation specific humidity over ocean + standard_name = surface_specific_humidity_over_water + long_name = surface air saturation specific humidity over water units = kg kg-1 dimensions = (horizontal_loop_extent) type = real @@ -166,8 +166,8 @@ intent = inout optional = F [cmm] - standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean - long_name = momentum exchange coefficient over ocean + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_water + long_name = momentum exchange coefficient over water units = m s-1 dimensions = (horizontal_loop_extent) type = real @@ -175,8 +175,8 @@ intent = inout optional = F [chh] - standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_ocean - long_name = thermal exchange coefficient over ocean + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_water + long_name = thermal exchange coefficient over water units = kg m-2 s-1 dimensions = (horizontal_loop_extent) type = real @@ -184,8 +184,8 @@ intent = inout optional = F [gflux] - standard_name = upward_heat_flux_in_soil_over_ocean - long_name = soil heat flux over ocean + standard_name = upward_heat_flux_in_soil_over_water + long_name = soil heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real @@ -193,8 +193,8 @@ intent = inout optional = F [evap] - standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean - long_name = kinematic surface upward latent heat flux over ocean + standard_name = kinematic_surface_upward_latent_heat_flux_over_water + long_name = kinematic surface upward latent heat flux over water units = kg kg-1 m s-1 dimensions = (horizontal_loop_extent) type = real @@ -202,8 +202,8 @@ intent = inout optional = F [hflx] - standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean - long_name = kinematic surface upward sensible heat flux over ocean + standard_name = kinematic_surface_upward_sensible_heat_flux_over_water + long_name = kinematic surface upward sensible heat flux over water units = K m s-1 dimensions = (horizontal_loop_extent) type = real @@ -211,8 +211,8 @@ intent = inout optional = F [ep] - standard_name = surface_upward_potential_latent_heat_flux_over_ocean - long_name = surface upward potential latent heat flux over ocean + standard_name = surface_upward_potential_latent_heat_flux_over_water + long_name = surface upward potential latent heat flux over water units = W m-2 dimensions = (horizontal_loop_extent) type = real