- Timestamp:
- 2015-07-21T20:47:42+02:00 (9 years ago)
- Location:
- branches/2015/dev_r5151_UKMO_ISF/NEMOGCM
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/CONFIG/SHARED/namelist_ref
r5621 r5624 255 255 ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave 256 256 ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) 257 nn_isf = 0 ! ice shelf melting/freezing (/=0 => fill namsbc_isf) 258 ! 0 =no isf 1 = presence of ISF 259 ! 2 = bg03 parametrisation 3 = rnf file for isf 260 ! 4 = ISF fwf specified 261 ! option 1 and 4 need ln_isfcav = .true. (domzgr) 257 ln_isf = .false. ! ice shelf (T => fill namsbc_isf) 262 258 ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) 263 259 nn_fwb = 2 ! FreshWater Budget: =0 unchecked … … 454 450 sn_Leff_isf = 'rnfisf' , 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' 455 451 ! for all case 456 ln_divisf = .true. ! apply isf melting as a mass flux or in the salinity trend. (maybe I should remove this option as for runoff?) 452 nn_isf = 1 ! ice shelf melting/freezing 453 ! 1 = presence of ISF 2 = bg03 parametrisation 454 ! 3 = rnf file for isf 4 = ISF fwf specified 455 ! option 1 and 4 need ln_isfcav = .true. (domzgr) 457 456 ! only for nn_isf = 1 or 2 458 457 rn_gammat0 = 1.0e-4 ! gammat coefficient used in blk formula … … 462 461 rn_hisf_tbl = 30. ! thickness of the top boundary layer (Losh et al. 2008) 463 462 ! 0 => thickness of the tbl = thickness of the first wet cell 464 ln_conserve = .true. ! conservative case (take into account meltwater advection)465 463 nn_gammablk = 1 ! 0 = cst Gammat (= gammat/s) 466 464 ! 1 = velocity dependend Gamma (u* * gammat/s) (Jenkins et al. 2010) -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90
r4990 r5624 91 91 ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 92 92 ! ----------------------------------------------------------------------- 93 z_cflxemp = SUM ( ( emp(:,:) -rnf(:,:)+rdivisf*fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau093 z_cflxemp = SUM ( ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 94 94 IF( lk_mpp ) CALL mpp_sum( z_cflxemp ) ! sum over the global domain 95 95 -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r5120 r5624 93 93 ! 1 - Trends due to forcing ! 94 94 ! ------------------------- ! 95 z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + rdivisf *fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes95 z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 96 96 z_frc_trd_t = glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes 97 97 z_frc_trd_s = glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes … … 100 100 IF( ln_rnf_sal) z_frc_trd_s = z_frc_trd_s + glob_sum( rnf_tsc(:,:,jp_sal) * surf(:,:) ) 101 101 ! Add ice shelf heat & salt input 102 IF( nn_isf .GE. 1 ) THEN 103 z_frc_trd_t = z_frc_trd_t & 104 & + glob_sum( ( risf_tsc(:,:,jp_tem) - rdivisf * fwfisf(:,:) * (-1.9) * r1_rau0 ) * surf(:,:) ) 105 z_frc_trd_s = z_frc_trd_s + (1.0_wp - rdivisf) * glob_sum( risf_tsc(:,:,jp_sal) * surf(:,:) ) 106 ENDIF 102 IF( ln_isf ) z_frc_trd_t = z_frc_trd_t + glob_sum( risf_tsc(:,:,jp_tem) * surf(:,:) ) 107 103 108 104 ! Add penetrative solar radiation … … 200 196 ! ENDIF 201 197 !!gm end 202 203 198 204 199 IF( lk_vvl ) THEN -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r5621 r5624 1002 1002 1003 1003 IF( ioptio /= 1 ) CALL ctl_stop( 'Choose ONE vertical coordinate in namelist nam_vvl' ) 1004 IF( .NOT. ln_vvl_zstar .AND. nn_isf .NE. 0) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' )1004 IF( .NOT. ln_vvl_zstar .AND. ln_isf ) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 1005 1005 1006 1006 IF(lwp) THEN ! Print the choice -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90
r5621 r5624 26 26 USE oce ! ocean dynamics and tracers 27 27 USE dom_oce ! ocean space and time domain 28 USE sbc_oce, ONLY : ln_rnf, nn_isf ! surface boundary condition: ocean28 USE sbc_oce, ONLY : ln_rnf, ln_isf ! surface boundary condition: ocean 29 29 USE sbcrnf ! river runoff 30 30 USE sbcisf ! ice shelf … … 229 229 230 230 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) ! runoffs (update hdivn field) 231 IF( ln_ divisf .AND. (nn_isf /= 0)) CALL sbc_isf_div( hdivn ) ! ice shelf (update hdivn field)231 IF( ln_isf ) CALL sbc_isf_div( hdivn ) ! ice shelf (update hdivn field) 232 232 IF( nn_cla == 1 ) CALL cla_div ( kt ) ! Cross Land Advection (Update Hor. divergence) 233 233 … … 328 328 329 329 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) ! runoffs (update hdivn field) 330 IF( ln_ divisf .AND. (nn_isf .GT. 0)) CALL sbc_isf_div( hdivn ) ! ice shelf (update hdivn field)330 IF( ln_isf ) CALL sbc_isf_div( hdivn ) ! ice shelf (update hdivn field) 331 331 IF( nn_cla == 1 ) CALL cla_div ( kt ) ! Cross Land Advection (update hdivn field) 332 332 ! -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r5621 r5624 266 266 ! Add volume filter correction: compatibility with tracer advection scheme 267 267 ! => time filter + conservation correction (only at the first level) 268 fse3t_b(:,:,1) = fse3t_b(:,:,1) - atfp * rdt * r1_rau0 * ( emp_b(:,:) - emp(:,:) & 269 & -rnf_b(:,:) + rnf(:,:) ) * tmask(:,:,1) 270 !DO jj = 1,jpj 271 ! DO ji = 1,jpi 272 ! jk = mikt(ji,jj) 273 ! fse3t_b(ji,jj,jk) = fse3t_b(ji,jj,jk) - atfp * rdt * r1_rau0 274 ! & * ( (emp_b(ji,jj) - emp(ji,jj) ) & 275 ! & - (rnf_b(ji,jj) - rnf(ji,jj) ) & 276 ! & + (fwfisf_b(ji,jj) - fwfisf(ji,jj) ) ) * tmask(ji,jj,jk) ! ????? 277 ! END DO 278 !END DO 268 DO jj = 1,jpj 269 DO ji = 1,jpi 270 jk = mikt(ji,jj) 271 fse3t_b(ji,jj,jk) = fse3t_b(ji,jj,jk) - atfp * rdt * r1_rau0 & 272 & * ( (emp_b(ji,jj) - emp(ji,jj) ) & 273 & - (rnf_b(ji,jj) - rnf(ji,jj) ) & 274 & + (fwfisf_b(ji,jj) - fwfisf(ji,jj) ) ) * tmask(ji,jj,jk) 275 END DO 276 END DO 279 277 ENDIF 280 278 ! -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r5621 r5624 454 454 ! ! Surface net water flux and rivers 455 455 IF (ln_bt_fw) THEN 456 zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + rdivisf *fwfisf(:,:) )456 zssh_frc(:,:) = zraur * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) ) 457 457 ELSE 458 458 zssh_frc(:,:) = zraur * z1_2 * ( emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:) & 459 & + rdivisf * ( fwfisf(:,:) + fwfisf_b(:,:) ))459 & + fwfisf(:,:) + fwfisf_b(:,:) ) 460 460 ENDIF 461 461 #if defined key_asminc -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r5621 r5624 268 268 ELSE !** Leap-Frog time-stepping: Asselin filter + swap 269 269 sshb(:,:) = sshn(:,:) + atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) ) ! before <-- now filtered 270 IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) - rnf_b(:,:) + rnf(:,:) ) * ssmask(:,:)271 !IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( (emp_b(:,:) - emp(:,:)) - (rnf_b(:,:) - rnf(:,:))&272 !& + (fwfisf_b(:,:) - fwfisf(:,:))) * ssmask(:,:)270 IF( lk_vvl ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( (emp_b(:,:) - emp(:,:)) & 271 & - (rnf_b(:,:) - rnf(:,:)) & 272 & + (fwfisf_b(:,:) - fwfisf(:,:))) * ssmask(:,:) 273 273 sshn(:,:) = ssha(:,:) ! now <-- after 274 274 ENDIF -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r5621 r5624 44 44 LOGICAL , PUBLIC :: ln_dm2dc !: Daily mean to Diurnal Cycle short wave (qsr) 45 45 LOGICAL , PUBLIC :: ln_rnf !: runoffs / runoff mouths 46 LOGICAL , PUBLIC :: ln_isf !: ice shelf melting 46 47 LOGICAL , PUBLIC :: ln_ssr !: Sea Surface restoring on SST and/or SSS 47 48 LOGICAL , PUBLIC :: ln_apr_dyn !: Atmospheric pressure forcing used on dynamics (ocean & ice) 48 49 INTEGER , PUBLIC :: nn_ice !: flag for ice in the surface boundary condition (=0/1/2/3) 49 INTEGER , PUBLIC :: nn_isf !: flag for isf in the surface boundary condition (=0/1/2/3/4)50 50 INTEGER , PUBLIC :: nn_ice_embd !: flag for levitating/embedding sea-ice in the ocean 51 51 ! !: =0 levitating ice (no mass exchange, concentration/dilution effect) -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90
r5120 r5624 108 108 ! 109 109 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 110 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf *fwfisf(:,:) - snwice_fmass(:,:) ) ) / area ! sum over the global domain110 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area ! sum over the global domain 111 111 zcoef = z_fwf * rcp 112 112 emp(:,:) = emp(:,:) - z_fwf * tmask(:,:,1) … … 162 162 zsurf_pos = glob_sum( e1e2t(:,:)*ztmsk_pos(:,:) ) 163 163 ! ! fwf global mean (excluding ocean to ice/snow exchanges) 164 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf *fwfisf(:,:) - snwice_fmass(:,:) ) ) / area164 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area 165 165 ! 166 166 IF( z_fwf < 0._wp ) THEN ! spread out over >0 erp area to increase evaporation -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r5621 r5624 39 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qisf !: net heat flux from ice shelf 40 40 REAL(wp), PUBLIC :: rn_hisf_tbl !: thickness of top boundary layer [m] 41 LOGICAL , PUBLIC :: ln_divisf !: flag to correct divergence41 INTEGER , PUBLIC :: nn_isf !: flag to choose between explicit/param/specified 42 42 INTEGER , PUBLIC :: nn_isfblk !: 43 43 INTEGER , PUBLIC :: nn_gammablk !: 44 LOGICAL , PUBLIC :: ln_conserve !:45 44 REAL(wp), PUBLIC :: rn_gammat0 !: temperature exchange coeficient 46 45 REAL(wp), PUBLIC :: rn_gammas0 !: salinity exchange coeficient 47 REAL(wp), PUBLIC :: rdivisf !: flag to test if fwf apply on divergence48 46 49 47 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:) :: rzisf_tbl !:depth of calving front (shallowest point) nn_isf ==2/3 … … 91 89 INTEGER :: ikt, ikb ! top and bottom level of the isf boundary layer 92 90 REAL(wp) :: zhk 91 REAL(wp) :: zt_frz, zpress 93 92 CHARACTER(len=256) :: cvarzisf, cvarhisf ! name for isf file 94 93 CHARACTER(LEN=32 ) :: cvarLeff ! variable name for efficient Length scale … … 96 95 ! 97 96 !!--------------------------------------------------------------------- 98 NAMELIST/namsbc_isf/ nn_isfblk, rn_hisf_tbl, ln_divisf, ln_conserve, rn_gammat0, rn_gammas0, nn_gammablk, &97 NAMELIST/namsbc_isf/ nn_isfblk, rn_hisf_tbl, rn_gammat0, rn_gammas0, nn_gammablk, nn_isf , & 99 98 & sn_fwfisf, sn_qisf, sn_rnfisf, sn_depmax_isf, sn_depmin_isf, sn_Leff_isf 100 99 ! … … 121 120 IF ( lwp ) WRITE(numout,*) ' nn_isfblk = ', nn_isfblk 122 121 IF ( lwp ) WRITE(numout,*) ' rn_hisf_tbl = ', rn_hisf_tbl 123 IF ( lwp ) WRITE(numout,*) ' ln_divisf = ', ln_divisf124 122 IF ( lwp ) WRITE(numout,*) ' nn_gammablk = ', nn_gammablk 125 123 IF ( lwp ) WRITE(numout,*) ' rn_gammat0 = ', rn_gammat0 126 124 IF ( lwp ) WRITE(numout,*) ' rn_gammas0 = ', rn_gammas0 127 125 IF ( lwp ) WRITE(numout,*) ' rn_tfri2 = ', rn_tfri2 128 IF (ln_divisf) THEN ! keep it in the namelist ??? used true anyway as for runoff ? (PM)129 rdivisf = 1._wp130 ELSE131 rdivisf = 0._wp132 END IF133 126 ! 134 127 ! Allocate public variable … … 270 263 ! compute tsc due to isf 271 264 ! WARNING water add at temp = 0C, correction term is added in trasbc, maybe better here but need a 3D variable). 272 risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp ! 265 ! zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04 266 zt_frz = -1.9_wp !CALL eos_fzp( tsn(ji,jj,jk,jp_sal), zt_frz, zpress ) 267 risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp - fwfisf(:,:) * zt_frz * r1_rau0 ! 273 268 274 269 ! salt effect already take into account in vertical advection 275 risf_tsc(:,:,jp_sal) = (1.0_wp-rdivisf) * fwfisf(:,:) * stbl(:,:) * r1_rau0276 270 risf_tsc(:,:,jp_sal) = 0.0_wp 271 277 272 ! lbclnk 278 273 CALL lbc_lnk(risf_tsc(:,:,jp_tem),'T',1.) … … 296 291 ! output 297 292 IF( iom_use('qisf' ) ) CALL iom_put('qisf' , qisf) 298 IF( iom_use('fwfisf') ) CALL iom_put('fwfisf', fwfisf * stbl / soce)293 IF( iom_use('fwfisf') ) CALL iom_put('fwfisf', fwfisf) 299 294 END IF 300 295 … … 426 421 427 422 ! initialisation 428 IF (ln_conserve) THEN ; zcfac=1.0_wp429 ELSE ; zcfac=0.0_wp430 ENDIF431 423 zpress (:,:)=0.0_wp 432 424 zgammat(:,:)=rn_gammat0 ; zgammas (:,:)=rn_gammas0; … … 500 492 ! zfwflx is upward water flux 501 493 ! zhtflx is upward heat flux (out of ocean) 502 ! If non conservative we have zcfac=0.0 so zhtflx is as ISOMIP but with different zfrz value503 ! If non conservative we have zcfac=0.0 so what follows is then zfwflx*sss_m/zsfrz504 494 ! compute the upward water and heat flux 505 495 zfwflx(ji,jj) = rau0 * zgammas(ji,jj) * (zsfrz-stbl(ji,jj)) / MAX(zsfrz,zeps) 506 zhtflx(ji,jj) = ( zgammat(ji,jj) * rau0 - zcfac * zfwflx(ji,jj) ) * rcp * (zti(ji,jj) - zfrz(ji,jj) ) 507 zfwflx(ji,jj) = ( zgammas(ji,jj) * rau0 - zcfac * zfwflx(ji,jj) ) * (zsfrz - stbl(ji,jj)) / MAX(stbl(ji,jj),zeps) 496 zhtflx(ji,jj) = zgammat(ji,jj) * rau0 * rcp * (zti(ji,jj) - zfrz(ji,jj) ) 508 497 END DO 509 498 END DO -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r5621 r5624 88 88 NAMELIST/namsbc/ nn_fsbc , ln_ana , ln_flx, ln_blk_clio, ln_blk_core, ln_mixcpl, & 89 89 & ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc , ln_rnf , & 90 & ln_ssr , nn_isf , nn_fwb, ln_cdgw , ln_wave , ln_sdw , &90 & ln_ssr , ln_isf , nn_fwb, ln_cdgw , ln_wave , ln_sdw , & 91 91 & nn_lsm , nn_limflx , nn_components, ln_cpl 92 92 INTEGER :: ios … … 141 141 WRITE(numout,*) ' daily mean to diurnal cycle qsr ln_dm2dc = ', ln_dm2dc 142 142 WRITE(numout,*) ' runoff / runoff mouths ln_rnf = ', ln_rnf 143 WRITE(numout,*) ' iceshelf formulation nn_isf = ', nn_isf143 WRITE(numout,*) ' iceshelf melting ln_isf = ', ln_isf 144 144 WRITE(numout,*) ' Sea Surface Restoring on SST and/or SSS ln_ssr = ', ln_ssr 145 145 WRITE(numout,*) ' FreshWater Budget control (=0/1/2) nn_fwb = ', nn_fwb … … 179 179 180 180 ! ! Checks: 181 IF( nn_isf .EQ. 0) THEN ! variable initialisation if no ice shelf181 IF( ln_isf ) THEN ! variable initialisation if no ice shelf 182 182 IF( sbc_isf_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 183 183 fwfisf (:,:) = 0.0_wp 184 184 fwfisf_b(:,:) = 0.0_wp 185 rdivisf = 0.0_wp186 185 END IF 187 186 IF( nn_ice == 0 .AND. nn_components /= jp_iam_opa ) fr_i(:,:) = 0.e0 ! no ice in the domain, ice fraction is always zero … … 396 395 IF( ln_icebergs ) CALL icb_stp( kt ) ! compute icebergs 397 396 398 IF( nn_isf /= 0 ) CALL sbc_isf( kt )! compute iceshelves397 IF( ln_isf ) CALL sbc_isf( kt ) ! compute iceshelves 399 398 400 399 IF( ln_rnf ) CALL sbc_rnf( kt ) ! add runoffs to fresh water fluxes -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5621 r5624 28 28 USE sbc_oce ! surface boundary condition: ocean 29 29 USE sbcrnf ! river runoffs 30 USE sbcisf ! ice shelf melting 30 31 USE zdf_oce ! ocean vertical mixing 31 32 USE domvvl ! variable volume … … 279 280 280 281 !! 281 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf ! local logical282 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf, ll_isf ! local logical 282 283 INTEGER :: ji, jj, jk, jn ! dummy loop indices 283 284 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 295 296 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 296 297 ll_rnf = ln_rnf ! active tracers case and river runoffs 298 ll_isf = ln_isf ! active tracers case and ice shelf melting 297 299 ELSE 298 300 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 299 301 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 300 302 ll_rnf = .FALSE. ! passive tracers or NO river runoffs 303 ll_isf = .FALSE. ! passive tracers or NO ice shelf melting 301 304 ENDIF 302 305 ! … … 321 324 ztc_f = ztc_n + atfp * ztc_d 322 325 ! 323 IF( jk == 1 ) THEN ! first level 324 ! IF( jk == mikt(ji,jj) ) THEN ! first level 325 ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) + rnf(ji,jj) - rnf_b(ji,jj)) 326 ! ze3t_f = ze3t_f - zfact2 * ( (emp_b(ji,jj) - emp(ji,jj)) & 327 ! & - (rnf_b(ji,jj) - rnf(ji,jj)) & 328 ! & + (fwfisf_b(ji,jj) - fwfisf(ji,jj)) ) 326 IF( jk == mikt(ji,jj) ) THEN ! first level 327 ze3t_f = ze3t_f - zfact2 * ( (emp_b(ji,jj) - emp(ji,jj)) & 328 & - (rnf_b(ji,jj) - rnf(ji,jj)) & 329 & + (fwfisf_b(ji,jj) - fwfisf(ji,jj)) ) 329 330 330 331 ztc_f = ztc_f - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) … … 334 335 & ztc_f = ztc_f - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) ) 335 336 336 IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) ) & ! river runoffs 337 ! river runoffs 338 IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) ) & 337 339 & ztc_f = ztc_f - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) & 338 340 & * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 339 341 340 !IF( nn_isf .NE. 0 .AND. jk == mikt(ji,jj) ) & ! ice shelf 341 ! & ztc_f = ztc_f + zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) & 342 ! & * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) 342 ! ice shelf 343 IF( ll_isf ) THEN 344 ! level fully include in the Losch_2008 ice shelf boundary layer 345 IF ( jk >= misfkt(ji,jj) .AND. jk < misfkb(ji,jj) ) & 346 ztc_f = ztc_f - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) & 347 & * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) 348 ! level partially include in Losch_2008 ice shelf boundary layer 349 IF ( jk == misfkb(ji,jj) ) & 350 ztc_f = ztc_f - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) & 351 & * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) * ralpha(ji,jj) 352 END IF 343 353 344 354 ze3t_f = 1.e0 / ze3t_f -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r5621 r5624 217 217 !---------------------------------------- 218 218 ! 219 IF( nn_isf > 0) THEN219 IF( ln_isf ) THEN 220 220 zfact = 0.5_wp 221 221 DO jj = 2, jpj … … 226 226 227 227 ! level fully include in the ice shelf boundary layer 228 ! if isfdiv, we have to remove heat flux due to inflow at 0oC (as in rnf when you add rnf at sst)229 228 ! sign - because fwf sign of evapo (rnf sign of precip) 230 229 DO jk = ikt, ikb - 1 231 ! compute tfreez for the temperature correction (we add water at freezing temperature)232 ! zpress = grav*rau0*fsdept(ji,jj,jk)*1.e-04233 zt_frz = -1.9_wp !CALL eos_fzp( tsn(ji,jj,jk,jp_sal), zt_frz, zpress )234 230 ! compute trend 235 231 tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) & 236 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) & 237 & - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) & 238 & * r1_hisf_tbl(ji,jj) 239 tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) & 240 & + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal)) & 232 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) ) & 241 233 & * r1_hisf_tbl(ji,jj) 242 234 END DO 243 235 244 236 ! level partially include in ice shelf boundary layer 245 ! compute tfreez for the temperature correction (we add water at freezing temperature)246 ! zpress = grav*rau0*fsdept(ji,jj,ikb)*1.e-04247 zt_frz = -1.9_wp !CALL eos_fzp( tsn(ji,jj,ikb,jp_sal), zt_frz, zpress )248 237 ! compute trend 249 238 tsa(ji,jj,ikb,jp_tem) = tsa(ji,jj,ikb,jp_tem) & 250 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) & 251 & - rdivisf * (fwfisf(ji,jj) + fwfisf_b(ji,jj)) * zt_frz * r1_rau0) & 239 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) ) & 252 240 & * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 253 tsa(ji,jj,ikb,jp_sal) = tsa(ji,jj,ikb,jp_sal) &254 & + zfact * (risf_tsc_b(ji,jj,jp_sal) + risf_tsc(ji,jj,jp_sal)) &255 & * r1_hisf_tbl(ji,jj) * ralpha(ji,jj)256 241 257 242 END DO
Note: See TracChangeset
for help on using the changeset viewer.