Changeset 11494
- Timestamp:
- 2019-09-03T12:46:35+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_nemo
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo/cfgs/WED025/EXPREF/namelist_cfg
r11488 r11494 130 130 ! ! =2 annual global mean of e-p-r set to zero 131 131 ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) 132 ln_isf = .true.133 132 / 134 133 !----------------------------------------------------------------------- … … 209 208 / 210 209 !----------------------------------------------------------------------- 211 &namisf ! Top boundary layer (ISF) (ln_isf = T .AND. ln_isfcav: read (ln_read_cfg=T) 212 !----------------------------------------------------------------------- or set or usr_def_zgr ) 213 cn_isfdir = './' 210 &namisf ! Top boundary layer (ISF) (default: OFF) 211 !----------------------------------------------------------------------- 212 ! 213 ! ---------------- general ------------------------------- 214 ! 215 ln_isf = .true. ! activate ice shelf module 216 cn_isfdir = './' ! directory for all ice shelf input file 217 ! 218 ! ---------------- cavities opened ------------------------------- 219 ! 214 220 cn_isfload = 'isomip' 215 221 ! 216 222 ln_isfcav_mlt = .true. ! ice shelf melting into the cavity 217 223 cn_isfcav_mlt = '3eq' ! ice shelf melting formulation (spe/2eq/3eq/oasis) … … 219 225 ! ! 2eq = ISOMIP like: 2 equations formulation (Hunter et al., 2006) 220 226 ! ! 3eq = ISOMIP+ like: 3 equations formulation (Asay-Davis et al., 2015) 221 ! ! oasis = fwfisf is given by oasis 227 ! ! oasis = fwfisf is given by oasis and pattern by file sn_isfcav_fwf 222 228 ! ! cn_isfcav_mlt = 2eq or 3eq cases: 223 229 cn_gammablk = 'ad15' ! scheme to compute gammat/s (spe,ad15,hj99) … … 234 240 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 235 241 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 236 sn_isfcav_fwf = 'isfmlt_cav', -12 , 'fwflisf' , .false. , .true. , 'yearly' , '' , '' , '' 237 238 239 ln_isfpar_mlt = .false. ! ice shelf melting parametrised 242 sn_isfcav_fwf = 'isfmlt_cav', -12. , 'fwflisf' , .false. , .true. , 'yearly' , '' , '' , '' 243 ! 244 ! ---------------- cavities parametrised ------------------------------- 245 ! 246 ln_isfpar_mlt = .true. ! ice shelf melting parametrised 240 247 cn_isfpar_mlt = 'spe' ! ice shelf melting parametrisation (spe/bg03/oasis) 248 ! ! spe = fwfisf is read from a forcing field 249 ! ! bg03 = melt computed using Beckmann and Goosse parametrisation 250 ! ! oasis = fwfisf is given by oasis and pattern by file sn_isfpar_fwf 241 251 ! 242 252 !* all cases … … 244 254 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 245 255 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 246 sn_isfpar_zmax = 'isfmlt_par', 0 ,'sozisfmax', .false. , .true. , 'yearly' , '' , '' , ''247 sn_isfpar_zmin = 'isfmlt_par', 0 ,'sozisfmin', .false. , .true. , 'yearly' , '' , '' , ''256 sn_isfpar_zmax = 'isfmlt_par', -12. , 'sozisfmax' , .false. , .true. , 'yearly' , '' , '' , '' 257 sn_isfpar_zmin = 'isfmlt_par', -12. , 'sozisfmin' , .false. , .true. , 'yearly' , '' , '' , '' 248 258 !* 'spe' and 'oasis' case 249 sn_isfpar_fwf = 'isfmlt_par' , -12 ,'fwfisf' , .false. , .true. , 'yearly', '' , '' , ''259 sn_isfpar_fwf = 'isfmlt_par' , -12. , 'sofwfisf' , .false. , .true. , 'yearly' , '' , '' , '' 250 260 !* 'bg03' case 251 sn_isfpar_Leff = 'isfmlt_par', 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' , '' 252 253 261 sn_isfpar_Leff = 'isfmlt_par', 0. , 'Leff' , .false. , .true. , 'yearly' , '' , '' , '' 262 ! 263 ! ---------------- ice sheet coupling ------------------------------- 264 ! 254 265 ln_isfcpl = .false. 255 266 nn_drown = 10 ! number of iteration of the extrapolation loop (fill the new wet cells) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DIA/diawri.F90
r11423 r11494 915 915 END IF 916 916 IF (ln_isfpar_mlt) THEN 917 CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par,8) ) ! now k-velocity 917 918 CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par ) ! now k-velocity 918 919 CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par ) ! now k-velocity -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcavmlt.F90
r11488 r11494 42 42 !!---------------------------------------------------------------------- 43 43 !! 44 !! ** Purpose : compute ice shelf fwf/heqt fluxes44 !! ** Purpose : compute or read ice shelf fwf/heat fluxes in the ice shelf cavity 45 45 !! 46 46 !!--------------------------------------------------------------------- … … 189 189 ! 190 190 ! compute coeficient to solve the 2nd order equation 191 zeps1 = rau0_rcp *pgt(ji,jj)192 zeps2 = rLfusisf *rau0*pgs(ji,jj)193 zeps3 = rhoisf *rcpisf*rkappa/MAX(risfdep(ji,jj),zeps)194 zeps4 = risf_lamb2 +risf_lamb3*risfdep(ji,jj)195 zeps6 = zeps4 -pttbl(ji,jj)196 zeps7 = zeps4 -rtsurf191 zeps1 = rau0_rcp * pgt(ji,jj) 192 zeps2 = rLfusisf * rau0 * pgs(ji,jj) 193 zeps3 = rhoisf * rcpisf * rkappa / MAX(risfdep(ji,jj),zeps) 194 zeps4 = risf_lamb2 + risf_lamb3 * risfdep(ji,jj) 195 zeps6 = zeps4 - pttbl(ji,jj) 196 zeps7 = zeps4 - rtsurf 197 197 ! 198 198 ! solve the 2nd order equation to find zsfrz 199 199 zaqe = risf_lamb1 * (zeps1 + zeps3) 200 zaqer = 0.5_wp /MIN(zaqe,-zeps)201 zbqe = zeps1 *zeps6+zeps3*zeps7-zeps2202 zcqe = zeps2 *pstbl(ji,jj)203 zdis = zbqe *zbqe-4.0_wp*zaqe*zcqe200 zaqer = 0.5_wp / MIN(zaqe,-zeps) 201 zbqe = zeps1 * zeps6 + zeps3 * zeps7 - zeps2 202 zcqe = zeps2 * pstbl(ji,jj) 203 zdis = zbqe * zbqe - 4.0_wp * zaqe * zcqe 204 204 ! 205 205 ! Presumably zdis can never be negative because gammas is very small compared to gammat 206 zsfrz=(-zbqe -SQRT(zdis))*zaqer207 IF ( zsfrz < 0.0_wp ) zsfrz=(-zbqe +SQRT(zdis))*zaqer ! check this if this if is needed206 zsfrz=(-zbqe - SQRT(zdis)) * zaqer 207 IF ( zsfrz < 0.0_wp ) zsfrz=(-zbqe + SQRT(zdis)) * zaqer ! check this if this if is needed 208 208 ! 209 209 ! compute t freeze (eq. 25) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfpar.F90
r11423 r11494 43 43 SUBROUTINE isf_par( kt, ptsc, pqfwf ) 44 44 !!--------------------------------------------------------------------- 45 !! *** ROUTINE sbc_isf_cav ***45 !! *** ROUTINE isf_par *** 46 46 !! 47 47 !! ** Purpose : … … 79 79 zqh(:,:) = ( zqhc (:,:) + zqoce(:,:) ) 80 80 ! 81 ! lbclnk on melt 81 ! lbclnk on melt and heat fluxes 82 82 CALL lbc_lnk_multi( 'isfmlt', zqh, 'T', 1., pqfwf, 'T', 1.) 83 83 ! … … 120 120 ! 121 121 ! if param used under an ice shelf overwrite ztblmax by the ice shelf draft 122 WHERE ( risfdep > 0._wp )122 WHERE ( risfdep > 0._wp .AND. ztblmin > 0._wp ) 123 123 ztblmin(:,:) = risfdep(:,:) 124 124 END WHERE … … 130 130 rhisf0_tbl_par(:,:) = ztblmax(:,:) - ztblmin(:,:) 131 131 ! 132 ! compute misfkb_par, rhisf_tbl133 rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:)134 CALL isf_tbl_lvl( ht_n, e3t_n, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par )135 !136 132 ! define iceshelf parametrisation mask 137 133 mskisf_par = 0 … … 140 136 END WHERE 141 137 ! 138 ! compute misfkb_par, rhisf_tbl 139 rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:) 140 CALL isf_tbl_lvl( ht_n * mskisf_par, e3t_n, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par ) 141 ! 142 142 SELECT CASE ( TRIM(cn_isfpar_mlt) ) 143 143 ! 144 144 CASE ( 'spe' ) 145 145 ! 146 146 ALLOCATE( sf_isfpar_fwf(1), STAT=ierr ) 147 147 ALLOCATE( sf_isfpar_fwf(1)%fnow(jpi,jpj,1), sf_isfpar_fwf(1)%fdta(jpi,jpj,1,2) ) 148 148 CALL fld_fill( sf_isfpar_fwf, (/ sn_isfpar_fwf /), cn_isfdir, 'isf_par_init', 'read fresh water flux isf data', 'namisf' ) 149 149 ! 150 150 IF(lwp) WRITE(numout,*) 151 151 IF(lwp) WRITE(numout,*) ' ==>>> ice melt read from forcing field (cn_isfmlt_par = spe)' 152 152 ! 153 153 CASE ( 'bg03' ) 154 154 ! … … 161 161 ! 162 162 CASE ( 'oasis' ) 163 163 ! 164 164 IF(lwp) WRITE(numout,*) 165 165 IF(lwp) WRITE(numout,*) ' ==>>> isf melt provided by OASIS (cn_isfmlt_par = oasis)' 166 166 ! 167 167 CASE DEFAULT 168 168 CALL ctl_stop( 'sbc_isf_init: wrong value of nn_isf' ) … … 171 171 END SUBROUTINE isf_par_init 172 172 173 173 END MODULE isfpar -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfparmlt.F90
r11425 r11494 37 37 ! ------------------------------------------------------------------------------------------------------- 38 38 39 SUBROUTINE isfpar_mlt( kt, pq fwf, pqoce, pqhc)40 !!--------------------------------------------------------------------- 41 !! *** ROUTINE sbc_isf***39 SUBROUTINE isfpar_mlt( kt, pqhc, pqoce, pqfwf ) 40 !!--------------------------------------------------------------------- 41 !! *** ROUTINE isfpar_mlt *** 42 42 !! 43 43 !! ** Purpose : Compute Salt and Heat fluxes related to ice_shelf … … 49 49 !!---------------------------------------------------------------------- 50 50 !!-------------------------- OUT ------------------------------------- 51 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqfwf, pqoce, pqhc ! fresh water, ice-ocean heat and heat content fluxes51 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqfwf, pqoce, pqhc ! fresh water, ice-ocean heat and heat content fluxes 52 52 !!-------------------------- IN ------------------------------------- 53 53 INTEGER, INTENT(in) :: kt ! ocean time step … … 72 72 ! ------------------------------------------------------------------------------------------------------- 73 73 74 SUBROUTINE isfpar_mlt_spe(kt, pqhc, pq fwf, pqoce)74 SUBROUTINE isfpar_mlt_spe(kt, pqhc, pqoce, pqfwf) 75 75 !!--------------------------------------------------------------------- 76 76 !! *** ROUTINE isfpar_mlt_spe *** … … 81 81 !!---------------------------------------------------------------------- 82 82 !!-------------------------- OUT ------------------------------------- 83 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes83 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes 84 84 !!-------------------------- IN ------------------------------------- 85 85 INTEGER, INTENT(in) :: kt … … 122 122 !!---------------------------------------------------------------------- 123 123 !!-------------------------- OUT ------------------------------------- 124 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes124 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes 125 125 !!-------------------------- IN ------------------------------------- 126 126 INTEGER, INTENT(in) :: kt … … 158 158 SUBROUTINE isfpar_mlt_oasis(kt, pqhc , pqoce, pqfwf ) 159 159 !!---------------------------------------------------------------------- 160 !! *** ROUTINE isfpar_oasis *** 160 161 !! 161 162 !! ** Purpose : scale the fwf read from input file by the total amount received by the sbccpl interface 162 163 !! 163 !! ** Purpose : - read ice shelf melt from forcing file => pattern164 !! - total amount of fwf isgiven by sbccpl (fwfisf_oasis)164 !! ** Purpose : - read ice shelf melt from forcing file and scale it by the input file total amount => pattern 165 !! - compute total amount of fwf given by sbccpl (fwfisf_oasis) 165 166 !! - scale fwf and compute heat fluxes 166 167 !! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90
r11403 r11494 210 210 ! 211 211 ! phtbl need to be bounded by water column thickness before 212 ! test: if phtbl = water column thickness, should return mbathy213 ! test: if phtbl = 0 should return ktop212 ! test: if htbl = water column thickness, should return mbathy 213 ! test: if htbl = 0 should return ktop (phtbl cap to e3t(ji,jj,1)) 214 214 ! 215 215 ! get ktbl -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfutils.F90
r11403 r11494 38 38 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pvar ! output variable 39 39 !!-------------------------- IN ------------------------------------- 40 CHARACTER(len=256) , INTENT(in ) :: cdfile, cdvar ! input file name and variable name 40 CHARACTER(len=256) , INTENT(in ) :: cdfile ! input file name 41 CHARACTER(len=34) , INTENT(in ) :: cdvar ! variable name 41 42 !!-------------------------------------------------------------------- 42 43 INTEGER :: inum 43 44 !!-------------------------------------------------------------------- 44 45 45 CALL iom_open( cdfile, inum )46 CALL iom_get( inum, jpdom_data, cdvar, pvar, 1)46 CALL iom_open( TRIM(cdfile), inum ) 47 CALL iom_get( inum, jpdom_data, TRIM(cdvar), pvar) 47 48 CALL iom_close(inum) 48 49
Note: See TracChangeset
for help on using the changeset viewer.