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

Changeset 15421


Ignore:
Timestamp:
2021-10-21T10:48:12+02:00 (3 years ago)
Author:
dancopsey
Message:

Reverted all my efforts to generate top melt out of this branch. This branch is going back to simply do the bouncing icebergs thing which is what it was designed for.

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

    r14898 r15421  
    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, qsr_e, qml_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 
     
    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) , qsr_e(0:jpi+1,0:jpj+1) ,   &  
    181          &      qml_e(0:jpi+1,0:jpj+1) ,                           & 
     180         &      ss_e(0:jpi+1,0:jpj+1) ,                            &  
    182181         &      first_width(nclasses) , first_length(nclasses) ,   & 
    183182         &      src_calving (jpi,jpj) ,                            & 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbdyn.F90

    r14898 r15421  
    269269      ! 
    270270      INTEGER  ::   itloop 
    271       REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss, psr, pml 
     271      REAL(wp) ::   zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss 
    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, psr, pml ) 
     284         &                 pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss ) 
    285285 
    286286      zM = berg%current_point%mass 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbini.F90

    r14898 r15421  
    8080      ff_e(:,:) = 0._wp   ;   tt_e(:,:) = 0._wp   ; 
    8181      fr_e(:,:) = 0._wp   ;   ss_e(:,:) = 0._wp   ; 
    82       qsr_e(:,:) = 0._wp  ;   qml_e(:,:) = 0._wp  ; 
    8382#if defined key_si3 
    8483      hi_e(:,:) = 0._wp   ; 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbthm.F90

    r14898 r15421  
    5151      INTEGER  ::   ii, ij 
    5252      REAL(wp) ::   zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 
    53       REAL(wp) ::   zqsr, pqsr, zqml, pqml 
    5453      REAL(wp) ::   zSSS, zfzpt 
    55       REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv, zMt 
     54      REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 
    5655      REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat_hcflux, zheat_latent, z1_12 
    5756      REAL(wp) ::   zMbits, znMbits, zdMbitsE, zdMbitsM, zLbits, zAbits, zMbb 
     
    8887         CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x,   & 
    8988            &                 pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y,   & 
    90             &                 pt%sst, pt%cn, pt%hi, zff, pt%sss, pqsr, pqml ) 
     89            &                 pt%sst, pt%cn, pt%hi, zff, pt%sss ) 
    9190         ! 
    9291         zSST = pt%sst 
    9392         zSSS = pt%sss 
    94          zqsr = MAX( pqsr, 0._wp )                        ! Downward oceanic surface solar flux 
    95          zqml = MAX( pqml, 0._wp )                        ! Sea ice top melt 
    9693         CALL eos_fzp(zSSS,zfzpt)                       ! freezing point 
    9794         zIC  = MIN( 1._wp, pt%cn + rn_sicn_shift )     ! Shift sea-ice concentration       !!gm ??? 
     
    110107         zVol = zT * zW * zL 
    111108 
    112  
    113109         ! Environment 
    114110         zdvo = SQRT( (pt%uvel-pt%uo)**2 + (pt%vvel-pt%vo)**2 ) 
     
    125121         zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3)))     , 0._wp ) * z1_rday      ! Wave erosion                (eqn M.A8 ) 
    126122 
    127          ! Energy involved in top melt is a combination of 10% of solar flux (for portion of grid box that is ocean) and 
    128          ! 100% of sea ice top melt (for portion of grid box that is sea ice). Apply a maximum amount of melt of 5E-6 m/s 
    129          ! to keep this term lower than the other terms when the berg is in mid ocean. 
    130          zMt = MIN( (zqsr*0.1_wp + zqml) / (rLfus * rhoi) , 5.0E-6_wp ) 
    131  
    132123         IF( ln_operator_splitting ) THEN      ! Operator split update of volume/mass 
    133             zTn    = MAX( zT - zMb*zdt - zMt*zdt , 0._wp )         ! new total thickness (m) 
     124            zTn    = MAX( zT - zMb*zdt , 0._wp )         ! new total thickness (m) 
    134125            znVol  = zTn * zW * zL                       ! new volume (m^3) 
    135126            zMnew1 = ( znVol / zVol ) * zM               ! new mass (kg) 
     
    152143            zLn = MAX( zL -(zMv+zMe)*zdt ,0._wp )        ! (m) 
    153144            zWn = MAX( zW -(zMv+zMe)*zdt ,0._wp )        ! (m) 
    154             zTn = MAX( zT - zMb*zdt - zMt*zdt ,0._wp )   ! (m) 
     145            zTn = MAX( zT - zMb    *zdt ,0._wp )         ! (m) 
    155146            ! Update volume and mass of berg 
    156147            znVol = zTn*zWn*zLn                          ! (m^3) 
    157148            zMnew = (znVol/zVol)*zM                      ! (kg) 
    158149            zdM   = zM - zMnew                           ! (kg) 
    159             zdMb = (zM/zVol) * (zW*   zL ) *(zMb+zMt)*zdt      ! approx. mass loss to basal melting (kg) 
     150            zdMb = (zM/zVol) * (zW*   zL ) *zMb*zdt      ! approx. mass loss to basal melting (kg) 
    160151            zdMe = (zM/zVol) * (zT*(zW+zL)) *zMe*zdt     ! approx. mass lost to erosion (kg) 
    161152            zdMv = (zM/zVol) * (zT*(zW+zL)) *zMv*zdt     ! approx. mass loss to buoyant convection (kg) 
     
    174165            zdMbitsM = MIN( zMbb*zdt , znMbits )                                     ! bergy bits mass lost to melting (kg) 
    175166            znMbits  = znMbits-zdMbitsM                                              ! remove mass lost to bergy bits melt 
    176             IF( zMnew <= 0._wp ) THEN                                                ! if parent berg has completely melted then 
     167            IF( zMnew == 0._wp ) THEN                                                ! if parent berg has completely melted then 
    177168               zdMbitsM = zdMbitsM + znMbits                                         ! instantly melt all the bergy bits 
    178169               znMbits  = 0._wp 
     
    184175            znMbits  = pt%mass_of_bits                             ! retain previous value incase non-zero 
    185176         ENDIF 
    186  
    187  
    188177 
    189178         ! use tmask rather than tmask_i when dealing with icebergs 
  • NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbutl.F90

    r14898 r15421  
    2323   USE sbc_oce                             ! ocean surface boundary conditions 
    2424#if defined key_si3 
    25    USE ice,    ONLY: u_ice, v_ice, hm_i, a_i    ! SI3 variables 
     25   USE ice,    ONLY: u_ice, v_ice, hm_i    ! SI3 variables 
    2626   USE icevar                              ! ice_var_sshdyn 
    27    USE sbc_ice, ONLY: snwice_mass, snwice_mass_b, qsr_oce, qml_ice 
     27   USE sbc_ice, ONLY: snwice_mass, snwice_mass_b 
    2828#endif 
    2929 
     
    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       qsr_e(1:jpi,1:jpj) = qsr_oce(:,:) 
    81       qml_e(1:jpi,1:jpj) = SUM(qml_ice(:,:,:) * a_i(:,:,:), dim=3 ) 
    8280      ! 
    8381      CALL lbc_lnk_icb( 'icbutl', uo_e, 'U', -1._wp, 1, 1 ) 
     
    8987      CALL lbc_lnk_icb( 'icbutl', tt_e, 'T', +1._wp, 1, 1 ) 
    9088      CALL lbc_lnk_icb( 'icbutl', ss_e, 'T', +1._wp, 1, 1 ) 
    91       CALL lbc_lnk_icb( 'icbutl', qsr_e, 'T', +1._wp, 1, 1 ) 
    92       CALL lbc_lnk_icb( 'icbutl', qml_e, 'T', +1._wp, 1, 1 ) 
    9389#if defined key_si3 
    9490      hi_e(1:jpi, 1:jpj) = hm_i (:,:)   
     
    113109   SUBROUTINE icb_utl_interp( pi, pe1, puo, pui, pua, pssh_i,   & 
    114110      &                       pj, pe2, pvo, pvi, pva, pssh_j,   & 
    115       &                       psst, pcn, phi, pff, psss, pqsr, pqml        ) 
     111      &                       psst, pcn, phi, pff, psss        ) 
    116112      !!---------------------------------------------------------------------- 
    117113      !!                  ***  ROUTINE icb_utl_interp  *** 
     
    135131      REAL(wp), INTENT(  out) ::   pssh_i, pssh_j                 ! ssh i- & j-gradients 
    136132      REAL(wp), INTENT(  out) ::   psst, pcn, phi, pff, psss      ! SST, ice concentration, ice thickness, Coriolis, SSS 
    137       REAL(wp), INTENT(  out) ::   pqsr, pqml                     ! Ocean solar and sea ice top melt 
    138133      ! 
    139134      REAL(wp) ::   zcd, zmod       ! local scalars 
     
    149144      pcn  = icb_utl_bilin_h( fr_e, pi, pj, 'T', .true.   )    ! ice concentration 
    150145      pff  = icb_utl_bilin_h( ff_e, pi, pj, 'F', .false.  )    ! Coriolis parameter 
    151       pqsr  = icb_utl_bilin_h( qsr_e, pi, pj, 'T', .true.   )  ! Ocean surface solar 
    152       pqml  = icb_utl_bilin_h( qml_e, pi, pj, 'T', .true.   )  ! Sea ice top melt 
    153146      ! 
    154147      pua  = icb_utl_bilin_h( ua_e, pi, pj, 'U', .true.   )    ! 10m wind 
Note: See TracChangeset for help on using the changeset viewer.