diff --git a/FV3/atmos_cubed_sphere/tools/coarse_grained_restart_files.F90 b/FV3/atmos_cubed_sphere/tools/coarse_grained_restart_files.F90 index 9704e9efa..7dd1b419c 100644 --- a/FV3/atmos_cubed_sphere/tools/coarse_grained_restart_files.F90 +++ b/FV3/atmos_cubed_sphere/tools/coarse_grained_restart_files.F90 @@ -1,10 +1,12 @@ module coarse_grained_restart_files_mod use coarse_graining_mod, only: compute_mass_weights, get_coarse_array_bounds,& - get_fine_array_bounds, MODEL_LEVEL, PRESSURE_LEVEL, weighted_block_average, & - weighted_block_edge_average_x, weighted_block_edge_average_y, & + get_fine_array_bounds, MODEL_LEVEL, PRESSURE_LEVEL, BLENDED_MASS_WEIGHTED, BLENDED_AREA_WEIGHTED, & + weighted_block_average, weighted_block_edge_average_x, weighted_block_edge_average_y, & mask_area_weights, block_upsample, remap_edges_along_x, & - remap_edges_along_y, vertically_remap_field + remap_edges_along_y, vertically_remap_field, block_min, compute_blending_weights_agrid, & + compute_blending_weights_dgrid_u, compute_blending_weights_dgrid_v, blended_coarse_grain_field, & + blended_coarse_grain_u, blended_coarse_grain_v use constants_mod, only: GRAV, RDGAS, RVGAS use field_manager_mod, only: MODEL_ATMOS use fms_io_mod, only: register_restart_field, save_restart @@ -23,6 +25,16 @@ module coarse_grained_restart_files_mod integer :: is_coarse, ie_coarse, js_coarse, je_coarse integer :: n_prognostic_tracers, n_diagnostic_tracers, n_tracers + interface coarse_grain_fv_core_via_blended_method + module procedure coarse_grain_fv_core_via_blended_mass_weighted_method + module procedure coarse_grain_fv_core_via_blended_area_weighted_method + end interface coarse_grain_fv_core_via_blended_method + + interface coarse_grain_fv_tracer_via_blended_method + module procedure coarse_grain_fv_tracer_via_blended_mass_weighted_method + module procedure coarse_grain_fv_tracer_via_blended_area_weighted_method + end interface coarse_grain_fv_tracer_via_blended_method + contains subroutine fv_coarse_restart_init(tile_count, nz, nt_prog, & @@ -282,8 +294,13 @@ subroutine coarse_grain_restart_data(Atm) call coarse_grain_restart_data_on_model_levels(Atm) elseif (trim(Atm%coarse_graining%strategy) .eq. PRESSURE_LEVEL) then call coarse_grain_restart_data_on_pressure_levels(Atm) + elseif (trim(Atm%coarse_graining%strategy) .eq. BLENDED_MASS_WEIGHTED) then + call coarse_grain_restart_data_via_blended_method(Atm, mass_weighted=.true.) + elseif (trim(Atm%coarse_graining%strategy) .eq. BLENDED_AREA_WEIGHTED) then + call coarse_grain_restart_data_via_blended_method(Atm, mass_weighted=.false.) else - write(error_message, *) 'Currently only model_level and pressure_level coarse-graining are supported for restart files.' + write(error_message, *) 'Currently only model_level, pressure_level, blended_area_weighted, and blended_mass_weighted & + &coarse-graining are supported for restart files. Got ', trim(Atm%coarse_graining%strategy) call mpp_error(FATAL, error_message) endif end subroutine coarse_grain_restart_data @@ -333,6 +350,54 @@ subroutine coarse_grain_restart_data_on_pressure_levels(Atm) call impose_hydrostatic_balance(Atm, coarse_phalf) end subroutine coarse_grain_restart_data_on_pressure_levels + subroutine coarse_grain_restart_data_via_blended_method(Atm, mass_weighted) + type(fv_atmos_type), intent(inout) :: Atm + logical, intent(in) :: mass_weighted + + real, allocatable, dimension(:,:,:):: phalf, coarse_phalf, coarse_phalf_on_fine, masked_area_weights + real, allocatable, dimension(:,:,:) :: mass, blending_weights_agrid, blending_weights_dgrid_u, blending_weights_dgrid_v + + allocate(phalf(is-1:ie+1,js-1:je+1,1:npz+1)) ! Require the halo here for the winds + allocate(coarse_phalf(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz+1)) + allocate(coarse_phalf_on_fine(is:ie,js:je,1:npz+1)) + allocate(masked_area_weights(is:ie,js:je,1:npz)) + allocate(blending_weights_agrid(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz)) + allocate(blending_weights_dgrid_u(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz)) + allocate(blending_weights_dgrid_v(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz)) + + ! delp and delz are coarse-grained on model levels via an area-weighted + ! average; u, v, W, T, and all the tracers are coarsened via blended + ! pressure level and mass-weighted model level coarse-graining. At the end, + ! delz and phis are corrected to impose hydrostatic balance. + call compute_pressure_level_coarse_graining_requirements( & + Atm, phalf, coarse_phalf, coarse_phalf_on_fine, masked_area_weights) + + ! These subroutines compute the blending weights based on Chris's approach + call compute_blending_weights_agrid(phalf, coarse_phalf, blending_weights_agrid) + call compute_blending_weights_dgrid_u(phalf, Atm%gridstruct%dx(is:ie,js:je+1), blending_weights_dgrid_u) + call compute_blending_weights_dgrid_v(phalf, Atm%gridstruct%dy(is:ie+1,js:je), blending_weights_dgrid_v) + + if (mass_weighted) then + allocate(mass(is:ie,js:je,1:npz)) + call compute_mass_weights(Atm%gridstruct%area(is:ie,js:je), Atm%delp(is:ie,js:je,1:npz), mass) + call coarse_grain_fv_core_via_blended_method(Atm, phalf, coarse_phalf, coarse_phalf_on_fine, masked_area_weights,& + mass, blending_weights_agrid, blending_weights_dgrid_u, blending_weights_dgrid_v) + call coarse_grain_fv_tracer_via_blended_method( Atm, phalf, coarse_phalf_on_fine, masked_area_weights, mass,& + blending_weights_agrid) + else + call coarse_grain_fv_core_via_blended_method(Atm, phalf, coarse_phalf, coarse_phalf_on_fine, masked_area_weights,& + Atm%gridstruct%area(is:ie,js:je), blending_weights_agrid, blending_weights_dgrid_u, blending_weights_dgrid_v) + call coarse_grain_fv_tracer_via_blended_method(Atm, phalf, coarse_phalf_on_fine, masked_area_weights,& + Atm%gridstruct%area(is:ie,js:je), blending_weights_agrid) + endif + call coarse_grain_fv_srf_wnd_restart_data(Atm) + if (Atm%flagstruct%fv_land) then + call coarse_grain_mg_drag_restart_data(Atm) + call coarse_grain_fv_land_restart_data(Atm) + endif + call impose_hydrostatic_balance(Atm, coarse_phalf) + end subroutine coarse_grain_restart_data_via_blended_method + subroutine coarse_grain_fv_core_restart_data_on_model_levels(Atm, mass) type(fv_atmos_type), intent(inout) :: Atm real, intent(in) :: mass(is:ie,js:je,1:npz) @@ -496,6 +561,139 @@ subroutine coarse_grain_fv_tracer_restart_data_on_pressure_levels( & enddo end subroutine coarse_grain_fv_tracer_restart_data_on_pressure_levels + subroutine coarse_grain_fv_core_via_blended_mass_weighted_method(Atm, phalf, coarse_phalf, coarse_phalf_on_fine,& + masked_area_weights, model_level_weights, blending_weights_agrid, blending_weights_dgrid_u, blending_weights_dgrid_v) + type(fv_atmos_type), intent(inout) :: Atm + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: coarse_phalf(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz+1) + real, intent(in) :: coarse_phalf_on_fine(is:ie,js:je,1:npz+1) + real, intent(in), dimension(is:ie,js:je,1:npz) :: masked_area_weights, model_level_weights + real, intent(in) :: blending_weights_agrid(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + real, intent(in) :: blending_weights_dgrid_u(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz) + real, intent(in) :: blending_weights_dgrid_v(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz) + + call blended_coarse_grain_u(Atm%u(is:ie,js:je+1,1:npz), phalf, Atm%gridstruct%dx(is:ie,js:je+1), Atm%ptop,& + blending_weights_dgrid_u, Atm%coarse_graining%restart%u) + call blended_coarse_grain_v(Atm%v(is:ie+1,js:je,1:npz), phalf, Atm%gridstruct%dy(is:ie+1,js:je), Atm%ptop,& + blending_weights_dgrid_v, Atm%coarse_graining%restart%v) + call blended_coarse_grain_field(Atm%pt(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%pt) + + if (.not. Atm%flagstruct%hydrostatic) then + call blended_coarse_grain_field(Atm%w(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%w) + + ! Always coarse-grain delz an ze0 via an area weighted average + call weighted_block_average(Atm%gridstruct%area(is:ie,js:je), Atm%delz(is:ie,js:je,1:npz), Atm%coarse_graining%restart%delz) + if (Atm%flagstruct%hybrid_z) then + call weighted_block_average(Atm%gridstruct%area(is:ie,js:je), Atm%ze0(is:ie,js:je,1:npz), Atm%coarse_graining%restart%ze0) + endif + endif + + call weighted_block_average(Atm%gridstruct%area(is:ie,js:je), Atm%phis(is:ie,js:je), Atm%coarse_graining%restart%phis) + + if (Atm%coarse_graining%write_coarse_agrid_vel_rst) then + call blended_coarse_grain_field(Atm%ua(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%ua) + call blended_coarse_grain_field(Atm%va(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%va) + endif + end subroutine coarse_grain_fv_core_via_blended_mass_weighted_method + + subroutine coarse_grain_fv_tracer_via_blended_mass_weighted_method(Atm, phalf, coarse_phalf_on_fine, masked_area_weights,& + model_level_weights, blending_weights_agrid) + type(fv_atmos_type), intent(inout) :: Atm + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: coarse_phalf_on_fine(is:ie,js:je,1:npz+1) + real, intent(in), dimension(is:ie,js:je,1:npz) :: masked_area_weights, model_level_weights + real, intent(in) :: blending_weights_agrid(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + + character(len=64) :: tracer_name + integer :: n_tracer + + do n_tracer = 1, n_prognostic_tracers + call get_tracer_names(MODEL_ATMOS, n_tracer, tracer_name) + if (trim(tracer_name) .eq. 'cld_amt') then + call blended_coarse_grain_field(Atm%q(is:ie,js:je,1:npz,n_tracer), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, Atm%gridstruct%area(is:ie,js:je), blending_weights_agrid,& + Atm%coarse_graining%restart%q(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz,n_tracer)) + else + call blended_coarse_grain_field(Atm%q(is:ie,js:je,1:npz,n_tracer), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid,& + Atm%coarse_graining%restart%q(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz,n_tracer)) + endif + enddo + + do n_tracer = n_prognostic_tracers + 1, n_tracers + call blended_coarse_grain_field(Atm%qdiag(is:ie,js:je,1:npz,n_tracer), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid,& + Atm%coarse_graining%restart%q(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz,n_tracer)) + enddo + end subroutine coarse_grain_fv_tracer_via_blended_mass_weighted_method + + subroutine coarse_grain_fv_core_via_blended_area_weighted_method(Atm, phalf, coarse_phalf, coarse_phalf_on_fine,& + masked_area_weights, model_level_weights, blending_weights_agrid, blending_weights_dgrid_u, blending_weights_dgrid_v) + type(fv_atmos_type), intent(inout) :: Atm + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: coarse_phalf(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz+1) + real, intent(in) :: coarse_phalf_on_fine(is:ie,js:je,1:npz+1) + real, intent(in) :: masked_area_weights(is:ie,js:je,1:npz) + real, intent(in) :: model_level_weights(is:ie,js:je) + real, intent(in) :: blending_weights_agrid(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + real, intent(in) :: blending_weights_dgrid_u(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz) + real, intent(in) :: blending_weights_dgrid_v(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz) + + call blended_coarse_grain_u(Atm%u(is:ie,js:je+1,1:npz), phalf, Atm%gridstruct%dx(is:ie,js:je+1),& + Atm%ptop, blending_weights_dgrid_u, Atm%coarse_graining%restart%u) + call blended_coarse_grain_v(Atm%v(is:ie+1,js:je,1:npz), phalf, Atm%gridstruct%dy(is:ie+1,js:je),& + Atm%ptop, blending_weights_dgrid_v, Atm%coarse_graining%restart%v) + call blended_coarse_grain_field(Atm%pt(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%pt) + + if (.not. Atm%flagstruct%hydrostatic) then + call blended_coarse_grain_field(Atm%w(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%w) + + ! Always coarse-grain delz an ze0 via an area weighted average + call weighted_block_average(Atm%gridstruct%area(is:ie,js:je), Atm%delz(is:ie,js:je,1:npz), Atm%coarse_graining%restart%delz) + if (Atm%flagstruct%hybrid_z) then + call weighted_block_average(Atm%gridstruct%area(is:ie,js:je), Atm%ze0(is:ie,js:je,1:npz), Atm%coarse_graining%restart%ze0) + endif + endif + + call weighted_block_average(Atm%gridstruct%area(is:ie,js:je), Atm%phis(is:ie,js:je), Atm%coarse_graining%restart%phis) + + if (Atm%coarse_graining%write_coarse_agrid_vel_rst) then + call blended_coarse_grain_field(Atm%ua(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%ua) + call blended_coarse_grain_field(Atm%va(is:ie,js:je,1:npz), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid, Atm%coarse_graining%restart%va) + endif + end subroutine coarse_grain_fv_core_via_blended_area_weighted_method + + subroutine coarse_grain_fv_tracer_via_blended_area_weighted_method(Atm, phalf, coarse_phalf_on_fine, masked_area_weights,& + model_level_weights, blending_weights_agrid) + type(fv_atmos_type), intent(inout) :: Atm + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: coarse_phalf_on_fine(is:ie,js:je,1:npz+1) + real, intent(in) :: masked_area_weights(is:ie,js:je,1:npz) + real, intent(in) :: model_level_weights(is:ie,js:je) + real, intent(in) :: blending_weights_agrid(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + + integer :: n_tracer + + do n_tracer = 1, n_tracers + call blended_coarse_grain_field(Atm%q(is:ie,js:je,1:npz,n_tracer), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid,& + Atm%coarse_graining%restart%q(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz,n_tracer)) + enddo + do n_tracer = n_prognostic_tracers + 1, n_tracers + call blended_coarse_grain_field(Atm%qdiag(is:ie,js:je,1:npz,n_tracer), phalf(is:ie,js:je,1:npz+1), coarse_phalf_on_fine,& + Atm%ptop, masked_area_weights, model_level_weights, blending_weights_agrid,& + Atm%coarse_graining%restart%q(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz,n_tracer)) + enddo + end subroutine coarse_grain_fv_tracer_via_blended_area_weighted_method + subroutine compute_top_height(delz, phis, top_height) real, intent(in) :: delz(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) real, intent(in) :: phis(is_coarse:ie_coarse,js_coarse:je_coarse) diff --git a/FV3/coarse_graining/coarse_graining.F90 b/FV3/coarse_graining/coarse_graining.F90 index 621005958..1dc8389ab 100644 --- a/FV3/coarse_graining/coarse_graining.F90 +++ b/FV3/coarse_graining/coarse_graining.F90 @@ -12,10 +12,12 @@ module coarse_graining_mod public :: block_sum, compute_mass_weights, get_fine_array_bounds, & get_coarse_array_bounds, coarse_graining_init, weighted_block_average, & weighted_block_edge_average_x, weighted_block_edge_average_y, MODEL_LEVEL, & - block_upsample, mask_area_weights, PRESSURE_LEVEL, vertical_remapping_requirements, & - vertically_remap_field, block_mode, block_min, block_max, & + block_upsample, mask_area_weights, PRESSURE_LEVEL, BLENDED_MASS_WEIGHTED, BLENDED_AREA_WEIGHTED,& + vertical_remapping_requirements, vertically_remap_field, block_mode, block_min, block_max, & remap_edges_along_x, remap_edges_along_y, block_edge_sum_x, block_edge_sum_y, & - eddy_covariance_2d_weights, eddy_covariance_3d_weights + eddy_covariance_2d_weights, eddy_covariance_3d_weights, compute_blending_weights_agrid, & + compute_blending_weights_dgrid_u, compute_blending_weights_dgrid_v, blended_coarse_grain_field, & + blended_coarse_grain_u, blended_coarse_grain_v interface block_sum module procedure block_sum_2d @@ -60,6 +62,7 @@ module coarse_graining_mod interface block_min module procedure masked_block_min_2d + module procedure block_min_2d end interface block_min interface block_max @@ -75,11 +78,19 @@ module coarse_graining_mod module procedure weighted_block_edge_average_y_pre_downsampled_masked end interface weighted_block_edge_average_y_pre_downsampled + interface blended_coarse_grain_field + module procedure blended_coarse_grain_field_area_weighted + module procedure blended_coarse_grain_field_mass_weighted + end interface blended_coarse_grain_field + ! Global variables for the module, initialized in coarse_graining_init integer :: is, ie, js, je, npz integer :: is_coarse, ie_coarse, js_coarse, je_coarse character(len=11) :: MODEL_LEVEL = 'model_level' character(len=14) :: PRESSURE_LEVEL = 'pressure_level' + character(len=21) :: BLENDED_MASS_WEIGHTED = 'blended_mass_weighted' + character(len=21) :: BLENDED_AREA_WEIGHTED = 'blended_area_weighted' + real :: sigma_blend = 0.9 ! Constant defining sigma level at which we switch to pressure-level coarsening in the blended method. ! Namelist parameters initialized with default values integer :: coarsening_factor = 8 @@ -160,8 +171,11 @@ subroutine assert_valid_strategy(strategy) character(len=256) :: error_message - if (trim(strategy) .ne. MODEL_LEVEL .and. trim(strategy) .ne. PRESSURE_LEVEL) then - write(error_message, *) 'Invalid coarse graining strategy provided.' + if (trim(strategy) .ne. MODEL_LEVEL .and. & + trim(strategy) .ne. PRESSURE_LEVEL .and. & + trim(strategy) .ne. BLENDED_MASS_WEIGHTED .and. & + trim(strategy) .ne. BLENDED_AREA_WEIGHTED) then + write(error_message, *) 'Invalid coarse graining strategy provided, ', trim(strategy) call mpp_error(FATAL, error_message) endif end subroutine assert_valid_strategy @@ -649,6 +663,22 @@ subroutine masked_block_min_2d(fine, mask, coarse) enddo end subroutine masked_block_min_2d + subroutine block_min_2d(fine, coarse) + real, intent(in) :: fine(is:ie,js:je) + real, intent(out) :: coarse(is_coarse:ie_coarse,js_coarse:je_coarse) + + integer :: i, j, i_coarse, j_coarse, offset + + offset = coarsening_factor - 1 + do i = is, ie, coarsening_factor + i_coarse = (i - 1) / coarsening_factor + 1 + do j = js, je, coarsening_factor + j_coarse = (j - 1) / coarsening_factor + 1 + coarse(i_coarse, j_coarse) = minval(fine(i:i+offset,j:j+offset)) + enddo + enddo + end subroutine block_min_2d + subroutine masked_block_max_2d(fine, mask, coarse) real, intent(in) :: fine(is:ie,js:je) logical, intent(in) :: mask(is:ie,js:je) @@ -666,6 +696,36 @@ subroutine masked_block_max_2d(fine, mask, coarse) enddo end subroutine masked_block_max_2d + subroutine block_edge_min_x(fine, coarse) + real, intent(in) :: fine(is:ie,js_coarse:je_coarse+1) + real, intent(out) :: coarse(is_coarse:ie_coarse,js_coarse:je_coarse+1) + + integer :: i, j_coarse, i_coarse, offset + + offset = coarsening_factor - 1 + do i = is, ie, coarsening_factor + i_coarse = (i - 1) / coarsening_factor + 1 + do j_coarse = js_coarse, je_coarse+1 + coarse(i_coarse, j_coarse) = minval(fine(i:i+offset,j_coarse)) + enddo + enddo + end subroutine block_edge_min_x + + subroutine block_edge_min_y(fine, coarse) + real, intent(in) :: fine(is_coarse:ie_coarse+1,js:je) + real, intent(out) :: coarse(is_coarse:ie_coarse+1,js_coarse:je_coarse) + + integer :: i_coarse, j, j_coarse, offset + + offset = coarsening_factor - 1 + do i_coarse = is_coarse, ie_coarse+1 + do j = js, je, coarsening_factor + j_coarse = (j - 1) / coarsening_factor + 1 + coarse(i_coarse, j_coarse) = minval(fine(i_coarse,j:j+offset)) + enddo + enddo + end subroutine block_edge_min_y + ! A naive routine for interpolating a field from the A-grid to the y-boundary ! of the D-grid; this is a specialized function that automatically ! downsamples to the coarse-grid on the downsampling dimension. @@ -1065,4 +1125,195 @@ subroutine eddy_covariance_3d_weights(weights, field_a, field_b, coarse) call anomaly_3d_weights_3d_array(weights, field_b, anom_b) call weighted_block_average(weights, anom_a * anom_b, coarse) end subroutine eddy_covariance_3d_weights + + subroutine compute_blending_weights_agrid(phalf, coarse_phalf, blending_weights) + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: coarse_phalf(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz+1) + real, intent(out) :: blending_weights(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + + real, allocatable, dimension(:,:) :: blending_pressure, coarse_surface_pressure + real, allocatable :: coarse_pfull(:,:,:) + + integer :: k + + allocate(blending_pressure(is_coarse:ie_coarse,js_coarse:je_coarse)) + allocate(coarse_pfull(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz)) + allocate(coarse_surface_pressure(is_coarse:ie_coarse,js_coarse:je_coarse)) + + coarse_surface_pressure = coarse_phalf(is_coarse:ie_coarse,js_coarse:je_coarse,npz+1) + call compute_coarse_pfull(coarse_phalf, coarse_pfull, x_pad=0, y_pad=0) + call block_min(phalf(is:ie,js:je,npz+1), blending_pressure) + blending_pressure = sigma_blend * blending_pressure + do k = 1, npz + where (coarse_pfull(:,:,k) .gt. blending_pressure) + blending_weights(:,:,k) = (coarse_surface_pressure - coarse_pfull(:,:,k)) / & + (coarse_surface_pressure - blending_pressure) + elsewhere + blending_weights(:,:,k) = 1.0 + endwhere + enddo + end subroutine compute_blending_weights_agrid + + subroutine compute_blending_weights_dgrid_u(phalf, dx, blending_weights) + real, intent(in) :: phalf(is-1:is+1,js-1:js+1,1:npz+1) + real, intent(in) :: dx(is:ie,js:je+1) + real, intent(out) :: blending_weights(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz) + + real, allocatable, dimension(:,:,:) :: phalf_d_grid, coarse_phalf_d_grid, coarse_pfull_d_grid + real, allocatable, dimension(:,:) :: blending_pressure, coarse_surface_pressure + + integer :: k + + allocate(phalf_d_grid(is:ie,js_coarse:je_coarse+1,1:npz+1)) + allocate(coarse_phalf_d_grid(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz+1)) + allocate(coarse_pfull_d_grid(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz)) + allocate(blending_pressure(is_coarse:ie_coarse,js_coarse:je_coarse+1)) + allocate(coarse_surface_pressure(is_coarse:ie_coarse,js_coarse:je_coarse+1)) + + call interpolate_to_d_grid_and_downsample_along_y(phalf, phalf_d_grid, npz+1) + call weighted_block_edge_average_x_pre_downsampled(phalf_d_grid, dx, coarse_phalf_d_grid, npz+1) + call compute_coarse_pfull(coarse_phalf_d_grid, coarse_pfull_d_grid, x_pad=0, y_pad=1) + call block_edge_min_x(phalf_d_grid(is:ie,js_coarse:je_coarse,npz+1), blending_pressure) + coarse_surface_pressure = coarse_phalf_d_grid(is_coarse:ie_coarse,js_coarse:je_coarse+1,npz+1) + blending_pressure = sigma_blend * blending_pressure + + do k = 1, npz + where (coarse_pfull_d_grid(:,:,k) .gt. blending_pressure) + blending_weights(:,:,k) = (coarse_surface_pressure - coarse_pfull_d_grid(:,:,k)) / & + (coarse_surface_pressure - blending_pressure) + elsewhere + blending_weights(:,:,k) = 1.0 + endwhere + enddo + end subroutine compute_blending_weights_dgrid_u + + subroutine compute_blending_weights_dgrid_v(phalf, dy, blending_weights) + real, intent(in) :: phalf(is-1:is+1,js-1:js+1,1:npz+1) + real, intent(in) :: dy(is:ie+1,js:je) + real, intent(out) :: blending_weights(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz) + + real, allocatable, dimension(:,:,:) :: phalf_d_grid, coarse_phalf_d_grid, coarse_pfull_d_grid + real, allocatable, dimension(:,:) :: blending_pressure, coarse_surface_pressure + + integer :: k + + allocate(phalf_d_grid(is_coarse:ie_coarse+1,js:je,1:npz+1)) + allocate(coarse_phalf_d_grid(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz+1)) + allocate(coarse_pfull_d_grid(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz)) + allocate(blending_pressure(is_coarse:ie_coarse+1,js_coarse:je_coarse)) + allocate(coarse_surface_pressure(is_coarse:ie_coarse+1,js_coarse:je_coarse)) + + call interpolate_to_d_grid_and_downsample_along_x(phalf, phalf_d_grid, npz+1) + call weighted_block_edge_average_y_pre_downsampled(phalf_d_grid, dy, coarse_phalf_d_grid, npz+1) + call compute_coarse_pfull(coarse_phalf_d_grid, coarse_pfull_d_grid, x_pad=1, y_pad=0) + call block_edge_min_y(phalf_d_grid(is_coarse:ie_coarse+1,js:je,npz+1), blending_pressure) + coarse_surface_pressure = coarse_phalf_d_grid(is_coarse:ie_coarse+1,js_coarse:je_coarse,npz+1) + blending_pressure = sigma_blend * blending_pressure + + do k = 1, npz + where (coarse_pfull_d_grid(:,:,k) .gt. blending_pressure) + blending_weights(:,:,k) = (coarse_surface_pressure - coarse_pfull_d_grid(:,:,k)) / & + (coarse_surface_pressure - blending_pressure) + elsewhere + blending_weights(:,:,k) = 1.0 + endwhere + enddo + end subroutine compute_blending_weights_dgrid_v + + subroutine compute_coarse_pfull(coarse_phalf, coarse_pfull, x_pad, y_pad) + integer, intent(in) :: x_pad, y_pad + real, intent(in) :: coarse_phalf(is_coarse:ie_coarse+x_pad,js_coarse:je_coarse+y_pad,1:npz+1) + real, intent(out) :: coarse_pfull(is_coarse:ie_coarse+x_pad,js_coarse:je_coarse+y_pad,1:npz) + + coarse_pfull = (coarse_phalf(:,:,1:npz) - coarse_phalf(:,:,2:npz+1)) / & + (log(coarse_phalf(:,:,1:npz)) - log(coarse_phalf(:,:,2:npz+1))) + end subroutine compute_coarse_pfull + + subroutine pressure_coarse_grain_field(field, phalf, coarse_phalf_on_fine, ptop, masked_area_weights, result) + real, intent(in), dimension(is:ie,js:je,1:npz) :: field, masked_area_weights + real, intent(in), dimension(is:ie,js:je,1:npz+1) :: phalf, coarse_phalf_on_fine + real, intent(in) :: ptop + real, intent(out) :: result(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + + real, allocatable :: remapped(:,:,:) + + allocate(remapped(is:ie,js:je,1:npz)) + + call vertically_remap_field(phalf(is:ie,js:je,1:npz+1), field(is:ie,js:je,1:npz), coarse_phalf_on_fine, ptop, remapped) + call weighted_block_average(masked_area_weights, remapped, result) + end subroutine pressure_coarse_grain_field + + subroutine blended_coarse_grain_field_area_weighted(field, phalf, coarse_phalf_on_fine, ptop, masked_area_weights,& + model_level_weights, blending_weights, result) + real, intent(in), dimension(is:ie,js:je,1:npz) :: field, masked_area_weights + real, intent(in), dimension(is:ie,js:je,1:npz+1) :: phalf, coarse_phalf_on_fine + real, intent(in) :: ptop + real, intent(in) :: model_level_weights(is:ie,js:je) + real, intent(in) :: blending_weights(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + real, intent(out) :: result(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + + real, allocatable, dimension(:,:,:) :: pressure_coarse_grained, remapped + + allocate(remapped(is:ie,js:je,1:npz)) + allocate(pressure_coarse_grained(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz)) + + call pressure_coarse_grain_field(field, phalf, coarse_phalf_on_fine, ptop, masked_area_weights, pressure_coarse_grained) + call weighted_block_average(model_level_weights, field, result) + result = blending_weights * pressure_coarse_grained + (1 - blending_weights) * result + end subroutine blended_coarse_grain_field_area_weighted + + subroutine blended_coarse_grain_field_mass_weighted(field, phalf, coarse_phalf_on_fine, ptop, masked_area_weights,& + model_level_weights, blending_weights, result) + real, intent(in), dimension(is:ie,js:je,1:npz) :: field, masked_area_weights + real, intent(in), dimension(is:ie,js:je,1:npz+1) :: phalf, coarse_phalf_on_fine + real, intent(in) :: ptop + real, intent(in) :: model_level_weights(is:ie,js:je,1:npz) + real, intent(in) :: blending_weights(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + real, intent(out) :: result(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz) + + real, allocatable :: remapped(:,:,:) + real, allocatable :: pressure_coarse_grained(:,:,:) + + allocate(remapped(is:ie,js:je,1:npz)) + allocate(pressure_coarse_grained(is_coarse:ie_coarse,js_coarse:je_coarse,1:npz)) + + call pressure_coarse_grain_field(field, phalf, coarse_phalf_on_fine, ptop, masked_area_weights, pressure_coarse_grained) + call weighted_block_average(model_level_weights, field, result) + result = blending_weights * pressure_coarse_grained + (1 - blending_weights) * result + end subroutine blended_coarse_grain_field_mass_weighted + + subroutine blended_coarse_grain_u(u, phalf, dx, ptop, blending_weights, u_coarse) + real, intent(in) :: u(is:ie,js:je+1,1:npz) + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: dx(is:ie,js:je+1) + real, intent(in) :: ptop + real, intent(in) :: blending_weights(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz) + real, intent(out) :: u_coarse(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz) + + real, allocatable :: pressure_coarse_grained(:,:,:) + + allocate(pressure_coarse_grained(is_coarse:ie_coarse,js_coarse:je_coarse+1,1:npz)) + + call remap_edges_along_x(u, phalf, dx, ptop, pressure_coarse_grained) + call weighted_block_edge_average_x(dx, u, u_coarse) + u_coarse = blending_weights * pressure_coarse_grained + (1 - blending_weights) * u_coarse + end subroutine blended_coarse_grain_u + + subroutine blended_coarse_grain_v(v, phalf, dy, ptop, blending_weights, v_coarse) + real, intent(in) :: v(is:ie+1,js:je,1:npz) + real, intent(in) :: phalf(is-1:ie+1,js-1:je+1,1:npz+1) + real, intent(in) :: dy(is:ie+1,js:je) + real, intent(in) :: ptop + real, intent(in) :: blending_weights(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz) + real, intent(out) :: v_coarse(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz) + + real, allocatable :: pressure_coarse_grained(:,:,:) + + allocate(pressure_coarse_grained(is_coarse:ie_coarse+1,js_coarse:je_coarse,1:npz)) + + call remap_edges_along_y(v, phalf, dy, ptop, pressure_coarse_grained) + call weighted_block_edge_average_y(dy, v, v_coarse) + v_coarse = blending_weights * pressure_coarse_grained + (1 - blending_weights) * v_coarse + end subroutine blended_coarse_grain_v + end module coarse_graining_mod diff --git a/FV3/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/FV3/gfsphysics/GFS_layer/GFS_diagnostics.F90 index b6d3dcecd..ab03d777c 100644 --- a/FV3/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/FV3/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -1443,6 +1443,19 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%spd10max(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'wind' + ExtDiag(idx)%desc = 'lowest model level wind speed passed to land surface model' + ExtDiag(idx)%unit = 'm/s' + ExtDiag(idx)%mod_name = 'gfs_phys' + ExtDiag(idx)%intpl_method = 'bilinear' + ExtDiag(idx)%coarse_graining_method = 'area_weighted' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%wind(:) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 't02max' diff --git a/FV3/gfsphysics/GFS_layer/GFS_physics_driver.F90 b/FV3/gfsphysics/GFS_layer/GFS_physics_driver.F90 index 9c98cd2bd..6e089d22c 100644 --- a/FV3/gfsphysics/GFS_layer/GFS_physics_driver.F90 +++ b/FV3/gfsphysics/GFS_layer/GFS_physics_driver.F90 @@ -2296,6 +2296,8 @@ subroutine GFS_physics_driver & Diag%spfhmin(i) = min(Diag%spfhmin(i), Sfcprop%q2m(i)) enddo + Diag%wind = wind + do i=1, im ! find max wind speed then decompose tem = sqrt(Diag%u10m(i)*Diag%u10m(i) + Diag%v10m(i)*Diag%v10m(i)) diff --git a/FV3/gfsphysics/GFS_layer/GFS_typedefs.F90 b/FV3/gfsphysics/GFS_layer/GFS_typedefs.F90 index 4c19d194d..7f480ca88 100644 --- a/FV3/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/FV3/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -520,7 +520,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ca_rad (:) => null() ! real (kind=kind_phys), pointer :: ca_micro (:) => null() ! real (kind=kind_phys), pointer :: cape (:) => null() ! - + !--- stochastic physics real (kind=kind_phys), pointer :: shum_wts (:,:) => null() ! real (kind=kind_phys), pointer :: sppt_wts (:,:) => null() ! @@ -1404,6 +1404,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: toticeb(:) => null() !< accumulated ice precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totsnwb(:) => null() !< accumulated snow precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) + real (kind=kind_phys), pointer :: wind(:) => null() !< instantaneous lowest level wind speed passed to land surface model #ifdef CCPP !--- MYNN variables @@ -5235,7 +5236,8 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%ca_shal (IM)) allocate (Diag%ca_rad (IM)) allocate (Diag%ca_micro (IM)) - + allocate (Diag%wind (IM)) + !--- 3D diagnostics if (Model%ldiag3d) then allocate (Diag%du3dt (IM,Model%levs,4)) @@ -5545,6 +5547,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%toticeb = zero Diag%totsnwb = zero Diag%totgrpb = zero + Diag%wind = zero ! if (Model%do_ca) then Diag%ca_out = zero diff --git a/FV3/wrapper/tests/pytest/_regtest_outputs/test_regression.test_fv3_wrapper_regression[blended-area-weighted-coarse-graining.yml].out b/FV3/wrapper/tests/pytest/_regtest_outputs/test_regression.test_fv3_wrapper_regression[blended-area-weighted-coarse-graining.yml].out new file mode 100644 index 000000000..a94969277 --- /dev/null +++ b/FV3/wrapper/tests/pytest/_regtest_outputs/test_regression.test_fv3_wrapper_regression[blended-area-weighted-coarse-graining.yml].out @@ -0,0 +1,98 @@ +INPUT/gfs_ctrl.nc 72479dcd4e5e38f802cd1ac9bc71aa8b +INPUT/gfs_data.tile1.nc c0bba587540ba06a45a16ef06134224b +INPUT/gfs_data.tile2.nc d14b7b0ffc2853431014e56feaf7476a +INPUT/gfs_data.tile3.nc 1a3e5ce9528218ccc41c8e6d28eb7a6b +INPUT/gfs_data.tile4.nc c41240db80e5fddbbc0b85db6ae2aa79 +INPUT/gfs_data.tile5.nc d13590003b7531d76822d8f3161a426d +INPUT/gfs_data.tile6.nc c9aff252070daca55b36ac3779122755 +INPUT/oro_data.tile1.nc 7a51c9c62c1dafafc19c8fb9c1c5945b +INPUT/oro_data.tile2.nc 9196b1ce3803f01782076e1e5a256340 +INPUT/oro_data.tile3.nc 8eb0653c3f656b3981ca8b57bfb6ac28 +INPUT/oro_data.tile4.nc 3d85307062f7c1f1bcd6c97177344d82 +INPUT/oro_data.tile5.nc 6820a83fb382fd45a5883c603266bb17 +INPUT/oro_data.tile6.nc df632c163e05bd45d742c2c995b6e5b5 +INPUT/sfc_data.tile1.nc 01d55ac6277e758207e855222fa5eaa5 +INPUT/sfc_data.tile2.nc 6e36dcca146e6306b62b667f00e35837 +INPUT/sfc_data.tile3.nc 376b8453fa09a33e3e4f523353ab0669 +INPUT/sfc_data.tile4.nc 4fd4f998979b73901a28a03f84940e5f +INPUT/sfc_data.tile5.nc 68821da46d1c1398b9e48e784eac539a +INPUT/sfc_data.tile6.nc 1704922a9c10744d96d09796dbf2beab +RESTART/20160801.001500.fv_core_coarse.res.tile1.nc 224abf813bc5dd55c340b2bd36c647b3 +RESTART/20160801.001500.fv_core_coarse.res.tile2.nc a3465d78f4bfa727cc2b1971beca1b73 +RESTART/20160801.001500.fv_core_coarse.res.tile3.nc 78fadd3ea7590744abb7a66a51198869 +RESTART/20160801.001500.fv_core_coarse.res.tile4.nc ebbe6bc1da04dfabf9a186457d5e0f70 +RESTART/20160801.001500.fv_core_coarse.res.tile5.nc 22f7e7a3c4de164c7a9563af525a80e9 +RESTART/20160801.001500.fv_core_coarse.res.tile6.nc 04820082fa12ecec089265001d3683b2 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile1.nc 8fb168f7ef31c12e0edcfe913607eac6 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile2.nc 8d9695430474263a182ba5c1fcb124c8 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile3.nc b3b217f2fa370e2519e443b7c76debda +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile4.nc db58fa26d2e4913e894ad8ca80f873a3 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile5.nc ec84ec13c244812a835eca63dadd237b +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile6.nc 840045eae6d59afd8d5e040d6ff0bd4e +RESTART/20160801.001500.fv_tracer_coarse.res.tile1.nc 7feb07ac5852cebde194b0bfe2f290c4 +RESTART/20160801.001500.fv_tracer_coarse.res.tile2.nc abd6f521ecd5d502b22d67c3c12c7871 +RESTART/20160801.001500.fv_tracer_coarse.res.tile3.nc 1883f20fd20f1e964d2619e5a9c3a2be +RESTART/20160801.001500.fv_tracer_coarse.res.tile4.nc b30698cf76a3dcd6e9d29a8dc8920b28 +RESTART/20160801.001500.fv_tracer_coarse.res.tile5.nc 2377789565dffd4244588e92a79ccf4d +RESTART/20160801.001500.fv_tracer_coarse.res.tile6.nc 44d41ff5a998f3c3b9a3687504f066e9 +RESTART/20160801.001500.sfc_data_coarse.tile1.nc 0d09d232398fce828e14a85725e03034 +RESTART/20160801.001500.sfc_data_coarse.tile2.nc 32265f909af0ed58cd22063e8c7cc824 +RESTART/20160801.001500.sfc_data_coarse.tile3.nc a5a44676420b66f7292350506c301c6e +RESTART/20160801.001500.sfc_data_coarse.tile4.nc 56365bd21f1604538b8a247cdb4e78d2 +RESTART/20160801.001500.sfc_data_coarse.tile5.nc 2bff10c2940720163e992b1e8696f271 +RESTART/20160801.001500.sfc_data_coarse.tile6.nc 5ffd088b6a9dacaf8d5ad1c810a19cb7 +RESTART/fv_core.res.nc 03f92921ec61bc2e8650bcc3b1cc3971 +RESTART/fv_core.res.tile1.nc b3115b1764636895e7bc65cd540722f5 +RESTART/fv_core.res.tile2.nc ca135c536ae43465aa0a7ba0fbe36d49 +RESTART/fv_core.res.tile3.nc a14156736623d6ec5ae4b4ceb0fbaaa0 +RESTART/fv_core.res.tile4.nc e3ee9deec08ed08313af20fcde2b8008 +RESTART/fv_core.res.tile5.nc 516b687b1f475c7f82621ff197f094b7 +RESTART/fv_core.res.tile6.nc 18214b08b606221a75c99de039ab72d4 +RESTART/fv_core_coarse.res.tile1.nc 832a43c0d844a5cb933c4f0ab4b871d0 +RESTART/fv_core_coarse.res.tile2.nc dca36a31fa50691a117d2029d14538b6 +RESTART/fv_core_coarse.res.tile3.nc ed7aab0188f92c225508fb629ff9ae2d +RESTART/fv_core_coarse.res.tile4.nc fc899cbb506c620096735e626ed2a637 +RESTART/fv_core_coarse.res.tile5.nc b8e6dbfcbabc341847f98a59d7b51504 +RESTART/fv_core_coarse.res.tile6.nc 4a9b0cfa1f032f644487dbb82d6eac99 +RESTART/fv_srf_wnd.res.tile1.nc ae2d59a0537a86f68b7ada984519fbf8 +RESTART/fv_srf_wnd.res.tile2.nc 9d116ea268dce494c31fba68eebacbb5 +RESTART/fv_srf_wnd.res.tile3.nc 31202a056dc5fd45f98646f2d235441c +RESTART/fv_srf_wnd.res.tile4.nc 686be9f1f8f9b6ce5877b1740afaf8b4 +RESTART/fv_srf_wnd.res.tile5.nc a002d710f0ea1436a4fe77ec88e65693 +RESTART/fv_srf_wnd.res.tile6.nc 1a8d5b75bc886d780267c2a1b57dab31 +RESTART/fv_srf_wnd_coarse.res.tile1.nc dea0648f76ffce9a62ecdd1364576600 +RESTART/fv_srf_wnd_coarse.res.tile2.nc 80d23bf3f8254d9d8ca380f40307c484 +RESTART/fv_srf_wnd_coarse.res.tile3.nc 52e15a7da151f69384a64ed99caee67b +RESTART/fv_srf_wnd_coarse.res.tile4.nc f5a744dcb94d7181dfe24c922c120831 +RESTART/fv_srf_wnd_coarse.res.tile5.nc 63087962b097a892d63046995a823e33 +RESTART/fv_srf_wnd_coarse.res.tile6.nc aeb3182369e337b65e6560339dd19f1f +RESTART/fv_tracer.res.tile1.nc 5a9b903167f6d32a822868b5afef1180 +RESTART/fv_tracer.res.tile2.nc 3a3218d2b4a75265c6a1ba251fba4663 +RESTART/fv_tracer.res.tile3.nc aa512fe2eb96e4cd164d4f56107b2a44 +RESTART/fv_tracer.res.tile4.nc 22e7cf8ab2bca34ca44fc98fc18c53de +RESTART/fv_tracer.res.tile5.nc af3abb1bd35ff43214a7a6e1f314b3a6 +RESTART/fv_tracer.res.tile6.nc 154e8f425555c057c457ab3ef038a388 +RESTART/fv_tracer_coarse.res.tile1.nc a551cedc0f7458d741fdb3ea340062f9 +RESTART/fv_tracer_coarse.res.tile2.nc bb95cb3e238c9d3e959a0a460a11610f +RESTART/fv_tracer_coarse.res.tile3.nc 9caf608f8aa74558d2411bcc56dcdb74 +RESTART/fv_tracer_coarse.res.tile4.nc 7072349b59f09918af46403f52e8f22f +RESTART/fv_tracer_coarse.res.tile5.nc 8dd561cd1516b1a175c3c741da2d7ea5 +RESTART/fv_tracer_coarse.res.tile6.nc 320cade6559272f2bf8d254e58a248e3 +RESTART/phy_data.tile1.nc fb88bfd101012d8b1d00c14c1a22351e +RESTART/phy_data.tile2.nc cf136172bcb639092a922e7f50adf1ad +RESTART/phy_data.tile3.nc 340a36a988201cc3db4d12a0f5062dad +RESTART/phy_data.tile4.nc 7d3d8a6c10dd385c65af2b5ff914c24b +RESTART/phy_data.tile5.nc 1d0ef27b83773c311fe92b59d02b64fc +RESTART/phy_data.tile6.nc 8dcb5440277f5d5b86b2b093789dcb3a +RESTART/sfc_data.tile1.nc 4b826c76afd3d391b0ae78a81ed76104 +RESTART/sfc_data.tile2.nc 20ec36eb2cd9a2839966b2d2a7653ab7 +RESTART/sfc_data.tile3.nc 44e11e635e88e604ada499d6155e6537 +RESTART/sfc_data.tile4.nc 8cf7890ff11c022a2c62b74612edd17f +RESTART/sfc_data.tile5.nc 8d49761e5ada028e7dd38fcccf7491bb +RESTART/sfc_data.tile6.nc f110f1c1e8c87710dc25ecc2487bc0ad +RESTART/sfc_data_coarse.tile1.nc 19a098789f03fdd826309f78fdca0056 +RESTART/sfc_data_coarse.tile2.nc 2c995e8daab0f708e25e570b58c1e7ce +RESTART/sfc_data_coarse.tile3.nc 8d208b08b9ffad06cfc04292da72b1ba +RESTART/sfc_data_coarse.tile4.nc e5879471542f7c71269553018ac60961 +RESTART/sfc_data_coarse.tile5.nc 7bd8d4da6d228dfe1e9d64698ad8137f +RESTART/sfc_data_coarse.tile6.nc 868e9d1b37244599d0637d7326ef4466 diff --git a/FV3/wrapper/tests/pytest/_regtest_outputs/test_regression.test_fv3_wrapper_regression[blended-mass-weighted-coarse-graining.yml].out b/FV3/wrapper/tests/pytest/_regtest_outputs/test_regression.test_fv3_wrapper_regression[blended-mass-weighted-coarse-graining.yml].out new file mode 100644 index 000000000..df637dc79 --- /dev/null +++ b/FV3/wrapper/tests/pytest/_regtest_outputs/test_regression.test_fv3_wrapper_regression[blended-mass-weighted-coarse-graining.yml].out @@ -0,0 +1,98 @@ +INPUT/gfs_ctrl.nc 72479dcd4e5e38f802cd1ac9bc71aa8b +INPUT/gfs_data.tile1.nc c0bba587540ba06a45a16ef06134224b +INPUT/gfs_data.tile2.nc d14b7b0ffc2853431014e56feaf7476a +INPUT/gfs_data.tile3.nc 1a3e5ce9528218ccc41c8e6d28eb7a6b +INPUT/gfs_data.tile4.nc c41240db80e5fddbbc0b85db6ae2aa79 +INPUT/gfs_data.tile5.nc d13590003b7531d76822d8f3161a426d +INPUT/gfs_data.tile6.nc c9aff252070daca55b36ac3779122755 +INPUT/oro_data.tile1.nc 7a51c9c62c1dafafc19c8fb9c1c5945b +INPUT/oro_data.tile2.nc 9196b1ce3803f01782076e1e5a256340 +INPUT/oro_data.tile3.nc 8eb0653c3f656b3981ca8b57bfb6ac28 +INPUT/oro_data.tile4.nc 3d85307062f7c1f1bcd6c97177344d82 +INPUT/oro_data.tile5.nc 6820a83fb382fd45a5883c603266bb17 +INPUT/oro_data.tile6.nc df632c163e05bd45d742c2c995b6e5b5 +INPUT/sfc_data.tile1.nc 01d55ac6277e758207e855222fa5eaa5 +INPUT/sfc_data.tile2.nc 6e36dcca146e6306b62b667f00e35837 +INPUT/sfc_data.tile3.nc 376b8453fa09a33e3e4f523353ab0669 +INPUT/sfc_data.tile4.nc 4fd4f998979b73901a28a03f84940e5f +INPUT/sfc_data.tile5.nc 68821da46d1c1398b9e48e784eac539a +INPUT/sfc_data.tile6.nc 1704922a9c10744d96d09796dbf2beab +RESTART/20160801.001500.fv_core_coarse.res.tile1.nc 0c8a979fbb9fcfc0c83c7e087756af1c +RESTART/20160801.001500.fv_core_coarse.res.tile2.nc 43318ee8df72f757033d0060f411fe6c +RESTART/20160801.001500.fv_core_coarse.res.tile3.nc baa5e6972d1f12d21a93e0c7d70f7912 +RESTART/20160801.001500.fv_core_coarse.res.tile4.nc c7d355843c1d0fb4e449101fba4c96f3 +RESTART/20160801.001500.fv_core_coarse.res.tile5.nc 8e335835a8c34ee69ca85e47b033e0e4 +RESTART/20160801.001500.fv_core_coarse.res.tile6.nc 1691d445fd2d85645a2057481205472b +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile1.nc 8fb168f7ef31c12e0edcfe913607eac6 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile2.nc 8d9695430474263a182ba5c1fcb124c8 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile3.nc b3b217f2fa370e2519e443b7c76debda +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile4.nc db58fa26d2e4913e894ad8ca80f873a3 +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile5.nc ec84ec13c244812a835eca63dadd237b +RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile6.nc 840045eae6d59afd8d5e040d6ff0bd4e +RESTART/20160801.001500.fv_tracer_coarse.res.tile1.nc 347f69c735ce3c963e7baaed3369b6a3 +RESTART/20160801.001500.fv_tracer_coarse.res.tile2.nc 1a0e215141f84e9ac687c9cc53ba26ca +RESTART/20160801.001500.fv_tracer_coarse.res.tile3.nc d3a58c0be291fdd09e21486319e61510 +RESTART/20160801.001500.fv_tracer_coarse.res.tile4.nc eca749dc00e0fa273c2a4b1f3c822068 +RESTART/20160801.001500.fv_tracer_coarse.res.tile5.nc 8a6b5a1043c62b9a4f315e5d5b3ac3f9 +RESTART/20160801.001500.fv_tracer_coarse.res.tile6.nc 931e85278d92f05a26ae817691c4ce2d +RESTART/20160801.001500.sfc_data_coarse.tile1.nc 0d09d232398fce828e14a85725e03034 +RESTART/20160801.001500.sfc_data_coarse.tile2.nc 32265f909af0ed58cd22063e8c7cc824 +RESTART/20160801.001500.sfc_data_coarse.tile3.nc a5a44676420b66f7292350506c301c6e +RESTART/20160801.001500.sfc_data_coarse.tile4.nc 56365bd21f1604538b8a247cdb4e78d2 +RESTART/20160801.001500.sfc_data_coarse.tile5.nc 2bff10c2940720163e992b1e8696f271 +RESTART/20160801.001500.sfc_data_coarse.tile6.nc 5ffd088b6a9dacaf8d5ad1c810a19cb7 +RESTART/fv_core.res.nc 03f92921ec61bc2e8650bcc3b1cc3971 +RESTART/fv_core.res.tile1.nc b3115b1764636895e7bc65cd540722f5 +RESTART/fv_core.res.tile2.nc ca135c536ae43465aa0a7ba0fbe36d49 +RESTART/fv_core.res.tile3.nc a14156736623d6ec5ae4b4ceb0fbaaa0 +RESTART/fv_core.res.tile4.nc e3ee9deec08ed08313af20fcde2b8008 +RESTART/fv_core.res.tile5.nc 516b687b1f475c7f82621ff197f094b7 +RESTART/fv_core.res.tile6.nc 18214b08b606221a75c99de039ab72d4 +RESTART/fv_core_coarse.res.tile1.nc 8dc5b7d6f7c8a5635527fb500bf16d57 +RESTART/fv_core_coarse.res.tile2.nc 4592e8590712b79cde77e43a7f250f2b +RESTART/fv_core_coarse.res.tile3.nc 020a736498ae119ec2af49aacfc133da +RESTART/fv_core_coarse.res.tile4.nc ff88afa8231ecf94fc67e460c464e6bb +RESTART/fv_core_coarse.res.tile5.nc 3d7379703725a9f9a9cedf28b02b4a5f +RESTART/fv_core_coarse.res.tile6.nc 8b0bbc862a9331911d098edb39f0e735 +RESTART/fv_srf_wnd.res.tile1.nc ae2d59a0537a86f68b7ada984519fbf8 +RESTART/fv_srf_wnd.res.tile2.nc 9d116ea268dce494c31fba68eebacbb5 +RESTART/fv_srf_wnd.res.tile3.nc 31202a056dc5fd45f98646f2d235441c +RESTART/fv_srf_wnd.res.tile4.nc 686be9f1f8f9b6ce5877b1740afaf8b4 +RESTART/fv_srf_wnd.res.tile5.nc a002d710f0ea1436a4fe77ec88e65693 +RESTART/fv_srf_wnd.res.tile6.nc 1a8d5b75bc886d780267c2a1b57dab31 +RESTART/fv_srf_wnd_coarse.res.tile1.nc dea0648f76ffce9a62ecdd1364576600 +RESTART/fv_srf_wnd_coarse.res.tile2.nc 80d23bf3f8254d9d8ca380f40307c484 +RESTART/fv_srf_wnd_coarse.res.tile3.nc 52e15a7da151f69384a64ed99caee67b +RESTART/fv_srf_wnd_coarse.res.tile4.nc f5a744dcb94d7181dfe24c922c120831 +RESTART/fv_srf_wnd_coarse.res.tile5.nc 63087962b097a892d63046995a823e33 +RESTART/fv_srf_wnd_coarse.res.tile6.nc aeb3182369e337b65e6560339dd19f1f +RESTART/fv_tracer.res.tile1.nc 5a9b903167f6d32a822868b5afef1180 +RESTART/fv_tracer.res.tile2.nc 3a3218d2b4a75265c6a1ba251fba4663 +RESTART/fv_tracer.res.tile3.nc aa512fe2eb96e4cd164d4f56107b2a44 +RESTART/fv_tracer.res.tile4.nc 22e7cf8ab2bca34ca44fc98fc18c53de +RESTART/fv_tracer.res.tile5.nc af3abb1bd35ff43214a7a6e1f314b3a6 +RESTART/fv_tracer.res.tile6.nc 154e8f425555c057c457ab3ef038a388 +RESTART/fv_tracer_coarse.res.tile1.nc 21d90ba55e4b01dc135f55797a48db7f +RESTART/fv_tracer_coarse.res.tile2.nc 6a080912bb8d264fe45bddb463451b44 +RESTART/fv_tracer_coarse.res.tile3.nc d912bcd1dfc71bc0aa3bb49650700f2a +RESTART/fv_tracer_coarse.res.tile4.nc 4ab563a78404eadbd0180551b0ad354f +RESTART/fv_tracer_coarse.res.tile5.nc cee05a4a13ddbe88948b32de2a1698b4 +RESTART/fv_tracer_coarse.res.tile6.nc a50ba76e9cc2d111d8d6e4569ff99af6 +RESTART/phy_data.tile1.nc fb88bfd101012d8b1d00c14c1a22351e +RESTART/phy_data.tile2.nc cf136172bcb639092a922e7f50adf1ad +RESTART/phy_data.tile3.nc 340a36a988201cc3db4d12a0f5062dad +RESTART/phy_data.tile4.nc 7d3d8a6c10dd385c65af2b5ff914c24b +RESTART/phy_data.tile5.nc 1d0ef27b83773c311fe92b59d02b64fc +RESTART/phy_data.tile6.nc 8dcb5440277f5d5b86b2b093789dcb3a +RESTART/sfc_data.tile1.nc 4b826c76afd3d391b0ae78a81ed76104 +RESTART/sfc_data.tile2.nc 20ec36eb2cd9a2839966b2d2a7653ab7 +RESTART/sfc_data.tile3.nc 44e11e635e88e604ada499d6155e6537 +RESTART/sfc_data.tile4.nc 8cf7890ff11c022a2c62b74612edd17f +RESTART/sfc_data.tile5.nc 8d49761e5ada028e7dd38fcccf7491bb +RESTART/sfc_data.tile6.nc f110f1c1e8c87710dc25ecc2487bc0ad +RESTART/sfc_data_coarse.tile1.nc 19a098789f03fdd826309f78fdca0056 +RESTART/sfc_data_coarse.tile2.nc 2c995e8daab0f708e25e570b58c1e7ce +RESTART/sfc_data_coarse.tile3.nc 8d208b08b9ffad06cfc04292da72b1ba +RESTART/sfc_data_coarse.tile4.nc e5879471542f7c71269553018ac60961 +RESTART/sfc_data_coarse.tile5.nc 7bd8d4da6d228dfe1e9d64698ad8137f +RESTART/sfc_data_coarse.tile6.nc 868e9d1b37244599d0637d7326ef4466 diff --git a/tests/pytest/_regtest_outputs/test_regression.test_regression_native[Linux-blended-area-weighted-coarse-graining.yml].out b/tests/pytest/_regtest_outputs/test_regression.test_regression_native[Linux-blended-area-weighted-coarse-graining.yml].out new file mode 100644 index 000000000..a57daa546 --- /dev/null +++ b/tests/pytest/_regtest_outputs/test_regression.test_regression_native[Linux-blended-area-weighted-coarse-graining.yml].out @@ -0,0 +1,79 @@ +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile1.nc 224abf813bc5dd55c340b2bd36c647b3 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile2.nc a3465d78f4bfa727cc2b1971beca1b73 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile3.nc 78fadd3ea7590744abb7a66a51198869 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile4.nc ebbe6bc1da04dfabf9a186457d5e0f70 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile5.nc 22f7e7a3c4de164c7a9563af525a80e9 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile6.nc 04820082fa12ecec089265001d3683b2 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile1.nc 8fb168f7ef31c12e0edcfe913607eac6 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile2.nc 8d9695430474263a182ba5c1fcb124c8 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile3.nc b3b217f2fa370e2519e443b7c76debda +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile4.nc db58fa26d2e4913e894ad8ca80f873a3 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile5.nc ec84ec13c244812a835eca63dadd237b +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile6.nc 840045eae6d59afd8d5e040d6ff0bd4e +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile1.nc 7feb07ac5852cebde194b0bfe2f290c4 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile2.nc abd6f521ecd5d502b22d67c3c12c7871 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile3.nc 1883f20fd20f1e964d2619e5a9c3a2be +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile4.nc b30698cf76a3dcd6e9d29a8dc8920b28 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile5.nc 2377789565dffd4244588e92a79ccf4d +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile6.nc 44d41ff5a998f3c3b9a3687504f066e9 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile1.nc 0d09d232398fce828e14a85725e03034 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile2.nc 32265f909af0ed58cd22063e8c7cc824 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile3.nc a5a44676420b66f7292350506c301c6e +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile4.nc 56365bd21f1604538b8a247cdb4e78d2 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile5.nc 2bff10c2940720163e992b1e8696f271 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile6.nc 5ffd088b6a9dacaf8d5ad1c810a19cb7 +/rundir/RESTART/fv_core.res.nc 03f92921ec61bc2e8650bcc3b1cc3971 +/rundir/RESTART/fv_core.res.tile1.nc b3115b1764636895e7bc65cd540722f5 +/rundir/RESTART/fv_core.res.tile2.nc ca135c536ae43465aa0a7ba0fbe36d49 +/rundir/RESTART/fv_core.res.tile3.nc a14156736623d6ec5ae4b4ceb0fbaaa0 +/rundir/RESTART/fv_core.res.tile4.nc e3ee9deec08ed08313af20fcde2b8008 +/rundir/RESTART/fv_core.res.tile5.nc 516b687b1f475c7f82621ff197f094b7 +/rundir/RESTART/fv_core.res.tile6.nc 18214b08b606221a75c99de039ab72d4 +/rundir/RESTART/fv_core_coarse.res.tile1.nc 832a43c0d844a5cb933c4f0ab4b871d0 +/rundir/RESTART/fv_core_coarse.res.tile2.nc dca36a31fa50691a117d2029d14538b6 +/rundir/RESTART/fv_core_coarse.res.tile3.nc ed7aab0188f92c225508fb629ff9ae2d +/rundir/RESTART/fv_core_coarse.res.tile4.nc fc899cbb506c620096735e626ed2a637 +/rundir/RESTART/fv_core_coarse.res.tile5.nc b8e6dbfcbabc341847f98a59d7b51504 +/rundir/RESTART/fv_core_coarse.res.tile6.nc 4a9b0cfa1f032f644487dbb82d6eac99 +/rundir/RESTART/fv_srf_wnd.res.tile1.nc ae2d59a0537a86f68b7ada984519fbf8 +/rundir/RESTART/fv_srf_wnd.res.tile2.nc 9d116ea268dce494c31fba68eebacbb5 +/rundir/RESTART/fv_srf_wnd.res.tile3.nc 31202a056dc5fd45f98646f2d235441c +/rundir/RESTART/fv_srf_wnd.res.tile4.nc 686be9f1f8f9b6ce5877b1740afaf8b4 +/rundir/RESTART/fv_srf_wnd.res.tile5.nc a002d710f0ea1436a4fe77ec88e65693 +/rundir/RESTART/fv_srf_wnd.res.tile6.nc 1a8d5b75bc886d780267c2a1b57dab31 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile1.nc dea0648f76ffce9a62ecdd1364576600 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile2.nc 80d23bf3f8254d9d8ca380f40307c484 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile3.nc 52e15a7da151f69384a64ed99caee67b +/rundir/RESTART/fv_srf_wnd_coarse.res.tile4.nc f5a744dcb94d7181dfe24c922c120831 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile5.nc 63087962b097a892d63046995a823e33 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile6.nc aeb3182369e337b65e6560339dd19f1f +/rundir/RESTART/fv_tracer.res.tile1.nc 5a9b903167f6d32a822868b5afef1180 +/rundir/RESTART/fv_tracer.res.tile2.nc 3a3218d2b4a75265c6a1ba251fba4663 +/rundir/RESTART/fv_tracer.res.tile3.nc aa512fe2eb96e4cd164d4f56107b2a44 +/rundir/RESTART/fv_tracer.res.tile4.nc 22e7cf8ab2bca34ca44fc98fc18c53de +/rundir/RESTART/fv_tracer.res.tile5.nc af3abb1bd35ff43214a7a6e1f314b3a6 +/rundir/RESTART/fv_tracer.res.tile6.nc 154e8f425555c057c457ab3ef038a388 +/rundir/RESTART/fv_tracer_coarse.res.tile1.nc a551cedc0f7458d741fdb3ea340062f9 +/rundir/RESTART/fv_tracer_coarse.res.tile2.nc bb95cb3e238c9d3e959a0a460a11610f +/rundir/RESTART/fv_tracer_coarse.res.tile3.nc 9caf608f8aa74558d2411bcc56dcdb74 +/rundir/RESTART/fv_tracer_coarse.res.tile4.nc 7072349b59f09918af46403f52e8f22f +/rundir/RESTART/fv_tracer_coarse.res.tile5.nc 8dd561cd1516b1a175c3c741da2d7ea5 +/rundir/RESTART/fv_tracer_coarse.res.tile6.nc 320cade6559272f2bf8d254e58a248e3 +/rundir/RESTART/phy_data.tile1.nc fb88bfd101012d8b1d00c14c1a22351e +/rundir/RESTART/phy_data.tile2.nc cf136172bcb639092a922e7f50adf1ad +/rundir/RESTART/phy_data.tile3.nc 340a36a988201cc3db4d12a0f5062dad +/rundir/RESTART/phy_data.tile4.nc 7d3d8a6c10dd385c65af2b5ff914c24b +/rundir/RESTART/phy_data.tile5.nc 1d0ef27b83773c311fe92b59d02b64fc +/rundir/RESTART/phy_data.tile6.nc 8dcb5440277f5d5b86b2b093789dcb3a +/rundir/RESTART/sfc_data.tile1.nc 4b826c76afd3d391b0ae78a81ed76104 +/rundir/RESTART/sfc_data.tile2.nc 20ec36eb2cd9a2839966b2d2a7653ab7 +/rundir/RESTART/sfc_data.tile3.nc 44e11e635e88e604ada499d6155e6537 +/rundir/RESTART/sfc_data.tile4.nc 8cf7890ff11c022a2c62b74612edd17f +/rundir/RESTART/sfc_data.tile5.nc 8d49761e5ada028e7dd38fcccf7491bb +/rundir/RESTART/sfc_data.tile6.nc f110f1c1e8c87710dc25ecc2487bc0ad +/rundir/RESTART/sfc_data_coarse.tile1.nc 19a098789f03fdd826309f78fdca0056 +/rundir/RESTART/sfc_data_coarse.tile2.nc 2c995e8daab0f708e25e570b58c1e7ce +/rundir/RESTART/sfc_data_coarse.tile3.nc 8d208b08b9ffad06cfc04292da72b1ba +/rundir/RESTART/sfc_data_coarse.tile4.nc e5879471542f7c71269553018ac60961 +/rundir/RESTART/sfc_data_coarse.tile5.nc 7bd8d4da6d228dfe1e9d64698ad8137f +/rundir/RESTART/sfc_data_coarse.tile6.nc 868e9d1b37244599d0637d7326ef4466 diff --git a/tests/pytest/_regtest_outputs/test_regression.test_regression_native[Linux-blended-mass-weighted-coarse-graining.yml].out b/tests/pytest/_regtest_outputs/test_regression.test_regression_native[Linux-blended-mass-weighted-coarse-graining.yml].out new file mode 100644 index 000000000..c5a7a4f53 --- /dev/null +++ b/tests/pytest/_regtest_outputs/test_regression.test_regression_native[Linux-blended-mass-weighted-coarse-graining.yml].out @@ -0,0 +1,79 @@ +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile1.nc 0c8a979fbb9fcfc0c83c7e087756af1c +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile2.nc 43318ee8df72f757033d0060f411fe6c +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile3.nc baa5e6972d1f12d21a93e0c7d70f7912 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile4.nc c7d355843c1d0fb4e449101fba4c96f3 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile5.nc 8e335835a8c34ee69ca85e47b033e0e4 +/rundir/RESTART/20160801.001500.fv_core_coarse.res.tile6.nc 1691d445fd2d85645a2057481205472b +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile1.nc 8fb168f7ef31c12e0edcfe913607eac6 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile2.nc 8d9695430474263a182ba5c1fcb124c8 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile3.nc b3b217f2fa370e2519e443b7c76debda +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile4.nc db58fa26d2e4913e894ad8ca80f873a3 +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile5.nc ec84ec13c244812a835eca63dadd237b +/rundir/RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile6.nc 840045eae6d59afd8d5e040d6ff0bd4e +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile1.nc 347f69c735ce3c963e7baaed3369b6a3 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile2.nc 1a0e215141f84e9ac687c9cc53ba26ca +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile3.nc d3a58c0be291fdd09e21486319e61510 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile4.nc eca749dc00e0fa273c2a4b1f3c822068 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile5.nc 8a6b5a1043c62b9a4f315e5d5b3ac3f9 +/rundir/RESTART/20160801.001500.fv_tracer_coarse.res.tile6.nc 931e85278d92f05a26ae817691c4ce2d +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile1.nc 0d09d232398fce828e14a85725e03034 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile2.nc 32265f909af0ed58cd22063e8c7cc824 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile3.nc a5a44676420b66f7292350506c301c6e +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile4.nc 56365bd21f1604538b8a247cdb4e78d2 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile5.nc 2bff10c2940720163e992b1e8696f271 +/rundir/RESTART/20160801.001500.sfc_data_coarse.tile6.nc 5ffd088b6a9dacaf8d5ad1c810a19cb7 +/rundir/RESTART/fv_core.res.nc 03f92921ec61bc2e8650bcc3b1cc3971 +/rundir/RESTART/fv_core.res.tile1.nc b3115b1764636895e7bc65cd540722f5 +/rundir/RESTART/fv_core.res.tile2.nc ca135c536ae43465aa0a7ba0fbe36d49 +/rundir/RESTART/fv_core.res.tile3.nc a14156736623d6ec5ae4b4ceb0fbaaa0 +/rundir/RESTART/fv_core.res.tile4.nc e3ee9deec08ed08313af20fcde2b8008 +/rundir/RESTART/fv_core.res.tile5.nc 516b687b1f475c7f82621ff197f094b7 +/rundir/RESTART/fv_core.res.tile6.nc 18214b08b606221a75c99de039ab72d4 +/rundir/RESTART/fv_core_coarse.res.tile1.nc 8dc5b7d6f7c8a5635527fb500bf16d57 +/rundir/RESTART/fv_core_coarse.res.tile2.nc 4592e8590712b79cde77e43a7f250f2b +/rundir/RESTART/fv_core_coarse.res.tile3.nc 020a736498ae119ec2af49aacfc133da +/rundir/RESTART/fv_core_coarse.res.tile4.nc ff88afa8231ecf94fc67e460c464e6bb +/rundir/RESTART/fv_core_coarse.res.tile5.nc 3d7379703725a9f9a9cedf28b02b4a5f +/rundir/RESTART/fv_core_coarse.res.tile6.nc 8b0bbc862a9331911d098edb39f0e735 +/rundir/RESTART/fv_srf_wnd.res.tile1.nc ae2d59a0537a86f68b7ada984519fbf8 +/rundir/RESTART/fv_srf_wnd.res.tile2.nc 9d116ea268dce494c31fba68eebacbb5 +/rundir/RESTART/fv_srf_wnd.res.tile3.nc 31202a056dc5fd45f98646f2d235441c +/rundir/RESTART/fv_srf_wnd.res.tile4.nc 686be9f1f8f9b6ce5877b1740afaf8b4 +/rundir/RESTART/fv_srf_wnd.res.tile5.nc a002d710f0ea1436a4fe77ec88e65693 +/rundir/RESTART/fv_srf_wnd.res.tile6.nc 1a8d5b75bc886d780267c2a1b57dab31 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile1.nc dea0648f76ffce9a62ecdd1364576600 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile2.nc 80d23bf3f8254d9d8ca380f40307c484 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile3.nc 52e15a7da151f69384a64ed99caee67b +/rundir/RESTART/fv_srf_wnd_coarse.res.tile4.nc f5a744dcb94d7181dfe24c922c120831 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile5.nc 63087962b097a892d63046995a823e33 +/rundir/RESTART/fv_srf_wnd_coarse.res.tile6.nc aeb3182369e337b65e6560339dd19f1f +/rundir/RESTART/fv_tracer.res.tile1.nc 5a9b903167f6d32a822868b5afef1180 +/rundir/RESTART/fv_tracer.res.tile2.nc 3a3218d2b4a75265c6a1ba251fba4663 +/rundir/RESTART/fv_tracer.res.tile3.nc aa512fe2eb96e4cd164d4f56107b2a44 +/rundir/RESTART/fv_tracer.res.tile4.nc 22e7cf8ab2bca34ca44fc98fc18c53de +/rundir/RESTART/fv_tracer.res.tile5.nc af3abb1bd35ff43214a7a6e1f314b3a6 +/rundir/RESTART/fv_tracer.res.tile6.nc 154e8f425555c057c457ab3ef038a388 +/rundir/RESTART/fv_tracer_coarse.res.tile1.nc 21d90ba55e4b01dc135f55797a48db7f +/rundir/RESTART/fv_tracer_coarse.res.tile2.nc 6a080912bb8d264fe45bddb463451b44 +/rundir/RESTART/fv_tracer_coarse.res.tile3.nc d912bcd1dfc71bc0aa3bb49650700f2a +/rundir/RESTART/fv_tracer_coarse.res.tile4.nc 4ab563a78404eadbd0180551b0ad354f +/rundir/RESTART/fv_tracer_coarse.res.tile5.nc cee05a4a13ddbe88948b32de2a1698b4 +/rundir/RESTART/fv_tracer_coarse.res.tile6.nc a50ba76e9cc2d111d8d6e4569ff99af6 +/rundir/RESTART/phy_data.tile1.nc fb88bfd101012d8b1d00c14c1a22351e +/rundir/RESTART/phy_data.tile2.nc cf136172bcb639092a922e7f50adf1ad +/rundir/RESTART/phy_data.tile3.nc 340a36a988201cc3db4d12a0f5062dad +/rundir/RESTART/phy_data.tile4.nc 7d3d8a6c10dd385c65af2b5ff914c24b +/rundir/RESTART/phy_data.tile5.nc 1d0ef27b83773c311fe92b59d02b64fc +/rundir/RESTART/phy_data.tile6.nc 8dcb5440277f5d5b86b2b093789dcb3a +/rundir/RESTART/sfc_data.tile1.nc 4b826c76afd3d391b0ae78a81ed76104 +/rundir/RESTART/sfc_data.tile2.nc 20ec36eb2cd9a2839966b2d2a7653ab7 +/rundir/RESTART/sfc_data.tile3.nc 44e11e635e88e604ada499d6155e6537 +/rundir/RESTART/sfc_data.tile4.nc 8cf7890ff11c022a2c62b74612edd17f +/rundir/RESTART/sfc_data.tile5.nc 8d49761e5ada028e7dd38fcccf7491bb +/rundir/RESTART/sfc_data.tile6.nc f110f1c1e8c87710dc25ecc2487bc0ad +/rundir/RESTART/sfc_data_coarse.tile1.nc 19a098789f03fdd826309f78fdca0056 +/rundir/RESTART/sfc_data_coarse.tile2.nc 2c995e8daab0f708e25e570b58c1e7ce +/rundir/RESTART/sfc_data_coarse.tile3.nc 8d208b08b9ffad06cfc04292da72b1ba +/rundir/RESTART/sfc_data_coarse.tile4.nc e5879471542f7c71269553018ac60961 +/rundir/RESTART/sfc_data_coarse.tile5.nc 7bd8d4da6d228dfe1e9d64698ad8137f +/rundir/RESTART/sfc_data_coarse.tile6.nc 868e9d1b37244599d0637d7326ef4466 diff --git a/tests/pytest/config/blended-area-weighted-coarse-graining.yml b/tests/pytest/config/blended-area-weighted-coarse-graining.yml new file mode 100644 index 000000000..c7310e76d --- /dev/null +++ b/tests/pytest/config/blended-area-weighted-coarse-graining.yml @@ -0,0 +1,306 @@ +data_table: default +diag_table: gs://vcm-fv3config/config/diag_table/no_output/v1.0/diag_table +field_table: gs://vcm-fv3config/config/field_table/TKE-EDMF/v1.1/field_table +experiment_name: blended-area-weighted-coarse-graining +forcing: "gs://vcm-fv3config/data/base_forcing/v1.1/" +orographic_forcing: gs://vcm-fv3config/data/orographic_data/v1.0 +initial_conditions: gs://vcm-fv3config/data/initial_conditions/gfs_c12_example/v1.0 +namelist: + amip_interp_nml: + data_set: reynolds_oi + date_out_of_range: climo + interp_oi_sst: true + no_anom_sst: false + use_ncep_ice: false + use_ncep_sst: true + atmos_model_nml: + blocksize: 12 + chksum_debug: false + dycore_only: false + fdiag: 0.0 + fhmax: 1024.0 + fhmaxhf: -1.0 + fhout: 0.25 + fhouthf: 0.0 + cires_ugwp_nml: + knob_ugwp_azdir: + - 2 + - 4 + - 4 + - 4 + knob_ugwp_doaxyz: 1 + knob_ugwp_doheat: 1 + knob_ugwp_dokdis: 0 + knob_ugwp_effac: + - 1 + - 1 + - 1 + - 1 + knob_ugwp_ndx4lh: 4 + knob_ugwp_solver: 2 + knob_ugwp_source: + - 1 + - 1 + - 1 + - 0 + knob_ugwp_stoch: + - 0 + - 0 + - 0 + - 0 + knob_ugwp_version: 0 + knob_ugwp_wvspec: + - 1 + - 32 + - 32 + - 32 + launch_level: 55 + coarse_graining_nml: + coarsening_factor: 2 + strategy: blended_area_weighted + coupler_nml: + atmos_nthreads: 1 + calendar: julian + current_date: + - 2016 + - 8 + - 1 + - 0 + - 0 + - 0 + days: 0 + dt_atmos: 900 + dt_ocean: 900 + hours: 0 + memuse_verbose: true + minutes: 30 + months: 0 + ncores_per_node: 32 + seconds: 0 + use_hyper_thread: true + restart_secs: 900 + diag_manager_nml: + prepend_date: false + external_ic_nml: + checker_tr: false + filtered_terrain: true + gfs_dwinds: true + levp: 64 + nt_checker: 0 + fms_io_nml: + checksum_required: false + max_files_r: 100 + max_files_w: 100 + fms_nml: + clock_grain: ROUTINE + domains_stack_size: 3000000 + print_memory_usage: false + fv_core_nml: + a_imp: 1.0 + adjust_dry_mass: false + beta: 0.0 + consv_am: false + consv_te: 1.0 + d2_bg: 0.0 + d2_bg_k1: 0.16 + d2_bg_k2: 0.02 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.2 + delt_max: 0.002 + dnats: 1 + do_sat_adj: true + do_vort_damp: true + dwind_2d: false + external_ic: true + fill: true + fv_debug: false + fv_sg_adj: 900 + gfs_phil: false + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + io_layout: + - 1 + - 1 + k_split: 1 + ke_bg: 0.0 + kord_mt: 10 + kord_tm: -10 + kord_tr: 10 + kord_wz: 10 + layout: + - 1 + - 1 + make_nh: true + mountain: false + n_split: 6 + n_sponge: 4 + na_init: 1 + ncep_ic: false + nggps_ic: true + no_dycore: false + nord: 2 + npx: 13 + npy: 13 + npz: 63 + ntiles: 6 + nudge: false + nudge_qv: true + nwat: 6 + p_fac: 0.1 + phys_hydrostatic: false + print_freq: 3 + range_warn: true + reset_eta: false + rf_cutoff: 800.0 + rf_fast: false + tau: 5.0 + use_hydro_pressure: false + vtdm4: 0.06 + warm_start: false + z_tracer: true + write_coarse_restart_files: true + write_coarse_diagnostics: true + write_only_coarse_intermediate_restarts: true + write_coarse_agrid_vel_rst: true + fv_grid_nml: {} + gfdl_cloud_microphysics_nml: + c_cracw: 0.8 + c_paut: 0.5 + c_pgacs: 0.01 + c_psaci: 0.05 + ccn_l: 300.0 + ccn_o: 100.0 + const_vg: false + const_vi: false + const_vr: false + const_vs: false + de_ice: false + do_qa: true + do_sedi_heat: false + dw_land: 0.16 + dw_ocean: 0.1 + fast_sat_adj: true + fix_negative: true + icloud_f: 1 + mono_prof: true + mp_time: 450.0 + prog_ccn: false + qi0_crt: 8.0e-05 + qi_lim: 1.0 + ql_gen: 0.001 + ql_mlt: 0.001 + qs0_crt: 0.001 + rad_graupel: true + rad_rain: true + rad_snow: true + rh_inc: 0.3 + rh_inr: 0.3 + rh_ins: 0.3 + rthresh: 1.0e-05 + sedi_transport: false + tau_g2v: 900.0 + tau_i2s: 1000.0 + tau_l2v: + - 225.0 + tau_v2l: 150.0 + use_ccn: true + use_ppm: false + vg_max: 12.0 + vi_max: 1.0 + vr_max: 12.0 + vs_max: 2.0 + z_slope_ice: true + z_slope_liq: true + gfs_physics_nml: + cal_pre: false + cdmbgwd: + - 3.5 + - 0.25 + cnvcld: false + cnvgwd: true + debug: false + dspheat: true + fhcyc: 24.0 + fhlwr: 3600.0 + fhswr: 3600.0 + fhzero: 0.25 + satmedmf: true + hybedmf: false + iaer: 111 + ialb: 1 + ico2: 2 + iems: 1 + imfdeepcnv: 2 + imfshalcnv: 2 + imp_physics: 11 + isol: 2 + isot: 1 + isubc_lw: 2 + isubc_sw: 2 + ivegsrc: 1 + ldiag3d: true + lwhtr: true + ncld: 5 + nst_anl: true + pdfcld: false + pre_rad: false + prslrd0: 0.0 + random_clds: false + redrag: true + shal_cnv: true + swhtr: true + trans_trac: true + use_ufo: true + interpolator_nml: + interp_method: conserve_great_circle + nam_stochy: + lat_s: 96 + lon_s: 192 + ntrunc: 94 + namsfc: + fabsl: 99999 + faisl: 99999 + faiss: 99999 + fnabsc: grb/global_mxsnoalb.uariz.t1534.3072.1536.rg.grb + fnacna: '' + fnaisc: grb/CFSR.SEAICE.1982.2012.monthly.clim.grb + fnalbc: grb/global_snowfree_albedo.bosu.t1534.3072.1536.rg.grb + fnalbc2: grb/global_albedo4.1x1.grb + fnglac: grb/global_glacier.2x2.grb + fnmskh: grb/seaice_newland.grb + fnmxic: grb/global_maxice.2x2.grb + fnslpc: grb/global_slope.1x1.grb + fnsmcc: grb/global_soilmgldas.t1534.3072.1536.grb + fnsnoa: '' + fnsnoc: grb/global_snoclim.1.875.grb + fnsotc: grb/global_soiltype.statsgo.t1534.3072.1536.rg.grb + fntg3c: grb/global_tg3clim.2.6x1.5.grb + fntsfa: '' + fntsfc: grb/RTGSST.1982.2012.monthly.clim.grb + fnvegc: grb/global_vegfrac.0.144.decpercent.grb + fnvetc: grb/global_vegtype.igbp.t1534.3072.1536.rg.grb + fnvmnc: grb/global_shdmin.0.144x0.144.grb + fnvmxc: grb/global_shdmax.0.144x0.144.grb + fnzorc: igbp + fsicl: 99999 + fsics: 99999 + fslpl: 99999 + fsmcl: + - 99999 + - 99999 + - 99999 + fsnol: 99999 + fsnos: 99999 + fsotl: 99999 + ftsfl: 99999 + ftsfs: 90 + fvetl: 99999 + fvmnl: 99999 + fvmxl: 99999 + ldebug: false diff --git a/tests/pytest/config/blended-mass-weighted-coarse-graining.yml b/tests/pytest/config/blended-mass-weighted-coarse-graining.yml new file mode 100644 index 000000000..cf889c5ad --- /dev/null +++ b/tests/pytest/config/blended-mass-weighted-coarse-graining.yml @@ -0,0 +1,306 @@ +data_table: default +diag_table: gs://vcm-fv3config/config/diag_table/no_output/v1.0/diag_table +field_table: gs://vcm-fv3config/config/field_table/TKE-EDMF/v1.1/field_table +experiment_name: blended-mass-weighted-coarse-graining +forcing: "gs://vcm-fv3config/data/base_forcing/v1.1/" +orographic_forcing: gs://vcm-fv3config/data/orographic_data/v1.0 +initial_conditions: gs://vcm-fv3config/data/initial_conditions/gfs_c12_example/v1.0 +namelist: + amip_interp_nml: + data_set: reynolds_oi + date_out_of_range: climo + interp_oi_sst: true + no_anom_sst: false + use_ncep_ice: false + use_ncep_sst: true + atmos_model_nml: + blocksize: 12 + chksum_debug: false + dycore_only: false + fdiag: 0.0 + fhmax: 1024.0 + fhmaxhf: -1.0 + fhout: 0.25 + fhouthf: 0.0 + cires_ugwp_nml: + knob_ugwp_azdir: + - 2 + - 4 + - 4 + - 4 + knob_ugwp_doaxyz: 1 + knob_ugwp_doheat: 1 + knob_ugwp_dokdis: 0 + knob_ugwp_effac: + - 1 + - 1 + - 1 + - 1 + knob_ugwp_ndx4lh: 4 + knob_ugwp_solver: 2 + knob_ugwp_source: + - 1 + - 1 + - 1 + - 0 + knob_ugwp_stoch: + - 0 + - 0 + - 0 + - 0 + knob_ugwp_version: 0 + knob_ugwp_wvspec: + - 1 + - 32 + - 32 + - 32 + launch_level: 55 + coarse_graining_nml: + coarsening_factor: 2 + strategy: blended_mass_weighted + coupler_nml: + atmos_nthreads: 1 + calendar: julian + current_date: + - 2016 + - 8 + - 1 + - 0 + - 0 + - 0 + days: 0 + dt_atmos: 900 + dt_ocean: 900 + hours: 0 + memuse_verbose: true + minutes: 30 + months: 0 + ncores_per_node: 32 + seconds: 0 + use_hyper_thread: true + restart_secs: 900 + diag_manager_nml: + prepend_date: false + external_ic_nml: + checker_tr: false + filtered_terrain: true + gfs_dwinds: true + levp: 64 + nt_checker: 0 + fms_io_nml: + checksum_required: false + max_files_r: 100 + max_files_w: 100 + fms_nml: + clock_grain: ROUTINE + domains_stack_size: 3000000 + print_memory_usage: false + fv_core_nml: + a_imp: 1.0 + adjust_dry_mass: false + beta: 0.0 + consv_am: false + consv_te: 1.0 + d2_bg: 0.0 + d2_bg_k1: 0.16 + d2_bg_k2: 0.02 + d4_bg: 0.15 + d_con: 1.0 + d_ext: 0.0 + dddmp: 0.2 + delt_max: 0.002 + dnats: 1 + do_sat_adj: true + do_vort_damp: true + dwind_2d: false + external_ic: true + fill: true + fv_debug: false + fv_sg_adj: 900 + gfs_phil: false + hord_dp: 6 + hord_mt: 6 + hord_tm: 6 + hord_tr: 8 + hord_vt: 6 + hydrostatic: false + io_layout: + - 1 + - 1 + k_split: 1 + ke_bg: 0.0 + kord_mt: 10 + kord_tm: -10 + kord_tr: 10 + kord_wz: 10 + layout: + - 1 + - 1 + make_nh: true + mountain: false + n_split: 6 + n_sponge: 4 + na_init: 1 + ncep_ic: false + nggps_ic: true + no_dycore: false + nord: 2 + npx: 13 + npy: 13 + npz: 63 + ntiles: 6 + nudge: false + nudge_qv: true + nwat: 6 + p_fac: 0.1 + phys_hydrostatic: false + print_freq: 3 + range_warn: true + reset_eta: false + rf_cutoff: 800.0 + rf_fast: false + tau: 5.0 + use_hydro_pressure: false + vtdm4: 0.06 + warm_start: false + z_tracer: true + write_coarse_restart_files: true + write_coarse_diagnostics: true + write_only_coarse_intermediate_restarts: true + write_coarse_agrid_vel_rst: true + fv_grid_nml: {} + gfdl_cloud_microphysics_nml: + c_cracw: 0.8 + c_paut: 0.5 + c_pgacs: 0.01 + c_psaci: 0.05 + ccn_l: 300.0 + ccn_o: 100.0 + const_vg: false + const_vi: false + const_vr: false + const_vs: false + de_ice: false + do_qa: true + do_sedi_heat: false + dw_land: 0.16 + dw_ocean: 0.1 + fast_sat_adj: true + fix_negative: true + icloud_f: 1 + mono_prof: true + mp_time: 450.0 + prog_ccn: false + qi0_crt: 8.0e-05 + qi_lim: 1.0 + ql_gen: 0.001 + ql_mlt: 0.001 + qs0_crt: 0.001 + rad_graupel: true + rad_rain: true + rad_snow: true + rh_inc: 0.3 + rh_inr: 0.3 + rh_ins: 0.3 + rthresh: 1.0e-05 + sedi_transport: false + tau_g2v: 900.0 + tau_i2s: 1000.0 + tau_l2v: + - 225.0 + tau_v2l: 150.0 + use_ccn: true + use_ppm: false + vg_max: 12.0 + vi_max: 1.0 + vr_max: 12.0 + vs_max: 2.0 + z_slope_ice: true + z_slope_liq: true + gfs_physics_nml: + cal_pre: false + cdmbgwd: + - 3.5 + - 0.25 + cnvcld: false + cnvgwd: true + debug: false + dspheat: true + fhcyc: 24.0 + fhlwr: 3600.0 + fhswr: 3600.0 + fhzero: 0.25 + satmedmf: true + hybedmf: false + iaer: 111 + ialb: 1 + ico2: 2 + iems: 1 + imfdeepcnv: 2 + imfshalcnv: 2 + imp_physics: 11 + isol: 2 + isot: 1 + isubc_lw: 2 + isubc_sw: 2 + ivegsrc: 1 + ldiag3d: true + lwhtr: true + ncld: 5 + nst_anl: true + pdfcld: false + pre_rad: false + prslrd0: 0.0 + random_clds: false + redrag: true + shal_cnv: true + swhtr: true + trans_trac: true + use_ufo: true + interpolator_nml: + interp_method: conserve_great_circle + nam_stochy: + lat_s: 96 + lon_s: 192 + ntrunc: 94 + namsfc: + fabsl: 99999 + faisl: 99999 + faiss: 99999 + fnabsc: grb/global_mxsnoalb.uariz.t1534.3072.1536.rg.grb + fnacna: '' + fnaisc: grb/CFSR.SEAICE.1982.2012.monthly.clim.grb + fnalbc: grb/global_snowfree_albedo.bosu.t1534.3072.1536.rg.grb + fnalbc2: grb/global_albedo4.1x1.grb + fnglac: grb/global_glacier.2x2.grb + fnmskh: grb/seaice_newland.grb + fnmxic: grb/global_maxice.2x2.grb + fnslpc: grb/global_slope.1x1.grb + fnsmcc: grb/global_soilmgldas.t1534.3072.1536.grb + fnsnoa: '' + fnsnoc: grb/global_snoclim.1.875.grb + fnsotc: grb/global_soiltype.statsgo.t1534.3072.1536.rg.grb + fntg3c: grb/global_tg3clim.2.6x1.5.grb + fntsfa: '' + fntsfc: grb/RTGSST.1982.2012.monthly.clim.grb + fnvegc: grb/global_vegfrac.0.144.decpercent.grb + fnvetc: grb/global_vegtype.igbp.t1534.3072.1536.rg.grb + fnvmnc: grb/global_shdmin.0.144x0.144.grb + fnvmxc: grb/global_shdmax.0.144x0.144.grb + fnzorc: igbp + fsicl: 99999 + fsics: 99999 + fslpl: 99999 + fsmcl: + - 99999 + - 99999 + - 99999 + fsnol: 99999 + fsnos: 99999 + fsotl: 99999 + ftsfl: 99999 + ftsfs: 90 + fvetl: 99999 + fvmnl: 99999 + fvmxl: 99999 + ldebug: false diff --git a/tests/pytest/reference/circleci/blended-area-weighted-coarse-graining/md5.txt b/tests/pytest/reference/circleci/blended-area-weighted-coarse-graining/md5.txt new file mode 100644 index 000000000..a1f5f204c --- /dev/null +++ b/tests/pytest/reference/circleci/blended-area-weighted-coarse-graining/md5.txt @@ -0,0 +1,79 @@ +88f8e34ed8f1792639cbe7a8a9f8350b RESTART/20160801.001500.fv_core_coarse.res.tile1.nc +081ee5ac580855b55b6864087f32f710 RESTART/20160801.001500.fv_core_coarse.res.tile2.nc +898cec45871690c2776dab5289e8006a RESTART/20160801.001500.fv_core_coarse.res.tile3.nc +f53937c6073a406ebc6430a4ba9d0db7 RESTART/20160801.001500.fv_core_coarse.res.tile4.nc +d163bcaeb34fd27147be221dfacdfe2f RESTART/20160801.001500.fv_core_coarse.res.tile5.nc +9fb1f5c2a562dffd8157e0d74bc8ebef RESTART/20160801.001500.fv_core_coarse.res.tile6.nc +0451fe90bfd64845ad152c8efde544f5 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile1.nc +5eed7980f5cc4c30609a92c0c1c9c481 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile2.nc +c5d41d7d1db5e7968d6fd45254719521 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile3.nc +054d34d060e67af561498d55ef2b3b0a RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile4.nc +cec8b6c64320e7354765ce68db14e354 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile5.nc +fc91353ba2ae2f26ca9773a38a112b46 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile6.nc +c8149b12a0a9c27dc1ffb7065088f15d RESTART/20160801.001500.fv_tracer_coarse.res.tile1.nc +708f9707befdd3c61cabddd74a4b346d RESTART/20160801.001500.fv_tracer_coarse.res.tile2.nc +54770563bdc7827439d5c85237ea3bc4 RESTART/20160801.001500.fv_tracer_coarse.res.tile3.nc +d10b2696ea43c2eb217ae4a7460839ae RESTART/20160801.001500.fv_tracer_coarse.res.tile4.nc +07b37e8785c64196689e5b4ff4214bd2 RESTART/20160801.001500.fv_tracer_coarse.res.tile5.nc +187aea5b1751267a259c995cfc9e3614 RESTART/20160801.001500.fv_tracer_coarse.res.tile6.nc +63f662203b43aec5f30e6d789bb56c8d RESTART/20160801.001500.sfc_data_coarse.tile1.nc +cffa9ec2393f99a31f38a9ad03e9e40e RESTART/20160801.001500.sfc_data_coarse.tile2.nc +34d43ee2bc486ae149efd388c201dc49 RESTART/20160801.001500.sfc_data_coarse.tile3.nc +6bfab201fba610511e6bde4f070f1bb3 RESTART/20160801.001500.sfc_data_coarse.tile4.nc +6de714422d529abacf37c5610074972e RESTART/20160801.001500.sfc_data_coarse.tile5.nc +575ddb147cbaa1453535a5f7b99b3f90 RESTART/20160801.001500.sfc_data_coarse.tile6.nc +03f92921ec61bc2e8650bcc3b1cc3971 RESTART/fv_core.res.nc +4d2b2ae1726771bdb4e7df604d17cfaf RESTART/fv_core.res.tile1.nc +de3638c2f8ed80ae9526b92f50e478c8 RESTART/fv_core.res.tile2.nc +bbaee971268e7611b10de99beb084ed7 RESTART/fv_core.res.tile3.nc +3bb734731ea32e5ef7012c3dee990f48 RESTART/fv_core.res.tile4.nc +c27ccf44e8032f83e0e66f85f9acce9c RESTART/fv_core.res.tile5.nc +e71ffe896e20848b412426b494e4e1d2 RESTART/fv_core.res.tile6.nc +4760db0324946644cb2fd31d51c68bfe RESTART/fv_core_coarse.res.tile1.nc +b147a017d14172235665f65a50d01602 RESTART/fv_core_coarse.res.tile2.nc +9b9e5c8225c2de5e952508509eb60302 RESTART/fv_core_coarse.res.tile3.nc +9dc8256dbbcb62c53fd78a58d8b4906a RESTART/fv_core_coarse.res.tile4.nc +0ad3401ec89d6fb055fc218f762b5f58 RESTART/fv_core_coarse.res.tile5.nc +4ec5d8d1ad88e23d11eed172d80961ad RESTART/fv_core_coarse.res.tile6.nc +9f16ba89464f99068150b190fb431bdc RESTART/fv_srf_wnd.res.tile1.nc +0bf47c7ec92d7e7b90826504029d05a7 RESTART/fv_srf_wnd.res.tile2.nc +8bd57c652d1ad6d096f2c5a3e9b4d507 RESTART/fv_srf_wnd.res.tile3.nc +4cc8b2ff2f0bf4d1823cf007ba3dc818 RESTART/fv_srf_wnd.res.tile4.nc +6c805670f606618aa455ad2cdfc3e198 RESTART/fv_srf_wnd.res.tile5.nc +0a5f8b1ea8c925a08738c6d8cbdff68f RESTART/fv_srf_wnd.res.tile6.nc +825fa853d3fe99fdb4bd0b8143175572 RESTART/fv_srf_wnd_coarse.res.tile1.nc +4252cb0ae6a1e58cdc444a37c692cbb9 RESTART/fv_srf_wnd_coarse.res.tile2.nc +f777aa365951976eb30a8eb3a264efa3 RESTART/fv_srf_wnd_coarse.res.tile3.nc +8d242f2e079c14f9a6708bed9f968590 RESTART/fv_srf_wnd_coarse.res.tile4.nc +025e2e50775be8cc62bb8b228953cf30 RESTART/fv_srf_wnd_coarse.res.tile5.nc +b22533b97443c63e196b9ae606522c97 RESTART/fv_srf_wnd_coarse.res.tile6.nc +3b489154cda471c39ff0f7d9095d362b RESTART/fv_tracer.res.tile1.nc +7f52fe8b5c9993dba109cbeac08f17d5 RESTART/fv_tracer.res.tile2.nc +c78450c6b8495c9d67b2a7ab17836e7d RESTART/fv_tracer.res.tile3.nc +5a3fd717e84477b73067aadf4d201d99 RESTART/fv_tracer.res.tile4.nc +b7105eff6eeba4e4db9dba1f38748dd9 RESTART/fv_tracer.res.tile5.nc +647745d19367529da6a5c678bf5912d4 RESTART/fv_tracer.res.tile6.nc +4eb05fb74105cf92fd64e9e3917ed17e RESTART/fv_tracer_coarse.res.tile1.nc +2266f3a103b2770a9c6a449574172010 RESTART/fv_tracer_coarse.res.tile2.nc +48401e8e2bf654c7151c657d1b5ab4cf RESTART/fv_tracer_coarse.res.tile3.nc +e573b22051e92e8f8699dd0eed2d87b1 RESTART/fv_tracer_coarse.res.tile4.nc +585957e72e9f48e85089f06adf29ea3c RESTART/fv_tracer_coarse.res.tile5.nc +d7e3856b7089d0d6673242ea6eeecf14 RESTART/fv_tracer_coarse.res.tile6.nc +fb88bfd101012d8b1d00c14c1a22351e RESTART/phy_data.tile1.nc +cf136172bcb639092a922e7f50adf1ad RESTART/phy_data.tile2.nc +340a36a988201cc3db4d12a0f5062dad RESTART/phy_data.tile3.nc +7d3d8a6c10dd385c65af2b5ff914c24b RESTART/phy_data.tile4.nc +1d0ef27b83773c311fe92b59d02b64fc RESTART/phy_data.tile5.nc +8dcb5440277f5d5b86b2b093789dcb3a RESTART/phy_data.tile6.nc +5d39996b4fd8ea916435cf1a3157bfba RESTART/sfc_data.tile1.nc +9691f7bc98c3308b4cab9c2de816602d RESTART/sfc_data.tile2.nc +434ac75bd73c5c870544b986dfb0c590 RESTART/sfc_data.tile3.nc +5c88a92a5d056a08ee461e6858e827c5 RESTART/sfc_data.tile4.nc +b791bd89b33aaeff31d2118a3df0621c RESTART/sfc_data.tile5.nc +2005bc6ed003d89efe843ba2758a1937 RESTART/sfc_data.tile6.nc +5d6d2e9a35fdf00890fce15f5fa41815 RESTART/sfc_data_coarse.tile1.nc +d4a9d0d98fc6589ba98637dd44d6d9b1 RESTART/sfc_data_coarse.tile2.nc +dd22ed9cadea3ddd5ae5a0e3c8cc4a3c RESTART/sfc_data_coarse.tile3.nc +860e1190bd66af8cd400e764e9f67492 RESTART/sfc_data_coarse.tile4.nc +3b8da0ef3f9d5e2e8e2c4fc803e9d9f1 RESTART/sfc_data_coarse.tile5.nc +a887391890edc1e668f756bc444b7458 RESTART/sfc_data_coarse.tile6.nc diff --git a/tests/pytest/reference/circleci/blended-mass-weighted-coarse-graining/md5.txt b/tests/pytest/reference/circleci/blended-mass-weighted-coarse-graining/md5.txt new file mode 100644 index 000000000..e5740d0d8 --- /dev/null +++ b/tests/pytest/reference/circleci/blended-mass-weighted-coarse-graining/md5.txt @@ -0,0 +1,79 @@ +5afdf5e25c1dca2853df700884fb3503 RESTART/20160801.001500.fv_core_coarse.res.tile1.nc +d549a4c4f3cc77398b781278f0e76436 RESTART/20160801.001500.fv_core_coarse.res.tile2.nc +d9afb6834f0f8f39cda0f3947c0ec462 RESTART/20160801.001500.fv_core_coarse.res.tile3.nc +1b2cb9733f4f8e029b1219e0bf8c653c RESTART/20160801.001500.fv_core_coarse.res.tile4.nc +3955eef265520397c99bf8b91d31a129 RESTART/20160801.001500.fv_core_coarse.res.tile5.nc +a34ea7937baf5c15030ceaef3cdd4878 RESTART/20160801.001500.fv_core_coarse.res.tile6.nc +0451fe90bfd64845ad152c8efde544f5 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile1.nc +5eed7980f5cc4c30609a92c0c1c9c481 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile2.nc +c5d41d7d1db5e7968d6fd45254719521 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile3.nc +054d34d060e67af561498d55ef2b3b0a RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile4.nc +cec8b6c64320e7354765ce68db14e354 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile5.nc +fc91353ba2ae2f26ca9773a38a112b46 RESTART/20160801.001500.fv_srf_wnd_coarse.res.tile6.nc +73023fed4661385ed27741708a7f07a8 RESTART/20160801.001500.fv_tracer_coarse.res.tile1.nc +1e538f57ed4db9752be3d96a35e93216 RESTART/20160801.001500.fv_tracer_coarse.res.tile2.nc +7b0380656261de74477bff863c660fab RESTART/20160801.001500.fv_tracer_coarse.res.tile3.nc +8dfb17c75ae97a72894b3380a4e18dee RESTART/20160801.001500.fv_tracer_coarse.res.tile4.nc +4c868882f29ed500a4f3d37e8deedb6c RESTART/20160801.001500.fv_tracer_coarse.res.tile5.nc +b55267ba0d387dfd72fa2333bbd0cd2d RESTART/20160801.001500.fv_tracer_coarse.res.tile6.nc +63f662203b43aec5f30e6d789bb56c8d RESTART/20160801.001500.sfc_data_coarse.tile1.nc +cffa9ec2393f99a31f38a9ad03e9e40e RESTART/20160801.001500.sfc_data_coarse.tile2.nc +34d43ee2bc486ae149efd388c201dc49 RESTART/20160801.001500.sfc_data_coarse.tile3.nc +6bfab201fba610511e6bde4f070f1bb3 RESTART/20160801.001500.sfc_data_coarse.tile4.nc +6de714422d529abacf37c5610074972e RESTART/20160801.001500.sfc_data_coarse.tile5.nc +575ddb147cbaa1453535a5f7b99b3f90 RESTART/20160801.001500.sfc_data_coarse.tile6.nc +03f92921ec61bc2e8650bcc3b1cc3971 RESTART/fv_core.res.nc +4d2b2ae1726771bdb4e7df604d17cfaf RESTART/fv_core.res.tile1.nc +de3638c2f8ed80ae9526b92f50e478c8 RESTART/fv_core.res.tile2.nc +bbaee971268e7611b10de99beb084ed7 RESTART/fv_core.res.tile3.nc +3bb734731ea32e5ef7012c3dee990f48 RESTART/fv_core.res.tile4.nc +c27ccf44e8032f83e0e66f85f9acce9c RESTART/fv_core.res.tile5.nc +e71ffe896e20848b412426b494e4e1d2 RESTART/fv_core.res.tile6.nc +822d09ff875a4bb5f4d9afc08103a904 RESTART/fv_core_coarse.res.tile1.nc +047bef4dffab4289e45abe341f058375 RESTART/fv_core_coarse.res.tile2.nc +fbc3a2cb1b4f199aac26e7ef4288b572 RESTART/fv_core_coarse.res.tile3.nc +8860ae2382128790ba182183425951bc RESTART/fv_core_coarse.res.tile4.nc +6c8fc0ddbf84e1b16203990ccdc539c5 RESTART/fv_core_coarse.res.tile5.nc +24d0c2cface8992e817533ac65eb1395 RESTART/fv_core_coarse.res.tile6.nc +9f16ba89464f99068150b190fb431bdc RESTART/fv_srf_wnd.res.tile1.nc +0bf47c7ec92d7e7b90826504029d05a7 RESTART/fv_srf_wnd.res.tile2.nc +8bd57c652d1ad6d096f2c5a3e9b4d507 RESTART/fv_srf_wnd.res.tile3.nc +4cc8b2ff2f0bf4d1823cf007ba3dc818 RESTART/fv_srf_wnd.res.tile4.nc +6c805670f606618aa455ad2cdfc3e198 RESTART/fv_srf_wnd.res.tile5.nc +0a5f8b1ea8c925a08738c6d8cbdff68f RESTART/fv_srf_wnd.res.tile6.nc +825fa853d3fe99fdb4bd0b8143175572 RESTART/fv_srf_wnd_coarse.res.tile1.nc +4252cb0ae6a1e58cdc444a37c692cbb9 RESTART/fv_srf_wnd_coarse.res.tile2.nc +f777aa365951976eb30a8eb3a264efa3 RESTART/fv_srf_wnd_coarse.res.tile3.nc +8d242f2e079c14f9a6708bed9f968590 RESTART/fv_srf_wnd_coarse.res.tile4.nc +025e2e50775be8cc62bb8b228953cf30 RESTART/fv_srf_wnd_coarse.res.tile5.nc +b22533b97443c63e196b9ae606522c97 RESTART/fv_srf_wnd_coarse.res.tile6.nc +3b489154cda471c39ff0f7d9095d362b RESTART/fv_tracer.res.tile1.nc +7f52fe8b5c9993dba109cbeac08f17d5 RESTART/fv_tracer.res.tile2.nc +c78450c6b8495c9d67b2a7ab17836e7d RESTART/fv_tracer.res.tile3.nc +5a3fd717e84477b73067aadf4d201d99 RESTART/fv_tracer.res.tile4.nc +b7105eff6eeba4e4db9dba1f38748dd9 RESTART/fv_tracer.res.tile5.nc +647745d19367529da6a5c678bf5912d4 RESTART/fv_tracer.res.tile6.nc +523672a8573e162def55327821d344c2 RESTART/fv_tracer_coarse.res.tile1.nc +ce72d272d43704b444837e7d9d42b098 RESTART/fv_tracer_coarse.res.tile2.nc +1c0383f222b69a6a39da454b274f2762 RESTART/fv_tracer_coarse.res.tile3.nc +3dabccffbc48cce3258e075bba70012f RESTART/fv_tracer_coarse.res.tile4.nc +b520c8b799bf2f779ed2304fc665e091 RESTART/fv_tracer_coarse.res.tile5.nc +8e9dfc60fd1b8553ad205a9fd47f8bb6 RESTART/fv_tracer_coarse.res.tile6.nc +fb88bfd101012d8b1d00c14c1a22351e RESTART/phy_data.tile1.nc +cf136172bcb639092a922e7f50adf1ad RESTART/phy_data.tile2.nc +340a36a988201cc3db4d12a0f5062dad RESTART/phy_data.tile3.nc +7d3d8a6c10dd385c65af2b5ff914c24b RESTART/phy_data.tile4.nc +1d0ef27b83773c311fe92b59d02b64fc RESTART/phy_data.tile5.nc +8dcb5440277f5d5b86b2b093789dcb3a RESTART/phy_data.tile6.nc +5d39996b4fd8ea916435cf1a3157bfba RESTART/sfc_data.tile1.nc +9691f7bc98c3308b4cab9c2de816602d RESTART/sfc_data.tile2.nc +434ac75bd73c5c870544b986dfb0c590 RESTART/sfc_data.tile3.nc +5c88a92a5d056a08ee461e6858e827c5 RESTART/sfc_data.tile4.nc +b791bd89b33aaeff31d2118a3df0621c RESTART/sfc_data.tile5.nc +2005bc6ed003d89efe843ba2758a1937 RESTART/sfc_data.tile6.nc +5d6d2e9a35fdf00890fce15f5fa41815 RESTART/sfc_data_coarse.tile1.nc +d4a9d0d98fc6589ba98637dd44d6d9b1 RESTART/sfc_data_coarse.tile2.nc +dd22ed9cadea3ddd5ae5a0e3c8cc4a3c RESTART/sfc_data_coarse.tile3.nc +860e1190bd66af8cd400e764e9f67492 RESTART/sfc_data_coarse.tile4.nc +3b8da0ef3f9d5e2e8e2c4fc803e9d9f1 RESTART/sfc_data_coarse.tile5.nc +a887391890edc1e668f756bc444b7458 RESTART/sfc_data_coarse.tile6.nc diff --git a/tests/pytest/test_regression.py b/tests/pytest/test_regression.py index f459a8599..dad36ff40 100644 --- a/tests/pytest/test_regression.py +++ b/tests/pytest/test_regression.py @@ -85,6 +85,8 @@ def get_n_processes(config): ("restart.yml", "{version}"), ("model-level-coarse-graining.yml", "{version}-debug"), ("pressure-level-coarse-graining.yml", "{version}-debug"), + ("blended-area-weighted-coarse-graining.yml", "{version}-debug"), + ("blended-mass-weighted-coarse-graining.yml", "{version}-debug"), ], ) def test_regression( @@ -115,6 +117,8 @@ def test_regression( pytest.param("pressure-level-coarse-graining.yml", marks=pytest.mark.coarse), "baroclinic.yml", "restart.yml", + pytest.param("blended-area-weighted-coarse-graining.yml", marks=pytest.mark.coarse), + pytest.param("blended-mass-weighted-coarse-graining.yml", marks=pytest.mark.coarse) ], ) def test_regression_native(run_native, config_filename: str, tmpdir, system_regtest): @@ -436,6 +440,8 @@ def run_model(config, run_dir, model_image, image_runner, additional_env_vars=No [ ("model-level-coarse-graining.yml", "{version}", [1, 2]), ("pressure-level-coarse-graining.yml", "{version}", [1, 2]), + ("blended-area-weighted-coarse-graining.yml", "{version}", [1, 2]), + ("blended-mass-weighted-coarse-graining.yml", "{version}", [1, 2]), ], ids=lambda x: str(x), )