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/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90 – NEMO

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.