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 5624 for branches/2015 – NEMO

Changeset 5624 for branches/2015


Ignore:
Timestamp:
2015-07-21T20:47:42+02:00 (9 years ago)
Author:
mathiot
Message:

UKMO_ISF : fix conservation issue based on the work of Jerome on runoff, simplification of trasbc (isf part only) and remove option to apply isf melting as volume flux or not

Location:
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/CONFIG/SHARED/namelist_ref

    r5621 r5624  
    255255   ln_dm2dc    = .false.   !  daily mean to diurnal cycle on short wave 
    256256   ln_rnf      = .true.    !  runoffs                                   (T   => fill namsbc_rnf) 
    257    nn_isf      = 0         !  ice shelf melting/freezing                (/=0 => fill namsbc_isf) 
    258                            !  0 =no isf                  1 = presence of ISF 
    259                            !  2 = bg03 parametrisation   3 = rnf file for isf 
    260                            !  4 = ISF fwf specified 
    261                            !  option 1 and 4 need ln_isfcav = .true. (domzgr) 
     257   ln_isf      = .false.   !  ice shelf                                 (T   => fill namsbc_isf) 
    262258   ln_ssr      = .true.    !  Sea Surface Restoring on T and/or S       (T => fill namsbc_ssr) 
    263259   nn_fwb      = 2         !  FreshWater Budget: =0 unchecked 
     
    454450   sn_Leff_isf = 'rnfisf' ,       0          ,'Leff'         ,   .false.  , .true.  , 'yearly'  ,  ''      ,   '' 
    455451! for all case 
    456    ln_divisf   = .true.  ! apply isf melting as a mass flux or in the salinity trend. (maybe I should remove this option as for runoff?) 
     452   nn_isf      = 1         !  ice shelf melting/freezing 
     453                           !  1 = presence of ISF    2 = bg03 parametrisation  
     454                           !  3 = rnf file for isf   4 = ISF fwf specified 
     455                           !  option 1 and 4 need ln_isfcav = .true. (domzgr) 
    457456! only for nn_isf = 1 or 2 
    458457   rn_gammat0  = 1.0e-4   ! gammat coefficient used in blk formula 
     
    462461   rn_hisf_tbl =  30.      ! thickness of the top boundary layer           (Losh et al. 2008) 
    463462                          ! 0 => thickness of the tbl = thickness of the first wet cell 
    464    ln_conserve = .true.   ! conservative case (take into account meltwater advection) 
    465463   nn_gammablk = 1        ! 0 = cst Gammat (= gammat/s) 
    466464                          ! 1 = velocity dependend Gamma (u* * gammat/s)  (Jenkins et al. 2010) 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90

    r4990 r5624  
    9191      ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 
    9292      ! ----------------------------------------------------------------------- 
    93       z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+rdivisf*fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
     93      z_cflxemp = SUM ( ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
    9494      IF( lk_mpp )   CALL mpp_sum( z_cflxemp )     ! sum over the global domain 
    9595 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90

    r5120 r5624  
    9393      ! 1 - Trends due to forcing ! 
    9494      ! ------------------------- ! 
    95       z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 
     95      z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 
    9696      z_frc_trd_t =           glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) )                               ! heat fluxes 
    9797      z_frc_trd_s =           glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) )                               ! salt fluxes 
     
    100100      IF( ln_rnf_sal)   z_frc_trd_s = z_frc_trd_s + glob_sum( rnf_tsc(:,:,jp_sal) * surf(:,:) ) 
    101101      ! Add ice shelf heat & salt input 
    102       IF( nn_isf .GE. 1 )  THEN 
    103           z_frc_trd_t = z_frc_trd_t & 
    104               &   + glob_sum( ( risf_tsc(:,:,jp_tem) - rdivisf * fwfisf(:,:) * (-1.9) * r1_rau0 ) * surf(:,:) ) 
    105           z_frc_trd_s = z_frc_trd_s + (1.0_wp - rdivisf) * glob_sum( risf_tsc(:,:,jp_sal) * surf(:,:) ) 
    106       ENDIF 
     102      IF( ln_isf    ) z_frc_trd_t = z_frc_trd_t + glob_sum( risf_tsc(:,:,jp_tem) * surf(:,:) ) 
    107103 
    108104      ! Add penetrative solar radiation 
     
    200196!      ENDIF 
    201197!!gm end 
    202  
    203198 
    204199      IF( lk_vvl ) THEN 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r5621 r5624  
    10021002 
    10031003      IF( ioptio /= 1 )   CALL ctl_stop( 'Choose ONE vertical coordinate in namelist nam_vvl' ) 
    1004       IF( .NOT. ln_vvl_zstar .AND. nn_isf .NE. 0) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 
     1004      IF( .NOT. ln_vvl_zstar .AND. ln_isf ) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 
    10051005 
    10061006      IF(lwp) THEN                   ! Print the choice 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r5621 r5624  
    2626   USE oce             ! ocean dynamics and tracers 
    2727   USE dom_oce         ! ocean space and time domain 
    28    USE sbc_oce, ONLY : ln_rnf, nn_isf ! surface boundary condition: ocean 
     28   USE sbc_oce, ONLY : ln_rnf, ln_isf ! surface boundary condition: ocean 
    2929   USE sbcrnf          ! river runoff  
    3030   USE sbcisf          ! ice shelf  
     
    229229 
    230230      IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )          ! runoffs   (update hdivn field) 
    231       IF( ln_divisf .AND. (nn_isf /= 0) )   CALL sbc_isf_div( hdivn )          ! ice shelf (update hdivn field) 
     231      IF( ln_isf      )   CALL sbc_isf_div( hdivn )          ! ice shelf (update hdivn field) 
    232232      IF( nn_cla == 1 )   CALL cla_div    ( kt )             ! Cross Land Advection (Update Hor. divergence) 
    233233       
     
    328328 
    329329      IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )                            ! runoffs (update hdivn field) 
    330       IF( ln_divisf .AND. (nn_isf .GT. 0) )   CALL sbc_isf_div( hdivn )          ! ice shelf (update hdivn field) 
     330      IF( ln_isf      )   CALL sbc_isf_div( hdivn )          ! ice shelf (update hdivn field) 
    331331      IF( nn_cla == 1 )   CALL cla_div    ( kt )             ! Cross Land Advection (update hdivn field) 
    332332      ! 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r5621 r5624  
    266266               ! Add volume filter correction: compatibility with tracer advection scheme 
    267267               ! => time filter + conservation correction (only at the first level) 
    268                fse3t_b(:,:,1) = fse3t_b(:,:,1) - atfp * rdt * r1_rau0 * ( emp_b(:,:) - emp(:,:) & 
    269                               &                                          -rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1) 
    270                !DO jj = 1,jpj 
    271                !   DO ji = 1,jpi 
    272                !      jk = mikt(ji,jj) 
    273                !      fse3t_b(ji,jj,jk) = fse3t_b(ji,jj,jk) - atfp * rdt * r1_rau0  
    274                !                        &                          * ( (emp_b(ji,jj) - emp(ji,jj) ) & 
    275                !                        &                            - (rnf_b(ji,jj) - rnf(ji,jj) ) &     
    276                !                        &                            + (fwfisf_b(ji,jj) - fwfisf(ji,jj) ) ) * tmask(ji,jj,jk) ! ????? 
    277                !   END DO 
    278                !END DO 
     268               DO jj = 1,jpj 
     269                  DO ji = 1,jpi 
     270                     jk = mikt(ji,jj) 
     271                     fse3t_b(ji,jj,jk) = fse3t_b(ji,jj,jk) - atfp * rdt * r1_rau0                  &  
     272                                       &                          * ( (emp_b(ji,jj) - emp(ji,jj) ) & 
     273                                       &                            - (rnf_b(ji,jj) - rnf(ji,jj) ) &     
     274                                       &                            + (fwfisf_b(ji,jj) - fwfisf(ji,jj) ) ) * tmask(ji,jj,jk) 
     275                  END DO 
     276               END DO 
    279277            ENDIF 
    280278            ! 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5621 r5624  
    454454      !                                         ! Surface net water flux and rivers 
    455455      IF (ln_bt_fw) THEN 
    456          zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) 
     456         zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 
    457457      ELSE 
    458458         zssh_frc(:,:) = zraur * z1_2 * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:)   & 
    459                 &                        + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) )       ) 
     459                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    460460      ENDIF 
    461461#if defined key_asminc 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r5621 r5624  
    268268      ELSE                                         !** Leap-Frog time-stepping: Asselin filter + swap 
    269269         sshb(:,:) = sshn(:,:) + atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) )     ! before <-- now filtered 
    270          IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) - rnf_b(:,:) + rnf(:,:) ) * ssmask(:,:) 
    271          !IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( (emp_b(:,:) - emp(:,:)) - (rnf_b(:,:) - rnf(:,:))  & 
    272          !                 &                                       + (fwfisf_b(:,:) - fwfisf(:,:))) * ssmask(:,:) 
     270         IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( (emp_b(:,:) - emp(:,:))      & 
     271                          &                                       - (rnf_b(:,:) - rnf(:,:))      & 
     272                          &                                       + (fwfisf_b(:,:) - fwfisf(:,:))) * ssmask(:,:) 
    273273         sshn(:,:) = ssha(:,:)                           ! now <-- after 
    274274      ENDIF 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r5621 r5624  
    4444   LOGICAL , PUBLIC ::   ln_dm2dc       !: Daily mean to Diurnal Cycle short wave (qsr) 
    4545   LOGICAL , PUBLIC ::   ln_rnf         !: runoffs / runoff mouths 
     46   LOGICAL , PUBLIC ::   ln_isf         !: ice shelf melting 
    4647   LOGICAL , PUBLIC ::   ln_ssr         !: Sea Surface restoring on SST and/or SSS       
    4748   LOGICAL , PUBLIC ::   ln_apr_dyn     !: Atmospheric pressure forcing used on dynamics (ocean & ice) 
    4849   INTEGER , PUBLIC ::   nn_ice         !: flag for ice in the surface boundary condition (=0/1/2/3) 
    49    INTEGER , PUBLIC ::   nn_isf         !: flag for isf in the surface boundary condition (=0/1/2/3/4)  
    5050   INTEGER , PUBLIC ::   nn_ice_embd    !: flag for levitating/embedding sea-ice in the ocean 
    5151   !                                             !: =0 levitating ice (no mass exchange, concentration/dilution effect) 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r5120 r5624  
    108108         ! 
    109109         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    110             z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) -  snwice_fmass(:,:) ) ) / area   ! sum over the global domain 
     110            z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) -  snwice_fmass(:,:) ) ) / area   ! sum over the global domain 
    111111            zcoef = z_fwf * rcp 
    112112            emp(:,:) = emp(:,:) - z_fwf              * tmask(:,:,1) 
     
    162162            zsurf_pos = glob_sum( e1e2t(:,:)*ztmsk_pos(:,:) ) 
    163163            !                                                  ! fwf global mean (excluding ocean to ice/snow exchanges)  
    164             z_fwf     = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) - snwice_fmass(:,:) ) ) / area 
     164            z_fwf     = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area 
    165165            !             
    166166            IF( z_fwf < 0._wp ) THEN         ! spread out over >0 erp area to increase evaporation 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r5621 r5624  
    3939   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   qisf              !: net heat flux from ice shelf 
    4040   REAL(wp), PUBLIC ::   rn_hisf_tbl                 !: thickness of top boundary layer [m] 
    41    LOGICAL , PUBLIC ::   ln_divisf                   !: flag to correct divergence  
     41   INTEGER , PUBLIC ::   nn_isf                      !: flag to choose between explicit/param/specified  
    4242   INTEGER , PUBLIC ::   nn_isfblk                   !:  
    4343   INTEGER , PUBLIC ::   nn_gammablk                 !: 
    44    LOGICAL , PUBLIC ::   ln_conserve                 !: 
    4544   REAL(wp), PUBLIC ::   rn_gammat0                  !: temperature exchange coeficient 
    4645   REAL(wp), PUBLIC ::   rn_gammas0                  !: salinity    exchange coeficient  
    47    REAL(wp), PUBLIC ::   rdivisf                     !: flag to test if fwf apply on divergence 
    4846 
    4947   REAL(wp)   , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:)     ::  rzisf_tbl              !:depth of calving front (shallowest point) nn_isf ==2/3 
     
    9189    INTEGER             :: ikt, ikb   ! top and bottom level of the isf boundary layer 
    9290    REAL(wp)            :: zhk 
     91    REAL(wp)            ::   zt_frz, zpress 
    9392    CHARACTER(len=256)  :: cvarzisf, cvarhisf   ! name for isf file 
    9493    CHARACTER(LEN=32 )  :: cvarLeff                    ! variable name for efficient Length scale 
     
    9695      ! 
    9796      !!--------------------------------------------------------------------- 
    98       NAMELIST/namsbc_isf/ nn_isfblk, rn_hisf_tbl, ln_divisf, ln_conserve, rn_gammat0, rn_gammas0, nn_gammablk, & 
     97      NAMELIST/namsbc_isf/ nn_isfblk, rn_hisf_tbl, rn_gammat0, rn_gammas0, nn_gammablk, nn_isf      , & 
    9998                         & sn_fwfisf, sn_qisf, sn_rnfisf, sn_depmax_isf, sn_depmin_isf, sn_Leff_isf 
    10099      ! 
     
    121120         IF ( lwp ) WRITE(numout,*) '        nn_isfblk   = ', nn_isfblk 
    122121         IF ( lwp ) WRITE(numout,*) '        rn_hisf_tbl = ', rn_hisf_tbl 
    123          IF ( lwp ) WRITE(numout,*) '        ln_divisf   = ', ln_divisf  
    124122         IF ( lwp ) WRITE(numout,*) '        nn_gammablk = ', nn_gammablk  
    125123         IF ( lwp ) WRITE(numout,*) '        rn_gammat0  = ', rn_gammat0   
    126124         IF ( lwp ) WRITE(numout,*) '        rn_gammas0  = ', rn_gammas0   
    127125         IF ( lwp ) WRITE(numout,*) '        rn_tfri2    = ', rn_tfri2  
    128          IF (ln_divisf) THEN       ! keep it in the namelist ??? used true anyway as for runoff ? (PM) 
    129             rdivisf = 1._wp 
    130          ELSE 
    131             rdivisf = 0._wp 
    132          END IF 
    133126         ! 
    134127         ! Allocate public variable 
     
    270263         ! compute tsc due to isf 
    271264         ! WARNING water add at temp = 0C, correction term is added in trasbc, maybe better here but need a 3D variable). 
    272          risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp ! 
     265!         zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04 
     266         zt_frz = -1.9_wp !CALL eos_fzp( tsn(ji,jj,jk,jp_sal), zt_frz, zpress ) 
     267         risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp - fwfisf(:,:) * zt_frz * r1_rau0 ! 
    273268          
    274269         ! salt effect already take into account in vertical advection 
    275          risf_tsc(:,:,jp_sal) = (1.0_wp-rdivisf) * fwfisf(:,:) * stbl(:,:) * r1_rau0 
    276            
     270         risf_tsc(:,:,jp_sal) = 0.0_wp 
     271 
    277272         ! lbclnk 
    278273         CALL lbc_lnk(risf_tsc(:,:,jp_tem),'T',1.) 
     
    296291         ! output 
    297292         IF( iom_use('qisf'  ) )   CALL iom_put('qisf'  , qisf) 
    298          IF( iom_use('fwfisf') )   CALL iom_put('fwfisf', fwfisf * stbl / soce ) 
     293         IF( iom_use('fwfisf') )   CALL iom_put('fwfisf', fwfisf) 
    299294      END IF 
    300295   
     
    426421 
    427422      ! initialisation 
    428       IF (ln_conserve) THEN ;  zcfac=1.0_wp 
    429       ELSE                  ;  zcfac=0.0_wp 
    430       ENDIF 
    431423      zpress (:,:)=0.0_wp 
    432424      zgammat(:,:)=rn_gammat0 ; zgammas (:,:)=rn_gammas0; 
     
    500492                  ! zfwflx is upward water flux 
    501493                  ! zhtflx is upward heat flux (out of ocean) 
    502 ! If non conservative we have zcfac=0.0 so zhtflx is as ISOMIP but with different zfrz value 
    503 ! If non conservative we have zcfac=0.0 so what follows is then zfwflx*sss_m/zsfrz 
    504494                  ! compute the upward water and heat flux 
    505495                  zfwflx(ji,jj) = rau0 * zgammas(ji,jj) * (zsfrz-stbl(ji,jj)) / MAX(zsfrz,zeps) 
    506                   zhtflx(ji,jj) = ( zgammat(ji,jj) * rau0 - zcfac * zfwflx(ji,jj) ) * rcp * (zti(ji,jj) - zfrz(ji,jj) )  
    507                   zfwflx(ji,jj) = ( zgammas(ji,jj) * rau0 - zcfac * zfwflx(ji,jj) ) * (zsfrz - stbl(ji,jj)) / MAX(stbl(ji,jj),zeps) 
     496                  zhtflx(ji,jj) = zgammat(ji,jj) * rau0 * rcp * (zti(ji,jj) - zfrz(ji,jj) )  
    508497               END DO 
    509498            END DO 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r5621 r5624  
    8888      NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx, ln_blk_clio, ln_blk_core, ln_mixcpl,   & 
    8989         &             ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc   , ln_rnf   ,   & 
    90          &             ln_ssr    , nn_isf    , nn_fwb, ln_cdgw    , ln_wave    , ln_sdw   ,   & 
     90         &             ln_ssr    , ln_isf    , nn_fwb, ln_cdgw    , ln_wave    , ln_sdw   ,   & 
    9191         &             nn_lsm    , nn_limflx , nn_components, ln_cpl 
    9292      INTEGER  ::   ios 
     
    141141         WRITE(numout,*) '              daily mean to diurnal cycle qsr            ln_dm2dc    = ', ln_dm2dc  
    142142         WRITE(numout,*) '              runoff / runoff mouths                     ln_rnf      = ', ln_rnf 
    143          WRITE(numout,*) '              iceshelf formulation                       nn_isf      = ', nn_isf 
     143         WRITE(numout,*) '              iceshelf melting                           ln_isf      = ', ln_isf 
    144144         WRITE(numout,*) '              Sea Surface Restoring on SST and/or SSS    ln_ssr      = ', ln_ssr 
    145145         WRITE(numout,*) '              FreshWater Budget control  (=0/1/2)        nn_fwb      = ', nn_fwb 
     
    179179 
    180180      !                          ! Checks: 
    181       IF( nn_isf .EQ. 0 ) THEN                      ! variable initialisation if no ice shelf  
     181      IF( ln_isf ) THEN                      ! variable initialisation if no ice shelf  
    182182         IF( sbc_isf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 
    183183         fwfisf  (:,:) = 0.0_wp 
    184184         fwfisf_b(:,:) = 0.0_wp 
    185          rdivisf       = 0.0_wp 
    186185      END IF 
    187186      IF( nn_ice == 0 .AND. nn_components /= jp_iam_opa )   fr_i(:,:) = 0.e0 ! no ice in the domain, ice fraction is always zero 
     
    396395      IF( ln_icebergs    )   CALL icb_stp( kt )                   ! compute icebergs 
    397396 
    398       IF( nn_isf   /= 0  )   CALL sbc_isf( kt )                    ! compute iceshelves 
     397      IF( ln_isf         )   CALL sbc_isf( kt )                   ! compute iceshelves 
    399398 
    400399      IF( ln_rnf         )   CALL sbc_rnf( kt )                   ! add runoffs to fresh water fluxes 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r5621 r5624  
    2828   USE sbc_oce         ! surface boundary condition: ocean 
    2929   USE sbcrnf          ! river runoffs 
     30   USE sbcisf          ! ice shelf melting 
    3031   USE zdf_oce         ! ocean vertical mixing 
    3132   USE domvvl          ! variable volume 
     
    279280 
    280281      !!      
    281       LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf   ! local logical 
     282      LOGICAL  ::   ll_tra_hpg, ll_traqsr, ll_rnf, ll_isf   ! local logical 
    282283      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    283284      REAL(wp) ::   zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     
    295296         ll_traqsr  = ln_traqsr        ! active  tracers case  and  solar penetration 
    296297         ll_rnf     = ln_rnf           ! active  tracers case  and  river runoffs 
     298         ll_isf     = ln_isf           ! active  tracers case  and  ice shelf melting 
    297299      ELSE                           
    298300         ll_tra_hpg = .FALSE.          ! passive tracers case or NO semi-implicit hpg 
    299301         ll_traqsr  = .FALSE.          ! active  tracers case and NO solar penetration 
    300302         ll_rnf     = .FALSE.          ! passive tracers or NO river runoffs 
     303         ll_isf     = .FALSE.          ! passive tracers or NO ice shelf melting 
    301304      ENDIF 
    302305      ! 
     
    321324                  ztc_f  = ztc_n  + atfp * ztc_d 
    322325                  ! 
    323                   IF( jk == 1 ) THEN           ! first level  
    324                 !  IF( jk == mikt(ji,jj) ) THEN           ! first level  
    325                      ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) + rnf(ji,jj) - rnf_b(ji,jj)) 
    326                 !     ze3t_f = ze3t_f - zfact2 * ( (emp_b(ji,jj) - emp(ji,jj))          & 
    327                 !            &                   - (rnf_b(ji,jj) - rnf(ji,jj))          & 
    328                 !            &                   + (fwfisf_b(ji,jj) - fwfisf(ji,jj)) ) 
     326                  IF( jk == mikt(ji,jj) ) THEN           ! first level  
     327                     ze3t_f = ze3t_f - zfact2 * ( (emp_b(ji,jj) - emp(ji,jj))          & 
     328                            &                   - (rnf_b(ji,jj) - rnf(ji,jj))          & 
     329                            &                   + (fwfisf_b(ji,jj) - fwfisf(ji,jj)) ) 
    329330                             
    330331                     ztc_f  = ztc_f  - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 
     
    334335                     &     ztc_f  = ztc_f  - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) )  
    335336 
    336                   IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )   &            ! river runoffs 
     337                  ! river runoffs 
     338                  IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) )                                          &  
    337339                     &     ztc_f  = ztc_f  - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) &  
    338340                     &                              * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 
    339341 
    340                   !IF( nn_isf .NE. 0 .AND. jk == mikt(ji,jj) )   &            ! ice shelf 
    341                   !   &     ztc_f  = ztc_f  + zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) &  
    342                   !   &                              * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) 
     342                  ! ice shelf 
     343                  IF( ll_isf ) THEN 
     344                     ! level fully include in the Losch_2008 ice shelf boundary layer 
     345                     IF ( jk >= misfkt(ji,jj) .AND. jk < misfkb(ji,jj) )                             & 
     346                        ztc_f  = ztc_f  - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) &  
     347                               &                 * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) 
     348                     ! level partially include in Losch_2008 ice shelf boundary layer  
     349                     IF ( jk == misfkb(ji,jj) )                                                    & 
     350                        ztc_f  = ztc_f  - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) &  
     351                               &                 * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) * ralpha(ji,jj) 
     352                  END IF 
    343353 
    344354                  ze3t_f = 1.e0 / ze3t_f 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r5621 r5624  
    217217      !---------------------------------------- 
    218218      ! 
    219       IF( nn_isf > 0 ) THEN 
     219      IF( ln_isf ) THEN 
    220220         zfact = 0.5_wp 
    221221         DO jj = 2, jpj 
     
    226226    
    227227               ! level fully include in the ice shelf boundary layer 
    228                ! if isfdiv, we have to remove heat flux due to inflow at 0oC (as in rnf when you add rnf at sst) 
    229228               ! sign - because fwf sign of evapo (rnf sign of precip) 
    230229               DO jk = ikt, ikb - 1 
    231                ! compute tfreez for the temperature correction (we add water at freezing temperature) 
    232 !                  zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04 
    233                   zt_frz = -1.9_wp !CALL eos_fzp( tsn(ji,jj,jk,jp_sal), zt_frz, zpress ) 
    234230               ! compute trend 
    235231                  tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)                                                & 
    236                      &           + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem)               & 
    237                      &                     - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) & 
    238                      &           * r1_hisf_tbl(ji,jj) 
    239                   tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)                                                & 
    240                      &           + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal))               & 
     232                     &           + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )             & 
    241233                     &           * r1_hisf_tbl(ji,jj) 
    242234               END DO 
    243235    
    244236               ! level partially include in ice shelf boundary layer  
    245                ! compute tfreez for the temperature correction (we add water at freezing temperature) 
    246 !               zpress = grav*rau0*fsdept(ji,jj,ikb)*1.e-04 
    247                zt_frz = -1.9_wp !CALL eos_fzp( tsn(ji,jj,ikb,jp_sal), zt_frz, zpress ) 
    248237               ! compute trend 
    249238               tsa(ji,jj,ikb,jp_tem) = tsa(ji,jj,ikb,jp_tem)                                                 & 
    250                   &              + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem)               & 
    251                   &                        - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) &  
     239                  &              + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )             & 
    252240                  &              * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 
    253                tsa(ji,jj,ikb,jp_sal) = tsa(ji,jj,ikb,jp_sal)                                                 & 
    254                   &              + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal))               & 
    255                   &              * r1_hisf_tbl(ji,jj) * ralpha(ji,jj)  
    256241 
    257242            END DO 
Note: See TracChangeset for help on using the changeset viewer.