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 7813 for trunk/NEMOGCM/NEMO/OPA_SRC – NEMO

Ignore:
Timestamp:
2017-03-20T17:17:45+01:00 (7 years ago)
Author:
clem
Message:

synchronize trunk with 3.6

Location:
trunk/NEMOGCM/NEMO/OPA_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DOM/phycst.F90

    r7761 r7813  
    6464#if defined key_lim3 || defined key_cice 
    6565   REAL(wp), PUBLIC ::   rhoic    =  917._wp         !: volumic mass of sea ice                               [kg/m3] 
    66    REAL(wp), PUBLIC ::   rcdic    =    2.034396_wp   !: thermal conductivity of fresh ice 
    67    REAL(wp), PUBLIC ::   rcdsn    =    0.31_wp       !: thermal conductivity of snow 
    68    REAL(wp), PUBLIC ::   cpic     = 2067.0_wp        !: specific heat for ice  
     66   REAL(wp), PUBLIC ::   rcdic    =    2.034396_wp   !: thermal conductivity of fresh ice                     [W/m/K] 
     67   REAL(wp), PUBLIC ::   cpic     = 2067.0_wp        !: specific heat of fresh ice                            [J/kg/K] 
    6968   REAL(wp), PUBLIC ::   lsub     =    2.834e+6_wp   !: pure ice latent heat of sublimation                   [J/kg] 
    7069   REAL(wp), PUBLIC ::   lfus     =    0.334e+6_wp   !: latent heat of fusion of fresh ice                    [J/kg] 
     
    8281   REAL(wp), PUBLIC ::   xlic     =  300.33e+6_wp    !: volumetric latent heat fusion of ice                  [J/m3] 
    8382   REAL(wp), PUBLIC ::   xsn      =    2.8e+6_wp     !: volumetric latent heat of sublimation of snow         [J/m3] 
     83#endif 
     84#if defined key_cice 
     85   REAL(wp), PUBLIC ::   rcdsn    =    0.31_wp       !: thermal conductivity of snow                          [W/m/K], now namelist parameter for LIM3 
    8486#endif 
    8587#if defined key_lim3 
     
    157159      IF(lwp) THEN 
    158160         WRITE(numout,*) 
     161#if defined key_cice 
    159162         WRITE(numout,*) '          thermal conductivity of the snow          = ', rcdsn   , ' J/s/m/K' 
    160          WRITE(numout,*) '          thermal conductivity of the ice           = ', rcdic   , ' J/s/m/K' 
     163#endif 
     164         WRITE(numout,*) '          thermal conductivity of pure ice          = ', rcdic   , ' J/s/m/K' 
    161165         WRITE(numout,*) '          fresh ice specific heat                   = ', cpic    , ' J/kg/K' 
    162166         WRITE(numout,*) '          latent heat of fusion of fresh ice / snow = ', lfus    , ' J/kg' 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/albedo.F90

    r7753 r7813  
    3939   !                             !!* namelist namsbc_alb 
    4040   INTEGER  ::   nn_ice_alb 
    41    REAL(wp) ::   rn_albice 
     41   REAL(wp) ::   rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt 
    4242 
    4343   !!---------------------------------------------------------------------- 
     
    8989      INTEGER  ::   ji, jj, jl         ! dummy loop indices 
    9090      INTEGER  ::   ijpl               ! number of ice categories (3rd dim of ice input arrays) 
    91       REAL(wp)            ::   ralb_im, ralb_sf, ralb_sm, ralb_if 
    9291      REAL(wp)            ::   zswitch, z1_c1, z1_c2 
    9392      REAL(wp)                            ::   zalb_sm, zalb_sf, zalb_st ! albedo of snow melting, freezing, total 
     
    10099 
    101100      IF( albd_init == 0 )   CALL albedo_init      ! initialization  
    102  
    103101       
    104102      SELECT CASE ( nn_ice_alb ) 
     
    109107      CASE( 0 ) 
    110108        
    111          ralb_sf = 0.80       ! dry snow 
    112          ralb_sm = 0.65       ! melting snow 
    113          ralb_if = 0.72       ! bare frozen ice 
    114          ralb_im = rn_albice  ! bare puddled ice  
    115           
    116109         !  Computation of ice albedo (free of snow) 
    117          WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;   zalb(:,:,:) = ralb_im 
    118          ELSE WHERE                                              ;   zalb(:,:,:) = ralb_if 
     110         WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;   zalb(:,:,:) = rn_alb_imlt 
     111         ELSE WHERE                                              ;   zalb(:,:,:) = rn_alb_idry 
    119112         END  WHERE 
    120113       
     
    132125                  ! freezing snow 
    133126                  ! no effect of underlying ice layer IF snow thickness > c1. Albedo does not depend on snow thick if > c2 
    134                   !                                        !  freezing snow         
    135127                  zswitch   = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( ph_snw(ji,jj,jl) - c1 ) ) ) 
    136128                  zalb_sf   = ( 1._wp - zswitch ) * (  zalb_it(ji,jj,jl)  & 
    137                      &                           + ph_snw(ji,jj,jl) * ( ralb_sf - zalb_it(ji,jj,jl) ) / c1  )   & 
    138                      &        +         zswitch   * ralb_sf   
     129                     &                           + ph_snw(ji,jj,jl) * ( rn_alb_sdry - zalb_it(ji,jj,jl) ) / c1  )   & 
     130                     &        +         zswitch   * rn_alb_sdry   
    139131 
    140132                  ! melting snow 
    141133                  ! no effect of underlying ice layer. Albedo does not depend on snow thick IF > c2 
    142134                  zswitch   = MAX( 0._wp , SIGN( 1._wp , ph_snw(ji,jj,jl) - c2 ) ) 
    143                   zalb_sm = ( 1._wp - zswitch ) * ( ralb_im + ph_snw(ji,jj,jl) * ( ralb_sm - ralb_im ) / c2 )   & 
    144                       &     +         zswitch   *   ralb_sm  
     135                  zalb_sm = ( 1._wp - zswitch ) * ( rn_alb_imlt + ph_snw(ji,jj,jl) * ( rn_alb_smlt - rn_alb_imlt ) / c2 )   & 
     136                      &     +         zswitch   *   rn_alb_smlt  
    145137                  ! 
    146138                  ! snow albedo 
     
    163155      CASE( 1 )  
    164156 
    165          ralb_im = rn_albice  ! bare puddled ice 
    166157! compilation of values from literature 
    167          ralb_sf = 0.85      ! dry snow 
    168          ralb_sm = 0.75      ! melting snow 
    169          ralb_if = 0.60      ! bare frozen ice 
     158!        rn_alb_sdry = 0.85      ! dry snow 
     159!        rn_alb_smlt = 0.75      ! melting snow 
     160!        rn_alb_idry = 0.60      ! bare frozen ice 
    170161! Perovich et al 2002 (Sheba) => the only dataset for which all types of ice/snow were retrieved 
    171 !         ralb_sf = 0.85       ! dry snow 
    172 !         ralb_sm = 0.72       ! melting snow 
    173 !         ralb_if = 0.65       ! bare frozen ice 
     162!        rn_alb_sdry = 0.85      ! dry snow 
     163!        rn_alb_smlt = 0.72      ! melting snow 
     164!        rn_alb_idry = 0.65      ! bare frozen ice 
    174165! Brandt et al 2005 (East Antarctica) 
    175 !         ralb_sf = 0.87      ! dry snow 
    176 !         ralb_sm = 0.82      ! melting snow 
    177 !         ralb_if = 0.54      ! bare frozen ice 
     166!        rn_alb_sdry = 0.87      ! dry snow 
     167!        rn_alb_smlt = 0.82      ! melting snow 
     168!        rn_alb_idry = 0.54      ! bare frozen ice 
    178169!  
    179170         !  Computation of ice albedo (free of snow) 
    180171         z1_c1 = 1. / ( LOG(1.5) - LOG(0.05) )  
    181172         z1_c2 = 1. / 0.05 
    182          WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;   zalb = ralb_im 
    183          ELSE WHERE                                              ;   zalb = ralb_if 
     173         WHERE     ( ph_snw == 0._wp .AND. pt_ice >= rt0_ice )   ;   zalb = rn_alb_imlt 
     174         ELSE WHERE                                              ;   zalb = rn_alb_idry 
    184175         END  WHERE 
    185176          
     
    196187            DO jj = 1, jpj 
    197188               DO ji = 1, jpi 
    198                   zalb_sf = ralb_sf - ( ralb_sf - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 
    199                   zalb_sm = ralb_sm - ( ralb_sm - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 
    200  
    201                    ! snow albedo 
     189                  zalb_sf = rn_alb_sdry - ( rn_alb_sdry - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c1 ); 
     190                  zalb_sm = rn_alb_smlt - ( rn_alb_smlt - zalb_it(ji,jj,jl)) * EXP( - ph_snw(ji,jj,jl) * z1_c2 ); 
     191 
     192                  ! snow albedo 
    202193                  zswitch = MAX( 0._wp , SIGN( 1._wp , pt_ice(ji,jj,jl) - rt0_snow ) )    
    203194                  zalb_st = zswitch * zalb_sm + ( 1._wp - zswitch ) * zalb_sf 
     
    248239      !!---------------------------------------------------------------------- 
    249240      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    250       NAMELIST/namsbc_alb/ nn_ice_alb, rn_albice  
     241      NAMELIST/namsbc_alb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry , rn_alb_imlt 
    251242      !!---------------------------------------------------------------------- 
    252243      ! 
     
    267258         WRITE(numout,*) '~~~~~~~' 
    268259         WRITE(numout,*) '   Namelist namsbc_alb : albedo ' 
    269          WRITE(numout,*) '      choose the albedo parameterization                  nn_ice_alb = ', nn_ice_alb 
    270          WRITE(numout,*) '      albedo of bare puddled ice                          rn_albice  = ', rn_albice 
     260         WRITE(numout,*) '      choose the albedo parameterization                  nn_ice_alb  = ', nn_ice_alb 
     261         WRITE(numout,*) '      albedo of dry snow                                  rn_alb_sdry = ', rn_alb_sdry 
     262         WRITE(numout,*) '      albedo of melting snow                              rn_alb_smlt = ', rn_alb_smlt 
     263         WRITE(numout,*) '      albedo of dry ice                                   rn_alb_idry = ', rn_alb_idry 
     264         WRITE(numout,*) '      albedo of bare puddled ice                          rn_alb_imlt = ', rn_alb_imlt 
    271265      ENDIF 
    272266      ! 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r7788 r7813  
    18031803      WHERE( p_frld /= 0._wp )  zqns_oce(:,:) = ( zqns_tot(:,:) - SUM( a_i * zqns_ice, dim=3 ) ) / p_frld(:,:) 
    18041804 
    1805       ! --- heat flux associated with emp (W/m2) --- ! 
    1806       zqemp_oce(:,:) = -  zevap_oce(:,:)                                      *   zcptn(:,:)   &       ! evap 
    1807          &             + ( ztprecip(:,:) - zsprecip(:,:) )                    *   zcptn(:,:)   &       ! liquid precip 
    1808          &             +   zsprecip(:,:)                   * ( 1._wp - zsnw ) * ( zcptn(:,:) - lfus )  ! solid precip over ocean + snow melting 
    1809 !      zqemp_ice(:,:) = -   frcv(jpr_ievp)%z3(:,:,1)        * zicefr(:,:)      *   zcptn(:,:)   &      ! ice evap 
    1810 !         &             +   zsprecip(:,:)                   * zsnw             * ( zcptn(:,:) - lfus ) ! solid precip over ice 
    1811       zqemp_ice(:,:) =      zsprecip(:,:)                   * zsnw             * ( zcptn(:,:) - lfus ) ! solid precip over ice (only) 
    1812                                                                                                        ! qevap_ice=0 since we consider Tice=0degC 
    1813        
     1805      ! Heat content per unit mass of snow (J/kg) 
     1806      WHERE( SUM( a_i, dim=3 ) > 1.e-10 )   ;   zcptsnw(:,:) = cpic * SUM( (tn_ice - rt0) * a_i, dim=3 ) / SUM( a_i, dim=3 ) 
     1807      ELSEWHERE                             ;   zcptsnw(:,:) = zcptn(:,:) 
     1808      ENDWHERE 
     1809      ! Heat content per unit mass of rain (J/kg) 
     1810      zcptrain(:,:) = rcp * ( SUM( (tn_ice(:,:,:) - rt0) * a_i(:,:,:), dim=3 ) + sst_m(:,:) * p_frld(:,:) )  
     1811 
    18141812      ! --- enthalpy of snow precip over ice in J/m3 (to be used in 1D-thermo) --- ! 
    1815       zqprec_ice(:,:) = rhosn * ( zcptn(:,:) - lfus ) 
     1813      zqprec_ice(:,:) = rhosn * ( zcptsnw(:,:) - lfus ) 
    18161814 
    18171815      ! --- heat content of evap over ice in W/m2 (to be used in 1D-thermo) --- ! 
    18181816      DO jl = 1, jpl 
    1819          zqevap_ice(:,:,jl) = 0._wp ! should be -evap * ( ( Tice - rt0 ) * cpic ) but we do not have Tice, so we consider Tice=0degC 
     1817         zqevap_ice(:,:,jl) = 0._wp ! should be -evap * ( ( Tice - rt0 ) * cpic ) but atm. does not take it into account 
    18201818      END DO 
    18211819 
     1820      ! --- heat flux associated with emp (W/m2) --- ! 
     1821      zqemp_oce(:,:) = -  zevap_oce(:,:)                                      *   zcptn   (:,:)   &        ! evap 
     1822         &             + ( ztprecip(:,:) - zsprecip(:,:) )                    *   zcptrain(:,:)   &        ! liquid precip 
     1823         &             +   zsprecip(:,:)                   * ( 1._wp - zsnw ) * zqprec_ice(:,:) * r1_rhosn ! solid precip over ocean + snow melting 
     1824      zqemp_ice(:,:) =     zsprecip(:,:)                   * zsnw             * zqprec_ice(:,:) * r1_rhosn ! solid precip over ice (qevap_ice=0 since atm. does not take it into account) 
     1825!!    zqemp_ice(:,:) = -   frcv(jpr_ievp)%z3(:,:,1)        * zicefr(:,:)      *   zcptsnw (:,:)   &        ! ice evap 
     1826!!       &             +   zsprecip(:,:)                   * zsnw             * zqprec_ice(:,:) * r1_rhosn ! solid precip over ice 
     1827       
    18221828      ! --- total non solar flux (including evap/precip) --- ! 
    18231829      zqns_tot(:,:) = zqns_tot(:,:) + zqemp_ice(:,:) + zqemp_oce(:,:) 
     
    19741980      fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 
    19751981 
    1976       CALL wrk_dealloc( jpi,jpj,     zcptn, ztmp, zicefr, zmsk, zsnw ) 
     1982      CALL wrk_dealloc( jpi,jpj,     zcptn, ztmp, zcptrain, zcptsnw, zicefr, zmsk, zsnw ) 
    19771983      CALL wrk_dealloc( jpi,jpj,     zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 
    19781984      CALL wrk_dealloc( jpi,jpj,     zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) 
  • trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r7753 r7813  
    323323                  zwlc = zind * rn_lc * zus * SIN( rpi * gdepw_n(ji,jj,jk) / zhlc(ji,jj) ) 
    324324                  !                                           ! TKE Langmuir circulation source term 
    325                   en(ji,jj,jk) = en(ji,jj,jk) + rdt * (1._wp - fr_i(ji,jj) ) * ( zwlc * zwlc * zwlc )   & 
     325                  en(ji,jj,jk) = en(ji,jj,jk) + rdt * MAX(0.,1._wp - 2.*fr_i(ji,jj) ) * ( zwlc * zwlc * zwlc )   & 
    326326                     &                              / zhlc(ji,jj) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    327327               END DO 
     
    454454               DO ji = fs_2, fs_jpim1   ! vector opt. 
    455455                  en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw_n(ji,jj,jk) / htau(ji,jj) )   & 
    456                      &                                 * ( 1._wp - fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     456                     &                                 * MAX(0.,1._wp - 2.*fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    457457               END DO 
    458458            END DO 
     
    463463               jk = nmln(ji,jj) 
    464464               en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -gdepw_n(ji,jj,jk) / htau(ji,jj) )   & 
    465                   &                                 * ( 1._wp - fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     465                  &                                 * MAX(0.,1._wp - 2.*fr_i(ji,jj) )  * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    466466            END DO 
    467467         END DO 
     
    476476                  zdif = rhftau_scl * MAX( 0._wp, zdif + rhftau_add )  ! apply some modifications... 
    477477                  en(ji,jj,jk) = en(ji,jj,jk) + zbbrau * zdif * EXP( -gdepw_n(ji,jj,jk) / htau(ji,jj) )   & 
    478                      &                        * ( 1._wp - fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     478                     &                        * MAX(0.,1._wp - 2.*fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    479479               END DO 
    480480            END DO 
Note: See TracChangeset for help on using the changeset viewer.