Changeset 10164
- Timestamp:
- 2018-10-02T16:02:24+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE/cfgs/SHARED/field_def_nemo-oce.xml
r9990 r10164 21 21 <field id="e3t" long_name="T-cell thickness" standard_name="cell_thickness" unit="m" grid_ref="grid_T_3D" /> 22 22 <field id="e3t_surf" long_name="T-cell thickness" field_ref="e3t" standard_name="cell_thickness" unit="m" grid_ref="grid_T_SFC"/> 23 <field id="e3t_0" long_name="Initial T-cell thickness" standard_name="ref_cell_thickness" unit="m" grid_ref="grid_T_3D" /> 24 <field id="e3t_star" long_name="Barotropic T-cell thickness anomaly" standard_name="barotropic_cell_thickness_anomaly" unit="m" grid_ref="grid_T_3D" /> 25 <field id="e3t_tilde" long_name="Baroclinic T-cell thickness anomaly" standard_name="baroclinic_cell_thickness_anomaly" unit="m" grid_ref="grid_T_3D" /> 23 26 <field id="e3t_0" long_name="Initial T-cell thickness" standard_name="ref_cell_thickness" unit="m" grid_ref="grid_T_3D" /> 24 27 -
NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE/src/OCE/DIA/diawri.F90
r10126 r10164 58 58 USE diurnal_bulk ! diurnal warm layer 59 59 USE cool_skin ! Cool skin 60 USE domvvl 60 61 61 62 IMPLICIT NONE … … 124 125 125 126 ! Output of initial vertical scale factor 126 CALL iom_put("e3t_0", e3t_0(:,:,:) 127 CALL iom_put("e3t_0", e3t_0(:,:,:)) 127 128 CALL iom_put("e3u_0", e3u_0(:,:,:) ) 128 129 CALL iom_put("e3v_0", e3v_0(:,:,:) ) … … 132 133 CALL iom_put( "e3v" , e3v_n(:,:,:) ) 133 134 CALL iom_put( "e3w" , e3w_n(:,:,:) ) 135 ! 136 IF ( (ln_vvl_ztilde).OR.(ln_vvl_layer) ) THEN 137 IF( iom_use("e3t_star") ) THEN ! Barotropic cell thickness anomaly 138 z3d(:,:,:) = (e3t_n(:,:,:)-tilde_e3t_n(:,:,:)-e3t_0(:,:,:))*tmask(:,:,:) 139 CALL iom_put( "e3t_star" , z3d(:,:,:) ) 140 ENDIF 141 IF( iom_use("e3t_tilde") ) THEN ! Baroclinic cell thickness anomaly 142 CALL iom_put( "e3t_tilde" , tilde_e3t_n(:,:,:) ) 143 ENDIF 144 ENDIF 145 134 146 IF( iom_use("e3tdef") ) & 135 147 CALL iom_put( "e3tdef" , ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 ) -
NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE/src/OCE/DOM/domvvl.F90
r10128 r10164 61 61 LOGICAL :: ln_vvl_kepe = .FALSE. ! kinetic/potential energy transfer 62 62 ! ! conservation: not used yet 63 INTEGER :: nn_filt_order=1 63 64 REAL(wp) :: rn_ahe3_lap ! thickness diffusion coefficient (Laplacian) 64 65 REAL(wp) :: rn_ahe3_blp ! thickness diffusion coefficient (Bilaplacian) … … 69 70 70 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_td, vn_td ! thickness diffusion transport 71 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: un_lf, vn_lf, hdivn_lf! low frequency fluxes and divergence72 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: un_lf, vn_lf, hdivn_lf ! low frequency fluxes and divergence 72 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_b, tilde_e3t_n ! baroclinic scale factors 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a , dtilde_e3t_a! baroclinic scale factors74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tilde_e3t_a ! baroclinic scale factors 74 75 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: tildemask ! mask tilde tendency 75 76 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: frq_rst_e3t ! restoring period for scale factors … … 94 95 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 95 96 ALLOCATE( tilde_e3t_b(jpi,jpj,jpk) , tilde_e3t_n(jpi,jpj,jpk) , tilde_e3t_a(jpi,jpj,jpk) , & 96 & dtilde_e3t_a(jpi,jpj,jpk) , un_td (jpi,jpj,jpk) , vn_td (jpi,jpj,jpk) ,&97 & un_td (jpi,jpj,jpk) , vn_td (jpi,jpj,jpk) , & 97 98 & tildemask(jpi,jpj) , hsm(jpi,jpj) , dsm(jpi,jpj) , i_int_bot(jpi,jpj), STAT = dom_vvl_alloc ) 98 99 IF( lk_mpp ) CALL mpp_sum ( dom_vvl_alloc ) … … 102 103 ENDIF 103 104 IF( ln_vvl_ztilde ) THEN 104 ALLOCATE( frq_rst_e3t(jpi,jpj) , frq_rst_hdv(jpi,jpj) , hdivn_lf(jpi,jpj,jpk ) ,&105 & un_lf(jpi,jpj,jpk ), vn_lf(jpi,jpj,jpk), STAT= dom_vvl_alloc )105 ALLOCATE( frq_rst_e3t(jpi,jpj) , frq_rst_hdv(jpi,jpj) , hdivn_lf(jpi,jpj,jpk,nn_filt_order), & 106 & un_lf(jpi,jpj,jpk,nn_filt_order), vn_lf(jpi,jpj,jpk,nn_filt_order), STAT= dom_vvl_alloc ) 106 107 IF( lk_mpp ) CALL mpp_sum ( dom_vvl_alloc ) 107 108 IF( dom_vvl_alloc /= 0 ) CALL ctl_warn('dom_vvl_alloc: failed to allocate arrays') … … 263 264 ! 264 265 IF ( ln_vvl_zstar_on_shelf ) THEN 265 zhmin = 266 zhmin = 50._wp 266 267 zhmax = 100._wp 267 268 DO jj = 1, jpj … … 284 285 IF ( (ztmp*rdt) > 1._wp) CALL ctl_stop( 'dom_vvl_init: rn_lf_cuttoff is too small' ) 285 286 ! 287 ENDIF 288 289 IF( ln_vvl_layer ) THEN 290 IF ( ln_vvl_zstar_on_shelf ) THEN 291 zhmin = 100._wp 292 zhmax = 150._wp 293 DO jj = 1, jpj 294 DO ji = 1, jpi 295 zwgt = 1._wp 296 IF(( ht_0(ji,jj)>zhmin).AND.(ht_0(ji,jj) <=zhmax)) THEN 297 zwgt = (ht_0(ji,jj)-zhmin)/(zhmax-zhmin) 298 ELSEIF ( ht_0(ji,jj)<=zhmin) THEN 299 zwgt = 0._wp 300 ENDIF 301 tildemask(ji,jj) = MIN(tildemask(ji,jj), zwgt) 302 END DO 303 END DO 304 ENDIF 305 IF ( ln_vvl_zstar_at_eqtor ) THEN 306 DO jj = 1, jpj 307 DO ji = 1, jpi 308 !!gm case |gphi| >= 6 degrees is useless initialized just above by default 309 IF( ABS(gphit(ji,jj)) >= 6.) THEN 310 ! values outside the equatorial band and transition zone (ztilde) 311 312 ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN 313 ! values inside the equatorial band (ztilde as zstar) 314 tildemask(ji,jj) = 0._wp 315 ELSE 316 tildemask(ji,jj) = 0.5_wp * ( 1._wp - COS( rad*(ABS(gphit(ji,jj))-2.5_wp) & 317 & * 180._wp / 3.5_wp ) ) 318 ENDIF 319 END DO 320 END DO 321 ENDIF 286 322 ENDIF 287 323 ! … … 335 371 ! 336 372 LOGICAL :: ll_do_bclinic ! local logical 337 INTEGER :: ji, jj, jk 373 INTEGER :: ji, jj, jk, jo ! dummy loop indices 338 374 INTEGER :: ib, ib_bdy, ip, jp ! " " " 339 375 INTEGER , DIMENSION(3) :: ijk_max, ijk_min ! temporary integers … … 341 377 REAL(wp) :: z2dt , z_tmin, z_tmax! local scalars 342 378 REAL(wp) :: zalpha, zwgt ! temporary scalars 343 REAL(wp) :: zdu, zdv, zramp 379 REAL(wp) :: zdu, zdv, zramp, zmet 344 380 REAL(wp) :: ztra, zbtr, ztout, ztin, zfac, zmsku, zmskv 345 381 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv … … 357 393 ENDIF 358 394 395 zmet = 1._wp 396 359 397 ll_do_bclinic = .TRUE. 360 398 ncall = 1 … … 362 400 IF( PRESENT(kcall) ) THEN 363 401 ! comment line below if tilda coordinate has to be computed at each call 364 ! This is not working yet 365 ! IF (kcall == 2 .AND. (ln_vvl_ztilde.OR.ln_vvl_layer) ) ll_do_bclinic = .FALSE. 402 IF (kcall == 2 .AND. (ln_vvl_ztilde.OR.ln_vvl_layer) ) ll_do_bclinic = .FALSE. 366 403 ncall = kcall 367 404 ENDIF … … 386 423 END DO 387 424 ! 425 IF ((ln_vvl_ztilde.OR.ln_vvl_layer).AND.(zmet==1._wp)) THEN 426 DO jk = 1, jpkm1 427 e3t_a(:,:,jk) = e3t_a(:,:,jk) - tilde_e3t_n(:,:,jk) * z_scale(:,:) * tmask(:,:,jk) 428 END DO 429 ENDIF 430 388 431 IF( (ln_vvl_ztilde.OR.ln_vvl_layer) .AND. ll_do_bclinic ) THEN ! z_tilde or layer coordinate ! 389 ! 432 ! ! ------baroclinic part------ ! 390 433 tilde_e3t_a(:,:,:) = 0.0_wp ! tilde_e3t_a used to store tendency terms 391 434 un_td(:,:,:) = 0.0_wp ! Transport corrections … … 415 458 ztu(:,:,jk) = un(:,:,jk) * e3u_n(:,:,jk) * e2u(:,:) 416 459 ztv(:,:,jk) = vn(:,:,jk) * e3v_n(:,:,jk) * e1v(:,:) 417 ze3t(:,:,jk) = -tilde_e3t_a(:,:,jk) - e3t_n(:,:,jk) * zhdiv(:,:)460 ze3t(:,:,jk) = -tilde_e3t_a(:,:,jk) - (e3t_n(:,:,jk)-zmet*tilde_e3t_n(:,:,jk)) * zhdiv(:,:) 418 461 END DO 419 462 ! 420 un_lf(:,:,:) = un_lf(:,:,:) * (1._wp - zalpha) + zalpha * ztu(:,:,:) 421 vn_lf(:,:,:) = vn_lf(:,:,:) * (1._wp - zalpha) + zalpha * ztv(:,:,:) 422 hdivn_lf(:,:,:) = hdivn_lf(:,:,:) * (1._wp - zalpha) + zalpha * ze3t(:,:,:) 423 ! 2nd order filtering: 424 ! un_lf2(:,:,:) = un_lf2(:,:,:) * (1._wp - zalpha) + zalpha * ztu(:,:,:) 425 ! vn_lf2(:,:,:) = vn_lf2(:,:,:) * (1._wp - zalpha) + zalpha * ztv(:,:,:) 426 ! hdivn_lf2(:,:,:) = hdivn_lf2(:,:,:) * (1._wp - zalpha) + zalpha * ze3t(:,:,:) 427 ! un_lf(:,:,:) = un_lf(:,:,:) * (1._wp - zalpha) + zalpha * un_lf2(:,:,:) 428 ! vn_lf(:,:,:) = vn_lf(:,:,:) * (1._wp - zalpha) + zalpha * vn_lf2(:,:,:) 429 ! hdivn_lf(:,:,:) = hdivn_lf(:,:,:) * (1._wp - zalpha) + zalpha * hdivn_lf2(:,:,:) 463 un_lf(:,:,:,nn_filt_order) = un_lf(:,:,:,nn_filt_order) * (1._wp - zalpha) + zalpha * ztu(:,:,:) 464 vn_lf(:,:,:,nn_filt_order) = vn_lf(:,:,:,nn_filt_order) * (1._wp - zalpha) + zalpha * ztv(:,:,:) 465 hdivn_lf(:,:,:,nn_filt_order) = hdivn_lf(:,:,:,nn_filt_order) * (1._wp - zalpha) + zalpha * ze3t(:,:,:) 466 467 DO jo = nn_filt_order-1,1,-1 468 un_lf(:,:,:,jo) = un_lf(:,:,:,jo) * (1._wp - zalpha) + zalpha * un_lf(:,:,:,jo+1) 469 vn_lf(:,:,:,jo) = vn_lf(:,:,:,jo) * (1._wp - zalpha) + zalpha * vn_lf(:,:,:,jo+1) 470 hdivn_lf(:,:,:,jo) = hdivn_lf(:,:,:,jo) * (1._wp - zalpha) + zalpha * hdivn_lf(:,:,:,jo+1) 471 END DO 430 472 ENDIF 431 473 ! 432 474 DO jk = 1, jpkm1 433 ztu(:,:,jk) = (un(:,:,jk)-un_lf(:,:,jk)/e3u_n(:,:,jk)*r1_e2u(:,:))*umask(:,:,jk) 434 ztv(:,:,jk) = (vn(:,:,jk)-vn_lf(:,:,jk)/e3v_n(:,:,jk)*r1_e1v(:,:))*vmask(:,:,jk) 435 tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) + hdivn_lf(:,:,jk) - frq_rst_e3t(:,:) * tilde_e3t_b(:,:,jk) 436 END DO 437 475 ztu(:,:,jk) = (un(:,:,jk)-un_lf(:,:,jk,1)/e3u_n(:,:,jk)*r1_e2u(:,:))*umask(:,:,jk) 476 ztv(:,:,jk) = (vn(:,:,jk)-vn_lf(:,:,jk,1)/e3v_n(:,:,jk)*r1_e1v(:,:))*vmask(:,:,jk) 477 tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) + hdivn_lf(:,:,jk,1) - frq_rst_e3t(:,:) * tilde_e3t_b(:,:,jk) 478 END DO 438 479 ! 439 480 ELSEIF ( ln_vvl_layer ) THEN … … 447 488 ! 448 489 ! Block fluxes through small layers: 449 DO jk=1,jpkm1450 DO ji = 1, jpi451 DO jj= 1, jpj452 zmsku = 0.5_wp * ( 1._wp + SIGN(1._wp, e3u_n(ji,jj,jk) - hsmall) )453 un_td(ji,jj,jk) = un_td(ji,jj,jk) - (1. - zmsku) * un(ji,jj,jk) * e3u_n(ji,jj,jk) * e2u(ji,jj)454 ztu(ji,jj,jk) = zmsku * ztu(ji,jj,jk)455 IF ( ln_vvl_ztilde ) un_lf(ji,jj,jk) = zmsku * un_lf(ji,jj,jk)456 !457 zmskv = 0.5_wp * ( 1._wp + SIGN(1._wp, e3v_n(ji,jj,jk) - hsmall) )458 vn_td(ji,jj,jk) = vn_td(ji,jj,jk) - (1. - zmskv) * vn(ji,jj,jk) * e3v_n(ji,jj,jk) * e1v(ji,jj)459 ztv(ji,jj,jk) = zmskv * ztv(ji,jj,jk)460 IF ( ln_vvl_ztilde ) vn_lf(ji,jj,jk) = zmskv * vn_lf(ji,jj,jk)461 END DO462 END DO463 END DO490 ! DO jk=1,jpkm1 491 ! DO ji = 1, jpi 492 ! DO jj= 1, jpj 493 ! zmsku = 0.5_wp * ( 1._wp + SIGN(1._wp, e3u_n(ji,jj,jk) - hsmall) ) 494 ! un_td(ji,jj,jk) = un_td(ji,jj,jk) - (1. - zmsku) * un(ji,jj,jk) * e3u_n(ji,jj,jk) * e2u(ji,jj) 495 ! ztu(ji,jj,jk) = zmsku * ztu(ji,jj,jk) 496 ! IF ( ln_vvl_ztilde ) un_lf(ji,jj,jk) = zmsku * un_lf(ji,jj,jk) 497 ! ! 498 ! zmskv = 0.5_wp * ( 1._wp + SIGN(1._wp, e3v_n(ji,jj,jk) - hsmall) ) 499 ! vn_td(ji,jj,jk) = vn_td(ji,jj,jk) - (1. - zmskv) * vn(ji,jj,jk) * e3v_n(ji,jj,jk) * e1v(ji,jj) 500 ! ztv(ji,jj,jk) = zmskv * ztv(ji,jj,jk) 501 ! IF ( ln_vvl_ztilde ) vn_lf(ji,jj,jk) = zmskv * vn_lf(ji,jj,jk) 502 ! END DO 503 ! END DO 504 ! END DO 464 505 ! 465 506 ! Do advection … … 481 522 ! 482 523 ! Thickness anomaly diffusion: 483 ! ---------------------------- -524 ! ---------------------------- 484 525 ztu(:,:,:) = 0.0_wp 485 526 ztv(:,:,:) = 0.0_wp … … 498 539 DO jj = 1, jpjm1 ! First derivative (gradient) 499 540 DO ji = 1, fs_jpim1 ! vector opt. 500 ! ztu(ji,jj,jk) = umask(ji,jj,jk) * e2_e1u(ji,jj) &501 ! & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj ,jk) )502 ! ztv(ji,jj,jk) = vmask(ji,jj,jk) * e1_e2v(ji,jj) &503 ! & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji ,jj+1,jk) )504 541 ztu(ji,jj,jk) = umask(ji,jj,jk) * e2_e1u(ji,jj) & 505 542 & * ( ze3t(ji,jj,jk) - ze3t(ji+1,jj ,jk) ) … … 542 579 DO jj = 1, jpjm1 543 580 DO ji = 1, fs_jpim1 ! vector opt. 544 ! zdu = rn_ahe3_lap * umask(ji,jj,jk) * e2_e1u(ji,jj) &545 ! & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj ,jk) )546 ! zdv = rn_ahe3_lap * vmask(ji,jj,jk) * e1_e2v(ji,jj) &547 ! & * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji ,jj+1,jk) )548 581 zdu = rn_ahe3_lap * umask(ji,jj,jk) * e2_e1u(ji,jj) & 549 582 & * ( ze3t(ji,jj,jk) - ze3t(ji+1,jj ,jk) ) … … 561 594 DO jj = 2, jpjm1 562 595 DO ji = fs_2, fs_jpim1 ! vector opt. 563 ! tilde_e3t_a(ji,jj,jk) = tilde_e3t_a(ji,jj,jk) + ( ztu(ji-1,jj ,jk) - ztu(ji,jj,jk) &564 ! & + ztv(ji ,jj-1,jk) - ztv(ji,jj,jk) &565 ! & ) * r1_e1e2t(ji,jj)566 596 un_td(ji,jj,jk) = un_td(ji,jj,jk) + ztu(ji,jj,jk+1) - ztu(ji,jj,jk ) 567 597 vn_td(ji,jj,jk) = vn_td(ji,jj,jk) + ztv(ji,jj,jk+1) - ztv(ji,jj,jk ) … … 575 605 END DO 576 606 577 578 ! un_td(:,:,:) = un_td(:,:,:) + ztu(:,:,:)579 ! vn_td(:,:,:) = vn_td(:,:,:) + ztv(:,:,:)580 581 607 CALL lbc_lnk_multi( un_td, 'U', -1., vn_td, 'V', -1. ) !* local domain boundaries 582 608 ! … … 591 617 ! Remove "external thickness" tendency: 592 618 DO jk = 1, jpkm1 593 tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) + e3t_n(:,:,jk) * zhdiv(:,:)619 tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) + (e3t_n(:,:,jk)-zmet*tilde_e3t_n(:,:,jk)) * zhdiv(:,:) * tmask(:,:,jk) 594 620 END DO 595 621 … … 646 672 END DO 647 673 CALL lbc_lnk( ze3t(:,:,:), 'T', 1. ) 648 hdivn_lf(:,:,:) = hdivn_lf(:,:,:) + zalpha * ze3t(:,:,:) 649 ! 2nd order filtering: 650 ! hdivn_lf2(:,:,:) = hdivn_lf2(:,:,:) + zalpha* ze3t(:,:,:)651 ! hdivn_lf(:,:,:) = hdivn_lf(:,:,:) + zalpha * zalpha * ze3t(:,:,:) 674 675 DO jo = nn_filt_order,1,-1 676 hdivn_lf(:,:,:,jo) = hdivn_lf(:,:,:,jo) + zalpha**(nn_filt_order-jo+1) * ze3t(:,:,:) 677 END DO 652 678 ENDIF 653 679 654 680 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! z_tilde or layer coordinate ! 655 681 ! ! ---baroclinic part--------- ! 682 683 IF ( (ncall==2).AND.(.NOT.ll_do_bclinic) ) THEN 684 685 DO jk = 1, jpkm1 686 ztu(:,:,jk) = (un_adv(:,:)*r1_hu_n(:,:) - un_b(:,:) ) * e3u_n(:,:,jk) * e2u(:,:) * umask(:,:,jk) 687 ztv(:,:,jk) = (vn_adv(:,:)*r1_hv_n(:,:) - vn_b(:,:) ) * e3v_n(:,:,jk) * e1v(:,:) * vmask(:,:,jk) 688 DO jj = 2, jpjm1 689 DO ji = fs_2, fs_jpim1 ! vector opt. 690 ze3t(ji,jj,jk) = ( ztu(ji,jj,jk) - ztu(ji-1,jj ,jk) & 691 & + ztv(ji,jj,jk) - ztv(ji ,jj-1,jk) & 692 & ) / ( e1t(ji,jj) * e2t(ji,jj) ) 693 END DO 694 END DO 695 END DO 696 ! 697 zhdiv(:,:) = 0. 698 DO jk = 1, jpkm1 699 zhdiv(:,:) = zhdiv(:,:) + ze3t(:,:,jk) * tmask(:,:,jk) 700 END DO 701 zhdiv(:,:) = zhdiv(:,:) / ( ht_0(:,:) + sshn(:,:) + 1._wp - tmask_i(:,:) ) 702 ! 703 DO jk = 1, jpkm1 704 tilde_e3t_a(:,:,jk) = tilde_e3t_a(:,:,jk) - z2dt * (ze3t(:,:,jk) & 705 & - zhdiv(:,:)*(e3t_n(:,:,jk)-zmet*tilde_e3t_n(:,:,jk))*tmask(:,:,jk)) 706 END DO 707 CALL lbc_lnk( tilde_e3t_a(:,:,:), 'T', 1. ) 708 ENDIF 709 ! 656 710 DO jk = 1, jpkm1 657 e3t_a(:,:,jk) = e3t_a(:,:,jk) + (tilde_e3t_a(:,:,jk) - tilde_e3t_b(:,:,jk)) 658 END DO 711 e3t_a(:,:,jk) = e3t_a(:,:,jk) + tilde_e3t_a(:,:,jk) - tilde_e3t_b(:,:,jk) 712 END DO 713 ! IF( ln_vvl_ztilde ) THEN ! Relax barotropic component: 714 ! DO jk = 1, jpkm1 715 ! e3t_a(:,:,jk) = e3t_a(:,:,jk) & 716 ! & - z2dt * frq_rst_e3t(:,:) * (e3t_b(:,:,jk) - tilde_e3t_b(:,:,jk) & 717 ! & - e3t_0(:,:,jk) * (ht_0(:,:) + sshb(:,:))/ (ht_0(:,:)*tmask(:,:,1) + 1._wp - tmask(:,:,1))) 718 ! END DO 719 ! ENDIF 659 720 ENDIF 660 721 … … 686 747 ENDIF 687 748 IF (lwp) THEN 749 ji = ijk_min(1) ; jj = ijk_min(2) ; jk = ijk_min(3) 688 750 WRITE(numout, *) 'Negative scale factor, e3t_n =', z_tmin 689 751 WRITE(numout, *) 'at i, j, k=', ijk_min … … 1270 1332 ! 1271 1333 INTEGER :: ji, jj, jk 1272 INTEGER :: id1, id2, id3, id4, id5 ! local integers1334 INTEGER :: id1, id2, id3, id4, id5, id6, id7 ! local integers 1273 1335 !!---------------------------------------------------------------------- 1274 1336 ! … … 1284 1346 id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 1285 1347 id5 = iom_varid( numror, 'hdivn_lf', ldstop = .FALSE. ) 1348 id6 = iom_varid( numror, 'un_lf', ldstop = .FALSE. ) 1349 id7 = iom_varid( numror, 'vn_lf', ldstop = .FALSE. ) 1286 1350 ! ! --------- ! 1287 1351 ! ! all cases ! … … 1344 1408 IF( ln_vvl_ztilde ) THEN ! z_tilde case ! 1345 1409 ! ! ------------ ! 1346 IF( id5 > 0 ) THEN ! required array exists 1347 CALL iom_get( numror, jpdom_autoglo, 'hdivn_lf', hdivn_lf(:,:,:), ldxios = lrxios ) 1410 IF( MIN(id5, id6, id7) > 0 ) THEN ! required arrays exist 1411 CALL iom_get( numror, jpdom_autoglo, 'hdivn_lf', hdivn_lf(:,:,:,1), ldxios = lrxios ) 1412 CALL iom_get( numror, jpdom_autoglo, 'un_lf', un_lf(:,:,:,1), ldxios = lrxios ) 1413 CALL iom_get( numror, jpdom_autoglo, 'vn_lf', vn_lf(:,:,:,1), ldxios = lrxios ) 1348 1414 ELSE ! array is missing 1349 hdivn_lf(:,:,:) = 0.0_wp 1415 hdivn_lf(:,:,:,:) = 0.0_wp 1416 un_lf(:,:,:,:) = 0.0_wp 1417 vn_lf(:,:,:,:) = 0.0_wp 1350 1418 ENDIF 1351 1419 ENDIF … … 1418 1486 tilde_e3t_n(:,:,:) = 0._wp 1419 1487 IF( ln_vvl_ztilde ) THEN 1420 hdivn_lf(:,:,: ) = 0._wp1421 un_lf(:,:,: ) = 0._wp1422 vn_lf(:,:,: ) = 0._wp1488 hdivn_lf(:,:,:,:) = 0._wp 1489 un_lf(:,:,:,:) = 0._wp 1490 vn_lf(:,:,:,:) = 0._wp 1423 1491 ENDIF 1424 1492 END IF … … 1443 1511 IF( ln_vvl_ztilde ) THEN ! z_tilde case ! 1444 1512 ! ! ------------ ! 1445 CALL iom_rstput( kt, nitrst, numrow, 'hdivn_lf', hdivn_lf(:,:,:), ldxios = lwxios) 1513 CALL iom_rstput( kt, nitrst, numrow, 'hdivn_lf', hdivn_lf(:,:,:,1), ldxios = lwxios) 1514 CALL iom_rstput( kt, nitrst, numrow, 'un_lf', un_lf(:,:,:,1), ldxios = lwxios) 1515 CALL iom_rstput( kt, nitrst, numrow, 'vn_lf', vn_lf(:,:,:,1), ldxios = lwxios) 1446 1516 ENDIF 1447 1517 ! … … 1604 1674 ll_chk_bot2top = .TRUE. 1605 1675 ll_chk_top2bot = .TRUE. 1606 dzmin_int = 0.1_wp ! Absolute minimum depth in the interior (in meters)1676 dzmin_int = 1.0_wp ! Absolute minimum depth in the interior (in meters) 1607 1677 dzmin_surf = 1.0_wp ! Absolute minimum depth at the surface (in meters) 1608 zfrch_stp = 0.5_wp ! Maximum fractionnal thickness change in one time step (<= 1.)1678 zfrch_stp = 5._wp ! Maximum fractionnal thickness change in one time step (<= 1.) 1609 1679 zfrch_rel = 0.4_wp ! Maximum relative thickness change in the vertical (<= 1.) 1610 1680 zfrac_bot = 0.05_wp ! Fraction of bottom level allowed to change … … 1614 1684 zvlim = 0.5_wp ! max d2h/dh 1615 1685 ll_lapdiff_cond = .TRUE. ! Conditionnal Laplacian diffusion of interfaces 1616 zhdiff = 0.01_wp 1686 zhdiff = 0.01_wp ! ad. 1617 1687 zhlim = 0.03_wp ! ad. max lap(z)*e1 1618 ll_blpdiff_cond = . FALSE. ! Conditionnal Bilaplacian diffusion of interfaces1688 ll_blpdiff_cond = .TRUE. ! Conditionnal Bilaplacian diffusion of interfaces 1619 1689 zhdiff2 = 0.2_wp ! ad. 1620 ! zhlim2 = 3.e-11_wp ! max bilap(z)1621 1690 zhlim2 = 0.01_wp ! ad. max bilap(z)*e1**3 1622 1691 ! --------------------------------------------------------------------------------------- … … 1819 1888 zh_old = zwdw(ji,jj,jk+1) - zwdw(ji,jj,jk) 1820 1889 zh_min = MIN(zh_0/3._wp, dzmin_int) 1890 ! zh_min = MAX(zh_min, zh_min-e3t_a(ji,jj,jk)+e3t_0(ji,jj,jk)) 1821 1891 ! 1822 1892 ! Set maximum and minimum vertical excursions … … 1836 1906 ! Ensure minimum layer thickness: 1837 1907 ! zh_new = MAX((1._wp-zfrch_stp)*zh_bef, zh_new) 1838 zh_new = cush(zh_new, zh_min) 1908 ! zh_new = cush(zh_new, zh_min) 1909 zh_new = MAX(zh_new, zh_min) 1839 1910 ! 1840 1911 ! Final flux: … … 1842 1913 ! 1843 1914 ! Limit thickness change in 1 time step: 1844 ztmp = MIN( ABS(zdiff), zfrch_stp*zh_bef )1845 zdiff = SIGN(ztmp, zh_new - zh_old)1915 ! ztmp = MIN( ABS(zdiff), zfrch_stp*zh_bef ) 1916 ! zdiff = SIGN(ztmp, zh_new - zh_old) 1846 1917 zh_new = zdiff + zh_old 1847 1918 ! … … 1864 1935 zh_old = zwdw(ji,jj,jk+1) - zwdw(ji,jj,jk) 1865 1936 zh_min = MIN(zh_0/3._wp, dzmin_int) 1866 ! 1867 zwdw(ji,jj,jk+1) = MAX(zwdw(ji,jj,jk+1), REAL(jk)*dzmin_surf) 1937 ! zh_min = MAX(zh_min, zh_min-e3t_a(ji,jj,jk)+e3t_0(ji,jj,jk)) 1938 ! 1939 ! zwdw(ji,jj,jk+1) = MAX(zwdw(ji,jj,jk+1), REAL(jk)*dzmin_surf) 1868 1940 ! 1869 1941 ! New layer thickness: … … 1872 1944 ! Ensure minimum layer thickness: 1873 1945 ! zh_new = MAX((1._wp-zfrch_stp)*zh_bef, zh_new) 1874 zh_new = cush(zh_new, zh_min) 1946 ! zh_new = cush(zh_new, zh_min) 1947 zh_new = MAX(zh_new, zh_min) 1875 1948 ! 1876 1949 ! Final flux: … … 2089 2162 ENDIF 2090 2163 2091 IF ( ln_vvl_dbg ) THEN2092 zmin = MINVAL( zwi(:,:,:), mask = tmask(:,:,:) == 1.e0 )2093 IF( lk_mpp ) CALL mpp_min( zmin )2094 IF( zmin < 0._wp) THEN2095 IF(lwp) CALL ctl_warn('vvl_adv: CFL issue here')2096 IF(lwp) WRITE(numout,*) zmin2097 ENDIF2098 ENDIF2164 ! IF ( ln_vvl_dbg ) THEN 2165 ! zmin = MINVAL( zwi(:,:,:), mask = tmask(:,:,:) == 1.e0 ) 2166 ! IF( lk_mpp ) CALL mpp_min( zmin ) 2167 ! IF( zmin < 0._wp) THEN 2168 ! IF(lwp) CALL ctl_warn('vvl_adv: CFL issue here') 2169 ! IF(lwp) WRITE(numout,*) zmin 2170 ! ENDIF 2171 ! ENDIF 2099 2172 2100 2173 ! 3. antidiffusive flux : high order minus low order … … 2138 2211 ! add them to the general tracer trends 2139 2212 pta(ji,jj,jk) = pta(ji,jj,jk) + ztra 2213 zwi(ji,jj,jk) = (e3t_b(ji,jj,jk) + z2dtt * pta(ji,jj,jk)* bdytmask(ji,jj) ) * tmask(ji,jj,jk) 2140 2214 END DO 2141 2215 END DO 2142 2216 END DO 2217 2218 IF ( ln_vvl_dbg ) THEN 2219 zmin = MINVAL( zwi(:,:,:), mask = tmask(:,:,:) == 1.e0 ) 2220 IF( lk_mpp ) CALL mpp_min( zmin ) 2221 IF( zmin < 0._wp) THEN 2222 IF(lwp) CALL ctl_warn('vvl_adv: CFL issue here') 2223 IF(lwp) WRITE(numout,*) zmin 2224 ENDIF 2225 ENDIF 2143 2226 ! 2144 2227 IF( ln_timing ) CALL timing_stop('dom_vvl_adv_fct') -
NEMO/branches/2018/dev_r10057_ENHANCE03_ZTILDE/tests/COMODO-IW/EXPREF/namelist_cfg
r10128 r10164 237 237 rn_ahe3_lap = 30.e0 238 238 ln_vvl_blp = .true. ! Bilaplacian thickness diffusion 239 rn_ahe3_blp = - 2.e8239 rn_ahe3_blp = -1.e8 240 240 rn_rst_e3t = 30.e0 ! ztilde to zstar restoration timescale [days] 241 241 rn_lf_cutoff = 5.0e0 ! cutoff frequency for low-pass filter [days]
Note: See TracChangeset
for help on using the changeset viewer.