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 13281 – NEMO

Changeset 13281


Ignore:
Timestamp:
2020-07-09T15:19:01+02:00 (4 years ago)
Author:
ayoung
Message:

Merging changes for ticket #2407. Patch for iceberg melting stability. Fully SETTE tested: this merge introduces a change to the results in ORCA2_ICE_PISCES.

Location:
NEMO/trunk/src/OCE/ICB
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/ICB/icb_oce.F90

    r12472 r13281  
    5757   TYPE, PUBLIC ::   point              !: properties of an individual iceberg (position, mass, size, etc...) 
    5858      INTEGER  ::   year 
    59       REAL(wp) ::   xi , yj                                              ! iceberg coordinates in the (i,j) referential (global) 
    60       REAL(wp) ::   e1 , e2                                              ! horizontal scale factors at the iceberg position 
    61       REAL(wp) ::   lon, lat, day                                        ! geographic position 
    62       REAL(wp) ::   mass, thickness, width, length, uvel, vvel           ! iceberg physical properties 
    63       REAL(wp) ::   uo, vo, ui, vi, ua, va, ssh_x, ssh_y, sst, cn, hi    ! properties of iceberg environment  
     59      REAL(wp) ::   xi , yj                                                   ! iceberg coordinates in the (i,j) referential (global) 
     60      REAL(wp) ::   e1 , e2                                                   ! horizontal scale factors at the iceberg position 
     61      REAL(wp) ::   lon, lat, day                                             ! geographic position 
     62      REAL(wp) ::   mass, thickness, width, length, uvel, vvel                ! iceberg physical properties 
     63      REAL(wp) ::   uo, vo, ui, vi, ua, va, ssh_x, ssh_y, sst, cn, hi, sss    ! properties of iceberg environment  
    6464      REAL(wp) ::   mass_of_bits, heat_density 
    6565   END TYPE point 
     
    8686   ! particularly for MPP when iceberg can lie inside T grid but outside U, V, or f grid 
    8787   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   uo_e, vo_e 
    88    REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ff_e, tt_e, fr_e 
     88   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ff_e, tt_e, fr_e, ss_e 
    8989   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ua_e, va_e 
    9090   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ssh_e 
     
    183183         &      ff_e(0:jpi+1,0:jpj+1) , fr_e(0:jpi+1,0:jpj+1)  ,   & 
    184184         &      tt_e(0:jpi+1,0:jpj+1) , ssh_e(0:jpi+1,0:jpj+1) ,   & 
     185         &      ss_e(0:jpi+1,0:jpj+1) ,                            &  
    185186         &      first_width(nclasses) , first_length(nclasses) ,   & 
    186187         &      src_calving (jpi,jpj) ,                            & 
  • NEMO/trunk/src/OCE/ICB/icbdyn.F90

    r10570 r13281  
    258258      ! 
    259259      INTEGER  ::   itloop 
    260       REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi 
     260      REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss 
    261261      REAL(wp) ::   zvo, zvi, zva, zvwave, zssh_y 
    262262      REAL(wp) ::   zff, zT, zD, zW, zL, zM, zF 
     
    271271      nknberg = berg%number(1) 
    272272      CALL icb_utl_interp( pxi, pe1, zuo, zui, zua, zssh_x,                     & 
    273          &                 pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff ) 
     273         &                 pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss ) 
    274274 
    275275      zM = berg%current_point%mass 
  • NEMO/trunk/src/OCE/ICB/icbini.F90

    r12489 r13281  
    8181      ua_e(:,:) = 0._wp   ;   va_e(:,:) = 0._wp   ; 
    8282      ff_e(:,:) = 0._wp   ;   tt_e(:,:) = 0._wp   ; 
    83       fr_e(:,:) = 0._wp   ; 
     83      fr_e(:,:) = 0._wp   ;   ss_e(:,:) = 0._wp   ; 
    8484#if defined key_si3 
    8585      hi_e(:,:) = 0._wp   ; 
  • NEMO/trunk/src/OCE/ICB/icbthm.F90

    r13226 r13281  
    2020   USE phycst         ! NEMO physical constants 
    2121   USE sbc_oce 
     22   USE eosbn2         ! equation of state 
    2223   USE lib_fortran, ONLY : DDPDD 
    2324 
     
    5051      INTEGER  ::   ii, ij 
    5152      REAL(wp) ::   zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 
     53      REAL(wp) ::   zSSS, zfzpt 
    5254      REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 
    5355      REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat_hcflux, zheat_latent, z1_12 
     
    8587         CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x,   & 
    8688            &                 pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y,   & 
    87             &                 pt%sst, pt%cn, pt%hi, zff ) 
     89            &                 pt%sst, pt%cn, pt%hi, zff, pt%sss ) 
    8890         ! 
    8991         zSST = pt%sst 
     92         zSSS = pt%sss 
     93         CALL eos_fzp(zSSS,zfzpt)                       ! freezing point 
    9094         zIC  = MIN( 1._wp, pt%cn + rn_sicn_shift )     ! Shift sea-ice concentration       !!gm ??? 
    9195         zM   = pt%mass 
     
    109113 
    110114         ! Melt rates in m/s (i.e. division by rday) 
    111          zMv = MAX( 7.62d-3*zSST+1.29d-3*(zSST**2)                    , 0._wp ) * z1_rday   ! Buoyant convection at sides (eqn M.A10) 
    112          zMb = MAX( 0.58_wp*(zdvo**0.8_wp)*(zSST+4.0_wp)/(zL**0.2_wp) , 0._wp ) * z1_rday   ! Basal turbulent melting     (eqn M.A7 ) 
    113          zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3)))     , 0._wp ) * z1_rday   ! Wave erosion                (eqn M.A8 ) 
     115         zMv = MAX( 7.62d-3*zSST+1.29d-3*(zSST**2)                    , 0._wp ) * z1_rday      ! Buoyant convection at sides (eqn M.A10) 
     116         IF ( zSST > zfzpt ) THEN                                                              ! Calculate basal melting only if SST above freezing point   
     117            zMb = MAX( 0.58_wp*(zdvo**0.8_wp)*(zSST+4.0_wp)/(zL**0.2_wp) , 0._wp ) * z1_rday   ! Basal turbulent melting     (eqn M.A7 ) 
     118         ELSE 
     119            zMb = 0._wp                                                                        ! No basal melting if SST below freezing point      
     120         ENDIF 
     121         zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3)))     , 0._wp ) * z1_rday      ! Wave erosion                (eqn M.A8 ) 
    114122 
    115123         IF( ln_operator_splitting ) THEN      ! Operator split update of volume/mass 
  • NEMO/trunk/src/OCE/ICB/icbutl.F90

    r10702 r13281  
    7474      ff_e(1:jpi,1:jpj) = ff_f (:,:)  
    7575      tt_e(1:jpi,1:jpj) = sst_m(:,:) 
     76      ss_e(1:jpi,1:jpj) = sss_m(:,:) 
    7677      fr_e(1:jpi,1:jpj) = fr_i (:,:) 
    7778      ua_e(1:jpi,1:jpj) = utau (:,:) * umask(:,:,1) ! maybe mask useless because mask applied in sbcblk 
     
    8586      CALL lbc_lnk_icb( 'icbutl', fr_e, 'T', +1._wp, 1, 1 ) 
    8687      CALL lbc_lnk_icb( 'icbutl', tt_e, 'T', +1._wp, 1, 1 ) 
     88      CALL lbc_lnk_icb( 'icbutl', ss_e, 'T', +1._wp, 1, 1 ) 
    8789#if defined key_si3 
    8890      hi_e(1:jpi, 1:jpj) = hm_i (:,:)   
     
    107109   SUBROUTINE icb_utl_interp( pi, pe1, puo, pui, pua, pssh_i,   & 
    108110      &                       pj, pe2, pvo, pvi, pva, pssh_j,   & 
    109       &                       psst, pcn, phi, pff            ) 
     111      &                       psst, pcn, phi, pff, psss        ) 
    110112      !!---------------------------------------------------------------------- 
    111113      !!                  ***  ROUTINE icb_utl_interp  *** 
     
    128130      REAL(wp), INTENT(  out) ::   puo, pvo, pui, pvi, pua, pva   ! ocean, ice and wind speeds 
    129131      REAL(wp), INTENT(  out) ::   pssh_i, pssh_j                 ! ssh i- & j-gradients 
    130       REAL(wp), INTENT(  out) ::   psst, pcn, phi, pff            ! SST, ice concentration, ice thickness, Coriolis 
     132      REAL(wp), INTENT(  out) ::   psst, pcn, phi, pff, psss      ! SST, ice concentration, ice thickness, Coriolis, SSS 
    131133      ! 
    132134      REAL(wp) ::   zcd, zmod       ! local scalars 
     
    139141      pvo  = icb_utl_bilin_h( vo_e, pi, pj, 'V', .false.  ) 
    140142      psst = icb_utl_bilin_h( tt_e, pi, pj, 'T', .true.   )    ! SST 
     143      psss = icb_utl_bilin_h( ss_e, pi, pj, 'T', .true.   )    ! SSS 
    141144      pcn  = icb_utl_bilin_h( fr_e, pi, pj, 'T', .true.   )    ! ice concentration 
    142145      pff  = icb_utl_bilin_h( ff_e, pi, pj, 'F', .false.  )    ! Coriolis parameter 
Note: See TracChangeset for help on using the changeset viewer.