New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
sbcblk_algo_ice_cdn.F90 in NEMO/trunk/src/OCE/SBC – NEMO

source: NEMO/trunk/src/OCE/SBC/sbcblk_algo_ice_cdn.F90

Last change on this file was 15079, checked in by clem, 3 years ago

trunk was not repro with variable air-ice bulk transfer coefficients (ln_Cx_ice_LU12 & ln_Cx_ice_LG15)

File size: 14.5 KB
Line 
1! AeroBulk / 2020 / L. Brodeau
2!
3!   When using AeroBulk to produce scientific work, please acknowledge with the following citation:
4!
5!   Brodeau, L., B. Barnier, S. Gulev, and C. Woods, 2016: Climatologically
6!   significant effects of some approximations in the bulk parameterizations of
7!   turbulent air-sea fluxes. J. Phys. Oceanogr., doi:10.1175/JPO-D-16-0169.1.
8!
9!
10MODULE sbcblk_algo_ice_cdn
11   !!====================================================================================
12   !!            Author: Laurent Brodeau, January 2020
13   !!====================================================================================
14   USE par_kind, ONLY: wp
15   USE par_oce,  ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls, ntsi, ntsj, ntei, ntej
16   USE phycst          ! physical constants
17   USE sbc_phy         ! Catalog of functions for physical/meteorological parameters in the marine boundary layer
18
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC :: CdN10_f_LU12, CdN_f_LU12_eq36, CdN10_f_LU13, CdN_f_LG15, CdN_f_LG15_light
23
24   REAL(wp), PARAMETER :: rCe_0    = 2.23E-3_wp !LOLO: this one can be more accurate when sea-ice data => Lupkes et al (2013), Eq.(1)
25   REAL(wp), PARAMETER :: rNu_0    = 1._wp
26   REAL(wp), PARAMETER :: rMu_0    = 1._wp
27   REAL(wp), PARAMETER :: rbeta_0  = 1.4_wp     ! (Eq.47) MIZ
28
29   REAL(wp), PARAMETER :: rhmin_0 = 0.286_wp  ! Eq.(25)
30   REAL(wp), PARAMETER :: rhmax_0 = 0.534_wp  ! Eq.(25)
31   REAL(wp), PARAMETER :: rDmin_0 =   8._wp      ! Eq.(27)
32   REAL(wp), PARAMETER :: rDmax_0 = 300._wp      ! Eq.(27)
33   REAL(wp), PARAMETER :: rz0_w_0 = 3.27E-4   ! fixed roughness length over water (paragraph below Eq.36)
34
35   !!============================================================
36   REAL(wp), PARAMETER ::   rce10_i_0 = 3.46e-3_wp ! (Eq.48) MIZ
37   REAL(wp), PARAMETER ::   ralpha_0  = 0.2_wp     ! (Eq.12) (ECHAM6 value)
38
39   !! * Substitutions
40#  include "do_loop_substitute.h90"
41   !!----------------------------------------------------------------------
42CONTAINS
43
44
45   FUNCTION CdN10_f_LU12( pfrice, pz0w,  pSc, phf, pDi  )
46      !!----------------------------------------------------------------------
47      !!                      ***  ROUTINE  CdN10_f_LU12  ***
48      !!
49      !!        GENERAL FORM OF EQUATION 22 of Lupkes et al. 2012
50      !!        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51      !!
52      !! ** Purpose :    Computes the "form" contribution of the neutral air-ice
53      !!                 drag referenced at 10m to make it dependent on edges at
54      !!                 leads, melt ponds and flows (to be added to the "skin"
55      !!                 contribution. After some
56      !!                 approximations, this can be resumed to a dependency on
57      !!                 ice concentration.
58      !!
59      !! ** References : Lupkes et al. JGR 2012 (theory)
60      !!
61      !!----------------------------------------------------------------------
62      REAL(wp), DIMENSION(jpi,jpj)                       ::   CdN10_f_LU12  ! neutral FORM drag coefficient contribution over sea-ice
63      REAL(wp), DIMENSION(jpi,jpj), INTENT(in)           ::   pfrice ! ice concentration [fraction]  => at_i_b  ! NOT USED if pSc, phf and pDi all provided...
64      REAL(wp), DIMENSION(jpi,jpj), INTENT(in)           ::   pz0w   ! roughness length over water  [m]
65      REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL ::   pSc    ! shletering function [0-1] (Sc->1 for large distance between floes, ->0 for small distances)
66      REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL ::   phf    ! mean freeboard of floes    [m]
67      REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL ::   pDi    ! cross wind dimension of the floe (aka effective edge length for form drag)   [m]
68      !!----------------------------------------------------------------------
69      LOGICAL  ::   l_known_Sc=.FALSE., l_known_hf=.FALSE., l_known_Di=.FALSE.
70      REAL(wp) ::   ztmp, zrlog, zfri, zfrw, zSc, zhf, zDi
71      INTEGER  ::   ji, jj
72      !!----------------------------------------------------------------------
73      l_known_Sc    = PRESENT(pSc)
74      l_known_hf    = PRESENT(phf)
75      l_known_Di    = PRESENT(pDi)
76
77      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
78           
79         zfri = pfrice(ji,jj)
80         zfrw = (1._wp - zfri)
81         
82         IF(l_known_Sc) THEN
83            zSc = pSc(ji,jj)
84         ELSE
85            !! Sc parameterized in terms of A (ice fraction):
86            zSc = zfrw**(1._wp / ( 10._wp * rBeta_0 ))   ! Eq.(31)
87         END IF
88         
89         IF(l_known_hf) THEN
90            zhf = phf(ji,jj)
91         ELSE
92            !! hf parameterized in terms of A (ice fraction):
93            zhf = rhmax_0*zfri + rhmin_0*zfrw  ! Eq.(25)
94         END IF
95         
96         IF(l_known_Di) THEN
97            zDi = pDi(ji,jj)
98         ELSE
99            !! Di parameterized in terms of A (ice fraction):
100            ztmp = 1._wp / ( 1._wp - (rDmin_0/rDmax_0)**(1._wp/rBeta_0) )   ! A* Eq.(27)
101            zDi =  rDmin_0 * ( ztmp/(ztmp - zfri) )**rBeta_0                !    Eq.(26)
102         END IF
103         
104         ztmp  = 1._wp/pz0w(ji,jj)
105         zrlog = LOG(zhf*ztmp) / LOG(10._wp*ztmp)
106
107         CdN10_f_LU12(ji,jj) = 0.5_wp* 0.3_wp * zrlog*zrlog * zSc*zSc * zhf/zDi * zfri  ! Eq.(22)
108         !!                    1/2      Ce
109
110      END_2D
111   END FUNCTION CdN10_f_LU12
112
113   
114   FUNCTION CdN_f_LU12_eq36( pzu, pfrice )
115      !!----------------------------------------------------------------------
116      REAL(wp), DIMENSION(jpi,jpj)             ::   CdN_f_LU12_eq36 ! neutral FORM drag coefficient contribution over sea-ice
117      REAL(wp),                     INTENT(in) ::   pzu    ! reference height                       [m]
118      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pfrice ! ice concentration [fraction]  => at_i_b  ! NOT USED if pSc, phf and pDi all provided...
119      !!----------------------------------------------------------------------
120      REAL(wp) :: ztmp, zrlog, zfri, zhf, zDi
121      INTEGER  :: ji, jj
122      !!----------------------------------------------------------------------
123      !zhf   = 0.28   ! h_fc
124      zhf   = 0.41   ! h_fc
125      zDi   = rDmin_0
126
127      ztmp  = 1._wp/rz0_w_0
128      zrlog = LOG(zhf*ztmp) / LOG(pzu*ztmp)
129
130      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
131         zfri = pfrice(ji,jj)
132         CdN_f_LU12_eq36(ji,jj) = 0.5_wp* 0.3_wp * zrlog*zrlog * zhf/zDi  * (1._wp - zfri)**rBeta_0 ! Eq.(35) & (36)
133         !!                       1/2      Ce
134      END_2D
135   END FUNCTION CdN_f_LU12_eq36
136
137
138   FUNCTION CdN10_f_LU13( pfrice )
139      !!----------------------------------------------------------------------
140      !!                      ***  ROUTINE  CdN10_f_LU13  ***
141      !!
142      !! ** Purpose :    Computes the "form" contribution of the neutral air-ice
143      !!                 drag referenced at 10m to make it dependent on edges at
144      !!                 leads, melt ponds and flows (to be added to the "skin"
145      !!                 contribution. After some
146      !!                 approximations, this can be resumed to a dependency on
147      !!                 ice concentration.
148      !!
149      !! ** Method :     The parameterization is taken from Lupkes et al. (2012) eq.(50)
150      !!                 with the highest level of approximation: level4, eq.(59)
151      !!                 The generic drag over a cell partly covered by ice can be re-written as follows:
152      !!
153      !!                 Cd = Cdw * (1-A) + Cdi * A + Ce * (1-A)**(nu+1/(10*beta)) * A**mu
154      !!
155      !!                    Ce = 2.23e-3       , as suggested by Lupkes (eq. 59)
156      !!                    nu = mu = beta = 1 , as suggested by Lupkes (eq. 59)
157      !!                    A is the concentration of ice minus melt ponds (if any)
158      !!
159      !!                 This new drag has a parabolic shape (as a function of A) starting at
160      !!                 Cdw(say 1.5e-3) for A=0, reaching 1.97e-3 for A~0.5
161      !!                 and going down to Cdi(say 1.4e-3) for A=1
162      !!
163      !!                 It is theoretically applicable to all ice conditions (not only MIZ)
164      !!                 => see Lupkes et al (2013)
165      !!
166      !! ** References : Lupkes et al. JGR 2012 (theory)
167      !!                 Lupkes et al. GRL 2013 (application to GCM)
168      !!
169      !!----------------------------------------------------------------------
170      REAL(wp), DIMENSION(jpi,jpj)              ::   CdN10_f_LU13  ! neutral FORM drag coefficient contribution over sea-ice
171      REAL(wp), DIMENSION(jpi,jpj), INTENT(in)  ::   pfrice           ! ice concentration [fraction]  => at_i_b
172      !!----------------------------------------------------------------------
173      INTEGER  ::   ji, jj
174      REAL(wp) ::   zcoef
175      !!----------------------------------------------------------------------
176      zcoef = rNu_0 + 1._wp / ( 10._wp * rBeta_0 )
177
178      !! We are not an AGCM, we are an OGCM!!! => we drop term "(1 - A)*Cd_w"
179      !!  => so we keep only the last rhs terms of Eq.(1) of Lupkes et al, 2013 that we divide by "A":
180      !! (we multiply Cd_i_s and Cd_i_f by A later, when applying ocean-ice partitioning...
181      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
182         CdN10_f_LU13(ji,jj) = rCe_0 * pfrice(ji,jj)**(rMu_0 - 1._wp) * (1._wp - pfrice(ji,jj))**zcoef
183      END_2D
184      !! => seems okay for winter 100% sea-ice as second rhs term vanishes as pfrice == 1....
185
186   END FUNCTION CdN10_f_LU13
187
188
189   FUNCTION CdN_f_LG15( pzu, pfrice, pz0i,  pSc, phf, pDi  )
190      !!----------------------------------------------------------------------
191      !!                      ***  ROUTINE  CdN_f_LG15  ***
192      !!
193      !!        GENERAL FORM OF EQUATION 21 of Lupkes & Gryanik (2015)
194      !!        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
195      !!
196      !! ** Purpose :    Computes the "form" contribution of the neutral air-ice
197      !!                 drag referenced at 10m to make it dependent on edges at
198      !!                 leads, melt ponds and flows (to be added to the "skin"
199      !!                 contribution. After some
200      !!                 approximations, this can be resumed to a dependency on
201      !!                 ice concentration.
202      !!
203      !! ** References : Lupkes & Gryanik (2015)
204      !!
205      !!----------------------------------------------------------------------
206      REAL(wp), DIMENSION(jpi,jpj)                       ::   CdN_f_LG15  ! neutral FORM drag coefficient contribution over sea-ice
207      REAL(wp),                     INTENT(in )          ::   pzu    ! reference height                       [m]
208      REAL(wp), DIMENSION(jpi,jpj), INTENT(in)           ::   pfrice ! ice concentration [fraction]  => at_i_b  ! NOT USED if pSc, phf and pDi all provided...
209      REAL(wp), DIMENSION(jpi,jpj), INTENT(in)           ::   pz0i   ! roughness length over ICE  [m] (in LU12, it's over water ???)
210      REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL ::   pSc    ! shletering function [0-1] (Sc->1 for large distance between floes, ->0 for small distances)
211      REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL ::   phf    ! mean freeboard of floes    [m]
212      REAL(wp), DIMENSION(jpi,jpj), INTENT(in), OPTIONAL ::   pDi    ! cross wind dimension of the floe (aka effective edge length for form drag)   [m]
213      !!----------------------------------------------------------------------
214      LOGICAL  ::   l_known_Sc=.FALSE., l_known_hf=.FALSE., l_known_Di=.FALSE.
215      REAL(wp) ::   ztmp, zrlog, zfri, zfrw, zSc, zhf, zDi
216      INTEGER  ::   ji, jj
217      !!----------------------------------------------------------------------
218      l_known_Sc    = PRESENT(pSc)
219      l_known_hf    = PRESENT(phf)
220      l_known_Di    = PRESENT(pDi)
221
222      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
223
224         zfri = pfrice(ji,jj)
225         zfrw = (1._wp - zfri)
226         
227         IF(l_known_Sc) THEN
228            zSc = pSc(ji,jj)
229         ELSE
230            !! Sc parameterized in terms of A (ice fraction):
231            zSc = zfrw**(1._wp / ( 10._wp * rBeta_0 ))   ! Eq.(31)
232         END IF
233         
234         IF(l_known_hf) THEN
235            zhf = phf(ji,jj)
236         ELSE
237            !! hf parameterized in terms of A (ice fraction):
238            zhf = rhmax_0*zfri + rhmin_0*zfrw  ! Eq.(25)
239         END IF
240         
241         IF(l_known_Di) THEN
242            zDi = pDi(ji,jj)
243         ELSE
244            !! Di parameterized in terms of A (ice fraction):
245            ztmp = 1._wp / ( 1._wp - (rDmin_0/rDmax_0)**(1._wp/rBeta_0) )   ! A* Eq.(27)
246            zDi =  rDmin_0 * ( ztmp/(ztmp - zfri) )**rBeta_0                !    Eq.(26)
247         END IF
248         
249         ztmp  = 1._wp/pz0i(ji,jj)
250         zrlog = LOG(zhf*ztmp/2.718_wp) / LOG(pzu*ztmp)  !LOLO: adding number "e" !!!
251         
252         CdN_f_LG15(ji,jj) = 0.5_wp* 0.4_wp * zrlog*zrlog * zSc*zSc * zhf/zDi * zfri  ! Eq.(21) Lukes & Gryanik (2015)
253         !!                   1/2      Ce
254         
255      END_2D
256   END FUNCTION CdN_f_LG15
257
258
259   FUNCTION CdN_f_LG15_light( pzu, pfrice, pz0w )
260      !!----------------------------------------------------------------------
261      !!                      ***  ROUTINE  CdN_f_LG15_light  ***
262      !!
263      !! ** Purpose :    Computes the "form" contribution of the neutral air-ice
264      !!                 drag referenced at 10m to make it dependent on edges at
265      !!                 leads, melt ponds and flows (to be added to the "skin"
266      !!                 contribution. After some
267      !!                 approximations, this can be resumed to a dependency on
268      !!                 ice concentration.
269      !!
270      !! ** References : Lupkes & Gryanik (2015)
271      !!
272      !!----------------------------------------------------------------------
273      REAL(wp), DIMENSION(jpi,jpj)             ::   CdN_f_LG15_light  ! neutral FORM drag coefficient contribution over sea-ice
274      REAL(wp),                     INTENT(in) ::   pzu    ! reference height [m]
275      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pfrice ! ice concentration [fraction]  => at_i_b
276      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pz0w   ! roughness length over water  [m]
277      !!----------------------------------------------------------------------
278      REAL(wp) ::   ztmp, zrlog, zfri
279      INTEGER  ::   ji, jj
280      !!----------------------------------------------------------------------
281      DO_2D( nn_hls, nn_hls, nn_hls, nn_hls )
282
283         zfri = pfrice(ji,jj)
284         
285         ztmp = 1._wp / pz0w(ji,jj)
286         zrlog = LOG( 10._wp * ztmp ) / LOG( pzu * ztmp ) ! part of (Eq.46)
287         
288         CdN_f_LG15_light(ji,jj) = rce10_i_0 *zrlog*zrlog * zfri * (1._wp - zfri)**rbeta_0  ! (Eq.46)  [ index 1 is for ice, 2 for water ]
289
290      END_2D
291   END FUNCTION CdN_f_LG15_light
292
293
294   !!======================================================================
295END MODULE sbcblk_algo_ice_cdn
Note: See TracBrowser for help on using the repository browser.