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 12077 for NEMO/branches/2019/UKMO_MERGE_2019/tests/ISOMIP+/MY_SRC/isfstp.F90 – NEMO

Ignore:
Timestamp:
2019-12-05T18:41:39+01:00 (4 years ago)
Author:
mathiot
Message:

include ENHANCE-02_ISF_nemo in UKMO merge branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/UKMO_MERGE_2019/tests/ISOMIP+/MY_SRC/isfstp.F90

    r11931 r12077  
    1414   !!---------------------------------------------------------------------- 
    1515   ! 
    16    USE isf            ! isf variables 
     16   USE isf_oce                                      ! isf variables 
    1717   USE isfload, ONLY: isf_load                      ! ice shelf load 
    1818   USE isftbl , ONLY: isf_tbl_lvl                   ! ice shelf boundary layer 
     
    2121   USE isfcpl , ONLY: isfcpl_rst_write, isfcpl_init ! isf variables 
    2222 
    23    USE dom_oce, ONLY: ht_n, e3t_n, ln_isfcav, ln_linssh ! ocean space and time domain 
     23   USE dom_oce, ONLY: ht, e3t, ln_isfcav, ln_linssh    ! ocean space and time domain 
    2424   USE domvvl,  ONLY: ln_vvl_zstar                      ! zstar logical 
    2525   USE zdfdrg,  ONLY: r_Cdmin_top, r_ke0_top            ! vertical physics: top/bottom drag coef. 
    2626   ! 
    2727   USE lib_mpp, ONLY: ctl_stop, ctl_nam 
     28   USE fldread, ONLY: FLD, FLD_N 
    2829   USE in_out_manager ! I/O manager 
    2930   USE timing 
     
    4243CONTAINS 
    4344  
    44   SUBROUTINE isf_stp( kt ) 
     45  SUBROUTINE isf_stp( kt, Kmm ) 
    4546      !!--------------------------------------------------------------------- 
    4647      !!                  ***  ROUTINE isf_stp  *** 
     
    5859      !!---------------------------------------------------------------------- 
    5960      INTEGER, INTENT(in) ::   kt   ! ocean time step 
     61      INTEGER, INTENT(in) ::   Kmm  ! ocean time level index 
    6062      !!--------------------------------------------------------------------- 
    6163      ! 
    6264      IF( ln_timing )   CALL timing_start('isf') 
    6365      ! 
     66      !======================================================================= 
     67      ! 1.: compute melt and associated heat fluxes in the ice shelf cavities 
     68      !======================================================================= 
     69      ! 
    6470      IF ( ln_isfcav_mlt ) THEN 
    6571         ! 
    66          ! before time step  
     72         ! 1.1: before time step  
    6773         IF ( kt /= nit000 ) THEN  
    6874            risf_cav_tsc_b (:,:,:) = risf_cav_tsc (:,:,:) 
     
    7076         END IF 
    7177         ! 
    72          ! compute misfkb, rhisf_tbl, rfrac (deepest level, thickness, fraction of deepest cell affected by tbl) 
     78         ! 1.2: compute misfkb, rhisf_tbl, rfrac (deepest level, thickness, fraction of deepest cell affected by tbl) 
    7379         rhisf_tbl_cav(:,:) = rn_htbl * mskisf_cav(:,:) 
    74          CALL isf_tbl_lvl(ht_n, e3t_n, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav) 
    75          ! 
    76          ! compute ice shelf melt 
    77          CALL isf_cav( kt, risf_cav_tsc, fwfisf_cav) 
     80         CALL isf_tbl_lvl(ht, e3t(:,:,:,Kmm), misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav) 
     81         ! 
     82         ! 1.3: compute ice shelf melt 
     83         CALL isf_cav( kt, Kmm, risf_cav_tsc, fwfisf_cav) 
    7884         ! 
    7985      END IF 
    8086      !  
     87      !================================================================================= 
     88      ! 2.: compute melt and associated heat fluxes for not resolved ice shelf cavities 
     89      !================================================================================= 
     90      ! 
    8191      IF ( ln_isfpar_mlt ) THEN 
    8292         ! 
    83          ! before time step  
     93         ! 2.1: before time step  
    8494         IF ( kt /= nit000 ) THEN  
    8595            risf_par_tsc_b(:,:,:) = risf_par_tsc(:,:,:) 
     
    8797         END IF 
    8898         ! 
    89          ! compute misfkb, rhisf_tbl, rfrac (deepest level, thickness, fraction of deepest cell affected by tbl) 
    90          ! by simplicity, we assume the top level where param applied do not change with time 
     99         ! 2.2: compute misfkb, rhisf_tbl, rfrac (deepest level, thickness, fraction of deepest cell affected by tbl) 
     100         ! by simplicity, we assume the top level where param applied do not change with time (done in init part) 
    91101         rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:) 
    92          CALL isf_tbl_lvl(ht_n, e3t_n, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par) 
    93          ! 
    94          ! compute ice shelf melt 
    95          CALL isf_par( kt, risf_par_tsc, fwfisf_par) 
    96          ! 
    97       END IF 
    98       ! 
    99       IF ( ln_isfcpl ) THEN 
    100          ! after step nit000 + 2 we do not need anymore the risfcpl_ arrays 
    101          IF ( kt == nit000 + 2 ) CALL isf_dealloc_cpl() 
    102  
    103          IF ( lrst_oce ) CALL isfcpl_rst_write(kt) 
    104       END IF 
     102         CALL isf_tbl_lvl(ht, e3t(:,:,:,Kmm), misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par) 
     103         ! 
     104         ! 2.3: compute ice shelf melt 
     105         CALL isf_par( kt, Kmm, risf_par_tsc, fwfisf_par) 
     106         ! 
     107      END IF 
     108      ! 
     109      !================================================================================== 
     110      ! 3.: output specific restart variable in case of coupling with an ice sheet model 
     111      !================================================================================== 
     112      ! 
     113      IF ( ln_isfcpl .AND. lrst_oce ) CALL isfcpl_rst_write(kt, Kmm) 
    105114      ! 
    106115      IF( ln_timing )   CALL timing_stop('isf') 
     
    108117   END SUBROUTINE isf_stp 
    109118 
    110    SUBROUTINE isf_init 
     119   SUBROUTINE isf_init(Kbb, Kmm, Kaa) 
    111120      !!--------------------------------------------------------------------- 
    112121      !!                  ***  ROUTINE isfstp_init  *** 
     
    122131      !!              - call cav/param/isfcpl init routine 
    123132      !!---------------------------------------------------------------------- 
     133      INTEGER, INTENT(in) :: Kbb, Kmm, Kaa      ! ocean time level indices 
    124134      ! 
    125135      ! constrain: l_isfoasis need to be known 
     
    135145      ! 
    136146      ! compute ice shelf load 
    137       IF ( ln_isfcav ) CALL isf_load( risfload ) 
     147      IF ( ln_isfcav ) CALL isf_load( Kmm, risfload ) 
    138148      ! 
    139149      ! terminate routine now if no ice shelf melt formulation specify 
     
    150160         !--------------------------------------------------------------------------------------------------------------------- 
    151161         ! initialisation ice sheet coupling 
    152          IF ( ln_isfcpl ) CALL isfcpl_init() 
     162         IF( ln_isfcpl ) CALL isfcpl_init(Kbb, Kmm, Kaa) 
    153163         ! 
    154164      END IF 
     
    177187            WRITE(numout,*) '      melt inside the cavity                  ln_isfcav_mlt   = ', ln_isfcav_mlt 
    178188            IF ( ln_isfcav_mlt) THEN 
    179                WRITE(numout,*) '         melt formulation                        cn_isfcav_mlt   = ', TRIM(cn_isfcav_mlt) 
    180                WRITE(numout,*) '         thickness of the top boundary layer     rn_htbl     = ', rn_htbl 
    181                WRITE(numout,*) '         gamma formulation                       cn_gammablk = ', TRIM(cn_gammablk)  
     189               WRITE(numout,*) '         melt formulation                         cn_isfcav_mlt= ', TRIM(cn_isfcav_mlt) 
     190               WRITE(numout,*) '         thickness of the top boundary layer      rn_htbl      = ', rn_htbl 
     191               WRITE(numout,*) '         gamma formulation                        cn_gammablk = ', TRIM(cn_gammablk)  
    182192               IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN  
    183                   WRITE(numout,*) '         gammat coefficient                       rn_gammat0  = ', rn_gammat0   
    184                   WRITE(numout,*) '         gammas coefficient                       rn_gammas0  = ', rn_gammas0   
    185                   WRITE(numout,*) '         top background ke used (from namdrg_top) rn_vtide**2 = ', rn_vtide**2 
    186                   WRITE(numout,*) '         top drag coef.    used (from namdrg_top) rn_Cd0      = ', r_Cdmin_top 
     193                  WRITE(numout,*) '         gammat coefficient                       rn_gammat0   = ', rn_gammat0   
     194                  WRITE(numout,*) '         gammas coefficient                       rn_gammas0   = ', rn_gammas0   
     195                  WRITE(numout,*) '         top background ke used (from namdrg_top) rn_vtide**2  = ', rn_vtide**2 
     196                  WRITE(numout,*) '         top drag coef.    used (from namdrg_top) rn_Cd0       = ', r_Cdmin_top 
    187197               END IF 
    188198            END IF 
     
    212222         END IF 
    213223 
    214          IF (ln_isfcav) WRITE(numout,*) '      Ice shelf load method                   cn_isfload        = ', TRIM(cn_isfload) 
     224         IF (ln_isfcav) THEN 
     225            WRITE(numout,*) '      Ice shelf load method                   cn_isfload        = ', TRIM(cn_isfload) 
     226            WRITE(numout,*) '         Temperature used to compute the ice shelf load            = ', rn_isfload_T 
     227            WRITE(numout,*) '         Salinity    used to compute the ice shelf load            = ', rn_isfload_S 
     228         END IF 
    215229         WRITE(numout,*) '' 
     230         FLUSH(numout) 
    216231 
    217232      END IF 
     
    267282      INTEGER               :: ios                  ! Local integer output status for namelist read 
    268283      !!---------------------------------------------------------------------- 
    269       NAMELIST/namisf/ ln_isf       ,                                                                               &  
    270          &             ln_isfcav_mlt, cn_isfcav_mlt, cn_gammablk, rn_gammat0, rn_gammas0, rn_htbl, sn_isfcav_fwf,   & 
    271          &             ln_isfpar_mlt, cn_isfpar_mlt, sn_isfpar_fwf, sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff, & 
    272          &             ln_isfcpl    , nn_drown, ln_isfcpl_cons, ln_isfdebug, rn_vtide,                              & 
    273          &             cn_isfload   , cn_isfdir 
     284      NAMELIST/namisf/ ln_isf        ,                                                           &  
     285         &             cn_gammablk   , rn_gammat0    , rn_gammas0    , rn_htbl, sn_isfcav_fwf,   & 
     286         &             ln_isfcav_mlt , cn_isfcav_mlt , sn_isfcav_fwf ,                           & 
     287         &             ln_isfpar_mlt , cn_isfpar_mlt , sn_isfpar_fwf ,                           & 
     288         &             sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff,                           & 
     289         &             ln_isfcpl     , nn_drown      , ln_isfcpl_cons, ln_isfdebug, rn_vtide,    & 
     290         &             cn_isfload    , rn_isfload_T  , rn_isfload_S  , cn_isfdir 
    274291      !!---------------------------------------------------------------------- 
    275292      ! 
    276293      REWIND( numnam_ref )              ! Namelist namsbc_rnf in reference namelist : Runoffs  
    277294      READ  ( numnam_ref, namisf, IOSTAT = ios, ERR = 901) 
    278 901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namisf in reference namelist', lwp ) 
     295901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namisf in reference namelist' ) 
    279296      ! 
    280297      REWIND( numnam_cfg )              ! Namelist namsbc_rnf in configuration namelist : Runoffs 
    281298      READ  ( numnam_cfg, namisf, IOSTAT = ios, ERR = 902 ) 
    282 902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namisf in configuration namelist', lwp ) 
     299902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namisf in configuration namelist' ) 
    283300      IF(lwm) WRITE ( numond, namisf ) 
    284301 
Note: See TracChangeset for help on using the changeset viewer.