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 4726 for branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90 – NEMO

Ignore:
Timestamp:
2014-07-23T18:27:21+02:00 (10 years ago)
Author:
mathiot
Message:

ISF branch: change name of 2 variables (icedep => risfdep and lmask => ssmask), cosmetic changes and add ldfslp key

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r4666 r4726  
    5151   REAL(wp)   , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:)     ::  rhisf_tbl, rhisf_tbl_0 !:depth of ice shelf base  ???? 
    5252   REAL(wp)   , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:)     ::  r1_hisf_tbl            !:1/depth of ice shelf base  ???? 
     53   REAL(wp)   , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:)     ::  ralpha                 !:proportion of bottom cell influenced by boundary layer  
    5354   REAL(wp)   , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:)     ::  risfLeff               !:effective length (Leff) BG03 nn_isf==2 ? 
    5455   REAL(wp)   , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:)     ::  ttbl, stbl, utbl, vtbl !:top boundary layer variable at T point 
     
    8586    INTEGER                      ::   ikt, ikb   ! top and bottom level of the isf boundary layer 
    8687    REAL(wp)                     ::   rmin 
     88    REAL(wp)                     ::   zhk 
    8789    CHARACTER(len=256)           ::   cfisf, cvarzisf, cvarhisf   ! name for isf file 
    8890    CHARACTER(LEN=256)           :: cnameis                     ! name of iceshelf file 
     
    188190          
    189191         rhisf_tbl_0(:,:) = rhisf_tbl(:,:) 
    190           
    191       END IF 
    192  
    193       IF( MOD( kt-1, nn_fsbc) == 0 ) THEN 
    194192 
    195193         ! compute bottom level of isf tbl and thickness of tbl below the ice shelf 
    196          ! need to be move out of this test for vvl case 
    197194         DO jj = 1,jpj 
    198195            DO ji = 1,jpi 
     
    200197               ikb = misfkt(ji,jj) 
    201198               ! thickness of boundary layer at least the top level thickness 
    202                rhisf_tbl(ji,jj) = MAX(rhisf_tbl_0(ji,jj), fse3t(ji,jj,ikt)) 
     199               rhisf_tbl(ji,jj) = MAX(rhisf_tbl_0(ji,jj), fse3t_n(ji,jj,ikt)) 
    203200 
    204201               ! determine the deepest level influenced by the boundary layer 
    205202               ! test on tmask useless ????? 
    206203               DO jk = ikt, mbkt(ji,jj) 
    207                   IF ( (SUM(fse3t(ji,jj,ikt:jk-1)) .LT. rhisf_tbl(ji,jj)) .AND. (tmask(ji,jj,jk) == 1) ) ikb = jk 
     204                  IF ( (SUM(fse3t_n(ji,jj,ikt:jk-1)) .LT. rhisf_tbl(ji,jj)) .AND. (tmask(ji,jj,jk) == 1) ) ikb = jk 
    208205               END DO 
    209                rhisf_tbl(ji,jj) = MIN(rhisf_tbl(ji,jj), SUM(fse3t(ji,jj,ikt:ikb)))  ! limit the tbl to water thickness. 
     206               rhisf_tbl(ji,jj) = MIN(rhisf_tbl(ji,jj), SUM(fse3t_n(ji,jj,ikt:ikb)))  ! limit the tbl to water thickness. 
    210207               misfkb(ji,jj) = ikb                                                  ! last wet level of the tbl 
    211208               r1_hisf_tbl(ji,jj) = 1._wp / rhisf_tbl(ji,jj) 
     209 
     210               zhk           = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj)  ! proportion of tbl cover by cell from ikt to ikb - 1 
     211               ralpha(ji,jj) = rhisf_tbl(ji,jj) * (1._wp - zhk ) / fse3t(ji,jj,ikb)  ! proportion of bottom cell influenced by boundary layer 
    212212            END DO 
    213213         END DO 
    214  
    215          ! initialisation 
    216          risf_tsc_b(:,:,:)=risf_tsc(:,:,:) ; fwfisf_b(:,:) = fwfisf(:,:)         
     214          
     215      END IF 
     216 
     217      !                                            ! ---------------------------------------- ! 
     218      IF( kt /= nit000 ) THEN                      !          Swap of forcing fields          ! 
     219         !                                         ! ---------------------------------------- ! 
     220         fwfisf_b  (:,:  ) = fwfisf  (:,:  )               ! Swap the ocean forcing fields except at nit000 
     221         risf_tsc_b(:,:,:) = risf_tsc(:,:,:)               ! where before fields are set at the end of the routine 
     222         ! 
     223      ENDIF 
     224 
     225      IF( MOD( kt-1, nn_fsbc) == 0 ) THEN 
     226 
     227 
    217228         ! compute salf and heat flux 
    218229         IF (nn_isf == 1) THEN 
     
    282293         CALL iom_put('qisf'  , qisf) 
    283294         CALL iom_put('fwfisf', fwfisf * stbl(:,:) / soce ) 
    284 !         CALL iom_put('misfkt', misfkt*1._wp) 
    285 !         CALL iom_put('misfkb', misfkb*1._wp) 
    286 !         CALL iom_put('rhisf', rhisf_tbl) 
    287295      END IF 
    288296   
     
    298306               &    fwfisf_b(jpi,jpj), misfkt(jpi,jpj), rhisf_tbl(jpi,jpj), r1_hisf_tbl(jpi,jpj),     & 
    299307               &    rzisf_tbl(jpi,jpj), misfkb(jpi,jpj), ttbl(jpi,jpj), stbl(jpi,jpj), utbl(jpi,jpj), & 
    300                &    vtbl(jpi, jpj), risfLeff(jpi,jpj), rhisf_tbl_0(jpi,jpj), STAT= sbc_isf_alloc ) 
     308               &    vtbl(jpi, jpj), risfLeff(jpi,jpj), rhisf_tbl_0(jpi,jpj), ralpha(jpi,jpj), STAT= sbc_isf_alloc ) 
    301309         ! 
    302310         IF( lk_mpp                  )   CALL mpp_sum ( sbc_isf_alloc ) 
     
    491499                     zeps1=rcp*rau0*zgammat 
    492500                     zeps2=lfusisf*rau0*zgammas 
    493                      zeps3=rhoisf*rcpi*kappa/icedep(ji,jj) 
    494                      zeps4=zlamb2+zlamb3*icedep(ji,jj) 
     501                     zeps3=rhoisf*rcpi*kappa/risfdep(ji,jj) 
     502                     zeps4=zlamb2+zlamb3*risfdep(ji,jj) 
    495503                     zeps6=zeps4-zti(ji,jj) 
    496504                     zeps7=zeps4-tsurf 
     
    742750      DO jj = 2,jpj 
    743751         DO ji = 2,jpi 
    744             IF (lmask(ji,jj) == 1) THEN 
     752            IF (ssmask(ji,jj) == 1) THEN 
    745753               ikt = mkt(ji,jj) 
    746754               ikb = mkb(ji,jj) 
     
    748756               ! level fully include in the ice shelf boundary layer 
    749757               DO jk = ikt, ikb - 1 
    750                   ze3 = fse3t(ji,jj,jk) 
     758                  ze3 = fse3t_n(ji,jj,jk) 
    751759                  IF (cptin == 'T' ) varout(ji,jj) = varout(ji,jj) + varin(ji,jj,jk) * r1_hisf_tbl(ji,jj) * ze3 
    752760                  IF (cptin == 'U' ) varout(ji,jj) = varout(ji,jj) + 0.5_wp * (varin(ji,jj,jk) + varin(ji-1,jj,jk)) & 
     
    757765 
    758766               ! level partially include in ice shelf boundary layer  
    759                zhk = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) 
     767               zhk = SUM( fse3t_n(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj) 
    760768               IF (cptin == 'T') varout(ji,jj) = varout(ji,jj) + varin(ji,jj,ikb) * (1._wp - zhk) 
    761769               IF (cptin == 'U') varout(ji,jj) = varout(ji,jj) + 0.5_wp * (varin(ji,jj,ikb) + varin(ji-1,jj,ikb)) * (1._wp - zhk) 
     
    791799      INTEGER(wp)  ::   ikt, ikb  
    792800      INTEGER(wp)  ::   nk_isf 
    793       REAL(wp) ::   zalpha, zhk, z1_hisf_tbl, zhisf_tbl 
    794       REAL(wp) ::   zfact     ! local scalar 
     801      REAL(wp)     ::  zhk, z1_hisf_tbl, zhisf_tbl 
     802      REAL(wp)     ::   zfact     ! local scalar 
    795803      !!---------------------------------------------------------------------- 
    796804      ! 
     
    813821               misfkb(ji,jj) = ikb                                                  ! last wet level of the tbl 
    814822               r1_hisf_tbl(ji,jj) = 1._wp / rhisf_tbl(ji,jj) 
     823 
     824               zhk           = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj)  ! proportion of tbl cover by cell from ikt to ikb - 1 
     825               ralpha(ji,jj) = rhisf_tbl(ji,jj) * (1._wp - zhk ) / fse3t(ji,jj,ikb)  ! proportion of bottom cell influenced by boundary layer 
    815826            END DO 
    816827         END DO 
     
    819830      DO jj = 1,jpj 
    820831         DO ji = 1,jpi 
    821             IF (lmask(ji,jj) == 1) THEN 
    822832               ikt = misfkt(ji,jj) 
    823833               ikb = misfkb(ji,jj) 
    824834               ! level fully include in the ice shelf boundary layer 
    825835               DO jk = ikt, ikb - 1 
    826                   phdivn(ji,jj,jk) = phdivn(ji,jj,jk) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj)) * r1_hisf_tbl(ji,jj) * r1_rau0 * zfact 
     836                  phdivn(ji,jj,jk) = phdivn(ji,jj,jk) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * r1_hisf_tbl(ji,jj) * r1_rau0 * zfact 
    827837               END DO 
    828838               ! level partially include in ice shelf boundary layer  
    829                zhk   = SUM( fse3t(ji, jj, ikt:ikb - 1)) * r1_hisf_tbl(ji,jj)  ! proportion of tbl cover by cell from ikt to ikb - 1 
    830                zalpha = rhisf_tbl(ji,jj) * (1._wp - zhk ) / fse3t(ji,jj,ikb)  ! proportion of bottom cell influenced by boundary layer 
    831                phdivn(ji,jj,ikb) = phdivn(ji,jj,ikb) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * zalpha * r1_rau0 * zfact * r1_hisf_tbl(ji,jj) 
     839               phdivn(ji,jj,ikb) = phdivn(ji,jj,ikb) + ( fwfisf(ji,jj) + fwfisf_b(ji,jj) ) * r1_hisf_tbl(ji,jj) * r1_rau0 * zfact * ralpha(ji,jj)  
    832840            !==   ice shelf melting mass distributed over several levels   ==! 
    833             END IF 
    834841         END DO 
    835842      END DO 
Note: See TracChangeset for help on using the changeset viewer.