- Timestamp:
- 2019-12-11T09:53:24+01:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/divhor.F90
r10425 r12166 20 20 USE oce ! ocean dynamics and tracers 21 21 USE dom_oce ! ocean space and time domain 22 USE sbc_oce, ONLY : ln_rnf, ln_isf ! surface boundary condition: ocean 23 USE sbcrnf ! river runoff 24 USE sbcisf ! ice shelf 25 USE iscplhsb ! ice sheet / ocean coupling 26 USE iscplini ! ice sheet / ocean coupling 22 USE sbc_oce, ONLY : ln_rnf ! river runoff 23 USE sbcrnf , ONLY : sbc_rnf_div ! river runoff 24 USE isf_oce, ONLY : ln_isf ! ice shelf 25 USE isfhdiv, ONLY : isf_hdiv ! ice shelf 27 26 #if defined key_asminc 28 27 USE asminc ! Assimilation increment … … 64 63 INTEGER :: ji, jj, jk ! dummy loop indices 65 64 REAL(wp) :: zraur, zdep ! local scalars 65 REAL(wp), DIMENSION(jpi,jpj) :: ztmp 66 66 !!---------------------------------------------------------------------- 67 67 ! … … 85 85 END DO 86 86 END DO 87 ! 87 88 #if defined key_agrif 88 89 IF( .NOT. Agrif_Root() ) THEN … … 94 95 #endif 95 96 ! 96 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) !== runoffs==! (update hdivn field)97 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) !== runoffs ==! (update hdivn field) 97 98 ! 98 99 #if defined key_asminc … … 100 101 ! 101 102 #endif 102 IF( ln_isf ) CALL sbc_isf_div( hdivn ) !== ice shelf ==! (update hdivn field)103 103 ! 104 IF( ln_is cpl .AND. ln_hsb ) CALL iscpl_div( hdivn ) !== ice sheet==! (update hdivn field)104 IF( ln_isf ) CALL isf_hdiv( kt, hdivn ) !== ice shelf ==! (update hdivn field) 105 105 ! 106 106 CALL lbc_lnk( 'divhor', hdivn, 'T', 1. ) ! (no sign change) -
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynhpg.F90
r11536 r12166 31 31 !!---------------------------------------------------------------------- 32 32 USE oce ! ocean dynamics and tracers 33 USE isf_oce , ONLY : risfload ! ice shelf (risfload variable) 34 USE isfload , ONLY : isf_load ! ice shelf (isf_load routine ) 33 35 USE sbc_oce ! surface variable (only for the flag with ice shelf) 34 36 USE dom_oce ! ocean space and time domain … … 213 215 ENDIF 214 216 ! 215 IF ( .NOT. ln_isfcav ) THEN !--- no ice shelf load216 riceload(:,:) = 0._wp217 !218 ELSE !--- set an ice shelf load219 !220 IF(lwp) WRITE(numout,*)221 IF(lwp) WRITE(numout,*) ' ice shelf case: set the ice-shelf load'222 ALLOCATE( zts_top(jpi,jpj,jpts) , zrhd(jpi,jpj,jpk) , zrhdtop_isf(jpi,jpj) , ziceload(jpi,jpj) )223 !224 znad = 1._wp !- To use density and not density anomaly225 !226 ! !- assume water displaced by the ice shelf is at T=-1.9 and S=34.4 (rude)227 zts_top(:,:,jp_tem) = -1.9_wp ; zts_top(:,:,jp_sal) = 34.4_wp228 !229 DO jk = 1, jpk !- compute density of the water displaced by the ice shelf230 CALL eos( zts_top(:,:,:), gdept_n(:,:,jk), zrhd(:,:,jk) )231 END DO232 !233 ! !- compute rhd at the ice/oce interface (ice shelf side)234 CALL eos( zts_top , risfdep, zrhdtop_isf )235 !236 ! !- Surface value + ice shelf gradient237 ziceload = 0._wp ! compute pressure due to ice shelf load238 DO jj = 1, jpj ! (used to compute hpgi/j for all the level from 1 to miku/v)239 DO ji = 1, jpi ! divided by 2 later240 ikt = mikt(ji,jj)241 ziceload(ji,jj) = ziceload(ji,jj) + (znad + zrhd(ji,jj,1) ) * e3w_n(ji,jj,1) * (1._wp - tmask(ji,jj,1))242 DO jk = 2, ikt-1243 ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk)) * e3w_n(ji,jj,jk) &244 & * (1._wp - tmask(ji,jj,jk))245 END DO246 IF (ikt >= 2) ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) &247 & * ( risfdep(ji,jj) - gdept_n(ji,jj,ikt-1) )248 END DO249 END DO250 riceload(:,:) = ziceload(:,:) ! need to be saved for diaar5251 !252 DEALLOCATE( zts_top , zrhd , zrhdtop_isf , ziceload )253 ENDIF254 !255 217 END SUBROUTINE dyn_hpg_init 256 257 218 258 219 SUBROUTINE hpg_zco( kt ) … … 572 533 !! ua = ua - 1/e1u * zhpi 573 534 !! va = va - 1/e2v * zhpj 574 !! iceload is added and partial cell case are added to the top and bottom535 !! iceload is added 575 536 !! 576 537 !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend … … 617 578 & - 0.5_wp * e3w_n(ji,jj,ikt) & 618 579 & * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) ) & 619 & + ( ri ceload(ji+1,jj) - riceload(ji,jj)) )580 & + ( risfload(ji+1,jj) - risfload(ji,jj)) ) 620 581 zhpj(ji,jj,1) = zcoef0 / e2v(ji,jj) * ( 0.5_wp * e3w_n(ji,jj+1,iktp1j) & 621 582 & * ( 2._wp * znad + rhd(ji,jj+1,iktp1j) + zrhdtop_oce(ji,jj+1) ) & 622 583 & - 0.5_wp * e3w_n(ji,jj,ikt) & 623 584 & * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) ) & 624 & + ( ri ceload(ji,jj+1) - riceload(ji,jj)) )585 & + ( risfload(ji,jj+1) - risfload(ji,jj)) ) 625 586 ! s-coordinate pressure gradient correction (=0 if z coordinate) 626 587 zuap = -zcoef0 * ( rhd (ji+1,jj,1) + rhd (ji,jj,1) + 2._wp * znad ) & -
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynnxt.F90
r12026 r12166 29 29 USE sbc_oce ! Surface boundary condition: ocean fields 30 30 USE sbcrnf ! river runoffs 31 USE sbcisf ! ice shelf32 31 USE phycst ! physical constants 33 32 USE dynadv ! dynamics: vector invariant versus flux form … … 35 34 USE domvvl ! variable volume 36 35 USE bdy_oce , ONLY: ln_bdy 36 USE isf_oce , ONLY: ln_isf ! ice shelf 37 37 USE bdydta ! ocean open boundary conditions 38 38 USE bdydyn ! ocean open boundary conditions … … 41 41 USE trddyn ! trend manager: dynamics 42 42 USE trdken ! trend manager: kinetic energy 43 USE isfdynnxt , ONLY: isf_dynnxt ! ice shelf volume filter correction subroutine 43 44 ! 44 45 USE in_out_manager ! I/O manager … … 243 244 ENDIF 244 245 END IF 245 246 IF ( ln_isf ) THEN ! if ice shelf melting 247 DO jk = 1, jpkm1 ! Deal with isf separetely, as can be through depth too 248 DO jj = 1, jpj 249 DO ji = 1, jpi 250 IF( misfkt(ji,jj) <=jk .and. jk < misfkb(ji,jj) ) THEN 251 e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zcoef * ( fwfisf_b(ji,jj) - fwfisf(ji,jj) ) & 252 & * ( e3t_n(ji,jj,jk) * r1_hisf_tbl(ji,jj) ) * tmask(ji,jj,jk) 253 ELSEIF ( jk==misfkb(ji,jj) ) THEN 254 e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zcoef * ( fwfisf_b(ji,jj) - fwfisf(ji,jj) ) & 255 & * ( e3t_n(ji,jj,jk) * r1_hisf_tbl(ji,jj) ) * ralpha(ji,jj) * tmask(ji,jj,jk) 256 ENDIF 257 END DO 258 END DO 259 END DO 260 END IF 246 ! 247 ! ice shelf melting (deal separatly as it can be in depth) 248 ! PM: we could probably define a generic subroutine to do the in depth correction 249 ! to manage rnf, isf and possibly in the futur icb, tide water glacier (...) 250 ! ...(kt, coef, ktop, kbot, hz, fwf_b, fwf) 251 IF ( ln_isf ) CALL isf_dynnxt( kt, atfp * rdt ) 261 252 ! 262 253 IF( ln_dynadv_vec ) THEN ! Asselin filter applied on velocity -
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynspg_ts.F90
r12072 r12166 31 31 USE dom_oce ! ocean space and time domain 32 32 USE sbc_oce ! surface boundary condition: ocean 33 USE isf_oce ! ice shelf variable (fwfisf) 33 34 USE zdf_oce ! vertical physics: variables 34 35 USE zdfdrg ! vertical physics: top/bottom drag coef. 35 USE sbcisf ! ice shelf variable (fwfisf)36 36 USE sbcapr ! surface boundary condition: atmospheric pressure 37 37 USE dynadv , ONLY: ln_dynadv_vec … … 335 335 ! ! --------------------------------------------------- ! 336 336 IF (ln_bt_fw) THEN ! FORWARD integration: use kt+1/2 fluxes (NOW+1/2) 337 zssh_frc(:,:) = r1_rau0 * ( emp(:,:) - rnf(:,:) + fwfisf(:,:))337 zssh_frc(:,:) = r1_rau0 * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) 338 338 ELSE ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 339 339 zztmp = r1_rau0 * r1_2 340 zssh_frc(:,:) = zztmp * ( emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:) + fwfisf(:,:) + fwfisf_b(:,:) ) 340 zssh_frc(:,:) = zztmp * ( emp(:,:) + emp_b(:,:) & 341 & - rnf(:,:) - rnf_b(:,:) & 342 & + fwfisf_cav(:,:) + fwfisf_cav_b(:,:) & 343 & + fwfisf_par(:,:) + fwfisf_par_b(:,:) ) 341 344 ENDIF 342 345 ! != Add Stokes drift divergence =! (if exist) … … 344 347 zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 345 348 ENDIF 349 ! 350 ! ! ice sheet coupling 351 IF ( ln_isf .AND. ln_isfcpl ) THEN 352 ! 353 ! ice sheet coupling 354 IF( ln_rstart .AND. kt == nit000 ) THEN 355 zssh_frc(:,:) = zssh_frc(:,:) + risfcpl_ssh(:,:) 356 END IF 357 ! 358 ! conservation option 359 IF( ln_isfcpl_cons ) THEN 360 zssh_frc(:,:) = zssh_frc(:,:) + risfcpl_cons_ssh(:,:) 361 END IF 362 ! 363 END IF 346 364 ! 347 365 #if defined key_asminc -
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynzdf.F90
r11281 r12166 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,ik u) = zwd(ji,jj,iku) - 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/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/sshwzv.F90
r11414 r12166 18 18 !!---------------------------------------------------------------------- 19 19 USE oce ! ocean dynamics and tracers variables 20 USE isf_oce ! ice shelf 20 21 USE dom_oce ! ocean space and time domain variables 21 22 USE sbc_oce ! surface boundary condition: ocean … … 255 256 IF( .NOT.ln_linssh ) THEN ! before <-- with forcing removed 256 257 zcoef = atfp * rdt * r1_rau0 257 sshb(:,:) = sshb(:,:) - zcoef * ( emp_b(:,:) - emp (:,:) & 258 & - rnf_b(:,:) + rnf (:,:) & 259 & + fwfisf_b(:,:) - fwfisf(:,:) ) * ssmask(:,:) 258 sshb(:,:) = sshb(:,:) - zcoef * ( emp_b(:,:) - emp (:,:) & 259 & - rnf_b(:,:) + rnf (:,:) & 260 & + fwfisf_cav_b(:,:) - fwfisf_cav(:,:) & 261 & + fwfisf_par_b(:,:) - fwfisf_par(:,:) ) * ssmask(:,:) 262 263 ! ice sheet coupling 264 IF ( ln_isf .AND. ln_isfcpl .AND. kt == nit000+1) sshb(:,:) = sshb(:,:) - atfp * rdt * ( risfcpl_ssh(:,:) - 0.0 ) * ssmask(:,:) 265 260 266 ENDIF 267 261 268 sshn(:,:) = ssha(:,:) ! now <-- after 262 269 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.