diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 65301dd7c..78f92b8e6 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 65301dd7c6b29c755a1f31b1a8e94562d3bd920c +Subproject commit 78f92b8e628ef20416980d42ea802b5e97980b65 diff --git a/atmos_model.F90 b/atmos_model.F90 index 7e19fee3d..3f5de6b2c 100644 --- a/atmos_model.F90 +++ b/atmos_model.F90 @@ -1977,6 +1977,58 @@ subroutine assign_importdata(jdat, rc) endif endif +! get zonal ocean current: +!-------------------------------------------------------------------------- + fldname = 'ocn_current_zonal' + if (trim(impfield_name) == trim(fldname)) then + findex = queryImportFields(fldname) + if (importFieldsValid(findex) .and. GFS_control%cplocn2atm) then +!$omp parallel do default(shared) private(i,j,nb,ix) + do j=jsc,jec + do i=isc,iec + nb = Atm_block%blkno(i,j) + ix = Atm_block%ixp(i,j) + GFS_Data(nb)%Sfcprop%usfco(ix) = zero + if (GFS_Data(nb)%Sfcprop%oceanfrac(ix) > zero) then ! ocean points + if(mergeflg(i,j)) then + GFS_Data(nb)%Sfcprop%usfco(ix) = zero + datar8(i,j) = zero + else + GFS_Data(nb)%Sfcprop%usfco(ix) = datar8(i,j) + endif + endif + enddo + enddo + if (mpp_pe() == mpp_root_pe() .and. debug) print *,'get usfco from mediator' + endif + endif + +! get meridional ocean current: +!-------------------------------------------------------------------------- + fldname = 'ocn_current_merid' + if (trim(impfield_name) == trim(fldname)) then + findex = queryImportFields(fldname) + if (importFieldsValid(findex) .and. GFS_control%cplocn2atm) then +!$omp parallel do default(shared) private(i,j,nb,ix) + do j=jsc,jec + do i=isc,iec + nb = Atm_block%blkno(i,j) + ix = Atm_block%ixp(i,j) + GFS_Data(nb)%Sfcprop%vsfco(ix) = zero + if (GFS_Data(nb)%Sfcprop%oceanfrac(ix) > zero) then ! ocean points + if(mergeflg(i,j)) then + GFS_Data(nb)%Sfcprop%vsfco(ix) = zero + datar8(i,j) = zero + else + GFS_Data(nb)%Sfcprop%vsfco(ix) = datar8(i,j) + endif + endif + enddo + enddo + if (mpp_pe() == mpp_root_pe() .and. debug) print *,'get vsfco from mediator' + endif + endif + ! get sea ice fraction: fice or sea ice concentration from the mediator !----------------------------------------------------------------------- fldname = 'ice_fraction' diff --git a/ccpp/data/GFS_typedefs.F90 b/ccpp/data/GFS_typedefs.F90 index b0e816baf..7cd1d4a35 100644 --- a/ccpp/data/GFS_typedefs.F90 +++ b/ccpp/data/GFS_typedefs.F90 @@ -236,6 +236,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: soiltype_frac(:,:) => null() !< fractions [0:1] of soil categories !< [tsea in gbphys.f] real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K + real (kind=kind_phys), pointer :: usfco (:) => null() !< surface zonal current in m s-1 + real (kind=kind_phys), pointer :: vsfco (:) => null() !< surface meridional current in m s-1 real (kind=kind_phys), pointer :: tsfcl (:) => null() !< surface land temperature in K real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature @@ -1315,6 +1317,10 @@ module GFS_typedefs !< 0=no change !< 6=areodynamical roughness over water with input 10-m wind !< 7=slightly decrease Cd for higher wind speed compare to 6 +!--- air_sea_flux scheme + integer :: icplocn2atm !< air_sea flux options over ocean: + !< 0=no change + !< l=including ocean current in the computation of air_sea fluxes !--- potential temperature definition in surface layer physics logical :: thsfc_loc !< flag for local vs. standard potential temperature @@ -2321,6 +2327,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model) endif allocate (Sfcprop%tsfc (IM)) + allocate (Sfcprop%usfco (IM)) + allocate (Sfcprop%vsfco (IM)) allocate (Sfcprop%tsfco (IM)) allocate (Sfcprop%tsfcl (IM)) allocate (Sfcprop%tisfc (IM)) @@ -2378,6 +2386,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model) endif Sfcprop%tsfc = clear_val + Sfcprop%usfco = clear_val + Sfcprop%vsfco = clear_val Sfcprop%tsfco = clear_val Sfcprop%tsfcl = clear_val Sfcprop%tisfc = clear_val @@ -3815,6 +3825,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< 6=areodynamical roughness over water with input 10-m wind !< 7=slightly decrease Cd for higher wind speed compare to 6 !< negative when cplwav2atm=.true. - i.e. two way wave coupling + integer :: icplocn2atm = 0 !< air_sea_flux options over ocean + !< 0=ocean current is not used in the computation of air_sea fluxes + !< 1=including ocean current in the computation of air_sea fluxes !--- potential temperature definition in surface layer physics logical :: thsfc_loc = .true. !< flag for local vs. standard potential temperature @@ -4074,7 +4087,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & frac_grid, min_lakeice, min_seaice, min_lake_height, & ignore_lake, frac_ice, & !--- surface layer - sfc_z0_type, & + sfc_z0_type, icplocn2atm, & !--- switch beteeen local and standard potential temperature thsfc_loc, & !--- switches in 2-m diagnostics @@ -5000,6 +5013,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- surface layer Model%sfc_z0_type = sfc_z0_type if (Model%cplwav2atm) Model%sfc_z0_type = -1 + Model%icplocn2atm = icplocn2atm !--- potential temperature reference in sfc layer Model%thsfc_loc = thsfc_loc @@ -6824,6 +6838,7 @@ subroutine control_print(Model) print *, ' ' print *, 'surface layer options' print *, ' sfc_z0_type : ', Model%sfc_z0_type + print *, ' icplocn2atm : ', Model%icplocn2atm print *, ' ' print *, 'vertical diffusion coefficients' print *, ' xkzm_m : ', Model%xkzm_m diff --git a/ccpp/data/GFS_typedefs.meta b/ccpp/data/GFS_typedefs.meta index d408f5f42..497c3c786 100644 --- a/ccpp/data/GFS_typedefs.meta +++ b/ccpp/data/GFS_typedefs.meta @@ -805,6 +805,20 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[usfco] + standard_name = x_ocean_current + long_name = zonal current at ocean surface + units = m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[vsfco] + standard_name = y_ocean_current + long_name = meridional current at ocean surface + units = m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [tsfcl] standard_name = surface_skin_temperature_over_land long_name = surface skin temperature over land @@ -5855,6 +5869,12 @@ units = flag dimensions = () type = integer +[icplocn2atm] + standard_name = control_for_air_sea_flux_computation_over_water + long_name = air-sea flux option + units = 1 + dimensions = () + type = integer [xkzminv] standard_name = max_atmosphere_heat_diffusivity_due_to_background long_name = maximum background value of heat diffusivity diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index def71566d..4c0e7cdf7 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -3932,6 +3932,28 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%tsfc(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'usfco' + ExtDiag(idx)%desc = 'surface zonal current' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_sfc' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%usfco(:) + enddo + + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'vsfco' + ExtDiag(idx)%desc = 'surface meridional current' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_sfc' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%vsfco(:) + enddo + if (Model%frac_grid) then do num = 1,Model%kice write (xtra,'(i1)') num diff --git a/ccpp/physics b/ccpp/physics index e1f97ad2a..6b0599ef6 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit e1f97ad2aca9541505cfeb1d5c8e72365053fc02 +Subproject commit 6b0599ef6c7ea076336b1f073899c5b97e37d584 diff --git a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson.xml b/ccpp/suites/suite_FV3_HAFS_v1_thompson.xml similarity index 96% rename from ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson.xml rename to ccpp/suites/suite_FV3_HAFS_v1_thompson.xml index 746c8ceb7..0e9dc6e5f 100644 --- a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson.xml +++ b/ccpp/suites/suite_FV3_HAFS_v1_thompson.xml @@ -18,7 +18,6 @@ rad_sw_pre rrtmg_sw rrtmg_sw_post - rrtmg_lw_pre rrtmg_lw rrtmg_lw_post GFS_rrtmg_post @@ -61,7 +60,6 @@ unified_ugwp_post GFS_GWD_generic_post GFS_suite_stateout_update - ozphys_2015 h2ophys get_phi_fv3 GFS_suite_interstitial_3 @@ -79,7 +77,7 @@ mp_thompson_post GFS_MP_generic_post maximum_hourly_diagnostics - phys_tend + GFS_physics_post diff --git a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_nonsst.xml b/ccpp/suites/suite_FV3_HAFS_v1_thompson_nonsst.xml similarity index 96% rename from ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_nonsst.xml rename to ccpp/suites/suite_FV3_HAFS_v1_thompson_nonsst.xml index 665a0b7e2..fe83ee91d 100644 --- a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_nonsst.xml +++ b/ccpp/suites/suite_FV3_HAFS_v1_thompson_nonsst.xml @@ -18,7 +18,6 @@ rad_sw_pre rrtmg_sw rrtmg_sw_post - rrtmg_lw_pre rrtmg_lw rrtmg_lw_post GFS_rrtmg_post @@ -59,7 +58,6 @@ unified_ugwp_post GFS_GWD_generic_post GFS_suite_stateout_update - ozphys_2015 h2ophys get_phi_fv3 GFS_suite_interstitial_3 @@ -77,7 +75,7 @@ mp_thompson_post GFS_MP_generic_post maximum_hourly_diagnostics - phys_tend + GFS_physics_post diff --git a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp.xml b/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp.xml index 2022ef4d6..c8d7f7f6f 100644 --- a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp.xml +++ b/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp.xml @@ -18,7 +18,6 @@ rad_sw_pre rrtmg_sw rrtmg_sw_post - rrtmg_lw_pre rrtmg_lw rrtmg_lw_post GFS_rrtmg_post @@ -61,7 +60,6 @@ unified_ugwp_post GFS_GWD_generic_post GFS_suite_stateout_update - ozphys_2015 h2ophys get_phi_fv3 GFS_suite_interstitial_3 @@ -79,7 +77,7 @@ mp_thompson_post GFS_MP_generic_post maximum_hourly_diagnostics - phys_tend + GFS_physics_post diff --git a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp_nonsst.xml b/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp_nonsst.xml index f66543c80..2a1462136 100644 --- a/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp_nonsst.xml +++ b/ccpp/suites_not_used/suite_FV3_HAFS_v1_thompson_noahmp_nonsst.xml @@ -18,7 +18,6 @@ rad_sw_pre rrtmg_sw rrtmg_sw_post - rrtmg_lw_pre rrtmg_lw rrtmg_lw_post GFS_rrtmg_post @@ -59,7 +58,6 @@ unified_ugwp_post GFS_GWD_generic_post GFS_suite_stateout_update - ozphys_2015 h2ophys get_phi_fv3 GFS_suite_interstitial_3 @@ -77,7 +75,7 @@ mp_thompson_post GFS_MP_generic_post maximum_hourly_diagnostics - phys_tend + GFS_physics_post diff --git a/cpl/module_cplfields.F90 b/cpl/module_cplfields.F90 index 58f31236f..bce01c979 100644 --- a/cpl/module_cplfields.F90 +++ b/cpl/module_cplfields.F90 @@ -156,7 +156,7 @@ module module_cplfields FieldInfo("t2m ", "s") ] ! Import Fields ---------------------------------------- - integer, public, parameter :: NimportFields = 62 + integer, public, parameter :: NimportFields = 64 logical, public :: importFieldsValid(NimportFields) type(ESMF_Field), target, public :: importFields(NimportFields) @@ -179,6 +179,8 @@ module module_cplfields FieldInfo("inst_ice_vis_dir_albedo ", "s"), & FieldInfo("wave_z0_roughness_length ", "s"), & FieldInfo("inst_tracer_diag_aod ", "s"), & + FieldInfo("ocn_current_zonal ", "s"), & + FieldInfo("ocn_current_merid ", "s"), & ! For receiving fluxes from mediator FieldInfo("stress_on_air_ocn_zonal ", "s"), & diff --git a/moving_nest/fv_moving_nest_physics.F90 b/moving_nest/fv_moving_nest_physics.F90 index 1219617a6..bb0e09927 100644 --- a/moving_nest/fv_moving_nest_physics.F90 +++ b/moving_nest/fv_moving_nest_physics.F90 @@ -386,6 +386,8 @@ subroutine mn_phys_fill_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n, mn_phys%zorll(i,j) = IPD_Data(nb)%Sfcprop%zorll(ix) mn_phys%zorlwav(i,j)= IPD_Data(nb)%Sfcprop%zorlwav(ix) mn_phys%zorlw(i,j) = IPD_Data(nb)%Sfcprop%zorlw(ix) + mn_phys%usfco(i,j) = IPD_Data(nb)%Sfcprop%usfco(ix) + mn_phys%vsfco(i,j) = IPD_Data(nb)%Sfcprop%vsfco(ix) mn_phys%tsfco(i,j) = IPD_Data(nb)%Sfcprop%tsfco(ix) mn_phys%tsfcl(i,j) = IPD_Data(nb)%Sfcprop%tsfcl(ix) mn_phys%tsfc(i,j) = IPD_Data(nb)%Sfcprop%tsfc(ix) @@ -546,6 +548,17 @@ subroutine mn_phys_apply_temp_variables(Atm, Atm_block, IPD_Control, IPD_Data, n IPD_Data(nb)%Sfcprop%zorl(ix) = mn_phys%zorl(i,j) endif + if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 0 .and. mn_phys%usfco(i,j) .gt. 1e6) then + IPD_Data(nb)%Sfcprop%usfco(ix) = 0.0 + else + IPD_Data(nb)%Sfcprop%usfco(ix) = mn_phys%usfco(i,j) + endif + if (nint(IPD_data(nb)%Sfcprop%slmsk(ix)) .eq. 0 .and. mn_phys%vsfco(i,j) .gt. 1e6) then + IPD_Data(nb)%Sfcprop%vsfco(ix) = 0.0 + else + IPD_Data(nb)%Sfcprop%vsfco(ix) = mn_phys%vsfco(i,j) + endif + IPD_Data(nb)%Sfcprop%tsfco(ix) = mn_phys%tsfco(i,j) IPD_Data(nb)%Sfcprop%tsfcl(ix) = mn_phys%tsfcl(i,j) IPD_Data(nb)%Sfcprop%tsfc(ix) = mn_phys%tsfc(i,j) @@ -808,6 +821,15 @@ subroutine mn_phys_fill_nest_halos_from_parent(Atm, IPD_Control, IPD_Data, mn_st x_refine, y_refine, & is_fine_pe, nest_domain, position, mn_phys%slmsk, 0, 78.0D0) + call fill_nest_halos_from_parent_masked("usfco", mn_phys%usfco, interp_type_lmask, Atm(child_grid_num)%neststruct%wt_h, & + Atm(child_grid_num)%neststruct%ind_h, & + x_refine, y_refine, & + is_fine_pe, nest_domain, position, mn_phys%slmsk, 0, 0.0D0) + call fill_nest_halos_from_parent_masked("vsfco", mn_phys%vsfco, interp_type_lmask, Atm(child_grid_num)%neststruct%wt_h, & + Atm(child_grid_num)%neststruct%ind_h, & + x_refine, y_refine, & + is_fine_pe, nest_domain, position, mn_phys%slmsk, 0, 0.0D0) + call fill_nest_halos_from_parent("tsfco", mn_phys%tsfco, interp_type, Atm(child_grid_num)%neststruct%wt_h, & Atm(child_grid_num)%neststruct%ind_h, & x_refine, y_refine, & @@ -979,6 +1001,8 @@ subroutine mn_phys_fill_intern_nest_halos(moving_nest, IPD_Control, IPD_Data, do call mn_var_fill_intern_nest_halos(mn_phys%zorll, domain_fine, is_fine_pe) call mn_var_fill_intern_nest_halos(mn_phys%zorlwav, domain_fine, is_fine_pe) call mn_var_fill_intern_nest_halos(mn_phys%zorlw, domain_fine, is_fine_pe) + call mn_var_fill_intern_nest_halos(mn_phys%usfco, domain_fine, is_fine_pe) + call mn_var_fill_intern_nest_halos(mn_phys%vsfco, domain_fine, is_fine_pe) call mn_var_fill_intern_nest_halos(mn_phys%tsfco, domain_fine, is_fine_pe) call mn_var_fill_intern_nest_halos(mn_phys%tsfcl, domain_fine, is_fine_pe) call mn_var_fill_intern_nest_halos(mn_phys%tsfc, domain_fine, is_fine_pe) @@ -1112,6 +1136,10 @@ subroutine mn_phys_shift_data(Atm, IPD_Control, IPD_Data, n, child_grid_num, wt_ delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) call mn_var_shift_data(mn_phys%zorlw, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) + call mn_var_shift_data(mn_phys%usfco, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) + call mn_var_shift_data(mn_phys%vsfco, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & + delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) call mn_var_shift_data(mn_phys%tsfco, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & delta_i_c, delta_j_c, x_refine, y_refine, is_fine_pe, nest_domain, position) call mn_var_shift_data(mn_phys%tsfcl, interp_type, wt_h, Atm(child_grid_num)%neststruct%ind_h, & @@ -1206,6 +1234,7 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va real, allocatable, dimension(:,:) :: facsf_pr_local, facwf_pr_local real, allocatable, dimension(:,:) :: alvsf_pr_local, alvwf_pr_local, alnsf_pr_local, alnwf_pr_local real, allocatable, dimension(:,:) :: zorl_pr_local, zorll_pr_local, zorlw_pr_local, zorli_pr_local + real, allocatable, dimension(:,:) :: usfco_pr_local, vsfco_pr_local real, allocatable :: phy_f2d_pr_local (:,:,:) real, allocatable :: phy_f3d_pr_local (:,:,:,:) real, allocatable :: lakefrac_pr_local (:,:) !< lake fraction @@ -1264,6 +1293,8 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va allocate ( zorll_pr_local(is:ie, js:je) ) allocate ( zorlw_pr_local(is:ie, js:je) ) allocate ( zorli_pr_local(is:ie, js:je) ) + allocate ( usfco_pr_local(is:ie, js:je) ) + allocate ( vsfco_pr_local(is:ie, js:je) ) endif if (move_nsst) then @@ -1332,6 +1363,8 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va zorlw_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorlw(ix) zorll_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorll(ix) zorli_pr_local(i, j) = IPD_data(nb)%Sfcprop%zorli(ix) + usfco_pr_local(i, j) = IPD_data(nb)%Sfcprop%usfco(ix) + vsfco_pr_local(i, j) = IPD_data(nb)%Sfcprop%vsfco(ix) max_snow_alb_pr_local(i, j) = IPD_data(nb)%Sfcprop%snoalb(ix) tsfco_pr_local(i, j) = IPD_data(nb)%Sfcprop%tsfco(ix) tsfcl_pr_local(i, j) = IPD_data(nb)%Sfcprop%tsfcl(ix) @@ -1394,6 +1427,8 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va call mn_var_dump_to_netcdf(zorlw_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "ZORLW") call mn_var_dump_to_netcdf(zorll_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "ZORLL") call mn_var_dump_to_netcdf(zorli_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "ZORLI") + call mn_var_dump_to_netcdf(usfco_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "SSU") + call mn_var_dump_to_netcdf(vsfco_pr_local, is_fine_pe, domain_coarse, domain_fine, position, time_val, Atm%global_tile, file_prefix, "SSV") do nv = 1, IPD_Control%ntot2d write (phys_var_name, "(A4,I0.3)") 'PH2D', nv @@ -1429,6 +1464,7 @@ subroutine mn_phys_dump_to_netcdf(Atm, Atm_block, IPD_Control, IPD_Data, time_va deallocate(alvsf_pr_local, alvwf_pr_local, alnsf_pr_local, alnwf_pr_local) deallocate(facsf_pr_local, facwf_pr_local) deallocate(zorl_pr_local, zorlw_pr_local, zorll_pr_local, zorli_pr_local) + deallocate(usfco_pr_local, vsfco_pr_local) deallocate(phy_f2d_pr_local) deallocate(phy_f3d_pr_local) endif diff --git a/moving_nest/fv_moving_nest_types.F90 b/moving_nest/fv_moving_nest_types.F90 index 45bd12504..299bf9c51 100644 --- a/moving_nest/fv_moving_nest_types.F90 +++ b/moving_nest/fv_moving_nest_types.F90 @@ -140,6 +140,9 @@ module fv_moving_nest_types_mod real (kind=kind_phys), _ALLOCATABLE :: zorlw (:,:) _NULL !< wave surface roughness length real (kind=kind_phys), _ALLOCATABLE :: zorlwav (:,:) _NULL !< wave surface roughness in cm derived from wave model + real (kind=kind_phys), _ALLOCATABLE :: usfco (:,:) _NULL !< sea surface current (zonal) + real (kind=kind_phys), _ALLOCATABLE :: vsfco (:,:) _NULL !< sea surface current (meridional) + real (kind=kind_phys), _ALLOCATABLE :: sfalb_lnd(:,:) _NULL !< surface albedo over land for LSM real (kind=kind_phys), _ALLOCATABLE :: emis_lnd(:,:) _NULL !< surface emissivity over land for LSM real (kind=kind_phys), _ALLOCATABLE :: emis_ice(:,:) _NULL !< surface emissivity over ice for LSM @@ -384,6 +387,9 @@ subroutine allocate_fv_moving_nest_physics_type(isd, ied, jsd, jed, npz, move_p allocate ( mn_phys%zorlwav(isd:ied, jsd:jed) ) allocate ( mn_phys%zorlw(isd:ied, jsd:jed) ) + allocate ( mn_phys%usfco(isd:ied, jsd:jed) ) + allocate ( mn_phys%vsfco(isd:ied, jsd:jed) ) + allocate ( mn_phys%alvsf(isd:ied, jsd:jed) ) allocate ( mn_phys%alvwf(isd:ied, jsd:jed) ) allocate ( mn_phys%alnsf(isd:ied, jsd:jed) ) @@ -405,7 +411,6 @@ subroutine allocate_fv_moving_nest_physics_type(isd, ied, jsd, jed, npz, move_p allocate ( mn_phys%tsfc(isd:ied, jsd:jed) ) !allocate ( mn_phys%tsfc_radtime(isd:ied, jsd:jed) ) - allocate ( mn_phys%albdirvis_lnd (isd:ied, jsd:jed) ) allocate ( mn_phys%albdirnir_lnd (isd:ied, jsd:jed) ) allocate ( mn_phys%albdifvis_lnd (isd:ied, jsd:jed) ) @@ -469,6 +474,9 @@ subroutine allocate_fv_moving_nest_physics_type(isd, ied, jsd, jed, npz, move_p mn_phys%zorlwav = +99999.9 mn_phys%zorlw = +99999.9 + mn_phys%usfco = +99999.9 + mn_phys%vsfco = +99999.9 + mn_phys%alvsf = +99999.9 mn_phys%alvwf = +99999.9 mn_phys%alnsf = +99999.9 @@ -565,6 +573,9 @@ subroutine deallocate_fv_moving_nest_physics_type(mn_phys) deallocate( mn_phys%zorlwav ) deallocate( mn_phys%zorlw ) + deallocate( mn_phys%usfco ) + deallocate( mn_phys%vsfco ) + deallocate( mn_phys%alvsf ) deallocate( mn_phys%alvwf ) deallocate( mn_phys%alnsf )