Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
sfx
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
inmcm-mirror
sfx
Commits
1262b184
Commit
1262b184
authored
8 months ago
by
Evgeny Mortikov
Browse files
Options
Downloads
Patches
Plain Diff
adding surface thermal roughness module
parent
ce4630f3
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
CMakeLists.txt
+1
-0
1 addition, 0 deletions
CMakeLists.txt
srcF/sfx_surface.f90
+1
-0
1 addition, 0 deletions
srcF/sfx_surface.f90
srcF/sfx_thermal_roughness.f90
+141
-0
141 additions, 0 deletions
srcF/sfx_thermal_roughness.f90
with
143 additions
and
0 deletions
CMakeLists.txt
+
1
−
0
View file @
1262b184
...
@@ -69,6 +69,7 @@ set(SOURCES_F
...
@@ -69,6 +69,7 @@ set(SOURCES_F
srcF/sfx_run.f90
srcF/sfx_run.f90
srcF/sfx_phys_const.f90
srcF/sfx_phys_const.f90
srcF/sfx_surface.f90
srcF/sfx_surface.f90
srcF/sfx_thermal_roughness.f90
srcF/sfx_most.f90
srcF/sfx_most.f90
srcF/sfx_most_param.f90
srcF/sfx_most_param.f90
srcF/sfx_sheba.f90
srcF/sfx_sheba.f90
...
...
This diff is collapsed.
Click to expand it.
srcF/sfx_surface.f90
+
1
−
0
View file @
1262b184
...
@@ -132,6 +132,7 @@ contains
...
@@ -132,6 +132,7 @@ contains
surface_param
%
B_max_land
=
B_max_land
surface_param
%
B_max_land
=
B_max_land
end
subroutine
set_c_struct_sfx_surface_param_values
end
subroutine
set_c_struct_sfx_surface_param_values
#endif
#endif
! charnock roughness definition
! charnock roughness definition
! --------------------------------------------------------------------------------
! --------------------------------------------------------------------------------
subroutine
get_charnock_roughness
(
z0_m
,
u_dyn0
,
U
,
h
,
maxiters
)
subroutine
get_charnock_roughness
(
z0_m
,
u_dyn0
,
U
,
h
,
maxiters
)
...
...
This diff is collapsed.
Click to expand it.
srcF/sfx_thermal_roughness.f90
0 → 100644
+
141
−
0
View file @
1262b184
module
sfx_thermal_roughness
!< @brief surface thermal roughness parameterizations
! modules used
! --------------------------------------------------------------------------------
use
sfx_phys_const
use
sfx_surface
! --------------------------------------------------------------------------------
! directives list
! --------------------------------------------------------------------------------
implicit
none
! --------------------------------------------------------------------------------
! public interface
! --------------------------------------------------------------------------------
public
::
get_thermal_roughness_kl
public
::
get_thermal_roughness_cz
public
::
get_thermal_roughness_zi
public
::
get_thermal_roughness_ca
! --------------------------------------------------------------------------------
! --------------------------------------------------------------------------------
real
,
parameter
,
private
::
kappa
=
0.40
!< von Karman constant [n/d]
! --------------------------------------------------------------------------------
contains
! thermal roughness definition by (Kazakov, Lykosov)
! --------------------------------------------------------------------------------
subroutine
get_thermal_roughness_kl
(
z0_t
,
B
,
&
z0_m
,
Re
,
surface_type
)
! ----------------------------------------------------------------------------
real
,
intent
(
out
)
::
z0_t
!< thermal roughness [m]
real
,
intent
(
out
)
::
B
!< = log(z0_m / z0_t) [n/d]
real
,
intent
(
in
)
::
z0_m
!< aerodynamic roughness [m]
real
,
intent
(
in
)
::
Re
!< roughness Reynolds number [n/d]
integer
,
intent
(
in
)
::
surface_type
!< = [ocean] || [land] || [lake]
! ----------------------------------------------------------------------------
! --- local variables
! ----------------------------------------------------------------------------
!--- define B = log(z0_m / z0_t)
if
(
Re
<=
Re_rough_min
)
then
B
=
B1_rough
*
alog
(
B3_rough
*
Re
)
+
B2_rough
else
! *: B4 takes into account Re value at z' ~ O(10) z0
B
=
B4_rough
*
(
Re
**
B2_rough
)
end
if
! --- apply max restriction based on surface type
if
(
surface_type
==
surface_ocean
)
then
B
=
min
(
B
,
B_max_ocean
)
else
if
(
surface_type
==
surface_lake
)
then
B
=
min
(
B
,
B_max_lake
)
else
if
(
surface_type
==
surface_land
)
then
B
=
min
(
B
,
B_max_land
)
end
if
! --- define roughness [thermal]
z0_t
=
z0_m
/
exp
(
B
)
end
subroutine
! --------------------------------------------------------------------------------
! thermal roughness definition by (Chen, F., Zhang, Y., 2009)
! --------------------------------------------------------------------------------
subroutine
get_thermal_roughness_cz
(
z0_t
,
B
,
&
z0_m
,
Re
,
surface_type
)
! ----------------------------------------------------------------------------
real
,
intent
(
out
)
::
z0_t
!< thermal roughness [m]
real
,
intent
(
out
)
::
B
!< = log(z0_m / z0_t) [n/d]
real
,
intent
(
in
)
::
z0_m
!< aerodynamic roughness [m]
real
,
intent
(
in
)
::
Re
!< roughness Reynolds number [n/d]
integer
,
intent
(
in
)
::
surface_type
!< = [ocean] || [land] || [lake]
! --- local variables
! ----------------------------------------------------------------------------
!--- define B = log(z0_m / z0_t)
B
=
(
kappa
*
10.0
**
(
-0.4
*
z0_m
/
0.07
))
*
(
Re
**
0.45
)
! --- define roughness [thermal]
z0_t
=
z0_m
/
exp
(
B
)
end
subroutine
! --------------------------------------------------------------------------------
! thermal roughness definition by (Zilitinkevich, S., 1995)
! --------------------------------------------------------------------------------
subroutine
get_thermal_roughness_zi
(
z0_t
,
B
,
&
z0_m
,
Re
,
surface_type
)
! ----------------------------------------------------------------------------
real
,
intent
(
out
)
::
z0_t
!< thermal roughness [m]
real
,
intent
(
out
)
::
B
!< = log(z0_m / z0_t) [n/d]
real
,
intent
(
in
)
::
z0_m
!< aerodynamic roughness [m]
real
,
intent
(
in
)
::
Re
!< roughness Reynolds number [n/d]
integer
,
intent
(
in
)
::
surface_type
!< = [ocean] || [land] || [lake]
! --- local variables
! ----------------------------------------------------------------------------
!--- define B = log(z0_m / z0_t)
B
=
0.1
*
kappa
*
(
Re
**
0.5
)
! --- define roughness [thermal]
z0_t
=
z0_m
/
exp
(
B
)
end
subroutine
! --------------------------------------------------------------------------------
! thermal roughness definition by (Cahill, A.T., Parlange, M.B., Albertson, J.D., 1997)
! --------------------------------------------------------------------------------
subroutine
get_thermal_roughness_ca
(
z0_t
,
B
,
&
z0_m
,
Re
,
surface_type
)
! ----------------------------------------------------------------------------
real
,
intent
(
out
)
::
z0_t
!< thermal roughness [m]
real
,
intent
(
out
)
::
B
!< = log(z0_m / z0_t) [n/d]
real
,
intent
(
in
)
::
z0_m
!< aerodynamic roughness [m]
real
,
intent
(
in
)
::
Re
!< roughness Reynolds number [n/d]
integer
,
intent
(
in
)
::
surface_type
!< = [ocean] || [land] || [lake]
! --- local variables
! ----------------------------------------------------------------------------
!--- define B = log(z0_m / z0_t)
B
=
2.46
*
(
Re
**
0.25
)
-
3.8
! --- define roughness [thermal]
z0_t
=
z0_m
/
exp
(
B
)
end
subroutine
! --------------------------------------------------------------------------------
end
module
sfx_thermal_roughness
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment