Changeset 11876
- Timestamp:
- 2019-11-08T12:26:42+01:00 (5 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_nemo
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo/cfgs/SHARED/namelist_ref
r11844 r11876 441 441 ! 442 442 ln_isf = .false. ! activate ice shelf module 443 cn_isfdir = './' ! directory for all ice shelf input file 443 ln_isfdebug = .false. ! add debug print in ISF code (global min/max/sum of specific variable) 444 cn_isfdir = './' ! directory for all ice shelf input file 444 445 ! 445 446 ! ---------------- cavities opened ------------------------------- -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DIA/diawri.F90
r11529 r11876 907 907 CALL iom_rstput( 0, 0, inum, 'vomecrty', vn ) ! now j-velocity 908 908 CALL iom_rstput( 0, 0, inum, 'vovecrtz', wn ) ! now k-velocity 909 CALL iom_rstput( 0, 0, inum, 'risfdep', risfdep ) ! now k-velocity 909 CALL iom_rstput( 0, 0, inum, 'risfdep', risfdep ) ! now k-velocity 910 CALL iom_rstput( 0, 0, inum, 'ht_n' , ht_n ) ! now k-velocity 910 911 IF ( ln_isf ) THEN 911 912 IF (ln_isfcav_mlt) THEN … … 925 926 END IF 926 927 END IF 928 929 IF ( ln_isf ) THEN 930 IF (ln_isfcav_mlt) CALL iom_rstput( 0, 0, inum, 'mskisf_cav', REAL(mskisf_cav,8), ktype = jp_i1 ) 931 IF (ln_isfpar_mlt) CALL iom_rstput( 0, 0, inum, 'mskisf_par', REAL(mskisf_par,8), ktype = jp_i1 ) 932 END IF 933 927 934 IF( ALLOCATED(ahtu) ) THEN 928 935 CALL iom_rstput( 0, 0, inum, 'ahtu', ahtu ) ! aht at u-point -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DYN/dynzdf.F90
r11844 r11876 149 149 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikv) + r_vvl * e3v_a(ji,jj,ikv) 150 150 ua(ji,jj,iku) = ua(ji,jj,iku) + r2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * ua_b(ji,jj) / ze3ua 151 va(ji,jj,ikv) = va(ji,jj,ikv) + r2dt * 0.5*( rCdU_top(ji +1,jj)+rCdU_top(ji,jj) ) * va_b(ji,jj) / ze3va151 va(ji,jj,ikv) = va(ji,jj,ikv) + r2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * va_b(ji,jj) / ze3va 152 152 END DO 153 153 END DO … … 428 428 ikv = mikv(ji,jj) ! (first wet ocean u- and v-points) 429 429 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikv) + r_vvl * e3v_a(ji,jj,ikv) ! after scale factor at T-point 430 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r2dt * 0.5*( rCdU_top(ji +1,jj)+rCdU_top(ji,jj) ) / ze3va430 zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / ze3va 431 431 END DO 432 432 END DO -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isf.F90
r11852 r11876 31 31 CHARACTER(LEN=256), PUBLIC :: cn_isfdir 32 32 LOGICAL , PUBLIC :: ln_isf 33 LOGICAL , PUBLIC :: ln_isfdebug =.TRUE.33 LOGICAL , PUBLIC :: ln_isfdebug 34 34 ! 35 35 ! 0.2 -------- ice shelf cavity opened namelist parameter ------------- -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcavmlt.F90
r11852 r11876 122 122 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux ( >0 out) 123 123 ! 124 ! output freezing point at the interface 125 CALL iom_put('isftfrz_cav', ztfrz ) 126 ! 124 127 END SUBROUTINE isfcav_mlt_spe 125 128 … … 163 166 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux ( > 0 out ) 164 167 ! 165 ! output thermal driving 168 ! output thermal driving and freezinpoint at the ice shelf interface 166 169 CALL iom_put('isfthermald_cav', zthd ) 170 CALL iom_put('isftfrz_cav' , ztfrz ) 167 171 ! 168 172 END SUBROUTINE isfcav_mlt_2eq … … 248 252 CALL iom_put('qconisf', zqcon(:,:) * mskisf_cav(:,:) ) 249 253 ! 250 ! output thermal driving 251 CALL iom_put('isfthermald_cav', zthd(:,:) * mskisf_cav(:,:) ) 254 ! output thermal driving and freezing point at the interface 255 CALL iom_put('isfthermald_cav', zthd (:,:) * mskisf_cav(:,:) ) 256 CALL iom_put('isftfrz_cav' , ztfrz(:,:) * mskisf_cav(:,:) ) 252 257 ! 253 258 END SUBROUTINE isfcav_mlt_3eq … … 302 307 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux ( >0 out) 303 308 ! 309 CALL iom_put('isftfrz_cav', ztfrz * mskisf_cav(:,:) ) 304 310 END SUBROUTINE isfcav_mlt_oasis 305 311 -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfpar.F90
r11852 r11876 23 23 USE isfdiags , ONLY: isf_diags_flx ! ice shelf diags subroutine 24 24 ! 25 USE dom_oce , ONLY: jpi,jpj 25 USE dom_oce , ONLY: jpi,jpj, bathy ! ocean space and time domain 26 26 USE phycst , ONLY: r1_rau0_rcp ! physical constants 27 27 ! … … 124 124 END WHERE 125 125 ! 126 ! compute ktop 127 CALL isf_tbl_ktop(ztblmin, misfkt_par) 126 ! ensure ztblmax <= bathy 127 WHERE ( ztblmax(:,:) > bathy(:,:) ) 128 ztblmax(:,:) = bathy(:,:) 129 END WHERE 130 ! 131 ! compute ktop and update ztblmin to gdepw_0(misfkt_par) 132 CALL isf_tbl_ktop(ztblmin, misfkt_par) ! out: misfkt_par 133 ! ! inout: ztblmin 128 134 ! 129 135 ! initial tbl thickness … … 132 138 ! define iceshelf parametrisation mask 133 139 mskisf_par = 0 134 WHERE ( ztblmax> 0._wp )140 WHERE ( rhisf0_tbl_par(:,:) > 0._wp ) 135 141 mskisf_par(:,:) = 1._wp 136 142 END WHERE -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfparmlt.F90
r11852 r11876 105 105 pqoce(:,:) = pqfwf(:,:) * rLfusisf ! ocean/ice shelf flux assume to be equal to latent heat flux 106 106 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux 107 CALL iom_put('isftfrz_par', ztfrz ) 107 108 ! 108 109 END SUBROUTINE isfpar_mlt_spe … … 154 155 ! output thermal driving 155 156 CALL iom_put('isfthermald_par',( ztfrz(:,:) - ztavg(:,:) ) * mskisf_par(:,:)) 157 CALL iom_put('isftfrz_par', ztfrz ) 156 158 ! 157 159 END SUBROUTINE isfpar_mlt_bg03 … … 210 212 pqhc (:,:) = pqfwf(:,:) * ztfrz(:,:) * rcp ! heat content flux ( >0 out ) 211 213 ! 214 CALL iom_put('isftfrz_par', ztfrz ) 215 ! 212 216 END SUBROUTINE isfpar_mlt_oasis 213 217 -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfstp.F90
r11852 r11876 27 27 USE lib_mpp, ONLY: ctl_stop, ctl_nam 28 28 USE in_out_manager ! I/O manager 29 USE timing 29 30 30 31 IMPLICIT NONE … … 59 60 !!--------------------------------------------------------------------- 60 61 ! 62 IF( ln_timing ) CALL timing_start('isf') 63 ! 61 64 IF ( ln_isfcav_mlt ) THEN 62 65 ! … … 67 70 END IF 68 71 ! 69 ! compute tbl lvl/h72 ! compute misfkb, rhisf_tbl, rfrac (deepest level, thickness, fraction of deepest cell affected by tbl) 70 73 rhisf_tbl_cav(:,:) = rn_htbl * mskisf_cav(:,:) 71 74 CALL isf_tbl_lvl(ht_n, e3t_n, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav) … … 85 88 ! 86 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 87 91 rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:) 88 92 CALL isf_tbl_lvl(ht_n, e3t_n, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par) … … 94 98 ! 95 99 IF ( ln_isfcpl .AND. lrst_oce ) CALL isfcpl_rst_write(kt) 100 ! 101 IF( ln_timing ) CALL timing_stop('isf') 96 102 ! 97 103 END SUBROUTINE isf_stp … … 162 168 ! 163 169 IF ( ln_isf ) THEN 170 WRITE(numout,*) ' Add debug print in isf module ln_isfdebug = ', ln_isfdebug 171 WRITE(numout,*) 164 172 WRITE(numout,*) ' melt inside the cavity ln_isfcav_mlt = ', ln_isfcav_mlt 165 173 IF ( ln_isfcav_mlt) THEN … … 168 176 WRITE(numout,*) ' gamma formulation cn_gammablk = ', TRIM(cn_gammablk) 169 177 IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN 170 WRITE(numout,*) ' 171 WRITE(numout,*) ' 172 WRITE(numout,*) ' 173 WRITE(numout,*) ' 178 WRITE(numout,*) ' gammat coefficient rn_gammat0 = ', rn_gammat0 179 WRITE(numout,*) ' gammas coefficient rn_gammas0 = ', rn_gammas0 180 WRITE(numout,*) ' top drag coef. used (from namdrg_top) rn_Cd0 = ', r_Cdmin_top 181 WRITE(numout,*) ' top background ke used (from namdrg_top) rn_ke0 = ', r_ke0_top 174 182 END IF 175 183 END IF … … 190 198 ! 191 199 ELSE 192 200 ! 193 201 IF ( ln_isfcav ) THEN 194 202 WRITE(numout,*) '' … … 196 204 WRITE(numout,*) '' 197 205 END IF 206 ! 198 207 END IF 199 208 … … 207 216 ! sanity check ! issue ln_isfcav not yet known as well as l_isfoasis => move this call in isf_stp ? 208 217 ! melt in the cavity without cavity 209 218 IF ( ln_isfcav_mlt .AND. (.NOT. ln_isfcav) ) & 210 219 & CALL ctl_stop('ice shelf melt in the cavity activated (ln_isfcav_mlt) but no cavity detected in domcfg (ln_isfcav), STOP' ) 211 220 ! … … 256 265 & ln_isfcav_mlt, cn_isfcav_mlt, cn_gammablk, rn_gammat0, rn_gammas0, rn_htbl, sn_isfcav_fwf, & 257 266 & ln_isfpar_mlt, cn_isfpar_mlt, sn_isfpar_fwf, sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff, & 258 & ln_isfcpl , nn_drown, ln_isfcpl_cons, 267 & ln_isfcpl , nn_drown, ln_isfcpl_cons, ln_isfdebug, & 259 268 & cn_isfload , cn_isfdir 260 269 !!---------------------------------------------------------------------- -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90
r11852 r11876 16 16 USE isf ! ice shelf variables 17 17 18 USE dom_oce ! vertical scale factor 18 USE dom_oce ! vertical scale factor and depth 19 19 20 20 IMPLICIT NONE … … 250 250 INTEGER, DIMENSION(jpi,jpj), INTENT( out) :: ktop ! top level affected by the ice shelf parametrisation 251 251 !!-------------------------- IN ------------------------------------- 252 REAL(wp), DIMENSION(jpi,jpj), INTENT(in 252 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pdep ! top depth of the parametrisation influence 253 253 !!-------------------------------------------------------------------- 254 254 INTEGER :: ji,jj … … 256 256 !!-------------------------------------------------------------------- 257 257 ! 258 ! compute top level (need to be recomputed each time (z*, z~) 258 ! if we need to recompute the top level at every time stepcompute top level (z*, z~) 259 ! in case of weak ht_n variation we can assume the top level of htbl to be constant 260 ! => only done using gdepw_0 259 261 ! be sure pdep is already correctly bounded 260 262 ! test: this routine run on isfdraft should return mikt … … 263 265 DO ji = 1, jpi 264 266 DO jj = 1, jpj 267 ! comput ktop 265 268 ikt = 2 266 DO WHILE ( gdepw_ n(ji,jj,ikt) <= pdep(ji,jj ) ) ; ikt = ikt + 1 ; END DO269 DO WHILE ( gdepw_0(ji,jj,ikt) <= pdep(ji,jj ) ) ; ikt = ikt + 1 ; END DO 267 270 ktop(ji,jj) = ikt - 1 271 ! 272 ! update pdep 273 pdep(ji,jj) = gdepw_0(ji,jj,ktop(ji,jj)) 268 274 END DO 269 275 END DO
Note: See TracChangeset
for help on using the changeset viewer.