diff --git a/srcF/sfx_config.f90 b/srcF/sfx_config.f90 index 37006392c33de03254dded73654e8cab5bd814f8..b2a26202b9e09e683f3d73ce471d8b5bb80cbcc7 100644 --- a/srcF/sfx_config.f90 +++ b/srcF/sfx_config.f90 @@ -167,8 +167,8 @@ contains dataset%filename = get_dataset_filename(id) dataset%nmax = 0 - dataset%surface = surface_lake - dataset%surface_type = surface_lake + dataset%surface = surface_ice + dataset%surface_type = surface_ice dataset%z0_h = -1.0 dataset%lai = 1.0 dataset%depth = 10.0 diff --git a/srcF/sfx_esm.f90 b/srcF/sfx_esm.f90 index f696c5fee0b55dccc70c037117161f883bba1fa2..b26813ec836688529a2dc55a05cd3d9da46d451a 100644 --- a/srcF/sfx_esm.f90 +++ b/srcF/sfx_esm.f90 @@ -243,13 +243,13 @@ contains !write (*,*) surface_type, 'esm' call get_dynamic_roughness_definition(surface_type, ocean_z0m_id, land_z0m_id, lake_z0m_id, snow_z0m_id, & - forest_z0m_id, usersf_z0m_id, z0m_id) + forest_z0m_id, usersf_z0m_id, ice_z0m_id, z0m_id) call get_dynamic_roughness_all(z0_m, u_dyn0, U, depth, h, numerics%maxiters_charnock, z0_m1, z0m_id) call get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t_id, lake_z0t_id, snow_z0t_id, & - forest_z0t_id, usersf_z0t_id, z0t_id) + forest_z0t_id, usersf_z0t_id, ice_z0t_id, z0t_id) Re = u_dyn0 * z0_m / nu_air diff --git a/srcF/sfx_log.f90 b/srcF/sfx_log.f90 index 8131c5ca960aa99cf88fe3925225d3e24cbc8ed8..6a51cf302b7c094316578dfa07f1541f689873eb 100644 --- a/srcF/sfx_log.f90 +++ b/srcF/sfx_log.f90 @@ -148,12 +148,12 @@ contains call get_dynamic_roughness_definition(surface_type, ocean_z0m_id, land_z0m_id, lake_z0m_id, snow_z0m_id, & - forest_z0m_id, usersf_z0m_id, z0m_id) + forest_z0m_id, usersf_z0m_id, ice_z0m_id, z0m_id) call get_dynamic_roughness_all(z0_m, u_dyn0, U, depth, h, numerics%maxiters_charnock, z0_m, z0m_id) call get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t_id, lake_z0t_id, snow_z0t_id, & - forest_z0t_id, usersf_z0t_id, z0t_id) + forest_z0t_id, usersf_z0t_id, ice_z0t_id, z0t_id) Re = u_dyn0 * z0_m / nu_air diff --git a/srcF/sfx_most.f90 b/srcF/sfx_most.f90 index 97cf97c0c45ae7bb066f864a5db6736995de6f30..968693eec0fe9c9bebbee1b6dc5f36e3610e7c28 100644 --- a/srcF/sfx_most.f90 +++ b/srcF/sfx_most.f90 @@ -150,12 +150,12 @@ contains surface_type=meteo%surface_type call get_dynamic_roughness_definition(surface_type, ocean_z0m_id, land_z0m_id, lake_z0m_id, snow_z0m_id, & - forest_z0m_id, usersf_z0m_id, z0m_id) + forest_z0m_id, usersf_z0m_id, ice_z0m_id, z0m_id) call get_dynamic_roughness_all(z0_m, u_dyn0, U, depth, h, numerics%maxiters_charnock, z0_m1, z0m_id) call get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t_id, lake_z0t_id, snow_z0t_id, & - forest_z0t_id, usersf_z0t_id, z0t_id) + forest_z0t_id, usersf_z0t_id, ice_z0t_id, z0t_id) Re = u_dyn0 * z0_m / nu_air diff --git a/srcF/sfx_most_snow.f90 b/srcF/sfx_most_snow.f90 index 6bae4bacea7b83f9c3fdf2c579d4b4549d28d603..cc7d250c6e5938fea6f1423d55893a7ae79d8ee9 100644 --- a/srcF/sfx_most_snow.f90 +++ b/srcF/sfx_most_snow.f90 @@ -166,12 +166,12 @@ contains call get_dynamic_roughness_definition(surface_type, ocean_z0m_id, land_z0m_id, lake_z0m_id, snow_z0m_id, & - forest_z0m_id, usersf_z0m_id, z0m_id) + forest_z0m_id, usersf_z0m_id, ice_z0m_id, z0m_id) call get_dynamic_roughness_all(z0_m, u_dyn0, U, depth, h, numerics%maxiters_charnock, z0_m1, z0m_id) call get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t_id, lake_z0t_id, snow_z0t_id, & - forest_z0t_id, usersf_z0t_id, z0t_id) + forest_z0t_id, usersf_z0t_id, ice_z0t_id, z0t_id) Re = u_dyn0 * z0_m / nu_air diff --git a/srcF/sfx_sheba.f90 b/srcF/sfx_sheba.f90 index 4e51cb8497d802c6b72368ef47e0b5b228f727ff..ad61fd94f10ca07683d9e6251dc5adebd75650ad 100644 --- a/srcF/sfx_sheba.f90 +++ b/srcF/sfx_sheba.f90 @@ -232,12 +232,12 @@ contains surface_type=meteo%surface_type call get_dynamic_roughness_definition(surface_type, ocean_z0m_id, land_z0m_id, lake_z0m_id, snow_z0m_id, & - forest_z0m_id, usersf_z0m_id, z0m_id) + forest_z0m_id, usersf_z0m_id, ice_z0m_id, z0m_id) call get_dynamic_roughness_all(z0_m, u_dyn0, U, depth, h, numerics%maxiters_charnock, z0_m, z0m_id) call get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t_id, lake_z0t_id, snow_z0t_id, & - forest_z0t_id, usersf_z0t_id, z0t_id) + forest_z0t_id, usersf_z0t_id, ice_z0t_id, z0t_id) Re = u_dyn0 * z0_m / nu_air diff --git a/srcF/sfx_surface.f90 b/srcF/sfx_surface.f90 index 7e0b659cb1023a864dd1e18a5fb734d51b431b6f..8f4ebe64f9a9b336499f3d419dfce0640efb98c5 100644 --- a/srcF/sfx_surface.f90 +++ b/srcF/sfx_surface.f90 @@ -34,8 +34,9 @@ module sfx_surface integer, public, parameter :: surface_land = 1 !< land surface integer, public, parameter :: surface_lake = 2 !< lake surface integer, public, parameter :: surface_snow = 3 !< snow covered surface - integer, public, parameter :: surface_forest = 4 !< snow covered surface - integer, public, parameter :: surface_user = 5 !< snow covered surface + integer, public, parameter :: surface_forest = 4 !< forest covered surface + integer, public, parameter :: surface_user = 5 !< coast covered surface + integer, public, parameter :: surface_ice = 6 !< ice covered surface character(len = 16), parameter :: surface_ocean_tag = 'ocean' character(len = 16), parameter :: surface_land_tag = 'land' @@ -43,6 +44,7 @@ module sfx_surface character(len = 16), parameter :: surface_snow_tag = 'snow' character(len = 16), parameter :: surface_forest_tag = 'forest' character(len = 16), parameter :: surface_user_tag = 'user' + character(len = 16), parameter :: surface_ice_tag = 'ice' integer, public, parameter :: z0m_ch = 0 @@ -92,9 +94,11 @@ module sfx_surface integer, public, parameter :: ocean_z0m_id = z0m_ch !< ocean surface integer, public, parameter :: land_z0m_id = z0m_map_id !< land surface integer, public, parameter :: lake_z0m_id = z0m_fe !< lake surface - integer, public, parameter :: snow_z0m_id = z0m_ow !< snow covered surface + integer, public, parameter :: snow_z0m_id = z0m_map_id !< snow covered surface integer, public, parameter :: forest_z0m_id = z0m_map_id !< forest csurface integer, public, parameter :: usersf_z0m_id = z0m_ch !< user surface + integer, public, parameter :: ice_z0m_id = z0m_ch !< ice surface + integer, public, parameter :: ocean_z0t_id = z0t_kl_water !< ocean surface integer, public, parameter :: land_z0t_id = z0t_mix !< land surface @@ -102,6 +106,7 @@ module sfx_surface integer, public, parameter :: snow_z0t_id = z0t_zi !< snow covered surface integer, public, parameter :: forest_z0t_id = z0t_ot !< forest csurface integer, public, parameter :: usersf_z0t_id = z0t_kl_water !< user surface + integer, public, parameter :: ice_z0t_id = z0t_zi !< user surface ! -------------------------------------------------------------------------------- real, parameter, private :: kappa = 0.40 !< von Karman constant [n/d] @@ -158,6 +163,8 @@ contains id = surface_forest else if (trim(tag) == trim(surface_user_tag)) then id = surface_user + else if (trim(tag) == trim(surface_ice_tag)) then + id = surface_ice end if end function @@ -180,6 +187,8 @@ contains tag = surface_forest_tag else if (id == surface_user) then tag = surface_user_tag + else if (id == surface_ice) then + tag = surface_ice_tag end if end function @@ -322,7 +331,7 @@ contains ! dynamic roughness definition ! -------------------------------------------------------------------------------- subroutine get_dynamic_roughness_definition(surface_type, ocean_z0m_id, land_z0m_id, lake_z0m_id, snow_z0m_id, & - forest_z0m_id, usersf_z0m_id, z0m_id) + forest_z0m_id, usersf_z0m_id, ice_z0m_id, z0m_id) ! ---------------------------------------------------------------------------- integer, intent(out) :: z0m_id @@ -334,7 +343,7 @@ contains integer, intent(in) :: snow_z0m_id integer, intent(in) :: forest_z0m_id integer, intent(in) :: usersf_z0m_id - + integer, intent(in) :: ice_z0m_id ! --------------------------------------------------------------------------- if (surface_type == surface_ocean) then @@ -349,6 +358,8 @@ contains z0m_id = forest_z0m_id else if (surface_type == surface_user) then z0m_id = usersf_z0m_id + else if (surface_type == surface_ice) then + z0m_id = ice_z0m_id end if !write (*,*) z0m_id, surface_type end subroutine @@ -390,7 +401,7 @@ end subroutine ! thermal roughness definition ! -------------------------------------------------------------------------------- subroutine get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t_id, lake_z0t_id, snow_z0t_id, & - forest_z0t_id, usersf_z0t_id, z0t_id) + forest_z0t_id, usersf_z0t_id, ice_z0t_id, z0t_id) ! ---------------------------------------------------------------------------- integer, intent(out) :: z0t_id @@ -402,6 +413,7 @@ subroutine get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t integer, intent(in) :: snow_z0t_id integer, intent(in) :: forest_z0t_id integer, intent(in) :: usersf_z0t_id + integer, intent(in) :: ice_z0t_id ! --------------------------------------------------------------------------- @@ -417,6 +429,8 @@ subroutine get_thermal_roughness_definition(surface_type, ocean_z0t_id, land_z0t z0t_id = forest_z0t_id else if (surface_type == surface_user) then z0t_id = usersf_z0t_id + else if (surface_type == surface_ice) then + z0t_id = ice_z0t_id end if end subroutine