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.
Changeset 14072 for NEMO/trunk/src/ICE/ice.F90 – NEMO

Ignore:
Timestamp:
2020-12-04T08:48:38+01:00 (3 years ago)
Author:
laurent
Message:

Merging branch "2020/dev_r13648_ASINTER-04_laurent_bulk_ice", ticket #2369

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/ICE/ice.F90

    r14006 r14072  
    6464   !! sv_i        |      -      |    Sea ice salt content         | pss.m | 
    6565   !! oa_i        |      -      |    Sea ice areal age content    | s     | 
    66    !! e_i         |             |    Ice enthalpy                 | J/m2  |  
    67    !!             |    e_i_1d   |    Ice enthalpy per unit vol.   | J/m3  |  
    68    !! e_s         |             |    Snow enthalpy                | J/m2  |  
    69    !!             |    e_s_1d   |    Snow enthalpy per unit vol.  | J/m3  |  
     66   !! e_i         |             |    Ice enthalpy                 | J/m2  | 
     67   !!             |    e_i_1d   |    Ice enthalpy per unit vol.   | J/m3  | 
     68   !! e_s         |             |    Snow enthalpy                | J/m2  | 
     69   !!             |    e_s_1d   |    Snow enthalpy per unit vol.  | J/m3  | 
    7070   !! a_ip        |      -      |    Ice pond concentration       |       | 
    7171   !! v_ip        |      -      |    Ice pond volume per unit area| m     | 
     
    108108   !! tm_i        |      -      |    Mean sea ice temperature     | K     | 
    109109   !! tm_s        |      -      |    Mean snow    temperature     | K     | 
    110    !! et_i        |      -      |    Total ice enthalpy           | J/m2  |  
    111    !! et_s        |      -      |    Total snow enthalpy          | J/m2  |  
    112    !! bv_i        |      -      |    relative brine volume        | ???   |  
     110   !! et_i        |      -      |    Total ice enthalpy           | J/m2  | 
     111   !! et_s        |      -      |    Total snow enthalpy          | J/m2  | 
     112   !! bv_i        |      -      |    relative brine volume        | ???   | 
    113113   !! at_ip       |      -      |    Total ice pond concentration |       | 
    114114   !! hm_ip       |      -      |    Mean ice pond depth          | m     | 
     
    122122   !!---------------------------------------------------------------------- 
    123123   !                                     !!** ice-generic parameters namelist (nampar) ** 
    124    INTEGER           , PUBLIC ::   jpl              !: number of ice  categories  
    125    INTEGER           , PUBLIC ::   nlay_i           !: number of ice  layers  
    126    INTEGER           , PUBLIC ::   nlay_s           !: number of snow layers  
     124   INTEGER           , PUBLIC ::   jpl              !: number of ice  categories 
     125   INTEGER           , PUBLIC ::   nlay_i           !: number of ice  layers 
     126   INTEGER           , PUBLIC ::   nlay_s           !: number of snow layers 
    127127   LOGICAL           , PUBLIC ::   ln_virtual_itd   !: virtual ITD mono-category parameterization (T) or not (F) 
    128128   LOGICAL           , PUBLIC ::   ln_icedyn        !: flag for ice dynamics (T) or not (F) 
     
    137137   !                                     !!** ice-itd namelist (namitd) ** 
    138138   REAL(wp), PUBLIC ::   rn_himin         !: minimum ice thickness 
    139     
     139 
    140140   !                                     !!** ice-dynamics namelist (namdyn) ** 
    141141   REAL(wp), PUBLIC ::   rn_ishlat        !: lateral boundary condition for sea-ice 
    142    LOGICAL , PUBLIC ::   ln_landfast_L16  !: landfast ice parameterizationfrom lemieux2016  
     142   LOGICAL , PUBLIC ::   ln_landfast_L16  !: landfast ice parameterizationfrom lemieux2016 
    143143   REAL(wp), PUBLIC ::   rn_lf_depfra     !:    fraction of ocean depth that ice must reach to initiate landfast ice 
    144    REAL(wp), PUBLIC ::   rn_lf_bfr        !:    maximum bottom stress per unit area of contact (lemieux2016) or per unit volume (home)  
     144   REAL(wp), PUBLIC ::   rn_lf_bfr        !:    maximum bottom stress per unit area of contact (lemieux2016) or per unit volume (home) 
    145145   REAL(wp), PUBLIC ::   rn_lf_relax      !:    relaxation time scale (s-1) to reach static friction 
    146146   REAL(wp), PUBLIC ::   rn_lf_tensile    !:    isotropic tensile strength 
     
    153153   LOGICAL , PUBLIC ::   ln_rhg_EVP       ! EVP rheology switch, used for rdgrft and rheology 
    154154   LOGICAL , PUBLIC ::   ln_rhg_EAP       ! EAP rheology switch, used for rdgrft and rheology 
    155    LOGICAL , PUBLIC ::   ln_aEVP          !: using adaptive EVP (T or F)  
     155   LOGICAL , PUBLIC ::   ln_aEVP          !: using adaptive EVP (T or F) 
    156156   REAL(wp), PUBLIC ::   rn_creepl        !: creep limit (has to be low enough, circa 10-9 m/s, depending on rheology) 
    157157   REAL(wp), PUBLIC ::   rn_ecc           !: eccentricity of the elliptical yield curve 
    158158   INTEGER , PUBLIC ::   nn_nevp          !: number of iterations for subcycling 
    159    REAL(wp), PUBLIC ::   rn_relast        !: ratio => telast/rDt_ice (1/3 or 1/9 depending on nb of subcycling nevp)  
    160    INTEGER , PUBLIC ::   nn_rhg_chkcvg    !: check ice rheology convergence  
     159   REAL(wp), PUBLIC ::   rn_relast        !: ratio => telast/rDt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 
     160   INTEGER , PUBLIC ::   nn_rhg_chkcvg    !: check ice rheology convergence 
    161161   ! -- vp 
    162162   LOGICAL , PUBLIC ::   ln_rhg_VP        !: VP rheology 
     
    181181   INTEGER , PUBLIC ::   nn_flxdist       !: Redistribute heat flux over ice categories 
    182182   !                                      !   =-1  Do nothing (needs N(cat) fluxes) 
    183    !                                      !   = 0  Average N(cat) fluxes then apply the average over the N(cat) ice  
     183   !                                      !   = 0  Average N(cat) fluxes then apply the average over the N(cat) ice 
    184184   !                                      !   = 1  Average N(cat) fluxes then redistribute over the N(cat) ice using T-ice and albedo sensitivity 
    185185   !                                      !   = 2  Redistribute a single flux over categories 
    186186                                          ! -- icethd_zdf -- ! 
    187    LOGICAL , PUBLIC ::   ln_cndflx        !: use conduction flux as surface boundary condition (instead of qsr and qns)  
    188    LOGICAL , PUBLIC ::   ln_cndemulate    !: emulate conduction flux (if not provided)  
     187   LOGICAL , PUBLIC ::   ln_cndflx        !: use conduction flux as surface boundary condition (instead of qsr and qns) 
     188   LOGICAL , PUBLIC ::   ln_cndemulate    !: emulate conduction flux (if not provided) 
    189189   !                                      ! Conduction flux as surface forcing or not 
    190190   INTEGER, PUBLIC, PARAMETER ::   np_cnd_OFF = 0  !: no forcing from conduction flux (ice thermodynamics forced via qsr and qns) 
     
    192192   INTEGER, PUBLIC, PARAMETER ::   np_cnd_EMU = 2  !: emulate conduction flux via icethd_zdf.F90 (BL99) (1st round compute qcn and qsr_tr, 2nd round use it) 
    193193   INTEGER, PUBLIC ::   nn_qtrice         !: Solar flux transmitted thru the surface scattering layer: 
    194    !                                      !   = 0  Grenfell and Maykut 1977 (depends on cloudiness and is 0 when there is snow)  
     194   !                                      !   = 0  Grenfell and Maykut 1977 (depends on cloudiness and is 0 when there is snow) 
    195195   !                                      !   = 1  Lebrun 2019 (equals 0.3 anytime with different melting/dry snw conductivities) 
    196196   ! 
     
    198198   LOGICAL , PUBLIC ::   ln_cndi_U64      !: thermal conductivity: Untersteiner (1964) 
    199199   LOGICAL , PUBLIC ::   ln_cndi_P07      !: thermal conductivity: Pringle et al (2007) 
    200    REAL(wp), PUBLIC ::   rn_cnd_s         !: thermal conductivity of the snow [W/m/K]    
     200   REAL(wp), PUBLIC ::   rn_cnd_s         !: thermal conductivity of the snow [W/m/K] 
    201201   REAL(wp), PUBLIC ::   rn_kappa_i       !: coef. for the extinction of radiation in sea ice, Grenfell et al. (2006) [1/m] 
    202202   REAL(wp), PUBLIC ::   rn_kappa_s       !: coef. for the extinction of radiation in snw (nn_qtrice=0) [1/m] 
     
    236236   INTEGER , PUBLIC ::   jiceprt          !: debug j-point 
    237237 
    238    !                                     !!** some other parameters  
     238   !                                     !!** some other parameters 
    239239   INTEGER , PUBLIC ::   kt_ice           !: iteration number 
    240240   REAL(wp), PUBLIC ::   rDt_ice          !: ice time step 
    241241   REAL(wp), PUBLIC ::   r1_Dt_ice        !: = 1. / rDt_ice 
    242242   REAL(wp), PUBLIC ::   r1_nlay_i        !: 1 / nlay_i 
    243    REAL(wp), PUBLIC ::   r1_nlay_s        !: 1 / nlay_s  
     243   REAL(wp), PUBLIC ::   r1_nlay_s        !: 1 / nlay_s 
    244244   REAL(wp), PUBLIC ::   rswitch          !: switch for the presence of ice (1) or not (0) 
    245245   REAL(wp), PUBLIC ::   rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft   !: conservation diagnostics 
    246    REAL(wp), PUBLIC, PARAMETER ::   epsi06 = 1.e-06_wp  !: small number  
    247    REAL(wp), PUBLIC, PARAMETER ::   epsi10 = 1.e-10_wp  !: small number  
    248    REAL(wp), PUBLIC, PARAMETER ::   epsi20 = 1.e-20_wp  !: small number  
     246   REAL(wp), PUBLIC, PARAMETER ::   epsi06 = 1.e-06_wp  !: small number 
     247   REAL(wp), PUBLIC, PARAMETER ::   epsi10 = 1.e-10_wp  !: small number 
     248   REAL(wp), PUBLIC, PARAMETER ::   epsi20 = 1.e-20_wp  !: small number 
    249249 
    250250   !                                     !!** define arrays 
     
    259259   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdg_conv 
    260260   ! 
    261    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   t_bo            !: Sea-Ice bottom temperature [Kelvin]      
     261   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   t_bo            !: Sea-Ice bottom temperature [Kelvin] 
    262262   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   qlead           !: heat balance of the lead (or of the open ocean) 
    263263   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   qsb_ice_bot     !: net downward heat flux from the ice to the ocean 
     
    306306   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   qt_atm_oi       !: heat flux at the interface atm-[oce+ice]            [W.m-2] 
    307307   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   qt_oce_ai       !: heat flux at the interface oce-[atm+ice]            [W.m-2] 
    308     
     308 
    309309   ! heat flux associated with ice-atmosphere mass exchange 
    310310   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   hfx_sub         !: heat flux for sublimation            [W.m-2] 
     
    389389   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   u_ice_b, v_ice_b           !: ice velocity 
    390390   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   at_i_b                     !: ice concentration (total) 
    391              
     391 
    392392   !!---------------------------------------------------------------------- 
    393393   !! * Ice thickness distribution variables 
    394394   !!---------------------------------------------------------------------- 
    395395   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   hi_max            !: Boundary of ice thickness categories in thickness space 
    396    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   hi_mean           !: Mean ice thickness in catgories  
     396   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::   hi_mean           !: Mean ice thickness in catgories 
    397397   ! 
    398398   !!---------------------------------------------------------------------- 
     
    405405   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_trp_sv       !: transport of salt content 
    406406   ! 
    407    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_heat         !: snw/ice heat content variation   [W/m2]  
    408    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_sice         !: ice salt content variation   []  
    409    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_vice         !: ice volume variation   [m/s]  
    410    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_vsnw         !: snw volume variation   [m/s]  
    411    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_aice         !: ice conc.  variation   [s-1]  
    412    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_vpnd         !: pond volume variation  [m/s]  
     407   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_heat         !: snw/ice heat content variation   [W/m2] 
     408   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_sice         !: ice salt content variation   [] 
     409   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_vice         !: ice volume variation   [m/s] 
     410   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_vsnw         !: snw volume variation   [m/s] 
     411   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_aice         !: ice conc.  variation   [s-1] 
     412   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_vpnd         !: pond volume variation  [m/s] 
    413413   ! 
    414414   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   diag_adv_mass     !: advection of mass (kg/m2/s) 
     
    430430   !!---------------------------------------------------------------------- 
    431431   ! Extra sea ice diagnostics to address the data request 
    432    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   t_si            !: Temperature at Snow-ice interface (K)  
    433    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   tm_si           !: mean temperature at the snow-ice interface (K)  
     432   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   t_si            !: Temperature at Snow-ice interface (K) 
     433   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   tm_si           !: mean temperature at the snow-ice interface (K) 
    434434   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qcn_ice_bot     !: Bottom  conduction flux (W/m2) 
    435435   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qcn_ice_top     !: Surface conduction flux (W/m2) 
     
    469469         &      sfx_res    (jpi,jpj) , sfx_bri   (jpi,jpj) , sfx_dyn(jpi,jpj) , sfx_sub(jpi,jpj) , sfx_lam(jpi,jpj) ,  & 
    470470         &      sfx_bog    (jpi,jpj) , sfx_bom   (jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) ,  & 
    471          &      hfx_res    (jpi,jpj) , hfx_snw   (jpi,jpj) , hfx_sub(jpi,jpj) ,                        &  
     471         &      hfx_res    (jpi,jpj) , hfx_snw   (jpi,jpj) , hfx_sub(jpi,jpj) ,                        & 
    472472         &      qt_atm_oi  (jpi,jpj) , qt_oce_ai (jpi,jpj) , fhld   (jpi,jpj) ,                        & 
    473473         &      hfx_sum    (jpi,jpj) , hfx_bom   (jpi,jpj) , hfx_bog(jpi,jpj) , hfx_dif(jpi,jpj) ,     & 
     
    513513      ii = ii + 1 
    514514      ALLOCATE( u_ice_b(jpi,jpj) , v_ice_b(jpi,jpj) , at_i_b(jpi,jpj) , STAT=ierr(ii) ) 
    515        
     515 
    516516      ! * Ice thickness distribution variables 
    517517      ii = ii + 1 
     
    520520      ! * Ice diagnostics 
    521521      ii = ii + 1 
    522       ALLOCATE( diag_trp_vi(jpi,jpj) , diag_trp_vs (jpi,jpj) , diag_trp_ei(jpi,jpj),                      &  
     522      ALLOCATE( diag_trp_vi(jpi,jpj) , diag_trp_vs (jpi,jpj) , diag_trp_ei(jpi,jpj),                      & 
    523523         &      diag_trp_es(jpi,jpj) , diag_trp_sv (jpi,jpj) , diag_heat  (jpi,jpj),                      & 
    524524         &      diag_sice  (jpi,jpj) , diag_vice   (jpi,jpj) , diag_vsnw  (jpi,jpj), diag_aice(jpi,jpj), diag_vpnd(jpi,jpj),  & 
     
    527527      ! * Ice conservation 
    528528      ii = ii + 1 
    529       ALLOCATE( diag_v (jpi,jpj) , diag_s (jpi,jpj) , diag_t (jpi,jpj),   &  
     529      ALLOCATE( diag_v (jpi,jpj) , diag_s (jpi,jpj) , diag_t (jpi,jpj),   & 
    530530         &      diag_fv(jpi,jpj) , diag_fs(jpi,jpj) , diag_ft(jpi,jpj), STAT=ierr(ii) ) 
    531        
     531 
    532532      ! * SIMIP diagnostics 
    533533      ii = ii + 1 
Note: See TracChangeset for help on using the changeset viewer.