From 53ad7eb5f3c63e8ff46a749b9d0b128e87947ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F=20=D0=A1?= =?UTF-8?q?=D1=83=D1=8F=D0=B7=D0=BE=D0=B2=D0=B0?= <viktoriasuazova@MacBook-Pro-Viktoria.local> Date: Thu, 12 Dec 2024 19:27:09 +0300 Subject: [PATCH] added ice surface type --- srcF/sfx_config.f90 | 4 ++-- srcF/sfx_esm.f90 | 4 ++-- srcF/sfx_log.f90 | 4 ++-- srcF/sfx_most.f90 | 4 ++-- srcF/sfx_most_snow.f90 | 4 ++-- srcF/sfx_sheba.f90 | 4 ++-- srcF/sfx_surface.f90 | 26 ++++++++++++++++++++------ 7 files changed, 32 insertions(+), 18 deletions(-) diff --git a/srcF/sfx_config.f90 b/srcF/sfx_config.f90 index 3700639..b2a2620 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 f696c5f..b26813e 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 8131c5c..6a51cf3 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 97cf97c..968693e 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 6bae4ba..cc7d250 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 4e51cb8..ad61fd9 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 7e0b659..8f4ebe6 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 -- GitLab