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 9190 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ICB/icbthm.F90 – NEMO

Ignore:
Timestamp:
2018-01-06T15:18:23+01:00 (6 years ago)
Author:
gm
Message:

dev_merge_2017: OPA_SRC: style only, results unchanged

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ICB/icbthm.F90

    r5836 r9190  
    11MODULE icbthm 
    2  
    32   !!====================================================================== 
    43   !!                       ***  MODULE  icbthm  *** 
     
    3130   PUBLIC   icb_thm ! routine called in icbstp.F90 module 
    3231 
     32   !!---------------------------------------------------------------------- 
     33   !! NEMO/OPA 3.3 , NEMO Consortium (2011) 
    3334   !! $Id$ 
     35   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     36   !!---------------------------------------------------------------------- 
    3437CONTAINS 
    3538 
     
    5558      ! 
    5659      z1_rday = 1._wp / rday 
    57        
     60      ! 
    5861      ! we're either going to ignore berg fresh water melt flux and associated heat 
    5962      ! or we pass it into the ocean, so at this point we set them both to zero, 
     
    6366      berg_grid%floating_melt(:,:) = 0._wp 
    6467      berg_grid%calving_hflx(:,:)  = 0._wp 
    65      
     68      ! 
    6669      this => first_berg 
    67       DO WHILE( associated(this) ) 
     70      DO WHILE( ASSOCIATED(this) ) 
    6871         ! 
    6972         pt => this%current_point 
    7073         nknberg = this%number(1) 
    71          CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x, & 
    72          &                    pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y, & 
    73          &                 pt%sst, pt%cn, pt%hi, zff ) 
     74         CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x,   & 
     75            &                 pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y,  & 
     76            &                 pt%sst, pt%cn, pt%hi, zff ) 
    7477         ! 
    7578         zSST = pt%sst 
     
    98101         zMv = MAX( 7.62e-3*zSST+1.29e-3*(zSST**2)            , 0._wp ) * z1_rday   ! Buoyant convection at sides (eqn M.A10) 
    99102         zMb = MAX( 0.58*(zdvo**0.8)*(zSST+4.0)/(zL**0.2)      , 0._wp ) * z1_rday   ! Basal turbulent melting     (eqn M.A7 ) 
    100          zMe = MAX( 1./12.*(zSST+2.)*zSs*(1+cos(rpi*(zIC**3))) , 0._wp ) * z1_rday   ! Wave erosion                (eqn M.A8 ) 
     103         zMe = MAX( 1./12.*(zSST+2.)*zSs*(1+COS(rpi*(zIC**3))) , 0._wp ) * z1_rday   ! Wave erosion                (eqn M.A8 ) 
    101104 
    102105         IF( ln_operator_splitting ) THEN      ! Operator split update of volume/mass 
    103106            zTn    = MAX( zT - zMb*zdt , 0._wp )         ! new total thickness (m) 
    104             znVol  = zTn * zW * zL                        ! new volume (m^3) 
    105             zMnew1 = (znVol/zVol) * zM                    ! new mass (kg) 
     107            znVol  = zTn * zW * zL                       ! new volume (m^3) 
     108            zMnew1 = (znVol/zVol) * zM                   ! new mass (kg) 
    106109            zdMb   = zM - zMnew1                         ! mass lost to basal melting (>0) (kg) 
    107110            ! 
    108111            zLn    = MAX( zL - zMv*zdt , 0._wp )         ! new length (m) 
    109112            zWn    = MAX( zW - zMv*zdt , 0._wp )         ! new width (m) 
    110             znVol  = zTn * zWn * zLn                      ! new volume (m^3) 
    111             zMnew2 = (znVol/zVol) * zM                    ! new mass (kg) 
     113            znVol  = zTn * zWn * zLn                     ! new volume (m^3) 
     114            zMnew2 = (znVol/zVol) * zM                   ! new mass (kg) 
    112115            zdMv   = zMnew1 - zMnew2                     ! mass lost to buoyant convection (>0) (kg) 
    113116            ! 
    114117            zLn    = MAX( zLn - zMe*zdt , 0._wp )        ! new length (m) 
    115118            zWn    = MAX( zWn - zMe*zdt , 0._wp )        ! new width (m) 
    116             znVol  = zTn * zWn * zLn                      ! new volume (m^3) 
    117             zMnew  = ( znVol / zVol ) * zM                ! new mass (kg) 
     119            znVol  = zTn * zWn * zLn                     ! new volume (m^3) 
     120            zMnew  = ( znVol / zVol ) * zM               ! new mass (kg) 
    118121            zdMe   = zMnew2 - zMnew                      ! mass lost to erosion (>0) (kg) 
    119122            zdM    = zM - zMnew                          ! mass lost to all erosion and melting (>0) (kg) 
    120123            ! 
    121124         ELSE                                         ! Update dimensions of berg 
    122             zLn = MAX( zL -(zMv+zMe)*zdt ,0._wp )         ! (m) 
    123             zWn = MAX( zW -(zMv+zMe)*zdt ,0._wp )         ! (m) 
     125            zLn = MAX( zL -(zMv+zMe)*zdt ,0._wp )        ! (m) 
     126            zWn = MAX( zW -(zMv+zMe)*zdt ,0._wp )        ! (m) 
    124127            zTn = MAX( zT - zMb    *zdt ,0._wp )         ! (m) 
    125128            ! Update volume and mass of berg 
    126             znVol = zTn*zWn*zLn                           ! (m^3) 
    127             zMnew = (znVol/zVol)*zM                       ! (kg) 
     129            znVol = zTn*zWn*zLn                          ! (m^3) 
     130            zMnew = (znVol/zVol)*zM                      ! (kg) 
    128131            zdM   = zM - zMnew                           ! (kg) 
    129             zdMb = (zM/zVol) * (zW*   zL ) *zMb*zdt         ! approx. mass loss to basal melting (kg) 
    130             zdMe = (zM/zVol) * (zT*(zW+zL)) *zMe*zdt         ! approx. mass lost to erosion (kg) 
    131             zdMv = (zM/zVol) * (zT*(zW+zL)) *zMv*zdt         ! approx. mass loss to buoyant convection (kg) 
    132          ENDIF 
    133  
    134          IF( rn_bits_erosion_fraction > 0._wp ) THEN      ! Bergy bits 
     132            zdMb = (zM/zVol) * (zW*   zL ) *zMb*zdt      ! approx. mass loss to basal melting (kg) 
     133            zdMe = (zM/zVol) * (zT*(zW+zL)) *zMe*zdt     ! approx. mass lost to erosion (kg) 
     134            zdMv = (zM/zVol) * (zT*(zW+zL)) *zMv*zdt     ! approx. mass loss to buoyant convection (kg) 
     135         ENDIF 
     136 
     137         IF( rn_bits_erosion_fraction > 0._wp ) THEN     ! Bergy bits 
    135138            ! 
    136139            zMbits   = pt%mass_of_bits                                               ! mass of bergy bits (kg) 
    137             zdMbitsE = rn_bits_erosion_fraction * zdMe                        ! change in mass of bits (kg) 
    138             znMbits  = zMbits + zdMbitsE                                               ! add new bergy bits to mass (kg) 
    139             zLbits   = MIN( zL, zW, zT, 40._wp )                                        ! assume bergy bits are smallest dimension or 40 meters 
    140             zAbits   = ( zMbits / rn_rho_bergs ) / zLbits                           ! Effective bottom area (assuming T=Lbits) 
    141             zMbb     = MAX( 0.58*(zdvo**0.8)*(zSST+2.0)/(zLbits**0.2), 0.) * z1_rday    ! Basal turbulent melting (for bits) 
    142             zMbb     = rn_rho_bergs * zAbits * zMbb                                 ! in kg/s 
    143             zdMbitsM = MIN( zMbb*zdt , znMbits )                                       ! bergy bits mass lost to melting (kg) 
    144             znMbits  = znMbits-zdMbitsM                                                ! remove mass lost to bergy bits melt 
     140            zdMbitsE = rn_bits_erosion_fraction * zdMe                               ! change in mass of bits (kg) 
     141            znMbits  = zMbits + zdMbitsE                                             ! add new bergy bits to mass (kg) 
     142            zLbits   = MIN( zL, zW, zT, 40._wp )                                     ! assume bergy bits are smallest dimension or 40 meters 
     143            zAbits   = ( zMbits / rn_rho_bergs ) / zLbits                            ! Effective bottom area (assuming T=Lbits) 
     144            zMbb     = MAX( 0.58*(zdvo**0.8)*(zSST+2.0)/(zLbits**0.2), 0.) * z1_rday ! Basal turbulent melting (for bits) 
     145            zMbb     = rn_rho_bergs * zAbits * zMbb                                  ! in kg/s 
     146            zdMbitsM = MIN( zMbb*zdt , znMbits )                                     ! bergy bits mass lost to melting (kg) 
     147            znMbits  = znMbits-zdMbitsM                                              ! remove mass lost to bergy bits melt 
    145148            IF( zMnew == 0._wp ) THEN                                                ! if parent berg has completely melted then 
    146                zdMbitsM = zdMbitsM + znMbits                                           ! instantly melt all the bergy bits 
     149               zdMbitsM = zdMbitsM + znMbits                                         ! instantly melt all the bergy bits 
    147150               znMbits  = 0._wp 
    148151            ENDIF 
     
    163166            berg_grid%calving_hflx (ii,ij) = berg_grid%calving_hflx (ii,ij) + zheat    * z1_e1e2    ! W/m2 
    164167            CALL icb_dia_melt( ii, ij, zMnew, zheat, this%mass_scaling,       & 
    165             &                          zdM, zdMbitsE, zdMbitsM, zdMb, zdMe,   & 
    166             &                          zdMv, z1_dt_e1e2 ) 
     168               &                       zdM, zdMbitsE, zdMbitsM, zdMb, zdMe,   & 
     169               &                       zdMv, z1_dt_e1e2 ) 
    167170         ELSE 
    168171            WRITE(numout,*) 'icb_thm: berg ',this%number(:),' appears to have grounded  at ',narea,ii,ij 
     
    178181            zTn = zWn 
    179182            zWn = zT 
    180          endif 
     183         ENDIF 
    181184 
    182185         ! Store the new state of iceberg (with L>W) 
     
    184187         pt%mass_of_bits = znMbits 
    185188         pt%thickness    = zTn 
    186          pt%width        = min(zWn,zLn) 
    187          pt%length       = max(zWn,zLn) 
     189         pt%width        = MIN( zWn , zLn ) 
     190         pt%length       = MAX( zWn , zLn ) 
    188191 
    189192         next=>this%next 
     
    197200            z1_e1e2 = r1_e1e2t(ii,ij) * this%mass_scaling 
    198201            CALL icb_dia_size( ii, ij, zWn, zLn, zAbits,   & 
    199             &                  this%mass_scaling, zMnew, znMbits, z1_e1e2) 
     202               &               this%mass_scaling, zMnew, znMbits, z1_e1e2 ) 
    200203         ENDIF 
    201204         ! 
     
    203206         ! 
    204207      END DO 
    205        
     208 
    206209      ! now use melt and associated heat flux in ocean (or not) 
    207210      ! 
Note: See TracChangeset for help on using the changeset viewer.