chgres_cube
1.13.0
|
Process surface and nst fields. More...
Data Types | |
type | realptr_2d |
type | realptr_3d |
Functions/Subroutines | |
subroutine | adjust_soil_levels (localpet) |
Adjust soil levels of the input grid if there is a mismatch between input and target grids. More... | |
subroutine | adjust_soilt_for_terrain |
Adjust soil temperature for changes in terrain height between the input and target grids. More... | |
subroutine | calc_liq_soil_moisture |
Compute liquid portion of the total soil moisture. More... | |
subroutine | cleanup_all_target_sfc_data |
Free up memory once the target grid surface fields are no longer needed. More... | |
subroutine, public | create_nst_esmf_fields |
Create ESMF fields for the target grid nst variables. More... | |
subroutine, public | create_surface_esmf_fields |
Create ESMF fields for the target grid surface variables. More... | |
real function | frh2o (TKELV, SMC, SH2O, SMCMAX, BEXP, PSIS) |
Calculate supercooled soil moisture. More... | |
subroutine | ij_to_i_j (ij, itile, jtile, i, j) |
Convert 1d index to 2d indices. More... | |
subroutine, public | interp (localpet) |
Horizontally interpolate surface fields from input to target FV3 grid using esmf routines. More... | |
subroutine, public | nst_land_fill |
nst is not active at land or sea ice points. More... | |
subroutine | qc_check |
Perform some quality control checks and set flag values at non-active points. More... | |
subroutine, public | regrid_many (bundle_pre, bundle_post, num_field, route, dozero, unmapped_ptr, resetifd) |
Regrid multiple ESMF fields from input to target grid. More... | |
subroutine | rescale_soil_moisture |
Adjust soil moisture for changes in soil type between the input and target grids. More... | |
subroutine | roughness |
Set roughness length at points with some sea ice to 1 cm. More... | |
subroutine, public | search_many (num_field, bundle_target, tile, search_nums, localpet, latitude, terrain_land, soilt_climo, mask) |
Execute the search function for multple fields. More... | |
subroutine, public | surface_driver (localpet) |
Driver routine to process surface/nst data. More... | |
subroutine | update_landmask |
Update landmask for sea ice. More... | |
Variables | |
real, parameter, private | blim = 5.5 |
soil 'b' parameter limit More... | |
real, parameter, private | frz_h2o = 273.15 |
melting pt water More... | |
real, parameter, private | frz_ice = 271.21 |
melting pt sea ice More... | |
real, parameter, private | grav = 9.81 |
gravity More... | |
real, parameter, private | hlice = 3.335E5 |
latent heat of fusion More... | |
real(esmf_kind_r8), parameter, private | missing = -1.e20_esmf_kind_r8 |
flag for non-active points. More... | |
type(esmf_field) | soil_type_from_input_grid |
soil type interpolated from input grid More... | |
type(esmf_field) | terrain_from_input_grid |
terrain height interpolated from input grid More... | |
type(esmf_field) | terrain_from_input_grid_land |
terrain height interpolated from input grid at all land points More... | |
integer, parameter | veg_type_landice_target = 15 |
Vegetation type category that defines permanent land ice points. More... | |
Process surface and nst fields.
Interpolates fields from the input to target grids. Adjusts soil temperature according to differences in input and target grid terrain. Rescales soil moisture for soil type differences between input and target grid. Computes frozen portion of total soil moisture.
Assumes the input land data are Noah LSM-based, and the fv3 run will use the Noah LSM. NSST fields are not available when using GRIB2 input data.
Public variables are defined below. "target" indicates field associated with the target grid. "input" indicates field associated with the input grid.
subroutine surface::adjust_soil_levels | ( | integer, intent(in) | localpet | ) |
Adjust soil levels of the input grid if there is a mismatch between input and target grids.
Presently can only convert from 9 to 4 levels.
[in] | localpet | ESMF local persistent execution thread |
Definition at line 2047 of file surface.F90.
References model_grid::i_input, model_grid::input_grid, model_grid::j_input, and model_grid::lsoil_target.
Referenced by surface_driver().
subroutine surface::adjust_soilt_for_terrain | ( | ) |
Adjust soil temperature for changes in terrain height between the input and target grids.
Definition at line 1971 of file surface.F90.
References model_grid::landmask_target_grid, surface_target_data::soil_temp_target_grid, terrain_from_input_grid, model_grid::terrain_target_grid, veg_type_landice_target, and static_data::veg_type_target_grid.
Referenced by surface_driver().
subroutine surface::calc_liq_soil_moisture | ( | ) |
Compute liquid portion of the total soil moisture.
Definition at line 1521 of file surface.F90.
References program_setup::bb_target, blim, frh2o(), frz_h2o, grav, hlice, model_grid::landmask_target_grid, program_setup::maxsmc_target, program_setup::satpsi_target, surface_target_data::soil_temp_target_grid, static_data::soil_type_target_grid, surface_target_data::soilm_liq_target_grid, surface_target_data::soilm_tot_target_grid, veg_type_landice_target, and static_data::veg_type_target_grid.
Referenced by surface_driver().
subroutine surface::cleanup_all_target_sfc_data | ( | ) |
Free up memory once the target grid surface fields are no longer needed.
Definition at line 3714 of file surface.F90.
References surface_target_data::cleanup_target_sfc_data(), soil_type_from_input_grid, terrain_from_input_grid, and terrain_from_input_grid_land.
Referenced by surface_driver().
subroutine, public surface::create_nst_esmf_fields | ( | ) |
Create ESMF fields for the target grid nst variables.
Definition at line 3200 of file surface.F90.
References surface_target_data::c_0_target_grid, surface_target_data::c_d_target_grid, surface_target_data::d_conv_target_grid, surface_target_data::dt_cool_target_grid, surface_target_data::ifd_target_grid, surface_target_data::qrain_target_grid, model_grid::target_grid, surface_target_data::tref_target_grid, surface_target_data::w_0_target_grid, surface_target_data::w_d_target_grid, surface_target_data::xs_target_grid, surface_target_data::xt_target_grid, surface_target_data::xtts_target_grid, surface_target_data::xu_target_grid, surface_target_data::xv_target_grid, surface_target_data::xz_target_grid, surface_target_data::xzts_target_grid, surface_target_data::z_c_target_grid, and surface_target_data::zm_target_grid.
Referenced by surface_driver().
subroutine, public surface::create_surface_esmf_fields | ( | ) |
Create ESMF fields for the target grid surface variables.
Definition at line 2760 of file surface.F90.
References surface_target_data::canopy_mc_target_grid, surface_target_data::f10m_target_grid, surface_target_data::ffmm_target_grid, surface_target_data::ice_temp_target_grid, surface_target_data::lai_target_grid, model_grid::lsoil_target, surface_target_data::q2m_target_grid, surface_target_data::seaice_depth_target_grid, surface_target_data::seaice_fract_target_grid, surface_target_data::seaice_skin_temp_target_grid, surface_target_data::skin_temp_target_grid, surface_target_data::snow_depth_at_ice_target_grid, surface_target_data::snow_depth_target_grid, surface_target_data::snow_liq_equiv_at_ice_target_grid, surface_target_data::snow_liq_equiv_target_grid, surface_target_data::soil_temp_target_grid, soil_type_from_input_grid, surface_target_data::soilm_liq_target_grid, surface_target_data::soilm_tot_target_grid, surface_target_data::srflag_target_grid, surface_target_data::sst_target_grid, surface_target_data::t2m_target_grid, model_grid::target_grid, terrain_from_input_grid, surface_target_data::tprcp_target_grid, surface_target_data::ustar_target_grid, surface_target_data::z0_ice_target_grid, and surface_target_data::z0_water_target_grid.
Referenced by surface_driver().
real function surface::frh2o | ( | real(esmf_kind_r8) | TKELV, |
real(esmf_kind_r8) | SMC, | ||
real(esmf_kind_r8) | SH2O, | ||
real | SMCMAX, | ||
real | BEXP, | ||
real | PSIS | ||
) |
Calculate supercooled soil moisture.
Calculate amount of supercooled liquid soil water content if temperature is below 273.15K. Requires Newton-type iteration to solve the nonlinear implicit equation given in eqn 17 of Koren et. al (1999, JGR, VOL 104(D16), 19569-19585).
New version (June 2001): Much faster and more accurate Newton iteration achieved by first taking log of eqn cited above – less than 4 (typically 1 or 2) iterations achieves convergence. Also, explicit 1-step solution option for special case of parameter ck=0, which reduces the original implicit equation to a simpler explicit form, known as the "Flerchinger eqn". Improved handling of solution in the limit of freezing point temperature.
[in] | tkelv | Temperature (Kelvin) |
[in] | smc | Total soil moisture content (volumetric) |
[in] | sh2O | Liquid soil moisture content (volumetric) |
[in] | smcmax | Saturation soil moisture content |
[in] | bexp | Soil type "b" parameter |
[in] | psis | Saturated soil matric potential |
Definition at line 1665 of file surface.F90.
References blim, frz_h2o, grav, and hlice.
Referenced by calc_liq_soil_moisture().
subroutine surface::ij_to_i_j | ( | integer(esmf_kind_i4), intent(in) | ij, |
integer, intent(in) | itile, | ||
integer, intent(in) | jtile, | ||
integer, intent(out) | i, | ||
integer, intent(out) | j | ||
) |
Convert 1d index to 2d indices.
[in] | ij | the 1d index |
[in] | itile | i-dimension of the tile |
[in] | jtile | j-dimension of the tile |
[out] | i | the "i" index |
[out] | j | the "j" index |
Definition at line 3421 of file surface.F90.
Referenced by interp(), and regrid_many().
subroutine, public surface::interp | ( | integer, intent(in) | localpet | ) |
Horizontally interpolate surface fields from input to target FV3 grid using esmf routines.
[in] | localpet | ESMF local persistent execution thread |
Definition at line 262 of file surface.F90.
References surface_target_data::c_0_target_grid, surface_target_data::c_d_target_grid, surface_target_data::canopy_mc_target_grid, program_setup::convert_nst, surface_target_data::d_conv_target_grid, surface_target_data::dt_cool_target_grid, surface_target_data::f10m_target_grid, surface_target_data::ffmm_target_grid, model_grid::i_target, surface_target_data::ice_temp_target_grid, surface_target_data::ifd_target_grid, ij_to_i_j(), model_grid::input_grid, model_grid::j_target, program_setup::lai_from_climo, surface_target_data::lai_target_grid, model_grid::landmask_target_grid, model_grid::latitude_target_grid, model_grid::lsoil_target, static_data::max_veg_greenness_target_grid, static_data::min_veg_greenness_target_grid, program_setup::minmax_vgfrc_from_climo, model_grid::num_tiles_target_grid, surface_target_data::q2m_target_grid, surface_target_data::qrain_target_grid, regrid_many(), surface_target_data::seaice_depth_target_grid, surface_target_data::seaice_fract_target_grid, surface_target_data::seaice_skin_temp_target_grid, model_grid::seamask_target_grid, search_util::search(), search_many(), surface_target_data::skin_temp_target_grid, surface_target_data::snow_depth_at_ice_target_grid, surface_target_data::snow_depth_target_grid, surface_target_data::snow_liq_equiv_at_ice_target_grid, surface_target_data::snow_liq_equiv_target_grid, surface_target_data::soil_temp_target_grid, soil_type_from_input_grid, static_data::soil_type_target_grid, surface_target_data::soilm_tot_target_grid, program_setup::sotyp_from_climo, surface_target_data::srflag_target_grid, surface_target_data::sst_target_grid, static_data::substrate_temp_target_grid, surface_target_data::t2m_target_grid, model_grid::target_grid, terrain_from_input_grid, terrain_from_input_grid_land, atm_input_data::terrain_input_grid, program_setup::tg3_from_soil, surface_target_data::tprcp_target_grid, surface_target_data::tref_target_grid, surface_target_data::ustar_target_grid, static_data::veg_greenness_target_grid, veg_type_landice_target, static_data::veg_type_target_grid, program_setup::vgfrc_from_climo, program_setup::vgtyp_from_climo, surface_target_data::w_0_target_grid, surface_target_data::w_d_target_grid, surface_target_data::xs_target_grid, surface_target_data::xt_target_grid, surface_target_data::xtts_target_grid, surface_target_data::xu_target_grid, surface_target_data::xv_target_grid, surface_target_data::xz_target_grid, surface_target_data::xzts_target_grid, surface_target_data::z0_water_target_grid, surface_target_data::z_c_target_grid, and surface_target_data::zm_target_grid.
Referenced by surface_driver().
subroutine, public surface::nst_land_fill | ( | ) |
nst is not active at land or sea ice points.
Set nst fields to flag values at these points.
Definition at line 2667 of file surface.F90.
References surface_target_data::c_0_target_grid, surface_target_data::c_d_target_grid, surface_target_data::d_conv_target_grid, surface_target_data::dt_cool_target_grid, frz_ice, surface_target_data::ifd_target_grid, surface_target_data::qrain_target_grid, surface_target_data::seaice_fract_target_grid, model_grid::seamask_target_grid, surface_target_data::skin_temp_target_grid, surface_target_data::tref_target_grid, surface_target_data::w_0_target_grid, surface_target_data::w_d_target_grid, surface_target_data::xs_target_grid, surface_target_data::xt_target_grid, surface_target_data::xtts_target_grid, surface_target_data::xu_target_grid, surface_target_data::xv_target_grid, surface_target_data::xz_target_grid, surface_target_data::xzts_target_grid, surface_target_data::z_c_target_grid, and surface_target_data::zm_target_grid.
Referenced by surface_driver().
subroutine surface::qc_check | ( | ) |
Perform some quality control checks and set flag values at non-active points.
Definition at line 2240 of file surface.F90.
References static_data::alnsf_target_grid, static_data::alnwf_target_grid, static_data::alvsf_target_grid, static_data::alvwf_target_grid, surface_target_data::canopy_mc_target_grid, static_data::facsf_target_grid, static_data::facwf_target_grid, frz_ice, surface_target_data::ice_temp_target_grid, model_grid::landmask_target_grid, static_data::max_veg_greenness_target_grid, static_data::min_veg_greenness_target_grid, missing, static_data::mxsno_albedo_target_grid, surface_target_data::seaice_depth_target_grid, surface_target_data::seaice_fract_target_grid, surface_target_data::seaice_skin_temp_target_grid, model_grid::seamask_target_grid, surface_target_data::skin_temp_target_grid, static_data::slope_type_target_grid, surface_target_data::snow_depth_at_ice_target_grid, surface_target_data::snow_depth_target_grid, surface_target_data::snow_liq_equiv_at_ice_target_grid, surface_target_data::snow_liq_equiv_target_grid, surface_target_data::soil_temp_target_grid, static_data::soil_type_target_grid, surface_target_data::soilm_liq_target_grid, surface_target_data::soilm_tot_target_grid, surface_target_data::sst_target_grid, static_data::substrate_temp_target_grid, static_data::veg_greenness_target_grid, veg_type_landice_target, and static_data::veg_type_target_grid.
Referenced by surface_driver().
subroutine, public surface::regrid_many | ( | type(esmf_fieldbundle), intent(in) | bundle_pre, |
type(esmf_fieldbundle), intent(in) | bundle_post, | ||
integer, intent(in) | num_field, | ||
type(esmf_routehandle), intent(inout) | route, | ||
logical, dimension(num_field), intent(in) | dozero, | ||
integer(esmf_kind_i4), dimension(:), intent(inout), optional | unmapped_ptr, | ||
logical, intent(in), optional | resetifd | ||
) |
Regrid multiple ESMF fields from input to target grid.
[in] | bundle_pre | ESMF fieldBundle on input grid |
[in] | bundle_post | ESMF fieldBundle on target grid |
[in] | num_field | Number of fields in target field pointer |
[in,out] | route | Route handle to saved ESMF regridding instructions |
[in] | dozero | Logical length num_field for whether field should be zeroed out before regridding |
[in,out] | unmapped_ptr | (optional) Pointer to unmapped points from FieldRegrid |
[in] | resetifd | (optional) Logical for whether to reset ifd (only for water where nst data is used) |
Definition at line 3457 of file surface.F90.
References program_setup::convert_nst, model_grid::i_target, surface_target_data::ifd_target_grid, ij_to_i_j(), and model_grid::j_target.
Referenced by interp().
subroutine surface::rescale_soil_moisture | ( | ) |
Adjust soil moisture for changes in soil type between the input and target grids.
Works for Noah land model only. Required to preserve latent/sensible heat fluxes.
Definition at line 1803 of file surface.F90.
References program_setup::drysmc_input, program_setup::drysmc_target, model_grid::landmask_target_grid, program_setup::maxsmc_input, program_setup::maxsmc_target, program_setup::refsmc_input, program_setup::refsmc_target, soil_type_from_input_grid, static_data::soil_type_target_grid, surface_target_data::soilm_tot_target_grid, static_data::veg_greenness_target_grid, veg_type_landice_target, static_data::veg_type_target_grid, program_setup::wltsmc_input, and program_setup::wltsmc_target.
Referenced by surface_driver().
subroutine surface::roughness | ( | ) |
Set roughness length at points with some sea ice to 1 cm.
Set flag value at points with some or all open water.
Definition at line 2162 of file surface.F90.
References model_grid::landmask_target_grid, missing, surface_target_data::seaice_fract_target_grid, model_grid::seamask_target_grid, surface_target_data::z0_ice_target_grid, and surface_target_data::z0_water_target_grid.
Referenced by surface_driver().
subroutine, public surface::search_many | ( | integer, intent(in) | num_field, |
type(esmf_fieldbundle), intent(inout) | bundle_target, | ||
integer, intent(in) | tile, | ||
integer, dimension(num_field), intent(inout) | search_nums, | ||
integer, intent(in) | localpet, | ||
real(esmf_kind_r8), dimension(i_target,j_target), intent(inout), optional | latitude, | ||
real(esmf_kind_r8), dimension(i_target,j_target), intent(inout), optional | terrain_land, | ||
real(esmf_kind_r8), dimension(i_target,j_target), intent(inout), optional | soilt_climo, | ||
integer(esmf_kind_i8), dimension(i_target,j_target), intent(inout), optional | mask | ||
) |
Execute the search function for multple fields.
[in] | num_field | Number of fields to process. |
[in,out] | bundle_target | ESMF FieldBundle holding target fields to search |
[in] | tile | Current cubed sphere tile. |
[in,out] | search_nums | Array length num_field holding search field numbers corresponding to each field provided for searching. |
[in] | localpet | ESMF local persistent execution thread. |
[in] | latitude | (optional) A real array size i_target,j_target of latitude on the target grid |
[in] | terrain_land | (optional) A real array size i_target,j_target of terrain height (m) on the target grid |
[in] | soilt_climo | (optional) A real array size i_target,j_target of climatological soil type on the target grid |
[in,out] | mask | (optional) An integer array of size i_target,j_target that holds masked (0) and unmasked (1) values indicating where to execute search (only at |
Definition at line 3602 of file surface.F90.
References program_setup::external_model, model_grid::i_target, program_setup::input_type, model_grid::j_target, model_grid::lsoil_target, and search_util::search().
Referenced by interp().
subroutine, public surface::surface_driver | ( | integer, intent(in) | localpet | ) |
Driver routine to process surface/nst data.
[in] | localpet | ESMF local persistent execution thread |
Definition at line 115 of file surface.F90.
References adjust_soil_levels(), adjust_soilt_for_terrain(), calc_liq_soil_moisture(), program_setup::calc_soil_params_driver(), cleanup_all_target_sfc_data(), static_data::cleanup_static_fields(), surface_target_data::cleanup_target_nst_data(), program_setup::convert_nst, create_nst_esmf_fields(), create_surface_esmf_fields(), static_data::get_static_fields(), interp(), nst_land_fill(), qc_check(), rescale_soil_moisture(), roughness(), and update_landmask().
Referenced by chgres().
subroutine surface::update_landmask | ( | ) |
Update landmask for sea ice.
The model requires the landmask record be present. However, the data is recomputed in FV3ATM routine fv3atm_sfc_io.F90 after it is read in. Here, compute it using the same algorithm as the model and output it as a diagnostic.
Definition at line 3362 of file surface.F90.
References model_grid::land_frac_target_grid, model_grid::landmask_target_grid, and surface_target_data::seaice_fract_target_grid.
Referenced by surface_driver().
|
private |
soil 'b' parameter limit
Definition at line 73 of file surface.F90.
Referenced by calc_liq_soil_moisture(), and frh2o().
|
private |
melting pt water
Definition at line 75 of file surface.F90.
Referenced by calc_liq_soil_moisture(), and frh2o().
|
private |
melting pt sea ice
Definition at line 77 of file surface.F90.
Referenced by nst_land_fill(), and qc_check().
|
private |
gravity
Definition at line 79 of file surface.F90.
Referenced by calc_liq_soil_moisture(), and frh2o().
|
private |
latent heat of fusion
Definition at line 81 of file surface.F90.
Referenced by calc_liq_soil_moisture(), and frh2o().
|
private |
flag for non-active points.
Definition at line 84 of file surface.F90.
Referenced by qc_check(), and roughness().
|
private |
soil type interpolated from input grid
Definition at line 63 of file surface.F90.
Referenced by cleanup_all_target_sfc_data(), create_surface_esmf_fields(), interp(), and rescale_soil_moisture().
|
private |
terrain height interpolated from input grid
Definition at line 66 of file surface.F90.
Referenced by adjust_soilt_for_terrain(), cleanup_all_target_sfc_data(), create_surface_esmf_fields(), and interp().
|
private |
terrain height interpolated from input grid at all land points
Definition at line 69 of file surface.F90.
Referenced by cleanup_all_target_sfc_data(), and interp().
|
private |
Vegetation type category that defines permanent land ice points.
The Noah LSM land ice physics are applied at these points.
Definition at line 57 of file surface.F90.
Referenced by adjust_soilt_for_terrain(), calc_liq_soil_moisture(), interp(), qc_check(), and rescale_soil_moisture().