Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/AGRIF_DEMO/EXPREF/namelist_cfg
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/AGRIF_DEMO/EXPREF/namelist_cfg (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/AGRIF_DEMO/EXPREF/namelist_cfg (revision 11587)
@@ -108,4 +108,5 @@
sn_snow = 'ncar_precip.15JUNE2009_fill', -1. , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
sn_slp = 'slp.15JUNE2009_fill' , 6. , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
+ sn_tdif = 'taudif_core' , 24. , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
/
!-----------------------------------------------------------------------
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/C1D_PAPA/EXPREF/namelist_cfg
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/C1D_PAPA/EXPREF/namelist_cfg (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/C1D_PAPA/EXPREF/namelist_cfg (revision 11587)
@@ -159,4 +159,6 @@
sn_snow = 'forcing_C1D_PAPA' , 3. , 'sososnow', .false. , .false. , 'yearly' , '' , '' , ''
sn_slp = 'forcing_C1D_PAPA' , 3. , 'somslpre', .true. , .false. , 'yearly' , '' , '' , ''
+ sn_tdif = 'forcing_C1D_PAPA' , 24. , 'taudif' , .false. , .false. , 'yearly' , '' , '' , ''
+
/
!-----------------------------------------------------------------------
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_cfg
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_cfg (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_cfg (revision 11587)
@@ -118,4 +118,5 @@
sn_snow = 'ncar_precip.15JUNE2009_fill', -1. , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
sn_slp = 'slp.15JUNE2009_fill' , 6. , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
+ sn_tdif = 'taudif_core' , 24. , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
/
!-----------------------------------------------------------------------
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_SAS_ICE/EXPREF/namelist_cfg
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_SAS_ICE/EXPREF/namelist_cfg (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_SAS_ICE/EXPREF/namelist_cfg (revision 11587)
@@ -58,11 +58,6 @@
!-----------------------------------------------------------------------
nn_fsbc = 1 ! frequency of SBC module call
- ! (also = the frequency of sea-ice & iceberg model call)
- ! Type of air-sea fluxes
ln_blk = .true. ! Bulk formulation (T => fill namsbc_blk )
- ln_abl = .false. ! ABL formulation (T => fill namsbc_abl )
- ! Sea-ice :
- nn_ice = 2 ! =2 or 3 automatically for SI3 or CICE ("key_si3" or "key_cice")
- ! except in AGRIF zoom where it has to be specified
+ nn_ice = 2 ! =2 sea-ice model ("key_SI3" or "key_cice")
/
!-----------------------------------------------------------------------
@@ -84,4 +79,5 @@
sn_snow = 'ncar_precip.15JUNE2009_fill', -1. , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
sn_slp = 'slp.15JUNE2009_fill' , 6. , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
+ sn_tdif = 'taudif_core' , 24. , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''
/
!-----------------------------------------------------------------------
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-ice.xml
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-ice.xml (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-ice.xml (revision 11587)
@@ -258,4 +258,5 @@
+
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-oce.xml
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-oce.xml (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-oce.xml (revision 11587)
@@ -8,5 +8,5 @@
============================================================================================================
-->
-
+
@@ -33,5 +33,5 @@
- sst * sst
+ sst * sst
@@ -45,5 +45,5 @@
- sss * sss
+ sss * sss
@@ -54,5 +54,5 @@
- ssh * ssh
+ ssh * ssh
@@ -237,5 +237,4 @@
-
@@ -301,4 +300,5 @@
+
@@ -454,5 +454,4 @@
vtau * ssv
-
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SPITZ12/EXPREF/namelist_cfg
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SPITZ12/EXPREF/namelist_cfg (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SPITZ12/EXPREF/namelist_cfg (revision 11587)
@@ -107,4 +107,5 @@
sn_snow = 'MARv3.6-9km-Svalbard-2hourly_spitz' , 2. , 'snow' , .true. , .false. , 'yearly' , 'weights_bilin', '' , ''
sn_slp = 'MARv3.6-9km-Svalbard-2hourly_spitz' , 2. , 'slp' , .true. , .false. , 'yearly' , 'weights_bilin', '' , ''
+ sn_tdif = 'MARv3.6-9km-Svalbard-2hourly_spitz' , 2. , 'tdif' , .true. , .false. , 'yearly' , 'weights_bilin', '' , ''
/
!-----------------------------------------------------------------------
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SPITZ12/EXPREF/namelist_ice_cfg
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SPITZ12/EXPREF/namelist_ice_cfg (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SPITZ12/EXPREF/namelist_ice_cfg (revision 11587)
@@ -103,4 +103,3 @@
&namdia ! Diagnostics
!------------------------------------------------------------------------------
- ln_icediachk = .true. ! check online the heat, mass & salt budgets (T) or not (F)
/
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icedyn_rdgrft.F90
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icedyn_rdgrft.F90 (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icedyn_rdgrft.F90 (revision 11587)
@@ -278,4 +278,5 @@
! controls
IF( ln_ctl ) CALL ice_prt3D ('icedyn_rdgrft') ! prints
+ IF( ln_icectl ) CALL ice_prt (kt, iiceprt, jiceprt,-1, ' - ice dyn rdgrft - ') ! prints
IF( ln_icediachk ) CALL ice_cons_hsm(1, 'icedyn_rdgrft', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation
IF( ln_icediachk ) CALL ice_cons2D (1, 'icedyn_rdgrft', diag_v, diag_s, diag_t, diag_fv, diag_fs, diag_ft) ! conservation
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icesbc.F90
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icesbc.F90 (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icesbc.F90 (revision 11587)
@@ -165,5 +165,5 @@
ALLOCATE( zalb(jpi,jpj), zmsk00(jpi,jpj) )
- WHERE( at_i_b <= epsi06 )
+ WHERE( at_i_b < 1.e-03 )
zmsk00(:,:) = 0._wp
zalb (:,:) = rn_alb_oce
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icevar.F90
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icevar.F90 (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icevar.F90 (revision 11587)
@@ -868,19 +868,8 @@
!! ** Purpose : converting 1-cat ice to jpl ice categories
!!
- !! ice thickness distribution follows a gaussian law
- !! around the concentration of the most likely ice thickness
- !! (similar as iceistate.F90)
- !!
- !! ** Method: Iterative procedure
- !!
- !! 1) Try to fill the jpl ice categories (bounds hi_max(0:jpl)) with a gaussian
- !!
- !! 2) Check whether the distribution conserves area and volume, positivity and
- !! category boundaries
+ !!
+ !! ** Method: ice thickness distribution follows a gamma function from Abraham et al. (2015)
+ !! it has the property of conserving total concentration and volume
!!
- !! 3) If not (input ice is too thin), the last category is empty and
- !! the number of categories is reduced (jpl-1)
- !!
- !! 4) Iterate until ok (SUM(itest(:) = 4)
!!
!! ** Arguments : phti: 1-cat ice thickness
@@ -890,5 +879,7 @@
!! ** Output : jpl-cat
!!
- !! (Example of application: BDY forcings when input are cell averaged)
+ !! Abraham, C., Steiner, N., Monahan, A. and Michel, C., 2015.
+ !! Effects of subgridâscale snow thickness variability on radiative transfer in sea ice.
+ !! Journal of Geophysical Research: Oceans, 120(8), pp.5597-5614
!!-------------------------------------------------------------------
REAL(wp), DIMENSION(:), INTENT(in) :: phti, phts, pati ! input ice/snow variables
@@ -897,16 +888,10 @@
REAL(wp), DIMENSION(:,:), INTENT(inout) :: pt_i, pt_s, pt_su, ps_i, pa_ip, ph_ip ! output ice/snow temp & sal & ponds
!
- INTEGER , DIMENSION(4) :: itest
- REAL(wp), ALLOCATABLE, DIMENSION(:) :: zfra
+ REAL(wp), ALLOCATABLE, DIMENSION(:) :: zfra, z1_hti
INTEGER :: ji, jk, jl
- INTEGER :: idim, i_fill, jl0
- REAL(wp) :: zarg, zV, zconv, zdh, zdv
- !!-------------------------------------------------------------------
- !
- ! == thickness and concentration == !
- ! distribution over the jpl ice categories
- ! a gaussian distribution for ice concentration is used
- ! then we check whether the distribution fullfills
- ! volume and area conservation, positivity and ice categories bounds
+ INTEGER :: idim
+ REAL(wp) :: zv, zdh
+ !!-------------------------------------------------------------------
+ !
idim = SIZE( phti , 1 )
!
@@ -915,89 +900,62 @@
pa_i(1:idim,1:jpl) = 0._wp
!
+ ALLOCATE( z1_hti(idim) )
+ WHERE( phti(:) /= 0._wp ) ; z1_hti(:) = 1._wp / phti(:)
+ ELSEWHERE ; z1_hti(:) = 0._wp
+ END WHERE
+ !
+ ! == thickness and concentration == !
+ ! for categories 1:jpl-1, integrate the gamma function from hi_max(jl-1) to hi_max(jl)
+ DO jl = 1, jpl-1
+ DO ji = 1, idim
+ !
+ IF( phti(ji) > 0._wp ) THEN
+ ! concentration : integrate ((4A/H^2)xexp(-2x/H))dx from x=hi_max(jl-1) to hi_max(jl)
+ pa_i(ji,jl) = pati(ji) * z1_hti(ji) * ( ( phti(ji) + 2.*hi_max(jl-1) ) * EXP( -2.*hi_max(jl-1)*z1_hti(ji) ) &
+ & - ( phti(ji) + 2.*hi_max(jl ) ) * EXP( -2.*hi_max(jl )*z1_hti(ji) ) )
+ !
+ ! volume : integrate ((4A/H^2)x^2exp(-2x/H))dx from x=hi_max(jl-1) to hi_max(jl)
+ zv = pati(ji) * z1_hti(ji) * ( ( phti(ji)*phti(ji) + 2.*phti(ji)*hi_max(jl-1) + 2.*hi_max(jl-1)*hi_max(jl-1) ) &
+ & * EXP( -2.*hi_max(jl-1)*z1_hti(ji) ) &
+ & - ( phti(ji)*phti(ji) + 2.*phti(ji)*hi_max(jl) + 2.*hi_max(jl)*hi_max(jl) ) &
+ & * EXP(-2.*hi_max(jl)*z1_hti(ji)) )
+ ! thickness
+ IF( pa_i(ji,jl) > epsi06 ) THEN
+ ph_i(ji,jl) = zv / pa_i(ji,jl)
+ ELSE
+ ph_i(ji,jl) = 0.
+ pa_i(ji,jl) = 0.
+ ENDIF
+ ENDIF
+ !
+ ENDDO
+ ENDDO
+ !
+ ! for the last category (jpl), integrate the gamma function from hi_max(jpl-1) to infinity
DO ji = 1, idim
!
IF( phti(ji) > 0._wp ) THEN
- !
- ! find which category (jl0) the input ice thickness falls into
- jl0 = jpl
- DO jl = 1, jpl
- IF ( ( phti(ji) >= hi_max(jl-1) ) .AND. ( phti(ji) < hi_max(jl) ) ) THEN
- jl0 = jl
- CYCLE
- ENDIF
- END DO
- !
- itest(:) = 0
- i_fill = jpl + 1 !------------------------------------
- DO WHILE ( ( SUM( itest(:) ) /= 4 ) .AND. ( i_fill >= 2 ) ) ! iterative loop on i_fill categories
- ! !------------------------------------
- i_fill = i_fill - 1
- !
- ph_i(ji,1:jpl) = 0._wp
- pa_i(ji,1:jpl) = 0._wp
- itest(:) = 0
- !
- IF ( i_fill == 1 ) THEN !-- case very thin ice: fill only category 1
- ph_i(ji,1) = phti(ji)
- pa_i(ji,1) = pati (ji)
- ELSE !-- case ice is thicker: fill categories >1
- ! thickness
- DO jl = 1, i_fill - 1
- ph_i(ji,jl) = hi_mean(jl)
- END DO
- !
- ! concentration
- pa_i(ji,jl0) = pati(ji) / SQRT(REAL(jpl))
- DO jl = 1, i_fill - 1
- IF ( jl /= jl0 ) THEN
- zarg = ( ph_i(ji,jl) - phti(ji) ) / ( phti(ji) * 0.5_wp )
- pa_i(ji,jl) = pa_i (ji,jl0) * EXP(-zarg**2)
- ENDIF
- END DO
- !
- ! last category
- pa_i(ji,i_fill) = pati(ji) - SUM( pa_i(ji,1:i_fill-1) )
- zV = SUM( pa_i(ji,1:i_fill-1) * ph_i(ji,1:i_fill-1) )
- ph_i(ji,i_fill) = ( phti(ji) * pati(ji) - zV ) / MAX( pa_i(ji,i_fill), epsi10 )
- !
- ! correction if concentration of upper cat is greater than lower cat
- ! (it should be a gaussian around jl0 but sometimes it is not)
- IF ( jl0 /= jpl ) THEN
- DO jl = jpl, jl0+1, -1
- IF ( pa_i(ji,jl) > pa_i(ji,jl-1) ) THEN
- zdv = ph_i(ji,jl) * pa_i(ji,jl)
- ph_i(ji,jl ) = 0._wp
- pa_i (ji,jl ) = 0._wp
- pa_i (ji,1:jl-1) = pa_i(ji,1:jl-1) + zdv / MAX( REAL(jl-1) * phti(ji), epsi10 )
- END IF
- END DO
- ENDIF
- !
- ENDIF
- !
- ! Compatibility tests
- zconv = ABS( pati(ji) - SUM( pa_i(ji,1:jpl) ) )
- IF ( zconv < epsi06 ) itest(1) = 1 ! Test 1: area conservation
- !
- zconv = ABS( phti(ji)*pati(ji) - SUM( pa_i(ji,1:jpl)*ph_i(ji,1:jpl) ) )
- IF ( zconv < epsi06 ) itest(2) = 1 ! Test 2: volume conservation
- !
- IF ( ph_i(ji,i_fill) >= hi_max(i_fill-1) ) itest(3) = 1 ! Test 3: thickness of the last category is in-bounds ?
- !
- itest(4) = 1
- DO jl = 1, i_fill
- IF ( pa_i(ji,jl) < 0._wp ) itest(4) = 0 ! Test 4: positivity of ice concentrations
- END DO
- ! !----------------------------
- END DO ! end iteration on categories
- ! !----------------------------
+ ! concentration : integrate ((4A/H^2)xexp(-2x/H))dx from x=hi_max(jpl-1) to infinity
+ pa_i(ji,jpl) = pati(ji) * z1_hti(ji) * ( phti(ji) + 2.*hi_max(jpl-1) ) * EXP( -2.*hi_max(jpl-1)*z1_hti(ji) )
+
+ ! volume : integrate ((4A/H^2)x^2exp(-2x/H))dx from x=hi_max(jpl-1) to infinity
+ zv = pati(ji) * z1_hti(ji) * ( phti(ji)*phti(ji) + 2.*phti(ji)*hi_max(jpl-1) + 2.*hi_max(jpl-1)*hi_max(jpl-1) ) &
+ & * EXP( -2.*hi_max(jpl-1)*z1_hti(ji) )
+ ! thickness
+ IF( pa_i(ji,jpl) > epsi06 ) THEN
+ ph_i(ji,jpl) = zv / pa_i(ji,jpl)
+ else
+ ph_i(ji,jpl) = 0.
+ pa_i(ji,jpl) = 0.
+ ENDIF
ENDIF
- END DO
-
+ !
+ ENDDO
+ !
! Add Snow in each category where pa_i is not 0
DO jl = 1, jpl
DO ji = 1, idim
IF( pa_i(ji,jl) > 0._wp ) THEN
- ph_s(ji,jl) = ph_i(ji,jl) * ( phts(ji) / phti(ji) )
+ ph_s(ji,jl) = ph_i(ji,jl) * phts(ji) * z1_hti(ji)
! In case snow load is in excess that would lead to transformation from snow to ice
! Then, transfer the snow excess into the ice (different from icethd_dh)
@@ -1009,4 +967,6 @@
END DO
END DO
+ !
+ DEALLOCATE( z1_hti )
!
! == temperature and salinity == !
Index: /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icewri.F90
===================================================================
--- /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icewri.F90 (revision 11586)
+++ /NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icewri.F90 (revision 11587)
@@ -164,4 +164,5 @@
IF( iom_use('icehpnd_cat' ) ) CALL iom_put( 'icehpnd_cat' , h_ip * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! melt pond frac for categories
IF( iom_use('iceafpnd_cat') ) CALL iom_put( 'iceafpnd_cat', a_ip_frac * zmsk00l ) ! melt pond frac for categories
+ IF( iom_use('icealb_cat' ) ) CALL iom_put( 'icealb_cat' , alb_ice * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! ice albedo for categories
!------------------