Skip to content

Commit 886f6ea

Browse files
committed
Adding support for tunable parameter z_displace
1 parent 8d32312 commit 886f6ea

File tree

4 files changed

+42
-33
lines changed

4 files changed

+42
-33
lines changed

advance_clubb_core_module.F90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ subroutine advance_clubb_core ( gr, nz, ngrdcol, & ! intent(in)
223223
iSkw_max_mag, &
224224
iup2_sfc_coef, &
225225
ia3_coef_min, &
226-
ibv_efold
226+
ibv_efold, &
227+
iz_displace
227228

228229
use parameters_tunable, only: &
229230
nu_vertical_res_dep ! Type(s)
@@ -820,8 +821,7 @@ subroutine advance_clubb_core ( gr, nz, ngrdcol, & ! intent(in)
820821

821822

822823
real( kind = core_rknd ), parameter :: &
823-
ufmin = 0.01_core_rknd, & ! minimum value of friction velocity [m/s]
824-
z_displace = 25.0_core_rknd ! displacement of log law profile above ground [m]
824+
ufmin = 0.01_core_rknd ! minimum value of friction velocity [m/s]
825825

826826
real( kind = core_rknd ), dimension(ngrdcol) :: &
827827
Lscale_max ! Max. allowable mixing length (based on grid box size) [m]
@@ -1578,7 +1578,7 @@ subroutine advance_clubb_core ( gr, nz, ngrdcol, & ! intent(in)
15781578
rtm, thlm, thvm, & ! In
15791579
rcm, ice_supersat_frac, & ! In
15801580
em, sqrt_em_zt, & ! In
1581-
ufmin, z_displace, tau_const, & ! In
1581+
ufmin, clubb_params(iz_displace), tau_const, & ! In
15821582
sfc_elevation, Lscale_max, & ! In
15831583
clubb_params, & ! In
15841584
clubb_config_flags%l_e3sm_config, & ! In

clubb_api_module.F90

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ module clubb_api_module
162162
iRichardson_num_min, iRichardson_num_max, iwpxp_Ri_exp, &
163163
ia3_coef_min, ia_const, iCx_min, iCx_max, ibv_efold, iC_wp2_pr_dfsn, &
164164
ixp3_coef_slope, ixp3_coef_base, iC_wp3_pr_tp, iC_invrs_tau_wpxp_N2_thresh, &
165-
iC_invrs_tau_wpxp_Ri
165+
iC_invrs_tau_wpxp_Ri, iz_displace
166166

167167

168168
use pdf_parameter_module, only : &
@@ -285,7 +285,7 @@ module clubb_api_module
285285
iRichardson_num_min, iRichardson_num_max, iwpxp_Ri_exp, &
286286
ia3_coef_min, ia_const, iCx_min, iCx_max, ibv_efold, iC_wp2_pr_dfsn, &
287287
ixp3_coef_slope, ixp3_coef_base, iC_wp3_pr_tp, iC_invrs_tau_wpxp_N2_thresh, &
288-
iC_invrs_tau_wpxp_Ri
288+
iC_invrs_tau_wpxp_Ri, iz_displace
289289

290290

291291

@@ -2375,7 +2375,7 @@ subroutine read_parameters_api( iunit, filename, &
23752375
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
23762376
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
23772377
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
2378-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, &
2378+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, &
23792379
params )
23802380

23812381
use parameters_tunable, only : read_parameters
@@ -2413,7 +2413,7 @@ subroutine read_parameters_api( iunit, filename, &
24132413
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
24142414
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
24152415
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
2416-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
2416+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
24172417

24182418
! Output variables
24192419
real( kind = core_rknd ), intent(out), dimension(nparams) :: params
@@ -2442,7 +2442,7 @@ subroutine read_parameters_api( iunit, filename, &
24422442
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
24432443
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
24442444
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
2445-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, &
2445+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, &
24462446
params ) ! intent(out)
24472447

24482448
end subroutine read_parameters_api
@@ -4262,7 +4262,7 @@ subroutine set_default_parameters_api( &
42624262
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
42634263
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
42644264
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
4265-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold )
4265+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
42664266

42674267
use parameters_tunable, only: &
42684268
set_default_parameters ! Procedure(s)
@@ -4292,7 +4292,7 @@ subroutine set_default_parameters_api( &
42924292
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
42934293
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
42944294
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
4295-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
4295+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
42964296

42974297
call set_default_parameters( &
42984298
C1, C1b, C1c, C2rt, C2thl, C2rtthl, &
@@ -4318,7 +4318,7 @@ subroutine set_default_parameters_api( &
43184318
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
43194319
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
43204320
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
4321-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold )
4321+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
43224322

43234323
return
43244324

parameter_indices.F90

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module parameter_indices
2626
private ! Default Scope
2727

2828
integer, parameter, public :: &
29-
nparams = 101 ! Total tunable parameters
29+
nparams = 102 ! Total tunable parameters
3030

3131
!***************************************************************
3232
! ***** IMPORTANT *****
@@ -143,7 +143,8 @@ module parameter_indices
143143
ia3_coef_min = 98, &
144144
ia_const = 99, &
145145
ibv_efold = 100,&
146-
iwpxp_Ri_exp = 101
146+
iwpxp_Ri_exp = 101,&
147+
iz_displace = 102
147148

148149
end module parameter_indices
149150
!-----------------------------------------------------------------------

parameters_tunable.F90

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ module parameters_tunable
112112
"Cx_max ", "Richardson_num_min ", &
113113
"Richardson_num_max ", "a3_coef_min ", &
114114
"a_const ", "bv_efold ", &
115-
"wpxp_Ri_exp "/)
115+
"wpxp_Ri_exp ", "z_displace "/)
116116

117117
real( kind = core_rknd ), parameter, private :: &
118118
init_value = -999._core_rknd ! Initial value for the parameters, used to detect missing values
@@ -145,7 +145,7 @@ subroutine set_default_parameters( &
145145
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
146146
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
147147
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
148-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold )
148+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
149149

150150
implicit none
151151

@@ -172,7 +172,7 @@ subroutine set_default_parameters( &
172172
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
173173
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
174174
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
175-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
175+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
176176

177177

178178
! NOTE: In CLUBB standalone, as well as some host models, the hardcoded
@@ -355,6 +355,7 @@ subroutine set_default_parameters( &
355355
! cloud fraction in the mixed Brunt Vaisala frequency
356356
wpxp_Ri_exp = .5_core_rknd ! Exponent determining the influence of
357357
! the Richardson number on invrs_tau_wpxp
358+
z_displace = 25.0_core_rknd
358359

359360
return
360361

@@ -470,7 +471,7 @@ subroutine setup_parameters( &
470471
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
471472
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
472473
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
473-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
474+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
474475

475476
!-------------------- Begin code --------------------
476477

@@ -518,7 +519,7 @@ subroutine setup_parameters( &
518519
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, & ! intent(out)
519520
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, & ! intent(out)
520521
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, & ! intent(out)
521-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold ) ! intent(out)
522+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace ) ! intent(out)
522523

523524

524525
! It was decided after some experimentation, that the best
@@ -944,7 +945,7 @@ subroutine read_parameters( iunit, filename, &
944945
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
945946
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
946947
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
947-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, &
948+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, &
948949
params )
949950

950951
! Description:
@@ -985,7 +986,7 @@ subroutine read_parameters( iunit, filename, &
985986
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
986987
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
987988
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
988-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
989+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
989990

990991
! Output variables
991992
real( kind = core_rknd ), intent(out), dimension(nparams) :: params
@@ -1021,7 +1022,7 @@ subroutine read_parameters( iunit, filename, &
10211022
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
10221023
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
10231024
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
1024-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
1025+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
10251026

10261027
! ---- Begin Code ----
10271028

@@ -1063,7 +1064,7 @@ subroutine read_parameters( iunit, filename, &
10631064
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, & ! intent(in)
10641065
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, & ! intent(in)
10651066
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, & ! intent(in)
1066-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, & ! intent(in)
1067+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, & ! intent(in)
10671068
params ) ! intent(out)
10681069

10691070
! l_error = .false.
@@ -1205,7 +1206,8 @@ subroutine read_param_minmax &
12051206
ia3_coef_min, &
12061207
ia_const, &
12071208
ibv_efold, &
1208-
iwpxp_Ri_exp
1209+
iwpxp_Ri_exp, &
1210+
iz_displace
12091211

12101212
implicit none
12111213

@@ -1255,7 +1257,7 @@ subroutine read_param_minmax &
12551257
C_invrs_tau_N2_xp2_minmax, C_invrs_tau_N2_wpxp_minmax, C_invrs_tau_N2_clear_wp3_minmax, &
12561258
C_invrs_tau_wpxp_Ri_minmax, C_invrs_tau_wpxp_N2_thresh_minmax, Cx_min_minmax, &
12571259
Cx_max_minmax, Richardson_num_min_minmax, Richardson_num_max_minmax, &
1258-
wpxp_Ri_exp_minmax, a3_coef_min_minmax, a_const_minmax, bv_efold_minmax
1260+
wpxp_Ri_exp_minmax, a3_coef_min_minmax, a_const_minmax, bv_efold_minmax, z_displace_minmax
12591261

12601262
namelist /init_minmax/ &
12611263
C1_minmax, C1b_minmax, C1c_minmax, C2rt_minmax, C2thl_minmax, C2rtthl_minmax, C4_minmax, &
@@ -1281,7 +1283,7 @@ subroutine read_param_minmax &
12811283
C_invrs_tau_N2_xp2_minmax, C_invrs_tau_N2_wpxp_minmax, C_invrs_tau_N2_clear_wp3_minmax, &
12821284
C_invrs_tau_wpxp_Ri_minmax, C_invrs_tau_wpxp_N2_thresh_minmax, Cx_min_minmax, &
12831285
Cx_max_minmax, Richardson_num_min_minmax, Richardson_num_max_minmax, a3_coef_min_minmax, &
1284-
a_const_minmax, bv_efold_minmax, wpxp_Ri_exp_minmax
1286+
a_const_minmax, bv_efold_minmax, z_displace_minmax, wpxp_Ri_exp_minmax
12851287

12861288

12871289
! ----- Begin code -------------
@@ -1393,6 +1395,7 @@ subroutine read_param_minmax &
13931395
params_minmax(:,ia_const) = a_const_minmax
13941396
params_minmax(:,ibv_efold) = bv_efold_minmax
13951397
params_minmax(:,iwpxp_Ri_exp) = wpxp_Ri_exp_minmax
1398+
params_minmax(:,iz_displace) = z_displace_minmax
13961399

13971400
! Error checks: if a minimum value is entered, it must have a
13981401
! corresponding maximum value of greater value; the min and max values
@@ -1560,7 +1563,7 @@ subroutine pack_parameters &
15601563
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
15611564
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
15621565
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
1563-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, params )
1566+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace, params )
15641567

15651568
! Description:
15661569
! Takes the list of scalar variables and puts them into a 1D vector.
@@ -1676,7 +1679,8 @@ subroutine pack_parameters &
16761679
ia3_coef_min, &
16771680
ia_const, &
16781681
ibv_efold, &
1679-
iwpxp_Ri_exp
1682+
iwpxp_Ri_exp, &
1683+
iz_displace
16801684

16811685
implicit none
16821686

@@ -1703,7 +1707,7 @@ subroutine pack_parameters &
17031707
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
17041708
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
17051709
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
1706-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
1710+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
17071711

17081712
! Output variables
17091713
real( kind = core_rknd ), intent(out), dimension(nparams) :: params
@@ -1809,6 +1813,7 @@ subroutine pack_parameters &
18091813
params(ia_const) = a_const
18101814
params(ibv_efold) = bv_efold
18111815
params(iwpxp_Ri_exp) = wpxp_Ri_exp
1816+
params(iz_displace) = z_displace
18121817

18131818

18141819
return
@@ -1840,7 +1845,7 @@ subroutine unpack_parameters &
18401845
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
18411846
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
18421847
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
1843-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold )
1848+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
18441849

18451850
! Description:
18461851
! Takes the 1D vector and returns the list of scalar variables.
@@ -1957,6 +1962,7 @@ subroutine unpack_parameters &
19571962
ia_const, &
19581963
ibv_efold, &
19591964
iwpxp_Ri_exp, &
1965+
iz_displace, &
19601966
nparams
19611967

19621968
implicit none
@@ -1987,7 +1993,7 @@ subroutine unpack_parameters &
19871993
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
19881994
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
19891995
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
1990-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
1996+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
19911997

19921998
C1 = params(iC1)
19931999
C1b = params(iC1b)
@@ -2103,6 +2109,7 @@ subroutine unpack_parameters &
21032109
a_const = params(ia_const)
21042110
bv_efold = params(ibv_efold)
21052111
wpxp_Ri_exp = params(iwpxp_Ri_exp)
2112+
z_displace = params(iz_displace)
21062113

21072114
return
21082115
end subroutine unpack_parameters
@@ -2132,7 +2139,7 @@ subroutine init_parameters_999( &
21322139
C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
21332140
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
21342141
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
2135-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold )
2142+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace )
21362143

21372144
! Description:
21382145
! Set all tunable parameters to NaN
@@ -2166,7 +2173,7 @@ subroutine init_parameters_999( &
21662173
C_invrs_tau_N2_xp2, C_invrs_tau_N2_wpxp, C_invrs_tau_N2_clear_wp3, &
21672174
C_invrs_tau_wpxp_Ri, C_invrs_tau_wpxp_N2_thresh, &
21682175
Cx_min, Cx_max, Richardson_num_min, Richardson_num_max, &
2169-
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold
2176+
wpxp_Ri_exp, a3_coef_min, a_const, bv_efold, z_displace
21702177

21712178
! --- Begin Code ---
21722179

@@ -2271,6 +2278,7 @@ subroutine init_parameters_999( &
22712278
a_const = init_value
22722279
bv_efold = init_value
22732280
wpxp_Ri_exp = init_value
2281+
z_displace = init_value
22742282
return
22752283

22762284
end subroutine init_parameters_999

0 commit comments

Comments
 (0)