diff --git a/physics/GFS_rrtmgp_lw_post.meta b/physics/GFS_rrtmgp_lw_post.meta index b72f950cd..d9863b41a 100644 --- a/physics/GFS_rrtmgp_lw_post.meta +++ b/physics/GFS_rrtmgp_lw_post.meta @@ -60,7 +60,7 @@ intent = in optional = F [fluxlwUP_allsky] - standard_name = lw_flux_profile_upward_allsky + standard_name = RRTMGP_lw_flux_profile_upward_allsky long_name = RRTMGP upward longwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -69,7 +69,7 @@ intent = in optional = F [fluxlwDOWN_allsky] - standard_name = lw_flux_profile_downward_allsky + standard_name = RRTMGP_lw_flux_profile_downward_allsky long_name = RRTMGP downward longwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -78,7 +78,7 @@ intent = in optional = F [fluxlwUP_clrsky] - standard_name = lw_flux_profile_upward_clrsky + standard_name = RRTMGP_lw_flux_profile_upward_clrsky long_name = RRTMGP upward longwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -87,7 +87,7 @@ intent = in optional = F [fluxlwDOWN_clrsky] - standard_name = lw_flux_profile_downward_clrsky + standard_name = RRTMGP_lw_flux_profile_downward_clrsky long_name = RRTMGP downward longwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -96,10 +96,10 @@ intent = in optional = F [hlwc] - standard_name = tendency_of_air_temperature_due_to_longwave_heating_on_radiation_time_step - long_name = longwave total sky heating rate + standard_name = RRTMGP_lw_heating_rate_all_sky + long_name = RRTMGP longwave all sky heating rate units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = out @@ -121,18 +121,18 @@ intent = inout optional = F [flxprf_lw] - standard_name = lw_fluxes + standard_name = RRTMGP_lw_fluxes long_name = lw fluxes total sky / csk and up / down at levels units = W m-2 - dimensions = (horizontal_dimension,adjusted_vertical_level_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = proflw_type intent = inout optional = T [hlw0] - standard_name = tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_time_step - long_name = longwave clear sky heating rate + standard_name = RRTMGP_lw_heating_rate_clear_sky + long_name = RRTMGP longwave clear sky heating rate units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = inout diff --git a/physics/GFS_rrtmgp_post.F90 b/physics/GFS_rrtmgp_post.F90 index 095409cb4..ad2c7ee66 100644 --- a/physics/GFS_rrtmgp_post.F90 +++ b/physics/GFS_rrtmgp_post.F90 @@ -26,7 +26,7 @@ end subroutine GFS_rrtmgp_post_init !! \htmlinclude GFS_rrtmgp_post.html !! subroutine GFS_rrtmgp_post_run (Model, Grid, Diag, Radtend, Statein, Coupling, scmpsw, & - ncol, raddt, aerodp, cldsa, mtopa, mbota, cloud_fraction, cldtaulw, cldtausw, & + ncol, raddt, aerodp, cldsa, mtopa, mbota, cld_frac, cldtaulw, cldtausw, & errmsg, errflg) ! Inputs @@ -54,7 +54,7 @@ subroutine GFS_rrtmgp_post_run (Model, Grid, Diag, Radtend, Statein, Coupling, s mbota, & ! vertical indices for low, middle and high cloud tops mtopa ! vertical indices for low, middle and high cloud bases real(kind_phys), dimension(ncol,Model%levs), intent(in) :: & - cloud_fraction, & ! Total cloud fraction in each layer + cld_frac, & ! Total cloud fraction in each layer cldtausw, & ! approx .55mu band layer cloud optical depth cldtaulw ! approx 10.mu band layer cloud optical depth ! Inputs (optional) @@ -186,7 +186,7 @@ subroutine GFS_rrtmgp_post_run (Model, Grid, Diag, Radtend, Statein, Coupling, s ! if (.not. Model%uni_cld) then if (Model%lgocart .or. Model%ldiag3d) then do k = 1, Model%levs - Coupling%cldcovi(1:ncol,k) = cloud_fraction(1:ncol,k) + Coupling%cldcovi(1:ncol,k) = cld_frac(1:ncol,k) enddo endif endif ! end_if_lssav diff --git a/physics/GFS_rrtmgp_post.meta b/physics/GFS_rrtmgp_post.meta index 4b46c8684..8d4033202 100644 --- a/physics/GFS_rrtmgp_post.meta +++ b/physics/GFS_rrtmgp_post.meta @@ -113,11 +113,11 @@ type = integer intent = in optional = F -[cloud_fraction] - standard_name = total_cloud_fraction +[cld_frac] + standard_name = RRTMGP_total_cloud_fraction long_name = layer total cloud fraction units = frac - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys intent = in @@ -126,7 +126,7 @@ standard_name = RRTMGP_cloud_optical_depth_layers_at_10mu_band long_name = approx 10mu band layer cloud optical depth units = none - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys intent = in diff --git a/physics/GFS_rrtmgp_pre.F90 b/physics/GFS_rrtmgp_pre.F90 index c8f2ef1f5..360886a57 100644 --- a/physics/GFS_rrtmgp_pre.F90 +++ b/physics/GFS_rrtmgp_pre.F90 @@ -74,8 +74,8 @@ end subroutine GFS_rrtmgp_pre_init subroutine GFS_rrtmgp_pre_run (Model, Grid, Statein, Coupling, Radtend, Sfcprop, Tbd, & ! IN ncol, lw_gas_props, sw_gas_props, & ! IN raddt, p_lay, t_lay, p_lev, t_lev, tsfg, tsfa, alb1d, cld_frac, cld_lwp, & ! OUT - cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, cld_rerain, faerlw, & ! OUT - faersw, cldsa, mtopa, mbota, de_lgth, aerodp, nday, idxday, gas_concentrations, errmsg, errflg) + cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, cld_rerain, aerosolslw, & ! OUT + aerosolssw, cldsa, mtopa, mbota, de_lgth, aerodp, nday, idxday, gas_concentrations, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -133,9 +133,9 @@ subroutine GFS_rrtmgp_pre_run (Model, Grid, Statein, Coupling, Radtend, Sfcprop, cld_rwp, & ! Cloud rain water path cld_rerain ! Cloud rain effective radius real(kind_phys), dimension(ncol,Model%levs,sw_gas_props%get_nband(),NF_AESW), intent(out) ::& - faersw ! Aerosol radiative properties in each SW band. + aerosolssw ! Aerosol radiative properties in each SW band. real(kind_phys), dimension(ncol,Model%levs,lw_gas_props%get_nband(),NF_AELW), intent(out) ::& - faerlw ! Aerosol radiative properties in each LW band. + aerosolslw ! Aerosol radiative properties in each LW band. integer,dimension(ncol,3),intent(out) :: & mbota, & ! Vertical indices for cloud tops mtopa ! Vertical indices for cloud bases @@ -157,7 +157,7 @@ subroutine GFS_rrtmgp_pre_run (Model, Grid, Statein, Coupling, Radtend, Sfcprop, real(kind_phys), dimension(ncol, Model%levs, 2:Model%ntrac) :: tracer real(kind_phys), dimension(ncol, Model%levs, NF_VGAS) :: gas_vmr real(kind_phys), dimension(ncol, Model%levs, NF_CLDS) :: clouds - real(kind_phys), dimension(ncol, Model%levs, sw_gas_props%get_nband(), NF_AESW)::faersw2 + real(kind_phys), dimension(ncol, Model%levs, sw_gas_props%get_nband(), NF_AESW)::aerosolssw2 ! Initialize CCPP error handling variables errmsg = '' @@ -283,18 +283,18 @@ subroutine GFS_rrtmgp_pre_run (Model, Grid, Statein, Coupling, Radtend, Sfcprop, ! ####################################################################################### call setaer(p_lev, p_lay, Statein%prslk(1:NCOL,iSFC:iTOA), tv_lay, relhum, & Sfcprop%slmsk, tracer, Grid%xlon, Grid%xlat, NCOL, Model%levs, Model%levs+1, & - Model%lsswr, Model%lslwr, faersw2, faerlw, aerodp) + Model%lsswr, Model%lslwr, aerosolssw2, aerosolslw, aerodp) ! Store aerosol optical properties ! SW. ! For RRTMGP SW the bands are now ordered from [IR(band) -> nIR -> UV], in RRTMG the ! band ordering was [nIR -> UV -> IR(band)] - faersw(1:NCOL,1:Model%levs,1,1) = faersw2(1:NCOL,1:Model%levs,sw_gas_props%get_nband(),1) - faersw(1:NCOL,1:Model%levs,1,2) = faersw2(1:NCOL,1:Model%levs,sw_gas_props%get_nband(),2) - faersw(1:NCOL,1:Model%levs,1,3) = faersw2(1:NCOL,1:Model%levs,sw_gas_props%get_nband(),3) - faersw(1:NCOL,1:Model%levs,2:sw_gas_props%get_nband(),1) = faersw2(1:NCOL,1:Model%levs,1:sw_gas_props%get_nband()-1,1) - faersw(1:NCOL,1:Model%levs,2:sw_gas_props%get_nband(),2) = faersw2(1:NCOL,1:Model%levs,1:sw_gas_props%get_nband()-1,2) - faersw(1:NCOL,1:Model%levs,2:sw_gas_props%get_nband(),3) = faersw2(1:NCOL,1:Model%levs,1:sw_gas_props%get_nband()-1,3) + aerosolssw(1:NCOL,1:Model%levs,1,1) = aerosolssw2(1:NCOL,1:Model%levs,sw_gas_props%get_nband(),1) + aerosolssw(1:NCOL,1:Model%levs,1,2) = aerosolssw2(1:NCOL,1:Model%levs,sw_gas_props%get_nband(),2) + aerosolssw(1:NCOL,1:Model%levs,1,3) = aerosolssw2(1:NCOL,1:Model%levs,sw_gas_props%get_nband(),3) + aerosolssw(1:NCOL,1:Model%levs,2:sw_gas_props%get_nband(),1) = aerosolssw2(1:NCOL,1:Model%levs,1:sw_gas_props%get_nband()-1,1) + aerosolssw(1:NCOL,1:Model%levs,2:sw_gas_props%get_nband(),2) = aerosolssw2(1:NCOL,1:Model%levs,1:sw_gas_props%get_nband()-1,2) + aerosolssw(1:NCOL,1:Model%levs,2:sw_gas_props%get_nband(),3) = aerosolssw2(1:NCOL,1:Model%levs,1:sw_gas_props%get_nband()-1,3) ! Setup surface ground temperature and ground/air skin temperature if required. tsfg(1:NCOL) = Sfcprop%tsfc(1:NCOL) diff --git a/physics/GFS_rrtmgp_pre.meta b/physics/GFS_rrtmgp_pre.meta index 322b34bd6..d5122d73b 100644 --- a/physics/GFS_rrtmgp_pre.meta +++ b/physics/GFS_rrtmgp_pre.meta @@ -225,7 +225,7 @@ kind = kind_phys intent = out optional = F -[faerlw] +[aerosolslw] standard_name = RRTMGP_aerosol_optical_properties_for_longwave_bands_01_16 long_name = aerosol optical properties for longwave bands 01-16 units = various @@ -234,7 +234,7 @@ kind = kind_phys intent = out optional = F -[faersw] +[aerosolssw] standard_name = RRTMGP_aerosol_optical_properties_for_shortwave_bands_01_16 long_name = aerosol optical properties for shortwave bands 01-16 units = various diff --git a/physics/GFS_rrtmgp_setup.F90 b/physics/GFS_rrtmgp_setup.F90 index bf52b72df..77e604c72 100644 --- a/physics/GFS_rrtmgp_setup.F90 +++ b/physics/GFS_rrtmgp_setup.F90 @@ -46,7 +46,7 @@ subroutine GFS_rrtmgp_setup_init ( & icliq_sw, crick_proof, ccnorm, & imp_physics, & norad_precip, idate, iflip, & - im, faerlw, faersw, aerodp, & ! for consistency checks + im, aerosolslw, aerosolssw, aerodp, & ! for consistency checks me, errmsg, errflg) ! ================= subprogram documentation block ================ ! ! ! @@ -185,8 +185,8 @@ subroutine GFS_rrtmgp_setup_init ( & integer, intent(in) :: iflip ! For consistency checks integer, intent(in) :: im - real(kind_phys), intent(in) :: faerlw(:,:,:,:) - real(kind_phys), intent(in) :: faersw(:,:,:,:) + real(kind_phys), intent(in) :: aerosolslw(:,:,:,:) + real(kind_phys), intent(in) :: aerosolssw(:,:,:,:) real(kind_phys), intent(in) :: aerodp(:,:) ! End for consistency checks integer, intent(in) :: me @@ -194,8 +194,8 @@ subroutine GFS_rrtmgp_setup_init ( & integer, intent(out) :: errflg ! For consistency checks - real(kind_phys), dimension(im,levr,NBDLW,NF_AELW) :: faerlw_check - real(kind_phys), dimension(im,levr,NBDSW,NF_AESW) :: faersw_check + real(kind_phys), dimension(im,levr,NBDLW,NF_AELW) :: aerosolslw_check + real(kind_phys), dimension(im,levr,NBDSW,NF_AESW) :: aerosolssw_check real(kind_phys), dimension(im,NSPC1) :: aerodp_check ! End for consistency checks @@ -208,21 +208,21 @@ subroutine GFS_rrtmgp_setup_init ( & ! Consistency checks for dimensions of arrays, this is required ! to detect differences in FV3's parameters that are used to ! dimension certain arrays and the values in ccpp-physics - if (size(faerlw(1,:,:,:)).ne.size(faerlw_check(1,:,:,:))) then + if (size(aerosolslw(1,:,:,:)).ne.size(aerosolslw_check(1,:,:,:))) then write(errmsg,"(3a,4i4,a,4i4)") & - "Runtime error: dimension mismatch for faerlw,", & + "Runtime error: dimension mismatch for aerosolslw,", & " check definitions of Model%levs, nbdlw, nf_aelw:", & - " expected shape ", shape(faerlw_check(:,:,:,:)), & - " but got ", shape(faerlw(:,:,:,:)) + " expected shape ", shape(aerosolslw_check(:,:,:,:)), & + " but got ", shape(aerosolslw(:,:,:,:)) errflg = 1 return end if - if (size(faersw(1,:,:,:)).ne.size(faersw_check(1,:,:,:))) then + if (size(aerosolssw(1,:,:,:)).ne.size(aerosolssw_check(1,:,:,:))) then write(errmsg,"(3a,4i4,a,4i4)") & - "Runtime error: dimension mismatch for faersw,", & + "Runtime error: dimension mismatch for aerosolssw,", & " check definitions of Model%levs, nbdsw, nf_aesw:", & - " expected shape ", shape(faersw_check(:,:,:,:)), & - " but got ", shape(faersw(:,:,:,:)) + " expected shape ", shape(aerosolssw_check(:,:,:,:)), & + " but got ", shape(aerosolssw(:,:,:,:)) errflg = 1 return end if diff --git a/physics/GFS_rrtmgp_setup.meta b/physics/GFS_rrtmgp_setup.meta index 0e7e7b702..cf14c3de4 100644 --- a/physics/GFS_rrtmgp_setup.meta +++ b/physics/GFS_rrtmgp_setup.meta @@ -186,24 +186,24 @@ type = integer intent = in optional = F -[faerlw] - standard_name = aerosol_optical_properties_for_longwave_bands_01_16 - long_name = optical properties for longwave bands 01-16 +[aerosolssw] + standard_name = RRTMGP_aerosol_optical_properties_for_shortwave_bands_01_16 + long_name = aerosol optical properties for shortwave bands 01-16 units = various - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_longwave_radiation,number_of_aerosol_output_fields_for_longwave_radiation) + dimensions = (horizontal_dimension,vertical_dimension_plus_one, number_of_sw_bands_rrtmgp, number_of_aerosol_output_fields_for_shortwave_radiation) type = real kind = kind_phys intent = in optional = F -[faersw] - standard_name = aerosol_optical_properties_for_shortwave_bands_01_16 - long_name = aerosol optical properties for shortwave bands 01-16 +[aerosolslw] + standard_name = RRTMGP_aerosol_optical_properties_for_longwave_bands_01_16 + long_name = aerosol optical properties for longwave bands 01-16 units = various - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_shortwave_radiation,number_of_aerosol_output_fields_for_shortwave_radiation) + dimensions = (horizontal_dimension,vertical_dimension_plus_one, number_of_lw_bands_rrtmgp,number_of_aerosol_output_fields_for_longwave_radiation) type = real kind = kind_phys - intent = in optional = F + intent = in [aerodp] standard_name = atmosphere_optical_thickness_due_to_ambient_aerosol_particles long_name = vertical integrated optical depth for various aerosol species diff --git a/physics/GFS_rrtmgp_sw_post.F90 b/physics/GFS_rrtmgp_sw_post.F90 index ed0af14a9..9c9e7c16c 100644 --- a/physics/GFS_rrtmgp_sw_post.F90 +++ b/physics/GFS_rrtmgp_sw_post.F90 @@ -36,7 +36,7 @@ subroutine GFS_rrtmgp_sw_post_run (Model, Grid, Diag, Radtend, Coupling, & Model ! Fortran DDT containing FV3-GFS model control parameters type(GFS_grid_type), intent(in) :: & Grid ! Fortran DDT containing FV3-GFS grid and interpolation related data - type(GFS_coupling_type), intent(inout) :: & + type(GFS_coupling_type), intent(inout) :: & Coupling ! Fortran DDT containing FV3-GFS fields to/from coupling with other components type(GFS_radtend_type), intent(inout) :: & Radtend ! Fortran DDT containing FV3-GFS radiation tendencies diff --git a/physics/GFS_rrtmgp_sw_post.meta b/physics/GFS_rrtmgp_sw_post.meta index 00bc675fe..0b2baa03c 100644 --- a/physics/GFS_rrtmgp_sw_post.meta +++ b/physics/GFS_rrtmgp_sw_post.meta @@ -83,7 +83,7 @@ intent = in optional = F [fluxswUP_allsky] - standard_name = sw_flux_profile_upward_allsky + standard_name = RRTMGP_sw_flux_profile_upward_allsky long_name = RRTMGP upward shortwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -92,7 +92,7 @@ intent = in optional = F [fluxswDOWN_allsky] - standard_name = sw_flux_profile_downward_allsky + standard_name = RRTMGP_sw_flux_profile_downward_allsky long_name = RRTMGP downward shortwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -101,7 +101,7 @@ intent = in optional = F [fluxswUP_clrsky] - standard_name = sw_flux_profile_upward_clrsky + standard_name = RRTMGP_sw_flux_profile_upward_clrsky long_name = RRTMGP upward shortwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -110,7 +110,7 @@ intent = in optional = F [fluxswDOWN_clrsky] - standard_name = sw_flux_profile_downward_clrsky + standard_name = RRTMGP_sw_flux_profile_downward_clrsky long_name = RRTMGP downward shortwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -127,14 +127,14 @@ intent = in optional = F [hswc] - standard_name = tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_time_step - long_name = shortwave total sky heating rate + standard_name = RRTMGP_sw_heating_rate_all_sky + long_name = RRTMGP shortwave all sky heating rate units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = out optional = F + intent = out [topflx_sw] standard_name = sw_fluxes_top_atmosphere long_name = shortwave total sky fluxes at the top of the atm @@ -152,16 +152,16 @@ intent = inout optional = F [flxprf_sw] - standard_name = sw_fluxes + standard_name = RRTMGP_sw_fluxes long_name = sw fluxes total sky / csk and up / down at levels units = W m-2 - dimensions = (horizontal_dimension,adjusted_vertical_level_dimension_for_radiation) + dimensions = (horizontal_dimension,adjusted_vertical_level_dimension_plus_one) type = profsw_type intent = inout optional = T [hsw0] - standard_name = sw_heating_rate_clear_sky - long_name = shortwave clear sky heating rate + standard_name = RRTMGP_sw_heating_rate_clear_sky + long_name = RRTMGP shortwave clear sky heating rate units = K s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real diff --git a/physics/rrtmgp_lw_cloud_optics.F90 b/physics/rrtmgp_lw_cloud_optics.F90 index 64f88522f..48af8b7c2 100644 --- a/physics/rrtmgp_lw_cloud_optics.F90 +++ b/physics/rrtmgp_lw_cloud_optics.F90 @@ -314,8 +314,8 @@ end subroutine rrtmgp_lw_cloud_optics_init ! ######################################################################################### subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, cld_lwp, & cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, cld_rerain, & - lw_cloud_props, lw_gas_props, aerosols, & - cldtaulw, optical_props_clouds, optical_props_aerosol, errmsg, errflg) + lw_cloud_props, lw_gas_props, aerosolslw, & + cldtaulw, lw_optical_props_clouds, lw_optical_props_aerosol, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -343,14 +343,14 @@ subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, type(ty_gas_optics_rrtmgp),intent(in) :: & lw_gas_props real(kind_phys), intent(in),dimension(ncol, model%levs, lw_gas_props%get_nband(),3) :: & - aerosols ! + aerosolslw ! ! Outputs real(kind_phys), dimension(ncol,Model%levs), intent(out) :: & cldtaulw ! approx 10.mu band layer cloud optical depth type(ty_optical_props_1scl),intent(out) :: & - optical_props_clouds, & ! - optical_props_aerosol ! + lw_optical_props_clouds, & ! + lw_optical_props_aerosol ! integer, intent(out) :: & errflg ! character(len=*), intent(out) :: & @@ -360,7 +360,7 @@ subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, integer :: iCol integer,dimension(ncol) :: ipseed_lw logical,dimension(ncol,model%levs) :: liqmask, icemask - type(ty_optical_props_1scl) :: optical_props_cloudsByBand + type(ty_optical_props_1scl) :: lw_optical_props_cloudsByBand type(random_stat) :: rng_stat real(kind_phys), dimension(lw_gas_props%get_ngpt(),model%levs,ncol) :: rng3D real(kind_phys), dimension(lw_gas_props%get_ngpt()*model%levs) :: rng1D @@ -397,19 +397,19 @@ subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, ! Allocate space for RRTMGP DDTs containing cloud and aerosol radiative properties ! ####################################################################################### ! Cloud optics [nCol,model%levs,nBands] - call check_error_msg('rrtmgp_lw_cloud_optics_run',optical_props_cloudsByBand%alloc_1scl(& + call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_cloudsByBand%alloc_1scl(& ncol, model%levs, lw_gas_props%get_band_lims_wavenumber())) ! Aerosol optics [nCol,model%levs,nBands] - call check_error_msg('rrtmgp_lw_cloud_optics_run',optical_props_aerosol%alloc_1scl( & + call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_aerosol%alloc_1scl( & ncol, model%levs, lw_gas_props%get_band_lims_wavenumber())) ! Cloud optics [nCol,model%levs,nGpts] - call check_error_msg('rrtmgp_lw_cloud_optics_run',optical_props_clouds%alloc_1scl( & + call check_error_msg('rrtmgp_lw_cloud_optics_run',lw_optical_props_clouds%alloc_1scl( & ncol, model%levs, lw_gas_props)) ! ####################################################################################### ! Copy aerosol optical information to RRTMGP DDT ! ####################################################################################### - optical_props_aerosol%tau = aerosols(:,:,:,1) * (1. - aerosols(:,:,:,2)) + lw_optical_props_aerosol%tau = aerosolslw(:,:,:,1) * (1. - aerosolslw(:,:,:,2)) ! ####################################################################################### ! Compute cloud-optics for RTE. @@ -427,7 +427,7 @@ subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, cld_iwp, & ! IN - Cloud ice water path cld_reliq, & ! IN - Cloud liquid effective radius cld_reice, & ! IN - Cloud ice effective radius - optical_props_cloudsByBand)) ! OUT - RRTMGP DDT containing cloud radiative properties + lw_optical_props_cloudsByBand)) ! OUT - RRTMGP DDT containing cloud radiative properties ! in each band else ! ii) RRTMG cloud-optics. @@ -435,7 +435,7 @@ subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, call rrtmg_lw_cloud_optics(ncol, model%levs, lw_gas_props%get_nband(), cld_lwp, & cld_reliq, cld_iwp, cld_reice, cld_rwp, cld_rerain, cld_swp, cld_resnow, & cld_frac, tau_cld) - optical_props_cloudsByBand%tau = tau_cld + lw_optical_props_cloudsByBand%tau = tau_cld endif endif @@ -458,10 +458,10 @@ subroutine rrtmgp_lw_cloud_optics_run(Model, ncol, ipsdlw0, icseed_lw, cld_frac, end select ! Map band optical depth to each g-point using McICA - call check_error_msg('rrtmgp_lw_cloud_optics_run',draw_samples(cldfracMCICA,optical_props_cloudsByBand,optical_props_clouds)) + call check_error_msg('rrtmgp_lw_cloud_optics_run',draw_samples(cldfracMCICA,lw_optical_props_cloudsByBand,lw_optical_props_clouds)) ! GFS_RRTMGP_POST_RUN() requires the LW optical depth ~10microns - cldtaulw = optical_props_cloudsByBand%tau(:,:,7) + cldtaulw = lw_optical_props_cloudsByBand%tau(:,:,7) end subroutine rrtmgp_lw_cloud_optics_run diff --git a/physics/rrtmgp_lw_cloud_optics.meta b/physics/rrtmgp_lw_cloud_optics.meta index b2e37e55a..7703610f4 100644 --- a/physics/rrtmgp_lw_cloud_optics.meta +++ b/physics/rrtmgp_lw_cloud_optics.meta @@ -183,7 +183,7 @@ intent = in type = ty_cloud_optics optional = F -[aerosols] +[aerosolslw] standard_name = RRTMGP_aerosol_optical_properties_for_longwave_bands_01_16 long_name = aerosol optical properties for longwave bands 01-16 units = various @@ -201,7 +201,7 @@ kind = kind_phys intent = out optional = F -[optical_props_clouds] +[lw_optical_props_clouds] standard_name = longwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -209,7 +209,7 @@ type = ty_optical_props_1scl intent = out optional = F -[optical_props_aerosol] +[lw_optical_props_aerosol] standard_name = longwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -233,4 +233,4 @@ dimensions = () type = integer intent = out - optional = F \ No newline at end of file + optional = F diff --git a/physics/rrtmgp_lw_clrallsky_driver.F90 b/physics/rrtmgp_lw_clrallsky_driver.F90 index 3ee39ba45..2d5237916 100644 --- a/physics/rrtmgp_lw_clrallsky_driver.F90 +++ b/physics/rrtmgp_lw_clrallsky_driver.F90 @@ -27,9 +27,10 @@ end subroutine rrtmgp_lw_clrallsky_driver_init !! \section arg_table_rrtmgp_lw_clrallsky_driver_run !! \htmlinclude rrtmgp_lw_clrallsky_driver.html !! - subroutine rrtmgp_lw_clrallsky_driver_run(Model, Radtend, ncol, lw_gas_props, p_lay, t_lay, p_lev, skt, & - gas_concentrations, optical_propsLW_clds, optical_propsLW_aerosol,& - lslwr, fluxUP_allsky, fluxDOWN_allsky, fluxUP_clrsky, fluxDOWN_clrsky, hlw0, hlwb, errmsg, errflg) + subroutine rrtmgp_lw_clrallsky_driver_run(Model, Radtend, ncol, lw_gas_props, p_lay, t_lay,& + p_lev, skt, gas_concentrations, lw_optical_props_clouds, lw_optical_props_aerosol, & + lslwr, fluxlwUP_allsky, fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, hlw0, & + hlwb, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -48,8 +49,8 @@ subroutine rrtmgp_lw_clrallsky_driver_run(Model, Radtend, ncol, lw_gas_props, p_ type(ty_gas_optics_rrtmgp),intent(in) :: & lw_gas_props ! DDT containing LW spectral information type(ty_optical_props_1scl),intent(in) :: & - optical_propsLW_clds, & ! RRTMGP DDT: longwave cloud radiative properties - optical_propsLW_aerosol ! RRTMGP DDT: longwave aerosol radiative properties + lw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties + lw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties type(ty_gas_concs),intent(in) :: & gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) logical, intent(in) :: & @@ -59,10 +60,10 @@ subroutine rrtmgp_lw_clrallsky_driver_run(Model, Radtend, ncol, lw_gas_props, p_ character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg real(kind_phys), dimension(ncol,model%levs), intent(out) :: & - fluxUP_allsky, & ! All-sky flux (W/m2) - fluxDOWN_allsky, & ! All-sky flux (W/m2) - fluxUP_clrsky, & ! Clear-sky flux (W/m2) - fluxDOWN_clrsky ! All-sky flux (W/m2) + fluxlwUP_allsky, & ! All-sky flux (W/m2) + fluxlwDOWN_allsky, & ! All-sky flux (W/m2) + fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) + fluxlwDOWN_clrsky ! All-sky flux (W/m2) ! Outputs (optional) real(kind_phys), dimension(ncol,model%levs,lw_gas_props%get_nband()), optional, intent(inout) :: & @@ -109,14 +110,14 @@ subroutine rrtmgp_lw_clrallsky_driver_run(Model, Radtend, ncol, lw_gas_props, p_ p_lev, & ! IN - pressure at layer centers (Pa) skt, & ! IN - skin temperature (K) Radtend%sfc_emiss_byband, & ! IN - surface emissivity in each LW band - optical_propsLW_clds, & ! IN - DDT containing cloud optical information + lw_optical_props_clouds, & ! IN - DDT containing cloud optical information flux_allsky, & ! OUT - Fluxes, all-sky, 3D (nCol,model%levs,nBand) flux_clrsky, & ! OUT - Fluxes, clear-sky, 3D (nCol,model%levs,nBand) - aer_props = optical_propsLW_aerosol)) ! IN(optional) - DDT containing aerosol optical information - fluxUP_allsky = flux_allsky%flux_up - fluxDOWN_allsky = flux_allsky%flux_dn - fluxUP_clrsky = flux_clrsky%flux_up - fluxDOWN_clrsky = flux_clrsky%flux_dn + aer_props = lw_optical_props_aerosol)) ! IN(optional) - DDT containing aerosol optical information + fluxlwUP_allsky = flux_allsky%flux_up + fluxlwDOWN_allsky = flux_allsky%flux_dn + fluxlwUP_clrsky = flux_clrsky%flux_up + fluxlwDOWN_clrsky = flux_clrsky%flux_dn end subroutine rrtmgp_lw_clrallsky_driver_run diff --git a/physics/rrtmgp_lw_clrallsky_driver.meta b/physics/rrtmgp_lw_clrallsky_driver.meta index bc520ad64..00609ce31 100644 --- a/physics/rrtmgp_lw_clrallsky_driver.meta +++ b/physics/rrtmgp_lw_clrallsky_driver.meta @@ -69,7 +69,7 @@ type = ty_gas_optics_rrtmgp intent = in optional = F -[optical_propsLW_clds] +[lw_optical_props_clouds] standard_name = longwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -77,7 +77,7 @@ type = ty_optical_props_1scl intent = in optional = F -[optical_propsLW_aerosol] +[lw_optical_props_aerosol] standard_name = longwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -102,25 +102,26 @@ intent = in optional = F [hlw0] - standard_name = tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_time_step - long_name = longwave clear sky heating rate + standard_name = RRTMGP_lw_heating_rate_clear_sky + long_name = RRTMGP longwave clear sky heating rate units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys - intent = in optional = T + intent = in [hlwb] - standard_name = lw_heating_rate_spectral - long_name = longwave total sky heating rate (spectral) + standard_name = RRTMGP_lw_heating_rate_spectral + long_name = RRTMGP longwave total sky heating rate (spectral) units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_longwave_radiation) + dimensions = (horizontal_dimension,vertical_dimension,number_of_lw_spectral_points_rrtmgp) type = real kind = kind_phys - intent = in optional = T -[fluxUP_allsky] - standard_name = lw_flux_profile_upward_allsky + kind = kind_phys + intent = in +[fluxlwUP_allsky] + standard_name = RRTMGP_lw_flux_profile_upward_allsky long_name = RRTMGP upward longwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -128,8 +129,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_allsky] - standard_name = lw_flux_profile_downward_allsky +[fluxlwDOWN_allsky] + standard_name = RRTMGP_lw_flux_profile_downward_allsky long_name = RRTMGP downward longwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -137,8 +138,8 @@ kind = kind_phys intent = out optional = F -[fluxUP_clrsky] - standard_name = lw_flux_profile_upward_clrsky +[fluxlwUP_clrsky] + standard_name = RRTMGP_lw_flux_profile_upward_clrsky long_name = RRTMGP upward longwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -146,8 +147,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_clrsky] - standard_name = lw_flux_profile_downward_clrsky +[fluxlwDOWN_clrsky] + standard_name = RRTMGP_lw_flux_profile_downward_clrsky long_name = RRTMGP downward longwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) diff --git a/physics/rrtmgp_lw_gas_optics.F90 b/physics/rrtmgp_lw_gas_optics.F90 index 94b31c32e..f829fa18c 100644 --- a/physics/rrtmgp_lw_gas_optics.F90 +++ b/physics/rrtmgp_lw_gas_optics.F90 @@ -415,8 +415,9 @@ end subroutine rrtmgp_lw_gas_optics_init !! \section arg_table_rrtmgp_lw_gas_optics_run !! \htmlinclude rrtmgp_lw_gas_optics.html !! - subroutine rrtmgp_lw_gas_optics_run(Model, Radtend, lw_gas_props, ncol, p_lay, p_lev, t_lay, t_lev, skt, & - gas_concentrations, lslwr, optical_props_clrsky, sources_LW, toa_src, errmsg, errflg) + subroutine rrtmgp_lw_gas_optics_run(Model, Radtend, lw_gas_props, ncol, p_lay, p_lev, t_lay,& + t_lev, skt, gas_concentrations, lslwr, lw_optical_props_clrsky, sources, & + errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -447,11 +448,9 @@ subroutine rrtmgp_lw_gas_optics_run(Model, Radtend, lw_gas_props, ncol, p_lay, p integer, intent(out) :: & errflg ! Error code type(ty_optical_props_1scl),intent(out) :: & - optical_props_clrsky ! + lw_optical_props_clrsky ! type(ty_source_func_lw),intent(out) :: & - sources_LW - real(kind_phys),dimension(ncol,lw_gas_props%get_ngpt()),intent(out) :: & - toa_src + sources ! Initialize CCPP error handling variables errmsg = '' @@ -460,9 +459,9 @@ subroutine rrtmgp_lw_gas_optics_run(Model, Radtend, lw_gas_props, ncol, p_lay, p if (.not. Model%lslwr) return ! Allocate space - call check_error_msg('rrtmgp_lw_gas_optics_run',optical_props_clrsky%alloc_1scl(ncol, model%levs, lw_gas_props)) - call check_error_msg('rrtmgp_lw_gas_optics_run',sources_LW%init(lw_gas_props)) - call check_error_msg('rrtmgp_lw_gas_optics_run',sources_LW%alloc(ncol, Model%levs)) + call check_error_msg('rrtmgp_lw_gas_optics_run',lw_optical_props_clrsky%alloc_1scl(ncol, model%levs, lw_gas_props)) + call check_error_msg('rrtmgp_lw_gas_optics_run',sources%init(lw_gas_props)) + call check_error_msg('rrtmgp_lw_gas_optics_run',sources%alloc(ncol, Model%levs)) ! Compute boundary-condition (Only do for low-ceiling models) !call check_error_msg('rrtmgp_lw_gas_optics_run',compute_bc(& @@ -471,19 +470,19 @@ subroutine rrtmgp_lw_gas_optics_run(Model, Radtend, lw_gas_props, ncol, p_lay, p ! p_lev, & ! IN - ! t_lay, & ! IN - ! gas_concentrations, & ! IN - - ! toa_src)) ! OUT - + ! Radtend%toa_src_lw)) ! OUT - ! Gas-optics (djs asks pincus: I think it makes sense to have a generic gas_optics interface in ! ty_gas_optics_rrtmgp, just as in ty_gas_optics. call check_error_msg('rrtmgp_lw_gas_optics_run',lw_gas_props%gas_optics_int(& - p_lay, & ! IN - - p_lev, & ! IN - - t_lay, & ! IN - - skt, & ! IN - - gas_concentrations, & ! IN - - optical_props_clrsky, & ! OUT - - sources_LW, & ! OUT - - tlev=t_lev)) ! IN - + p_lay, & ! IN - + p_lev, & ! IN - + t_lay, & ! IN - + skt, & ! IN - + gas_concentrations, & ! IN - + lw_optical_props_clrsky, & ! OUT - + sources, & ! OUT - + tlev=t_lev)) ! IN - end subroutine rrtmgp_lw_gas_optics_run diff --git a/physics/rrtmgp_lw_gas_optics.meta b/physics/rrtmgp_lw_gas_optics.meta index 8b1f59822..087f44367 100644 --- a/physics/rrtmgp_lw_gas_optics.meta +++ b/physics/rrtmgp_lw_gas_optics.meta @@ -189,7 +189,7 @@ type = integer intent = out optional = F -[optical_props_clrsky] +[lw_optical_props_clrsky] standard_name = longwave_optical_properties_for_clear_sky long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -197,7 +197,7 @@ type = ty_optical_props_1scl intent = out optional = F -[sources_LW] +[sources] standard_name = longwave_source_function long_name = Fortran DDT containing RRTMGP source functions units = DDT @@ -205,12 +205,3 @@ type = ty_source_func_lw intent = out optional = F -[toa_src] - standard_name = incident_terrestrial_irradiance_at_top_of_atmosphere_by_spectral_point - long_name = top of atmosphere incident terrestrial flux in each spectral point - units = - dimensions = (horizontal_dimension,number_of_sw_spectral_points_rrtmgp) - type = real - kind = kind_phys - intent = out - optional = F diff --git a/physics/rrtmgp_lw_rte.F90 b/physics/rrtmgp_lw_rte.F90 index b035d9447..ce2ef93fd 100644 --- a/physics/rrtmgp_lw_rte.F90 +++ b/physics/rrtmgp_lw_rte.F90 @@ -28,8 +28,8 @@ end subroutine rrtmgp_lw_rte_init !! \htmlinclude rrtmgp_lw_rte.html !! subroutine rrtmgp_lw_rte_run(Model, Statein, Radtend, ncol, lw_gas_props, p_lay, t_lay, p_lev, & - skt, sources, optical_props_clrsky, optical_props_cloud, optical_props_aerosol, lslwr,& - fluxUP_allsky, fluxDOWN_allsky, fluxUP_clrsky, fluxDOWN_clrsky, hlw0, hlwb, errmsg, errflg) + skt, sources, lw_optical_props_clrsky, lw_optical_props_clouds, lw_optical_props_aerosol, lslwr,& + fluxlwUP_allsky, fluxlwDOWN_allsky, fluxlwUP_clrsky, fluxlwDOWN_clrsky, hlw0, hlwb, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -50,10 +50,10 @@ subroutine rrtmgp_lw_rte_run(Model, Statein, Radtend, ncol, lw_gas_props, p_lay, type(ty_gas_optics_rrtmgp),intent(in) :: & lw_gas_props ! DDT containing LW spectral information type(ty_optical_props_1scl),intent(inout) :: & - optical_props_clrsky ! RRTMGP DDT: longwave clear-sky radiative properties + lw_optical_props_clrsky ! RRTMGP DDT: longwave clear-sky radiative properties type(ty_optical_props_1scl),intent(in) :: & - optical_props_cloud, & ! RRTMGP DDT: longwave cloud radiative properties - optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties + lw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties + lw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties type(ty_source_func_lw),intent(in) :: & sources logical, intent(in) :: & @@ -65,10 +65,10 @@ subroutine rrtmgp_lw_rte_run(Model, Statein, Radtend, ncol, lw_gas_props, p_lay, integer, intent(out) :: & errflg ! CCPP error flag real(kind_phys), dimension(ncol,model%levs+1), intent(out) :: & - fluxUP_allsky, & ! All-sky flux (W/m2) - fluxDOWN_allsky, & ! All-sky flux (W/m2) - fluxUP_clrsky, & ! Clear-sky flux (W/m2) - fluxDOWN_clrsky ! All-sky flux (W/m2) + fluxlwUP_allsky, & ! All-sky flux (W/m2) + fluxlwDOWN_allsky, & ! All-sky flux (W/m2) + fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) + fluxlwDOWN_clrsky ! All-sky flux (W/m2) ! Outputs (optional) real(kind_phys), dimension(ncol,model%levs,lw_gas_props%get_nband()), optional, intent(inout) :: & @@ -111,31 +111,31 @@ subroutine rrtmgp_lw_rte_run(Model, Statein, Radtend, ncol, lw_gas_props, p_lay, ! Compute clear-sky fluxes (if requested) ! Clear-sky fluxes are gas+aerosol - call check_error_msg('rrtmgp_lw_rte_run',optical_props_aerosol%increment(optical_props_clrsky)) + call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_aerosol%increment(lw_optical_props_clrsky)) if (l_ClrSky_HR) then call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & - optical_props_clrsky, & ! IN - optical-properties + lw_optical_props_clrsky, & ! IN - optical-properties top_at_1, & ! IN - veritcal ordering flag sources, & ! IN - source function Radtend%sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_clrsky)) ! Store fluxes - fluxUP_clrsky = flux_clrsky%flux_up - fluxDOWN_clrsky = flux_clrsky%flux_dn + fluxlwUP_clrsky = flux_clrsky%flux_up + fluxlwDOWN_clrsky = flux_clrsky%flux_dn endif ! All-sky fluxes ! Clear-sky fluxes are (gas+aerosol)+clouds - call check_error_msg('rrtmgp_lw_rte_run',optical_props_cloud%increment(optical_props_clrsky)) + call check_error_msg('rrtmgp_lw_rte_run',lw_optical_props_clouds%increment(lw_optical_props_clrsky)) call check_error_msg('rrtmgp_lw_rte_run',rte_lw( & - optical_props_clrsky, & ! IN - optical-properties + lw_optical_props_clrsky, & ! IN - optical-properties top_at_1, & ! IN - veritcal ordering flag sources, & ! IN - source function Radtend%sfc_emiss_byband, & ! IN - surface emissivity in each LW band flux_allsky)) ! Store fluxes - fluxUP_allsky = flux_allsky%flux_up - fluxDOWN_allsky = flux_allsky%flux_dn + fluxlwUP_allsky = flux_allsky%flux_up + fluxlwDOWN_allsky = flux_allsky%flux_dn end subroutine rrtmgp_lw_rte_run diff --git a/physics/rrtmgp_lw_rte.meta b/physics/rrtmgp_lw_rte.meta index e3fdb7ac3..8e5d653ee 100644 --- a/physics/rrtmgp_lw_rte.meta +++ b/physics/rrtmgp_lw_rte.meta @@ -77,7 +77,7 @@ type = ty_gas_optics_rrtmgp intent = in optional = F -[optical_props_clrsky] +[lw_optical_props_clrsky] standard_name = longwave_optical_properties_for_clear_sky long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -85,7 +85,7 @@ type = ty_optical_props_1scl intent = inout optional = F -[optical_props_cloud] +[lw_optical_props_clouds] standard_name = longwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -93,7 +93,7 @@ type = ty_optical_props_1scl intent = in optional = F -[optical_props_aerosol] +[lw_optical_props_aerosol] standard_name = longwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -118,25 +118,25 @@ intent = in optional = F [hlw0] - standard_name = tendency_of_air_temperature_due_to_longwave_heating_assuming_clear_sky_on_radiation_time_step - long_name = longwave clear sky heating rate + standard_name = RRTMGP_lw_heating_rate_clear_sky + long_name = RRTMGP longwave clear sky heating rate units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys intent = in optional = T [hlwb] - standard_name = lw_heating_rate_spectral - long_name = longwave total sky heating rate (spectral) + standard_name = RRTMGP_lw_heating_rate_spectral + long_name = RRTMGP longwave total sky heating rate (spectral) units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_longwave_radiation) + dimensions = (horizontal_dimension,vertical_dimension,number_of_lw_spectral_points_rrtmgp) type = real kind = kind_phys intent = in optional = T -[fluxUP_allsky] - standard_name = lw_flux_profile_upward_allsky +[fluxlwUP_allsky] + standard_name = RRTMGP_lw_flux_profile_upward_allsky long_name = RRTMGP upward longwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -144,8 +144,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_allsky] - standard_name = lw_flux_profile_downward_allsky +[fluxlwDOWN_allsky] + standard_name = RRTMGP_lw_flux_profile_downward_allsky long_name = RRTMGP downward longwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -153,8 +153,8 @@ kind = kind_phys intent = out optional = F -[fluxUP_clrsky] - standard_name = lw_flux_profile_upward_clrsky +[fluxlwUP_clrsky] + standard_name = RRTMGP_lw_flux_profile_upward_clrsky long_name = RRTMGP upward longwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -162,8 +162,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_clrsky] - standard_name = lw_flux_profile_downward_clrsky +[fluxlwDOWN_clrsky] + standard_name = RRTMGP_lw_flux_profile_downward_clrsky long_name = RRTMGP downward longwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) diff --git a/physics/rrtmgp_sw_cloud_optics.F90 b/physics/rrtmgp_sw_cloud_optics.F90 index e380027ad..6efdb5f01 100644 --- a/physics/rrtmgp_sw_cloud_optics.F90 +++ b/physics/rrtmgp_sw_cloud_optics.F90 @@ -311,10 +311,10 @@ end subroutine rrtmgp_sw_cloud_optics_init ! ######################################################################################### ! SUBROTUINE rrtmgp_sw_cloud_optics_run() ! ######################################################################################### - subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, & ! IN - cld_lwp, cld_reliq, cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, cld_rerain, & ! IN - aerosols, sw_cloud_props, sw_gas_props, ipsdsw0, nday, idxday, & ! IN - optical_props_clouds, optical_props_aerosol, cldtausw, errmsg, errflg) ! OUT + subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, cld_lwp, cld_reliq,& + cld_iwp, cld_reice, cld_swp, cld_resnow, cld_rwp, cld_rerain, aerosolssw, & + sw_cloud_props, sw_gas_props, ipsdsw0, nday, idxday, & ! IN + sw_optical_props_clouds, sw_optical_props_aerosol, cldtausw, errmsg, errflg) ! OUT ! Inputs type(GFS_control_type), intent(in) :: & @@ -345,12 +345,12 @@ subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, & type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props real(kind_phys), intent(in),dimension(ncol, model%levs, sw_gas_props%get_nband(),3) :: & - aerosols ! + aerosolssw ! ! Outputs type(ty_optical_props_2str),intent(out) :: & - optical_props_clouds, & - optical_props_aerosol + sw_optical_props_clouds, & + sw_optical_props_aerosol real(kind_phys), dimension(ncol,Model%levs), intent(out) :: & cldtausw ! approx 10.mu band layer cloud optical depth integer, intent(out) :: errflg @@ -360,7 +360,7 @@ subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, & integer :: iCol integer,dimension(ncol) :: ipseed_sw logical,dimension(ncol,model%levs) :: liqmask, icemask - type(ty_optical_props_2str) :: optical_props_cloudsByBand + type(ty_optical_props_2str) :: sw_optical_props_cloudsByBand type(random_stat) :: rng_stat real(kind_phys), dimension(sw_gas_props%get_ngpt(),model%levs,ncol) :: rng3D real(kind_phys), dimension(sw_gas_props%get_ngpt()*model%levs) :: rng1D @@ -397,21 +397,21 @@ subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, & ! Allocate space for RRTMGP DDTs containing cloud and aerosol radiative properties ! ####################################################################################### ! Cloud optics [ncol,model%levs,nBands] - call check_error_msg('rrtmgp_sw_cloud_optics_run',optical_props_cloudsByBand%alloc_2str(& + call check_error_msg('rrtmgp_sw_cloud_optics_run',sw_optical_props_cloudsByBand%alloc_2str(& ncol, model%levs, sw_gas_props%get_band_lims_wavenumber())) ! Aerosol optics [ncol,model%levs,nBands] - call check_error_msg('rrtmgp_sw_cloud_optics_run',optical_props_aerosol%alloc_2str( & + call check_error_msg('rrtmgp_sw_cloud_optics_run',sw_optical_props_aerosol%alloc_2str( & ncol, model%levs, sw_gas_props%get_band_lims_wavenumber())) ! Cloud optics [ncol,model%levs,nGpt] - call check_error_msg('rrtmgp_sw_cloud_optics_run',optical_props_clouds%alloc_2str( & + call check_error_msg('rrtmgp_sw_cloud_optics_run',sw_optical_props_clouds%alloc_2str( & ncol, model%levs, sw_gas_props)) ! ####################################################################################### ! Copy aerosol optical information to RRTMGP DDT ! ####################################################################################### - optical_props_aerosol%tau = aerosols(:,:,:,1) - optical_props_aerosol%ssa = aerosols(:,:,:,2) - optical_props_aerosol%g = aerosols(:,:,:,3) + sw_optical_props_aerosol%tau = aerosolssw(:,:,:,1) + sw_optical_props_aerosol%ssa = aerosolssw(:,:,:,2) + sw_optical_props_aerosol%g = aerosolssw(:,:,:,3) ! ####################################################################################### ! Compute cloud-optics for RTE. @@ -429,21 +429,21 @@ subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, & cld_iwp, & ! IN - Cloud ice water path cld_reliq, & ! IN - Cloud liquid effective radius cld_reice, & ! IN - Cloud ice effective radius - optical_props_cloudsByBand)) ! OUT - RRTMGP DDT containing cloud radiative properties + sw_optical_props_cloudsByBand)) ! OUT - RRTMGP DDT containing cloud radiative properties ! in each band else ! RRTMG cloud-optics if (any(cld_frac .gt. 0)) then - optical_props_cloudsByBand%tau(:,:,:) = 0._kind_phys - optical_props_cloudsByBand%ssa(:,:,:) = 0._kind_phys - optical_props_cloudsByBand%g(:,:,:) = 0._kind_phys + sw_optical_props_cloudsByBand%tau(:,:,:) = 0._kind_phys + sw_optical_props_cloudsByBand%ssa(:,:,:) = 0._kind_phys + sw_optical_props_cloudsByBand%g(:,:,:) = 0._kind_phys call rrtmg_sw_cloud_optics(nday, model%levs, sw_gas_props%get_nband(), cld_lwp(idxday,:), & cld_reliq(idxday,:), cld_iwp(idxday,:), cld_reice(idxday,:), cld_rwp(idxday,:), & cld_rerain(idxday,:), cld_swp(idxday,:), cld_resnow(idxday,:), cld_frac(idxday,:),& tau_cld, ssa_cld, asy_cld) - optical_props_cloudsByBand%tau(idxday,:,:) = tau_cld - optical_props_cloudsByBand%ssa(idxday,:,:) = ssa_cld - optical_props_cloudsByBand%g(idxday,:,:) = asy_cld + sw_optical_props_cloudsByBand%tau(idxday,:,:) = tau_cld + sw_optical_props_cloudsByBand%ssa(idxday,:,:) = ssa_cld + sw_optical_props_cloudsByBand%g(idxday,:,:) = asy_cld endif endif ! ####################################################################################### @@ -465,10 +465,10 @@ subroutine rrtmgp_sw_cloud_optics_run(Model, ncol, icseed_sw, cld_frac, & end select ! Map band optical depth to each g-point using McICA - call check_error_msg('rrtmgp_sw_cloud_optics_run',draw_samples(cldfracMCICA,optical_props_cloudsByBand,optical_props_clouds)) + call check_error_msg('rrtmgp_sw_cloud_optics_run',draw_samples(cldfracMCICA,sw_optical_props_cloudsByBand,sw_optical_props_clouds)) ! GFS_RRTMGP_POST_RUN() requires the SW optical depth ~0.55microns - cldtausw = optical_props_cloudsByBand%tau(:,:,11) + cldtausw = sw_optical_props_cloudsByBand%tau(:,:,11) end subroutine rrtmgp_sw_cloud_optics_run diff --git a/physics/rrtmgp_sw_cloud_optics.meta b/physics/rrtmgp_sw_cloud_optics.meta index d70370d70..1bbd21d53 100644 --- a/physics/rrtmgp_sw_cloud_optics.meta +++ b/physics/rrtmgp_sw_cloud_optics.meta @@ -161,15 +161,15 @@ intent = in optional = F [icseed_sw] - standard_name = seed_random_numbers_sw + standard_name = seed_random_numbers_sw_for_RRTMGP long_name = seed for random number generation for shortwave radiation units = none dimensions = (horizontal_dimension) type = integer intent = in optional = F -[aerosols] - standard_name = aerosol_optical_properties_for_shortwave_bands_01_16 +[aerosolssw] + standard_name = RRTMGP_aerosol_optical_properties_for_shortwave_bands_01_16 long_name = aerosol optical properties for shortwave bands 01-16 units = various dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_shortwave_radiation,number_of_aerosol_output_fields_for_shortwave_radiation) @@ -217,7 +217,7 @@ type = integer intent = in optional = F -[optical_props_clouds] +[sw_optical_props_clouds] standard_name = shortwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -225,7 +225,7 @@ type = ty_optical_props_2str intent = out optional = F -[optical_props_aerosol] +[sw_optical_props_aerosol] standard_name = shortwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT diff --git a/physics/rrtmgp_sw_clrallsky_driver.F90 b/physics/rrtmgp_sw_clrallsky_driver.F90 index 99f42a688..4d284b71d 100644 --- a/physics/rrtmgp_sw_clrallsky_driver.F90 +++ b/physics/rrtmgp_sw_clrallsky_driver.F90 @@ -29,10 +29,10 @@ end subroutine rrtmgp_sw_clrallsky_driver_init !! \section arg_table_rrtmgp_sw_clrallsky_driver_run !! \htmlinclude rrtmgp_sw_clrallsky_driver.html !! - subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_lay, t_lay, p_lev, gas_concentrations, & - optical_props_clds, optical_props_aerosol, & - lsswr, nday, idxday, hsw0, hswb, scmpsw, & - fluxUP_allsky, fluxDOWN_allsky, fluxUP_clrsky, fluxDOWN_clrsky, errmsg, errflg) + subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_lay, t_lay,& + p_lev, gas_concentrations,sw_optical_props_clouds, sw_optical_props_aerosol, lsswr, & + nday, idxday, hsw0, hswb, scmpsw, & + fluxswUP_allsky, fluxswDOWN_allsky, fluxswUP_clrsky, fluxswDOWN_clrsky, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: Model @@ -50,8 +50,8 @@ subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_ type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! DDT containing SW spectral information type(ty_optical_props_2str),intent(in) :: & - optical_props_clds, & ! RRTMGP DDT: longwave cloud radiative properties - optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties + sw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties + sw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties type(ty_gas_concs),intent(in) :: & gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) @@ -62,10 +62,10 @@ subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_ character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg real(kind_phys), dimension(ncol,Model%levs), intent(out) :: & - fluxUP_allsky, & ! All-sky flux (W/m2) - fluxDOWN_allsky, & ! All-sky flux (W/m2) - fluxUP_clrsky, & ! Clear-sky flux (W/m2) - fluxDOWN_clrsky ! All-sky flux (W/m2) + fluxswUP_allsky, & ! All-sky flux (W/m2) + fluxswDOWN_allsky, & ! All-sky flux (W/m2) + fluxswUP_clrsky, & ! Clear-sky flux (W/m2) + fluxswDOWN_clrsky ! All-sky flux (W/m2) ! Inputs (optional) (NOTE. We only need the optional arguments to know what fluxes to output, HR's are computed later) real(kind_phys), dimension(ncol,Model%levs), optional, intent(inout) :: & @@ -94,8 +94,8 @@ subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_ logical :: l_ClrSky_HR=.false., l_AllSky_HR_byband=.false., l_scmpsw=.false. integer :: iGas type(ty_optical_props_2str) :: & - optical_props_clds_daylit, & ! RRTMGP DDT: longwave cloud radiative properties - optical_props_aerosol_daylit ! RRTMGP DDT: longwave aerosol radiative properties + sw_optical_props_clouds_daylit, & ! RRTMGP DDT: longwave cloud radiative properties + sw_optical_props_aerosol_daylit ! RRTMGP DDT: longwave aerosol radiative properties type(ty_gas_concs) :: & gas_concentrations_daylit ! RRTMGP DDT: trace gas concentrations (vmr) @@ -112,24 +112,24 @@ subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_ if ( l_scmpsw ) then scmpsw = cmpfsw_type (0., 0., 0., 0., 0., 0.) endif - fluxUP_allsky(:,:) = 0._kind_phys - fluxDOWN_allsky(:,:) = 0._kind_phys - fluxUP_clrsky(:,:) = 0._kind_phys - fluxDOWN_clrsky(:,:) = 0._kind_phys + fluxswUP_allsky(:,:) = 0._kind_phys + fluxswDOWN_allsky(:,:) = 0._kind_phys + fluxswUP_clrsky(:,:) = 0._kind_phys + fluxswDOWN_clrsky(:,:) = 0._kind_phys if (nDay .gt. 0) then ! Subset the cloud and aerosol radiative properties over daylit points. ! Cloud optics [nDay,Model%levs,nBands] - call check_error_msg('rrtmgp_sw_clrallsky_driver_run',optical_props_clds_daylit%alloc_2str(nday, Model%levs, sw_gas_props)) - optical_props_clds_daylit%tau = optical_props_clds%tau(idxday,:,:) - optical_props_clds_daylit%ssa = optical_props_clds%ssa(idxday,:,:) - optical_props_clds_daylit%g = optical_props_clds%g(idxday,:,:) + call check_error_msg('rrtmgp_sw_clrallsky_driver_run',sw_optical_props_clouds_daylit%alloc_2str(nday, Model%levs, sw_gas_props)) + sw_optical_props_clouds_daylit%tau = sw_optical_props_clouds%tau(idxday,:,:) + sw_optical_props_clouds_daylit%ssa = sw_optical_props_clouds%ssa(idxday,:,:) + sw_optical_props_clouds_daylit%g = sw_optical_props_clouds%g(idxday,:,:) ! Aerosol optics [nDay,Model%levs,nBands] - call check_error_msg('rrtmgp_sw_clrallsky_driver_run',optical_props_aerosol_daylit%alloc_2str(nday, Model%levs, sw_gas_props%get_band_lims_wavenumber())) - optical_props_aerosol_daylit%tau = optical_props_aerosol%tau(idxday,:,:) - optical_props_aerosol_daylit%ssa = optical_props_aerosol%ssa(idxday,:,:) - optical_props_aerosol_daylit%g = optical_props_aerosol%g(idxday,:,:) + call check_error_msg('rrtmgp_sw_clrallsky_driver_run',sw_optical_props_aerosol_daylit%alloc_2str(nday, Model%levs, sw_gas_props%get_band_lims_wavenumber())) + sw_optical_props_aerosol_daylit%tau = sw_optical_props_aerosol%tau(idxday,:,:) + sw_optical_props_aerosol_daylit%ssa = sw_optical_props_aerosol%ssa(idxday,:,:) + sw_optical_props_aerosol_daylit%g = sw_optical_props_aerosol%g(idxday,:,:) ! Similarly, subset the gas concentrations. do iGas=1,Model%nGases @@ -158,14 +158,14 @@ subroutine rrtmgp_sw_clrallsky_driver_run(Model, Radtend, ncol, sw_gas_props, p_ Radtend%coszen(idxday), & ! IN - Cosine of solar zenith angle Radtend%sfc_alb_nir_dir(:,idxday), & ! IN - Shortwave surface albedo (direct) Radtend%sfc_alb_nir_dif(:,idxday), & ! IN - Shortwave surface albedo (diffuse) - optical_props_clds_daylit, & ! IN - DDT containing cloud optical information + sw_optical_props_clouds_daylit, & ! IN - DDT containing cloud optical information flux_allsky, & ! OUT - Fluxes, all-sky, 3D (nCol,Model%levs,nBand) flux_clrsky, & ! OUT - Fluxes, clear-sky, 3D (nCol,Model%levs,nBand) - aer_props = optical_props_aerosol_daylit)) ! IN(optional) - DDT containing aerosol optical information - fluxUP_allsky(idxday,:) = flux_allsky%flux_up - fluxDOWN_allsky(idxday,:) = flux_allsky%flux_dn - fluxUP_clrsky(idxday,:) = flux_clrsky%flux_up - fluxDOWN_clrsky(idxday,:) = flux_clrsky%flux_dn + aer_props = sw_optical_props_aerosol_daylit)) ! IN(optional) - DDT containing aerosol optical information + fluxswUP_allsky(idxday,:) = flux_allsky%flux_up + fluxswDOWN_allsky(idxday,:) = flux_allsky%flux_dn + fluxswUP_clrsky(idxday,:) = flux_clrsky%flux_up + fluxswDOWN_clrsky(idxday,:) = flux_clrsky%flux_dn endif end subroutine rrtmgp_sw_clrallsky_driver_run diff --git a/physics/rrtmgp_sw_clrallsky_driver.meta b/physics/rrtmgp_sw_clrallsky_driver.meta index 979ed8b55..fdc8d2e4e 100644 --- a/physics/rrtmgp_sw_clrallsky_driver.meta +++ b/physics/rrtmgp_sw_clrallsky_driver.meta @@ -60,7 +60,7 @@ type = ty_gas_optics_rrtmgp intent = in optional = F -[optical_props_clds] +[sw_optical_props_clouds] standard_name = shortwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -68,7 +68,7 @@ type = ty_optical_props_2str intent = in optional = F -[optical_props_aerosol] +[sw_optical_props_aerosol] standard_name = shortwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -109,8 +109,8 @@ intent = in optional = F [hsw0] - standard_name = sw_heating_rate_clear_sky - long_name = shortwave clear sky heating rate + standard_name = RRTMGP_sw_heating_rate_clear_sky + long_name = RRTMGP shortwave clear sky heating rate units = K s-1 dimensions = (horizontal_dimension,vertical_dimension) type = real @@ -118,10 +118,10 @@ intent = inout optional = T [hswb] - standard_name = sw_heating_rate_spectral - long_name = shortwave total sky heating rate (spectral) + standard_name = RRTMGP_sw_heating_rate_spectral + long_name = RRTMGP shortwave total sky heating rate (spectral) units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_shortwave_radiation) + dimensions = (horizontal_dimension,vertical_dimension,number_of_sw_spectral_points_rrtmgp) type = real kind = kind_phys intent = inout @@ -134,8 +134,8 @@ type = cmpfsw_type intent = inout optional = T -[fluxUP_allsky] - standard_name = sw_flux_profile_upward_allsky +[fluxswUP_allsky] + standard_name = RRTMGP_sw_flux_profile_upward_allsky long_name = RRTMGP upward shortwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -143,8 +143,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_allsky] - standard_name = sw_flux_profile_downward_allsky +[fluxswDOWN_allsky] + standard_name = RRTMGP_sw_flux_profile_downward_allsky long_name = RRTMGP downward shortwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -152,8 +152,8 @@ kind = kind_phys intent = out optional = F -[fluxUP_clrsky] - standard_name = sw_flux_profile_upward_clrsky +[fluxswUP_clrsky] + standard_name = RRTMGP_sw_flux_profile_upward_clrsky long_name = RRTMGP upward shortwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -161,8 +161,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_clrsky] - standard_name = sw_flux_profile_downward_clrsky +[fluxswDOWN_clrsky] + standard_name = RRTMGP_sw_flux_profile_downward_clrsky long_name = RRTMGP downward shortwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) diff --git a/physics/rrtmgp_sw_gas_optics.F90 b/physics/rrtmgp_sw_gas_optics.F90 index 37bf25c74..32e2888d2 100644 --- a/physics/rrtmgp_sw_gas_optics.F90 +++ b/physics/rrtmgp_sw_gas_optics.F90 @@ -413,7 +413,7 @@ end subroutine rrtmgp_sw_gas_optics_init !! \htmlinclude rrtmgp_sw_gas_optics.html !! subroutine rrtmgp_sw_gas_optics_run(Model, Radtend, sw_gas_props, ncol, p_lay, p_lev, t_lay, t_lev, & - gas_concentrations, lsswr, optical_props_clrsky, toa_src, errmsg, errflg) + gas_concentrations, lsswr, sw_optical_props_clrsky, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -442,9 +442,7 @@ subroutine rrtmgp_sw_gas_optics_run(Model, Radtend, sw_gas_props, ncol, p_lay, p integer, intent(out) :: & errflg ! Error code type(ty_optical_props_2str),intent(out) :: & - optical_props_clrsky ! - real(kind_phys),dimension(ncol,sw_gas_props%get_ngpt()),intent(out) :: & - toa_src + sw_optical_props_clrsky ! ! Initialize CCPP error handling variables errmsg = '' @@ -453,17 +451,17 @@ subroutine rrtmgp_sw_gas_optics_run(Model, Radtend, sw_gas_props, ncol, p_lay, p if (.not. Model%lsswr) return ! Allocate space - call check_error_msg('rrtmgp_sw_gas_optics_run',optical_props_clrsky%alloc_2str(ncol, model%levs, sw_gas_props)) + call check_error_msg('rrtmgp_sw_gas_optics_run',sw_optical_props_clrsky%alloc_2str(ncol, model%levs, sw_gas_props)) ! Gas-optics (djs asks pincus: I think it makes sense to have a generic gas_optics interface in ! ty_gas_optics_rrtmgp, just as in ty_gas_optics. call check_error_msg('rrtmgp_sw_gas_optics_run',sw_gas_props%gas_optics_ext(& - p_lay, & ! - p_lev, & ! - t_lay, & ! - gas_concentrations, & ! - optical_props_clrsky, & ! - toa_src)) ! + p_lay, & ! + p_lev, & ! + t_lay, & ! + gas_concentrations, & ! + sw_optical_props_clrsky, & ! + Radtend%toa_src_sw)) ! ! Compute boundary-condition (only for low ceiling models, set in GFS_typedefs.F90) !call check_error_msg('rrtmgp_sw_gas_optics_run',compute_bc(& @@ -472,7 +470,7 @@ subroutine rrtmgp_sw_gas_optics_run(Model, Radtend, sw_gas_props, ncol, p_lay, p ! p_lev, & ! IN - ! t_lay, & ! IN - ! gas_concentrations, & ! IN - - ! toa_src, & ! OUT - + ! Radtend%toa_src_sw & ! OUT - ! mu0 = Radtend%coszen)) end subroutine rrtmgp_sw_gas_optics_run diff --git a/physics/rrtmgp_sw_gas_optics.meta b/physics/rrtmgp_sw_gas_optics.meta index f9f0b3ef3..daf7b3a74 100644 --- a/physics/rrtmgp_sw_gas_optics.meta +++ b/physics/rrtmgp_sw_gas_optics.meta @@ -180,7 +180,7 @@ type = integer intent = out optional = F -[optical_props_clrsky] +[sw_optical_props_clrsky] standard_name = shortwave_optical_properties_for_clear_sky long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -188,12 +188,3 @@ type = ty_optical_props_2str intent = out optional = F -[toa_src] - standard_name = incident_solar_irradiance_at_top_of_atmosphere_by_spectral_point - long_name = top of atmosphere incident solar flux in each spectral point - units = - dimensions = (horizontal_dimension,number_of_sw_spectral_points_rrtmgp) - type = real - kind = kind_phys - intent = out - optional = F diff --git a/physics/rrtmgp_sw_rte.F90 b/physics/rrtmgp_sw_rte.F90 index d31b9a785..f7d8f8fc9 100644 --- a/physics/rrtmgp_sw_rte.F90 +++ b/physics/rrtmgp_sw_rte.F90 @@ -29,10 +29,10 @@ end subroutine rrtmgp_sw_rte_init !! \section arg_table_rrtmgp_sw_rte_run !! \htmlinclude rrtmgp_sw_rte.html !! - subroutine rrtmgp_sw_rte_run(Model, Radtend, Statein, ncol, sw_gas_props, p_lay, t_lay, p_lev, gas_concentrations, & - optical_props_clrsky, optical_props_cloud, optical_props_aerosol, & - lsswr, nday, idxday, toa_src, hsw0, hswb, scmpsw, & - fluxUP_allsky, fluxDOWN_allsky, fluxUP_clrsky, fluxDOWN_clrsky, errmsg, errflg) + subroutine rrtmgp_sw_rte_run(Model, Radtend, Statein, ncol, sw_gas_props, p_lay, t_lay, & + p_lev, gas_concentrations, sw_optical_props_clrsky, sw_optical_props_clouds, & + sw_optical_props_aerosol, lsswr, nday, idxday, hsw0, hswb, scmpsw, & + fluxswUP_allsky, fluxswDOWN_allsky, fluxswUP_clrsky, fluxswDOWN_clrsky, errmsg, errflg) ! Inputs type(GFS_control_type), intent(in) :: & @@ -54,25 +54,23 @@ subroutine rrtmgp_sw_rte_run(Model, Radtend, Statein, ncol, sw_gas_props, p_lay, type(ty_gas_optics_rrtmgp),intent(in) :: & sw_gas_props ! DDT containing SW spectral information type(ty_optical_props_2str),intent(in) :: & - optical_props_clrsky, & ! RRTMGP DDT: longwave clear-sky radiative properties - optical_props_cloud, & ! RRTMGP DDT: longwave cloud radiative properties - optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties + sw_optical_props_clrsky, & ! RRTMGP DDT: longwave clear-sky radiative properties + sw_optical_props_clouds, & ! RRTMGP DDT: longwave cloud radiative properties + sw_optical_props_aerosol ! RRTMGP DDT: longwave aerosol radiative properties type(ty_gas_concs),intent(in) :: & gas_concentrations ! RRTMGP DDT: trace gas concentrations (vmr) logical, intent(in) :: & lsswr ! Flag to calculate SW irradiances - real(kind_phys),dimension(ncol,sw_gas_props%get_ngpt()),intent(in) :: & - toa_src ! Outputs character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg real(kind_phys), dimension(ncol,Model%levs+1), intent(out) :: & - fluxUP_allsky, & ! All-sky flux (W/m2) - fluxDOWN_allsky, & ! All-sky flux (W/m2) - fluxUP_clrsky, & ! Clear-sky flux (W/m2) - fluxDOWN_clrsky ! All-sky flux (W/m2) + fluxswUP_allsky, & ! All-sky flux (W/m2) + fluxswDOWN_allsky, & ! All-sky flux (W/m2) + fluxswUP_clrsky, & ! Clear-sky flux (W/m2) + fluxswDOWN_clrsky ! All-sky flux (W/m2) ! Inputs (optional) (NOTE. We only need the optional arguments to know what fluxes to output, HR's are computed later) real(kind_phys), dimension(ncol,Model%levs), optional, intent(inout) :: & @@ -101,9 +99,9 @@ subroutine rrtmgp_sw_rte_run(Model, Radtend, Statein, ncol, sw_gas_props, p_lay, logical :: l_ClrSky_HR=.false., l_AllSky_HR_byband=.false., l_scmpsw=.false., top_at_1 integer :: iGas,iSFC,iTOA type(ty_optical_props_2str) :: & - optical_props_cloud_daylit, & ! RRTMGP DDT: longwave cloud radiative properties - optical_props_clrsky_daylit, & ! RRTMGP DDT: longwave clear-sky radiative properties - optical_props_aerosol_daylit ! RRTMGP DDT: longwave aerosol radiative properties + sw_optical_props_clouds_daylit, & ! RRTMGP DDT: longwave cloud radiative properties + sw_optical_props_clrsky_daylit, & ! RRTMGP DDT: longwave clear-sky radiative properties + sw_optical_props_aerosol_daylit ! RRTMGP DDT: longwave aerosol radiative properties type(ty_gas_concs) :: & gas_concentrations_daylit ! RRTMGP DDT: trace gas concentrations (vmr) @@ -130,29 +128,29 @@ subroutine rrtmgp_sw_rte_run(Model, Radtend, Statein, ncol, sw_gas_props, p_lay, if ( l_scmpsw ) then scmpsw = cmpfsw_type (0., 0., 0., 0., 0., 0.) endif - fluxUP_allsky(:,:) = 0._kind_phys - fluxDOWN_allsky(:,:) = 0._kind_phys - fluxUP_clrsky(:,:) = 0._kind_phys - fluxDOWN_clrsky(:,:) = 0._kind_phys + fluxswUP_allsky(:,:) = 0._kind_phys + fluxswDOWN_allsky(:,:) = 0._kind_phys + fluxswUP_clrsky(:,:) = 0._kind_phys + fluxswDOWN_clrsky(:,:) = 0._kind_phys if (nDay .gt. 0) then ! Subset the cloud and aerosol radiative properties over daylit points. ! Cloud optics [nDay,Model%levs,nGpts] - call check_error_msg('rrtmgp_sw_rte_run',optical_props_cloud_daylit%alloc_2str(nday, Model%levs, sw_gas_props)) - optical_props_cloud_daylit%tau = optical_props_cloud%tau(idxday,:,:) - optical_props_cloud_daylit%ssa = optical_props_cloud%ssa(idxday,:,:) - optical_props_cloud_daylit%g = optical_props_cloud%g(idxday,:,:) + call check_error_msg('rrtmgp_sw_rte_run',sw_optical_props_clouds_daylit%alloc_2str(nday, Model%levs, sw_gas_props)) + sw_optical_props_clouds_daylit%tau = sw_optical_props_clouds%tau(idxday,:,:) + sw_optical_props_clouds_daylit%ssa = sw_optical_props_clouds%ssa(idxday,:,:) + sw_optical_props_clouds_daylit%g = sw_optical_props_clouds%g(idxday,:,:) ! Aerosol optics [nDay,Model%levs,nBands] - call check_error_msg('rrtmgp_sw_rte_run',optical_props_aerosol_daylit%alloc_2str(nday, Model%levs, sw_gas_props%get_band_lims_wavenumber())) - optical_props_aerosol_daylit%tau = optical_props_aerosol%tau(idxday,:,:) - optical_props_aerosol_daylit%ssa = optical_props_aerosol%ssa(idxday,:,:) - optical_props_aerosol_daylit%g = optical_props_aerosol%g(idxday,:,:) + call check_error_msg('rrtmgp_sw_rte_run',sw_optical_props_aerosol_daylit%alloc_2str(nday, Model%levs, sw_gas_props%get_band_lims_wavenumber())) + sw_optical_props_aerosol_daylit%tau = sw_optical_props_aerosol%tau(idxday,:,:) + sw_optical_props_aerosol_daylit%ssa = sw_optical_props_aerosol%ssa(idxday,:,:) + sw_optical_props_aerosol_daylit%g = sw_optical_props_aerosol%g(idxday,:,:) ! Clear-sky optics [nDay,Model%levs,nGpts] - call check_error_msg('rrtmgp_sw_rte_run',optical_props_clrsky_daylit%alloc_2str(nday, Model%levs, sw_gas_props)) - optical_props_clrsky_daylit%tau = optical_props_clrsky%tau(idxday,:,:) - optical_props_clrsky_daylit%ssa = optical_props_clrsky%ssa(idxday,:,:) - optical_props_clrsky_daylit%g = optical_props_clrsky%g(idxday,:,:) + call check_error_msg('rrtmgp_sw_rte_run',sw_optical_props_clrsky_daylit%alloc_2str(nday, Model%levs, sw_gas_props)) + sw_optical_props_clrsky_daylit%tau = sw_optical_props_clrsky%tau(idxday,:,:) + sw_optical_props_clrsky_daylit%ssa = sw_optical_props_clrsky%ssa(idxday,:,:) + sw_optical_props_clrsky_daylit%g = sw_optical_props_clrsky%g(idxday,:,:) ! Similarly, subset the gas concentrations. do iGas=1,Model%nGases @@ -174,34 +172,34 @@ subroutine rrtmgp_sw_rte_run(Model, Radtend, Statein, ncol, sw_gas_props, p_lay, ! Compute clear-sky fluxes (if requested) ! Clear-sky fluxes are gas+aerosol - call check_error_msg('rrtmgp_sw_rte_run',optical_props_aerosol_daylit%increment(optical_props_clrsky_daylit)) + call check_error_msg('rrtmgp_sw_rte_run',sw_optical_props_aerosol_daylit%increment(sw_optical_props_clrsky_daylit)) if (l_ClrSky_HR) then call check_error_msg('rrtmgp_sw_rte_run',rte_sw( & - optical_props_clrsky_daylit, & ! IN - optical-properties + sw_optical_props_clrsky_daylit, & ! IN - optical-properties top_at_1, & ! IN - veritcal ordering flag Radtend%coszen(idxday), & ! IN - Cosine of solar zenith angle - toa_src(idxday,:), & ! IN - incident solar flux at TOA + Radtend%toa_src_sw(idxday,:), & ! IN - incident solar flux at TOA Radtend%sfc_alb_nir_dir(:,idxday), & ! IN - Shortwave surface albedo (direct) Radtend%sfc_alb_nir_dif(:,idxday), & ! IN - Shortwave surface albedo (diffuse) flux_clrsky)) ! OUT - Fluxes, clear-sky, 3D (nCol,Model%levs,nBand) ! Store fluxes - fluxUP_clrsky(idxday,:) = flux_clrsky%flux_up - fluxDOWN_clrsky(idxday,:) = flux_clrsky%flux_dn + fluxswUP_clrsky(idxday,:) = flux_clrsky%flux_up + fluxswDOWN_clrsky(idxday,:) = flux_clrsky%flux_dn endif ! Compute all-sky fluxes - call check_error_msg('rrtmgp_sw_rte_run',optical_props_cloud_daylit%increment(optical_props_clrsky_daylit)) + call check_error_msg('rrtmgp_sw_rte_run',sw_optical_props_clouds_daylit%increment(sw_optical_props_clrsky_daylit)) call check_error_msg('rrtmgp_sw_rte_run',rte_sw( & - optical_props_clrsky_daylit, & ! IN - optical-properties + sw_optical_props_clrsky_daylit, & ! IN - optical-properties top_at_1, & ! IN - veritcal ordering flag Radtend%coszen(idxday), & ! IN - Cosine of solar zenith angle - toa_src(idxday,:), & ! IN - incident solar flux at TOA + Radtend%toa_src_sw(idxday,:), & ! IN - incident solar flux at TOA Radtend%sfc_alb_nir_dir(:,idxday), & ! IN - Shortwave surface albedo (direct) Radtend%sfc_alb_nir_dif(:,idxday), & ! IN - Shortwave surface albedo (diffuse) flux_allsky)) ! OUT - Fluxes, clear-sky, 3D (nCol,Model%levs,nBand) ! Store fluxes - fluxUP_allsky(idxday,:) = flux_allsky%flux_up - fluxDOWN_allsky(idxday,:) = flux_allsky%flux_dn + fluxswUP_allsky(idxday,:) = flux_allsky%flux_up + fluxswDOWN_allsky(idxday,:) = flux_allsky%flux_dn scmpsw(idxday)%nirbm = flux_allsky%flux_dn_dir(:,iSFC) endif end subroutine rrtmgp_sw_rte_run diff --git a/physics/rrtmgp_sw_rte.meta b/physics/rrtmgp_sw_rte.meta index 37e1551ea..250e4c463 100644 --- a/physics/rrtmgp_sw_rte.meta +++ b/physics/rrtmgp_sw_rte.meta @@ -68,7 +68,7 @@ type = ty_gas_optics_rrtmgp intent = in optional = F -[optical_props_clrsky] +[sw_optical_props_clrsky] standard_name = shortwave_optical_properties_for_clear_sky long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -76,7 +76,7 @@ type = ty_optical_props_2str intent = in optional = F -[optical_props_cloud] +[sw_optical_props_clouds] standard_name = shortwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -84,7 +84,7 @@ type = ty_optical_props_2str intent = in optional = F -[optical_props_aerosol] +[sw_optical_props_aerosol] standard_name = shortwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT @@ -124,17 +124,8 @@ type = integer intent = in optional = F -[toa_src] - standard_name = incident_solar_irradiance_at_top_of_atmosphere_by_spectral_point - long_name = top of atmosphere incident solar flux in each spectral point - units = - dimensions = (horizontal_dimension,number_of_sw_spectral_points_rrtmgp) - type = real - kind = kind_phys - intent = in - optional = F [hsw0] - standard_name = sw_heating_rate_clear_sky + standard_name = RRTMGP_sw_heating_rate_clear_sky long_name = shortwave clear sky heating rate units = K s-1 dimensions = (horizontal_dimension,vertical_dimension) @@ -143,10 +134,10 @@ intent = inout optional = T [hswb] - standard_name = sw_heating_rate_spectral + standard_name = RRTMGP_sw_heating_rate_spectral long_name = shortwave total sky heating rate (spectral) units = K s-1 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation,number_of_aerosol_bands_for_shortwave_radiation) + dimensions = (horizontal_dimension,vertical_dimension,number_of_sw_spectral_points_rrtmgp) type = real kind = kind_phys intent = inout @@ -159,8 +150,8 @@ type = cmpfsw_type intent = inout optional = T -[fluxUP_allsky] - standard_name = sw_flux_profile_upward_allsky +[fluxswUP_allsky] + standard_name = RRTMGP_sw_flux_profile_upward_allsky long_name = RRTMGP upward shortwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -168,8 +159,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_allsky] - standard_name = sw_flux_profile_downward_allsky +[fluxswDOWN_allsky] + standard_name = RRTMGP_sw_flux_profile_downward_allsky long_name = RRTMGP downward shortwave all-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -177,8 +168,8 @@ kind = kind_phys intent = out optional = F -[fluxUP_clrsky] - standard_name = sw_flux_profile_upward_clrsky +[fluxswUP_clrsky] + standard_name = RRTMGP_sw_flux_profile_upward_clrsky long_name = RRTMGP upward shortwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one) @@ -186,8 +177,8 @@ kind = kind_phys intent = out optional = F -[fluxDOWN_clrsky] - standard_name = sw_flux_profile_downward_clrsky +[fluxswDOWN_clrsky] + standard_name = RRTMGP_sw_flux_profile_downward_clrsky long_name = RRTMGP downward shortwave clr-sky flux profile units = W m-2 dimensions = (horizontal_dimension,vertical_dimension_plus_one)