- Timestamp:
- 2019-12-05T18:41:39+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/UKMO_MERGE_2019/tests/ISOMIP+/MY_SRC/isfstp.F90
r11931 r12077 14 14 !!---------------------------------------------------------------------- 15 15 ! 16 USE isf ! isf variables16 USE isf_oce ! isf variables 17 17 USE isfload, ONLY: isf_load ! ice shelf load 18 18 USE isftbl , ONLY: isf_tbl_lvl ! ice shelf boundary layer … … 21 21 USE isfcpl , ONLY: isfcpl_rst_write, isfcpl_init ! isf variables 22 22 23 USE dom_oce, ONLY: ht _n, e3t_n, ln_isfcav, ln_linssh! ocean space and time domain23 USE dom_oce, ONLY: ht, e3t, ln_isfcav, ln_linssh ! ocean space and time domain 24 24 USE domvvl, ONLY: ln_vvl_zstar ! zstar logical 25 25 USE zdfdrg, ONLY: r_Cdmin_top, r_ke0_top ! vertical physics: top/bottom drag coef. 26 26 ! 27 27 USE lib_mpp, ONLY: ctl_stop, ctl_nam 28 USE fldread, ONLY: FLD, FLD_N 28 29 USE in_out_manager ! I/O manager 29 30 USE timing … … 42 43 CONTAINS 43 44 44 SUBROUTINE isf_stp( kt )45 SUBROUTINE isf_stp( kt, Kmm ) 45 46 !!--------------------------------------------------------------------- 46 47 !! *** ROUTINE isf_stp *** … … 58 59 !!---------------------------------------------------------------------- 59 60 INTEGER, INTENT(in) :: kt ! ocean time step 61 INTEGER, INTENT(in) :: Kmm ! ocean time level index 60 62 !!--------------------------------------------------------------------- 61 63 ! 62 64 IF( ln_timing ) CALL timing_start('isf') 63 65 ! 66 !======================================================================= 67 ! 1.: compute melt and associated heat fluxes in the ice shelf cavities 68 !======================================================================= 69 ! 64 70 IF ( ln_isfcav_mlt ) THEN 65 71 ! 66 ! before time step72 ! 1.1: before time step 67 73 IF ( kt /= nit000 ) THEN 68 74 risf_cav_tsc_b (:,:,:) = risf_cav_tsc (:,:,:) … … 70 76 END IF 71 77 ! 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) 73 79 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 melt77 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) 78 84 ! 79 85 END IF 80 86 ! 87 !================================================================================= 88 ! 2.: compute melt and associated heat fluxes for not resolved ice shelf cavities 89 !================================================================================= 90 ! 81 91 IF ( ln_isfpar_mlt ) THEN 82 92 ! 83 ! before time step93 ! 2.1: before time step 84 94 IF ( kt /= nit000 ) THEN 85 95 risf_par_tsc_b(:,:,:) = risf_par_tsc(:,:,:) … … 87 97 END IF 88 98 ! 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) 91 101 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) 105 114 ! 106 115 IF( ln_timing ) CALL timing_stop('isf') … … 108 117 END SUBROUTINE isf_stp 109 118 110 SUBROUTINE isf_init 119 SUBROUTINE isf_init(Kbb, Kmm, Kaa) 111 120 !!--------------------------------------------------------------------- 112 121 !! *** ROUTINE isfstp_init *** … … 122 131 !! - call cav/param/isfcpl init routine 123 132 !!---------------------------------------------------------------------- 133 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! ocean time level indices 124 134 ! 125 135 ! constrain: l_isfoasis need to be known … … 135 145 ! 136 146 ! compute ice shelf load 137 IF ( ln_isfcav ) CALL isf_load( risfload )147 IF ( ln_isfcav ) CALL isf_load( Kmm, risfload ) 138 148 ! 139 149 ! terminate routine now if no ice shelf melt formulation specify … … 150 160 !--------------------------------------------------------------------------------------------------------------------- 151 161 ! initialisation ice sheet coupling 152 IF ( ln_isfcpl ) CALL isfcpl_init()162 IF( ln_isfcpl ) CALL isfcpl_init(Kbb, Kmm, Kaa) 153 163 ! 154 164 END IF … … 177 187 WRITE(numout,*) ' melt inside the cavity ln_isfcav_mlt = ', ln_isfcav_mlt 178 188 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_htbl181 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) 182 192 IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN 183 WRITE(numout,*) ' gammat coefficient rn_gammat0 = ', rn_gammat0184 WRITE(numout,*) ' gammas coefficient rn_gammas0 = ', rn_gammas0185 WRITE(numout,*) ' top background ke used (from namdrg_top) rn_vtide**2 = ', rn_vtide**2186 WRITE(numout,*) ' top drag coef. used (from namdrg_top) rn_Cd0 = ', r_Cdmin_top193 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 187 197 END IF 188 198 END IF … … 212 222 END IF 213 223 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 215 229 WRITE(numout,*) '' 230 FLUSH(numout) 216 231 217 232 END IF … … 267 282 INTEGER :: ios ! Local integer output status for namelist read 268 283 !!---------------------------------------------------------------------- 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 274 291 !!---------------------------------------------------------------------- 275 292 ! 276 293 REWIND( numnam_ref ) ! Namelist namsbc_rnf in reference namelist : Runoffs 277 294 READ ( numnam_ref, namisf, IOSTAT = ios, ERR = 901) 278 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namisf in reference namelist' , lwp)295 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namisf in reference namelist' ) 279 296 ! 280 297 REWIND( numnam_cfg ) ! Namelist namsbc_rnf in configuration namelist : Runoffs 281 298 READ ( numnam_cfg, namisf, IOSTAT = ios, ERR = 902 ) 282 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namisf in configuration namelist' , lwp)299 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namisf in configuration namelist' ) 283 300 IF(lwm) WRITE ( numond, namisf ) 284 301
Note: See TracChangeset
for help on using the changeset viewer.