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 14880 for NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src – NEMO

Ignore:
Timestamp:
2021-05-18T18:06:20+02:00 (3 years ago)
Author:
dancopsey
Message:

Introduce a small amount of top melt to icebergs

Location:
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icb_oce.F90

    r14741 r14880  
    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, ss_e 
     88   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ff_e, tt_e, fr_e, ss_e, qt_e 
    8989   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ua_e, va_e 
    9090   REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE ::   ssh_e 
     
    178178         &      ff_e(0:jpi+1,0:jpj+1) , fr_e(0:jpi+1,0:jpj+1)  ,   & 
    179179         &      tt_e(0:jpi+1,0:jpj+1) , ssh_e(0:jpi+1,0:jpj+1) ,   & 
    180          &      ss_e(0:jpi+1,0:jpj+1) ,                            &  
     180         &      ss_e(0:jpi+1,0:jpj+1) , qt_e(0:jpi+1,0:jpj+1) ,   &  
    181181         &      first_width(nclasses) , first_length(nclasses) ,   & 
    182182         &      src_calving (jpi,jpj) ,                            & 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbdyn.F90

    r14711 r14880  
    269269      ! 
    270270      INTEGER  ::   itloop 
    271       REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss 
     271      REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss, pqt 
    272272      REAL(wp) ::   zvo, zvi, zva, zvwave, zssh_y 
    273273      REAL(wp) ::   zff, zT, zD, zW, zL, zM, zF 
     
    282282      nknberg = berg%number(1) 
    283283      CALL icb_utl_interp( pxi, pe1, zuo, zui, zua, zssh_x,                     & 
    284          &                 pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss ) 
     284         &                 pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss, pqt ) 
    285285 
    286286      zM = berg%current_point%mass 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbini.F90

    r14075 r14880  
    8080      ff_e(:,:) = 0._wp   ;   tt_e(:,:) = 0._wp   ; 
    8181      fr_e(:,:) = 0._wp   ;   ss_e(:,:) = 0._wp   ; 
     82      qt_e(:,:) = 0._wp 
    8283#if defined key_si3 
    8384      hi_e(:,:) = 0._wp   ; 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbthm.F90

    r14075 r14880  
    5151      INTEGER  ::   ii, ij 
    5252      REAL(wp) ::   zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 
     53      REAL(wp) ::   zqt, pqt 
    5354      REAL(wp) ::   zSSS, zfzpt 
    54       REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 
     55      REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv, zMt 
    5556      REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat_hcflux, zheat_latent, z1_12 
    5657      REAL(wp) ::   zMbits, znMbits, zdMbitsE, zdMbitsM, zLbits, zAbits, zMbb 
     
    8788         CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x,   & 
    8889            &                 pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y,   & 
    89             &                 pt%sst, pt%cn, pt%hi, zff, pt%sss ) 
     90            &                 pt%sst, pt%cn, pt%hi, zff, pt%sss, pqt ) 
    9091         ! 
    9192         zSST = pt%sst 
    9293         zSSS = pt%sss 
     94         zqt = MAX( pqt, 0._wp )                        ! Net surface heat flux 
    9395         CALL eos_fzp(zSSS,zfzpt)                       ! freezing point 
    9496         zIC  = MIN( 1._wp, pt%cn + rn_sicn_shift )     ! Shift sea-ice concentration       !!gm ??? 
     
    107109         zVol = zT * zW * zL 
    108110 
     111 
    109112         ! Environment 
    110113         zdvo = SQRT( (pt%uvel-pt%uo)**2 + (pt%vvel-pt%vo)**2 ) 
     
    120123         ENDIF 
    121124         zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3)))     , 0._wp ) * z1_rday      ! Wave erosion                (eqn M.A8 ) 
     125         zMt = MIN( (zqt*(1.0_wp - zIC)*0.25_wp + zqt*zIC) / (rLfus * rhoi) , 1.0E-7_wp )      ! Top melt by surface heat flux. Assuming surface heat flux 
     126                                                                                               ! involved in melting is a quarter of that going into the 
     127                                                                                               ! ocean but all of that going into sea ice. Apply a maximum 
     128                                                                                               ! amount of melt of 1E-7 m/s to keep 
     129                                                                                               ! this term lower than the other terms when the berg is in 
     130                                                                                               ! mid ocean. 
    122131 
    123132         IF( ln_operator_splitting ) THEN      ! Operator split update of volume/mass 
    124             zTn    = MAX( zT - zMb*zdt , 0._wp )         ! new total thickness (m) 
     133            zTn    = MAX( zT - zMb*zdt - zMt*zdt , 0._wp )         ! new total thickness (m) 
    125134            znVol  = zTn * zW * zL                       ! new volume (m^3) 
    126135            zMnew1 = ( znVol / zVol ) * zM               ! new mass (kg) 
     
    143152            zLn = MAX( zL -(zMv+zMe)*zdt ,0._wp )        ! (m) 
    144153            zWn = MAX( zW -(zMv+zMe)*zdt ,0._wp )        ! (m) 
    145             zTn = MAX( zT - zMb    *zdt ,0._wp )         ! (m) 
     154            zTn = MAX( zT - zMb*zdt - zMt*zdt ,0._wp )   ! (m) 
    146155            ! Update volume and mass of berg 
    147156            znVol = zTn*zWn*zLn                          ! (m^3) 
    148157            zMnew = (znVol/zVol)*zM                      ! (kg) 
    149158            zdM   = zM - zMnew                           ! (kg) 
    150             zdMb = (zM/zVol) * (zW*   zL ) *zMb*zdt      ! approx. mass loss to basal melting (kg) 
     159            zdMb = (zM/zVol) * (zW*   zL ) *(zMb+zMt)*zdt      ! approx. mass loss to basal melting (kg) 
    151160            zdMe = (zM/zVol) * (zT*(zW+zL)) *zMe*zdt     ! approx. mass lost to erosion (kg) 
    152161            zdMv = (zM/zVol) * (zT*(zW+zL)) *zMv*zdt     ! approx. mass loss to buoyant convection (kg) 
     
    176185         ENDIF 
    177186 
     187 
     188 
    178189         ! use tmask rather than tmask_i when dealing with icebergs 
    179190         IF( tmask(ii,ij,1) /= 0._wp ) THEN    ! Add melting to the grid and field diagnostics 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbutl.F90

    r14075 r14880  
    2323   USE sbc_oce                             ! ocean surface boundary conditions 
    2424#if defined key_si3 
    25    USE ice,    ONLY: u_ice, v_ice, hm_i    ! SI3 variables 
     25   USE ice,    ONLY: u_ice, v_ice, hm_i, qt_atm_oi    ! SI3 variables 
    2626   USE icevar                              ! ice_var_sshdyn 
    2727   USE sbc_ice, ONLY: snwice_mass, snwice_mass_b 
     
    7878      ua_e(1:jpi,1:jpj) = utau (:,:) * umask(:,:,1) ! maybe mask useless because mask applied in sbcblk 
    7979      va_e(1:jpi,1:jpj) = vtau (:,:) * vmask(:,:,1) ! maybe mask useless because mask applied in sbcblk 
     80      qt_e(1:jpi,1:jpj) = qt_atm_oi(:,:) 
    8081      ! 
    8182      CALL lbc_lnk_icb( 'icbutl', uo_e, 'U', -1._wp, 1, 1 ) 
     
    8788      CALL lbc_lnk_icb( 'icbutl', tt_e, 'T', +1._wp, 1, 1 ) 
    8889      CALL lbc_lnk_icb( 'icbutl', ss_e, 'T', +1._wp, 1, 1 ) 
     90      CALL lbc_lnk_icb( 'icbutl', qt_e, 'T', +1._wp, 1, 1 ) 
    8991#if defined key_si3 
    9092      hi_e(1:jpi, 1:jpj) = hm_i (:,:)   
     
    109111   SUBROUTINE icb_utl_interp( pi, pe1, puo, pui, pua, pssh_i,   & 
    110112      &                       pj, pe2, pvo, pvi, pva, pssh_j,   & 
    111       &                       psst, pcn, phi, pff, psss        ) 
     113      &                       psst, pcn, phi, pff, psss, pqt        ) 
    112114      !!---------------------------------------------------------------------- 
    113115      !!                  ***  ROUTINE icb_utl_interp  *** 
     
    131133      REAL(wp), INTENT(  out) ::   pssh_i, pssh_j                 ! ssh i- & j-gradients 
    132134      REAL(wp), INTENT(  out) ::   psst, pcn, phi, pff, psss      ! SST, ice concentration, ice thickness, Coriolis, SSS 
     135      REAL(wp), INTENT(  out) ::   pqt                            ! Net surface solar radiation 
    133136      ! 
    134137      REAL(wp) ::   zcd, zmod       ! local scalars 
     
    144147      pcn  = icb_utl_bilin_h( fr_e, pi, pj, 'T', .true.   )    ! ice concentration 
    145148      pff  = icb_utl_bilin_h( ff_e, pi, pj, 'F', .false.  )    ! Coriolis parameter 
     149      pqt  = icb_utl_bilin_h( qt_e, pi, pj, 'T', .true.   )    ! Total surface shortwave 
    146150      ! 
    147151      pua  = icb_utl_bilin_h( ua_e, pi, pj, 'U', .true.   )    ! 10m wind 
Note: See TracChangeset for help on using the changeset viewer.