chgres_cube
1.5.0
|
Process surface and nst fields. More...
Public Member Functions | |
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, public | cleanup_target_nst_data |
Free up memory once the target grid nst fields are no longer needed. More... | |
subroutine, public | cleanup_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 before output. 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 land and sea ice. More... | |
subroutine, public | surface_driver (localpet) |
Driver routine to process surface/nst data. More... | |
Data Fields | |
type(esmf_field), public | c_0_target_grid |
Coefficient 1 to calculate d(tz)/d(ts) More... | |
type(esmf_field), public | c_d_target_grid |
Coefficient 2 to calculate d(tz)/d(ts) More... | |
type(esmf_field), public | canopy_mc_target_grid |
canopy moisture content More... | |
type(esmf_field), public | d_conv_target_grid |
Thickness of free convection layer. More... | |
type(esmf_field), public | dt_cool_target_grid |
Sub-layer cooling amount. More... | |
type(esmf_field), public | f10m_target_grid |
log((z0+10)*1/z0) See sfc_diff.f for details More... | |
type(esmf_field), public | ffmm_target_grid |
log((z0+z1)*1/z0) See sfc_diff.f for details More... | |
type(esmf_field), public | ifd_target_grid |
Model mode index. More... | |
type(esmf_field), public | lai_target_grid |
leaf area index More... | |
type(esmf_field), public | q2m_target_grid |
2-m specific humidity More... | |
type(esmf_field), public | qrain_target_grid |
Sensible heat flux due to rainfall. More... | |
type(esmf_field), public | seaice_depth_target_grid |
sea ice depth More... | |
type(esmf_field), public | seaice_fract_target_grid |
sea ice fraction More... | |
type(esmf_field), public | seaice_skin_temp_target_grid |
sea ice skin temperature More... | |
type(esmf_field), public | skin_temp_target_grid |
skin temperature/sst More... | |
type(esmf_field), public | snow_depth_target_grid |
physical snow depth More... | |
type(esmf_field), public | snow_liq_equiv_target_grid |
liquid equiv snow depth More... | |
type(esmf_field), public | soil_temp_target_grid |
3-d soil temperature More... | |
type(esmf_field), public | soilm_liq_target_grid |
3-d liquid soil moisture More... | |
type(esmf_field), public | soilm_tot_target_grid |
3-d total soil moisture More... | |
type(esmf_field), public | srflag_target_grid |
snow/rain flag More... | |
type(esmf_field), public | t2m_target_grid |
2-m temperatrure More... | |
type(esmf_field), public | tprcp_target_grid |
precip More... | |
type(esmf_field), public | tref_target_grid |
reference temperature More... | |
type(esmf_field), public | ustar_target_grid |
friction velocity More... | |
type(esmf_field), public | w_0_target_grid |
Coefficient 3 to calculate d(tz)/d(ts) More... | |
type(esmf_field), public | w_d_target_grid |
Coefficient 4 to calculate d(tz)/d(ts) More... | |
type(esmf_field), public | xs_target_grid |
Salinity content in diurnal thermocline layer. More... | |
type(esmf_field), public | xt_target_grid |
Heat content in diurnal thermocline layer. More... | |
type(esmf_field), public | xtts_target_grid |
d(xt)/d(ts) More... | |
type(esmf_field), public | xu_target_grid |
u-current content in diurnal thermocline layer More... | |
type(esmf_field), public | xv_target_grid |
v-current content in diurnal thermocline layer More... | |
type(esmf_field), public | xz_target_grid |
Diurnal thermocline layer thickness. More... | |
type(esmf_field), public | xzts_target_grid |
d(xz)/d(ts) More... | |
type(esmf_field), public | z0_target_grid |
roughness length More... | |
type(esmf_field), public | z_c_target_grid |
Sub-layer cooling thickness. More... | |
type(esmf_field), public | zm_target_grid |
Oceanic mixed layer depth. More... | |
Private Attributes | |
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... | |
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.
Definition at line 21 of file surface.F90.
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 3083 of file surface.F90.
References error_handler().
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 3007 of file surface.F90.
References error_handler().
Referenced by surface_driver().
subroutine surface::calc_liq_soil_moisture | ( | ) |
Compute liquid portion of the total soil moisture.
Definition at line 2557 of file surface.F90.
References error_handler(), and frh2o().
Referenced by surface_driver().
subroutine, public surface::cleanup_target_nst_data | ( | ) |
Free up memory once the target grid nst fields are no longer needed.
Definition at line 4236 of file surface.F90.
Referenced by surface_driver().
subroutine, public surface::cleanup_target_sfc_data | ( | ) |
Free up memory once the target grid surface fields are no longer needed.
Definition at line 4199 of file surface.F90.
Referenced by surface_driver().
subroutine, public surface::create_nst_esmf_fields | ( | ) |
Create ESMF fields for the target grid nst variables.
Definition at line 4008 of file surface.F90.
References error_handler().
Referenced by surface_driver().
subroutine, public surface::create_surface_esmf_fields | ( | ) |
Create ESMF fields for the target grid surface variables.
Definition at line 3671 of file surface.F90.
References error_handler().
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 2701 of file surface.F90.
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 4170 of file surface.F90.
Referenced by interp().
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 293 of file surface.F90.
References error_handler(), ij_to_i_j(), and search_util::search().
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 3588 of file surface.F90.
References error_handler().
Referenced by surface_driver().
subroutine surface::qc_check | ( | ) |
Perform some quality control checks before output.
Definition at line 3253 of file surface.F90.
References error_handler().
Referenced by surface_driver().
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 2839 of file surface.F90.
References error_handler().
Referenced by surface_driver().
subroutine surface::roughness | ( | ) |
Set roughness length at land and sea ice.
At land, roughness is set from a lookup table based on the vegetation type. At sea ice, roughness is set to 1 cm.
Definition at line 3199 of file surface.F90.
References error_handler().
Referenced by surface_driver().
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 156 of file surface.F90.
References adjust_soil_levels(), adjust_soilt_for_terrain(), calc_liq_soil_moisture(), program_setup::calc_soil_params_driver(), input_data::cleanup_input_nst_data(), input_data::cleanup_input_sfc_data(), static_data::cleanup_static_fields(), cleanup_target_nst_data(), cleanup_target_sfc_data(), create_nst_esmf_fields(), create_surface_esmf_fields(), static_data::get_static_fields(), interp(), nst_land_fill(), qc_check(), input_data::read_input_nst_data(), input_data::read_input_sfc_data(), rescale_soil_moisture(), roughness(), and write_fv3_sfc_data_netcdf().
Referenced by chgres().
|
private |
soil 'b' parameter limit
Definition at line 130 of file surface.F90.
type(esmf_field), public surface::c_0_target_grid |
Coefficient 1 to calculate d(tz)/d(ts)
Definition at line 80 of file surface.F90.
type(esmf_field), public surface::c_d_target_grid |
Coefficient 2 to calculate d(tz)/d(ts)
Definition at line 78 of file surface.F90.
type(esmf_field), public surface::canopy_mc_target_grid |
canopy moisture content
Definition at line 36 of file surface.F90.
type(esmf_field), public surface::d_conv_target_grid |
Thickness of free convection layer.
Definition at line 82 of file surface.F90.
type(esmf_field), public surface::dt_cool_target_grid |
Sub-layer cooling amount.
Definition at line 84 of file surface.F90.
type(esmf_field), public surface::f10m_target_grid |
log((z0+10)*1/z0) See sfc_diff.f for details
Definition at line 38 of file surface.F90.
type(esmf_field), public surface::ffmm_target_grid |
log((z0+z1)*1/z0) See sfc_diff.f for details
Definition at line 41 of file surface.F90.
|
private |
melting pt water
Definition at line 132 of file surface.F90.
|
private |
melting pt sea ice
Definition at line 134 of file surface.F90.
|
private |
gravity
Definition at line 136 of file surface.F90.
|
private |
latent heat of fusion
Definition at line 138 of file surface.F90.
type(esmf_field), public surface::ifd_target_grid |
Model mode index.
0-diurnal model not started; 1-diurnal model started.
Definition at line 86 of file surface.F90.
type(esmf_field), public surface::lai_target_grid |
leaf area index
Definition at line 74 of file surface.F90.
type(esmf_field), public surface::q2m_target_grid |
2-m specific humidity
Definition at line 44 of file surface.F90.
type(esmf_field), public surface::qrain_target_grid |
Sensible heat flux due to rainfall.
Definition at line 89 of file surface.F90.
type(esmf_field), public surface::seaice_depth_target_grid |
sea ice depth
Definition at line 46 of file surface.F90.
type(esmf_field), public surface::seaice_fract_target_grid |
sea ice fraction
Definition at line 48 of file surface.F90.
type(esmf_field), public surface::seaice_skin_temp_target_grid |
sea ice skin temperature
Definition at line 50 of file surface.F90.
type(esmf_field), public surface::skin_temp_target_grid |
skin temperature/sst
Definition at line 52 of file surface.F90.
type(esmf_field), public surface::snow_depth_target_grid |
physical snow depth
Definition at line 58 of file surface.F90.
type(esmf_field), public surface::snow_liq_equiv_target_grid |
liquid equiv snow depth
Definition at line 56 of file surface.F90.
type(esmf_field), public surface::soil_temp_target_grid |
3-d soil temperature
Definition at line 60 of file surface.F90.
|
private |
soil type interpolated from input grid
Definition at line 120 of file surface.F90.
type(esmf_field), public surface::soilm_liq_target_grid |
3-d liquid soil moisture
Definition at line 62 of file surface.F90.
type(esmf_field), public surface::soilm_tot_target_grid |
3-d total soil moisture
Definition at line 64 of file surface.F90.
type(esmf_field), public surface::srflag_target_grid |
snow/rain flag
Definition at line 54 of file surface.F90.
type(esmf_field), public surface::t2m_target_grid |
2-m temperatrure
Definition at line 66 of file surface.F90.
|
private |
terrain height interpolated from input grid
Definition at line 123 of file surface.F90.
|
private |
terrain height interpolated from input grid at all land points
Definition at line 126 of file surface.F90.
type(esmf_field), public surface::tprcp_target_grid |
precip
Definition at line 68 of file surface.F90.
type(esmf_field), public surface::tref_target_grid |
reference temperature
Definition at line 91 of file surface.F90.
type(esmf_field), public surface::ustar_target_grid |
friction velocity
Definition at line 70 of file surface.F90.
|
private |
Vegetation type category that defines permanent land ice points.
The Noah LSM land ice physics are applied at these points.
Definition at line 29 of file surface.F90.
type(esmf_field), public surface::w_0_target_grid |
Coefficient 3 to calculate d(tz)/d(ts)
Definition at line 95 of file surface.F90.
type(esmf_field), public surface::w_d_target_grid |
Coefficient 4 to calculate d(tz)/d(ts)
Definition at line 93 of file surface.F90.
type(esmf_field), public surface::xs_target_grid |
Salinity content in diurnal thermocline layer.
Definition at line 97 of file surface.F90.
type(esmf_field), public surface::xt_target_grid |
Heat content in diurnal thermocline layer.
Definition at line 100 of file surface.F90.
type(esmf_field), public surface::xtts_target_grid |
d(xt)/d(ts)
Definition at line 111 of file surface.F90.
type(esmf_field), public surface::xu_target_grid |
u-current content in diurnal thermocline layer
Definition at line 103 of file surface.F90.
type(esmf_field), public surface::xv_target_grid |
v-current content in diurnal thermocline layer
Definition at line 106 of file surface.F90.
type(esmf_field), public surface::xz_target_grid |
Diurnal thermocline layer thickness.
Definition at line 109 of file surface.F90.
type(esmf_field), public surface::xzts_target_grid |
d(xz)/d(ts)
Definition at line 113 of file surface.F90.
type(esmf_field), public surface::z0_target_grid |
roughness length
Definition at line 72 of file surface.F90.
type(esmf_field), public surface::z_c_target_grid |
Sub-layer cooling thickness.
Definition at line 115 of file surface.F90.
type(esmf_field), public surface::zm_target_grid |
Oceanic mixed layer depth.
Definition at line 117 of file surface.F90.