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