Changeset 12021 for NEMO/branches
- Timestamp:
- 2019-12-02T10:02:07+01:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_ASINTER-01-05_merged
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_ASINTER-01-05_merged/cfgs/ORCA2_ICE_ABL/EXPREF/namelist_cfg
r11945 r12021 89 89 ln_traqsr = .true. ! Light penetration in the ocean (T => fill namtra_qsr) 90 90 ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) 91 ln_dm2dc = .true. ! daily mean to diurnal cycle on short wave 91 92 ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) 92 93 nn_fwb = 2 ! FreshWater Budget: … … 107 108 !----------------------------------------------------------------------- 108 109 ! ! bulk algorithm : 109 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 110 110 ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008) 111 ln_COARE_3p0 = .false. ! "COARE 3.0" algorithm (Fairall et al. 2003) 112 ln_COARE_3p6 = .false. ! "COARE 3.6" algorithm (Edson et al. 2013) 113 ln_ECMWF = .false. ! "ECMWF" algorithm (IFS cycle 31) 114 rn_zqt = 10. ! Air temperature & humidity reference height (m) 115 rn_zu = 10. ! Wind vector reference height (m) 116 ! 117 ! Skin is ONLY available in ECMWF and COARE algorithms: 118 ln_skin_cs = .false. ! use the cool-skin parameterization => set nn_fsbc=1 and ln_dm2dc=.true.! 119 ln_skin_wl = .false. ! use the warm-layer " => set nn_fsbc=1 and ln_dm2dc=.true.! 120 ! 121 ln_humi_sph = .true. ! humidity specified below in "sn_humi" is specific humidity [kg/kg] if .true. 122 ln_humi_dpt = .false. ! humidity specified below in "sn_humi" is dew-point temperature [K] if .true. 123 ln_humi_rlh = .false. ! humidity specified below in "sn_humi" is relative humidity [%] if .true. 124 ! 111 125 cn_dir = './' ! root directory for the bulk data location 112 126 !___________!_________________________!___________________!___________!_____________!________!___________!______________________________________!__________!_______________! … … 404 418 !! namdiu Cool skin and warm layer models (default: OFF) 405 419 !! namdiu Cool skin and warm layer models (default: OFF) 406 !! namflo float parameters ( "key_float")407 !! nam_diaharm Harmonic analysis of tidal constituents ( "key_diaharm")408 !! nam dct transports through some sections ("key_diadct")420 !! namflo float parameters (default: OFF) 421 !! nam_diaharm Harmonic analysis of tidal constituents (default: OFF) 422 !! nam_diadct transports through some sections (default: OFF) 409 423 !! nam_diatmb Top Middle Bottom Output (default: OFF) 410 424 !! nam_dia25h 25h Mean Output (default: OFF) -
NEMO/branches/2019/dev_ASINTER-01-05_merged/src/ABL/sbcabl.F90
r12015 r12021 22 22 USE sbc_oce ! Surface boundary condition: ocean fields 23 23 USE sbcblk ! Surface boundary condition: bulk formulae 24 USE sbcblk_phy ! Surface boundary condition: bulk formulae 24 25 USE dom_oce, ONLY : tmask 25 26 ! … … 294 295 tke_abl(:,:,:,nt_a ) = 0._wp 295 296 ENDIF 297 298 rhoa(:,:) = rho_air( tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), sf(jp_slp)%fnow(:,:,1) ) !!GS: rhoa must be (re)computed here here to avoid division by zero in blk_ice_1 (TBI) 296 299 297 300 END SUBROUTINE sbc_abl_init -
NEMO/branches/2019/dev_ASINTER-01-05_merged/src/OCE/SBC/sbcblk.F90
r12015 r12021 140 140 !! *** ROUTINE sbc_blk_alloc *** 141 141 !!------------------------------------------------------------------- 142 ALLOCATE( t_zu(jpi,jpj) , q_zu(jpi,jpj),&142 ALLOCATE( t_zu(jpi,jpj) , q_zu(jpi,jpj) , tsk(jpi,jpj) , & 143 143 & Cdn_oce(jpi,jpj), Chn_oce(jpi,jpj), Cen_oce(jpi,jpj), & 144 144 & Cd_ice (jpi,jpj), Ch_ice (jpi,jpj), Ce_ice (jpi,jpj), STAT=sbc_blk_alloc ) … … 206 206 207 207 ! !** initialization of the cool-skin / warm-layer parametrization 208 IF( ln_NCAR .AND. (ln_skin_cs .OR. ln_skin_wl) ) & 209 & CALL ctl_stop( 'sbc_blk_init: Cool-skin/warm-layer param. not compatible with NCAR algorithm!' ) 210 ! 208 IF( ln_skin_cs .OR. ln_skin_wl ) THEN 209 !! Some namelist sanity tests: 210 IF( ln_NCAR ) & 211 & CALL ctl_stop( 'sbc_blk_init: Cool-skin/warm-layer param. not compatible with NCAR algorithm' ) 212 IF( nn_fsbc /= 1 ) & 213 & CALL ctl_stop( 'sbc_blk_init: Please set "nn_fsbc" to 1 when using cool-skin/warm-layer param.') 214 END IF 215 211 216 ioptio = 0 212 217 IF( ln_humi_sph ) THEN … … 351 356 !! (momentum, heat, freshwater and runoff) 352 357 !! 353 !! ** Method : (1) READ each fluxes in NetCDF files: 354 !! the 10m wind velocity (i-component) (m/s) at T-point 355 !! the 10m wind velocity (j-component) (m/s) at T-point 356 !! the 10m or 2m specific humidity (kg/kg) 357 !! the solar heat (W/m2) 358 !! the Long wave (W/m2) 359 !! the 10m or 2m air temperature (Kelvin) 360 !! the total precipitation (rain+snow) (Kg/m2/s) 361 !! the snow (solid precipitation) (kg/m2/s) 358 !! ** Method : 359 !! (1) READ each fluxes in NetCDF files: 360 !! the wind velocity (i-component) at z=rn_zu (m/s) at T-point 361 !! the wind velocity (j-component) at z=rn_zu (m/s) at T-point 362 !! the specific humidity at z=rn_zqt (kg/kg) 363 !! the solar heat at z=rn_zqt (W/m2) 364 !! the Long wave (W/m2) 365 !! the air temperature (Kelvin) 366 !! the total precipitation (rain+snow) (Kg/m2/s) 367 !! the snow (solid precipitation) (kg/m2/s) 362 368 !! ABL dynamical forcing (i/j-components of either hpg or geostrophic winds) 363 369 !! (2) CALL blk_oce_1 and blk_oce_2 … … 556 562 557 563 558 IF( ln_skin_cs .OR. ln_skin_wl ) THEN 559 560 SELECT CASE( nblk ) !== transfer coefficients ==! Cd, Ch, Ce at T-point 564 !! Time to call the user-selected bulk parameterization for 565 !! == transfer coefficients ==! Cd, Ch, Ce at T-point, and more... 566 SELECT CASE( nblk ) 567 568 CASE( np_NCAR ) 569 CALL turb_ncar ( rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, & 570 & zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 561 571 562 572 CASE( np_COARE_3p0 ) … … 576 586 577 587 CASE DEFAULT 578 CALL ctl_stop( 'STOP', 'sbc_oce: unsuported bulk formula selection for "ln_skin_*==.true."' ) 579 END SELECT 580 588 CALL ctl_stop( 'STOP', 'sbc_oce: non-existing bulk formula selected' ) 589 590 END SELECT 591 592 IF( ln_skin_cs .OR. ln_skin_wl ) THEN 581 593 !! In the presence of sea-ice we forget about the cool-skin/warm-layer update of zst and pssq: 582 594 WHERE ( fr_i < 0.001_wp ) … … 589 601 pssq(:,:) = zztmp2(:,:) !LB: " " " 590 602 END WHERE 591 592 !LB: Update of tsk, the "official" array for skin temperature 593 tsk(:,:) = zst(:,:) 594 595 ELSE !IF( ln_skin_cs .OR. ln_skin_wl ) 596 597 SELECT CASE( nblk ) !== transfer coefficients ==! Cd, Ch, Ce at T-point 598 ! 599 CASE( np_NCAR ) 600 CALL turb_ncar ( rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, & 601 & zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 602 603 CASE( np_COARE_3p0 ) 604 CALL turb_coare3p0 ( kt, rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, ln_skin_cs, ln_skin_wl, & 605 & zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 606 607 CASE( np_COARE_3p6 ) 608 CALL turb_coare3p6 ( kt, rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, ln_skin_cs, ln_skin_wl, & 609 & zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 610 611 CASE( np_ECMWF ) 612 CALL turb_ecmwf ( kt, rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, ln_skin_cs, ln_skin_wl, & 613 & zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 614 615 CASE DEFAULT 616 CALL ctl_stop( 'STOP', 'sbc_oce: non-existing bulk formula selected' ) 617 END SELECT 618 619 ENDIF ! IF( ln_skin_cs .OR. ln_skin_wl ) 603 tsk(:,:) = zst(:,:) !#LB: Update of tsk, the "official" array for skin temperature 604 END IF 620 605 621 606 !! CALL iom_put( "Cd_oce", zcd_oce) ! output value of pure ocean-atm. transfer coef. … … 632 617 ! ------------------------------------------------------------- 633 618 634 IF (ln_abl) THEN 635 636 CALL BULK_FORMULA( rn_zu, zst(:,:), pssq(:,:), t_zu(:,:), q_zu(:,:), & 637 & zcd_oce(:,:), zch_oce(:,:), zce_oce(:,:), & 638 & wndm(:,:), zU_zu(:,:), pslp(:,:), & 639 & pcd_du(:,:), psen(:,:), pevp(:,:), & 640 & prhoa=rhoa(:,:) ) 641 642 ELSE 643 619 IF( ln_abl ) THEN !== ABL formulation ==! multiplication by rho_air and turbulent fluxes computation done in ablstp 620 !! FL do we need this multiplication by tmask ... ??? 621 DO jj = 1, jpj 622 DO ji = 1, jpi 623 zztmp = zU_zu(ji,jj) !* tmask(ji,jj,1) 624 wndm(ji,jj) = zztmp ! Store zU_zu in wndm to compute ustar2 in ablmod 625 pcd_du(ji,jj) = zztmp * zcd_oce(ji,jj) 626 psen(ji,jj) = zztmp * zch_oce(ji,jj) 627 pevp(ji,jj) = zztmp * zce_oce(ji,jj) 628 END DO 629 END DO 630 ELSE !== BLK formulation ==! turbulent fluxes computation 644 631 CALL BULK_FORMULA( rn_zu, zst(:,:), pssq(:,:), t_zu(:,:), q_zu(:,:), & 645 632 & zcd_oce(:,:), zch_oce(:,:), zce_oce(:,:), & … … 673 660 END DO 674 661 CALL lbc_lnk_multi( 'sbcblk', utau, 'U', -1., vtau, 'V', -1. ) 662 675 663 IF(ln_ctl) THEN 676 664 CALL prt_ctl( tab2d_1=wndm , clinfo1=' blk_oce_1: wndm : ') … … 738 726 ! ----------------------------- 739 727 740 zqla(:,:) = L_vap( zst(:,:) ) * pevp(:,:) ! Latent Heat flux !!GS: possibility to add a global qla to avoid recomputation after abl update728 zqla(:,:) = L_vap( zst(:,:) ) * pevp(:,:) * -1._wp ! Latent Heat flux !!GS: possibility to add a global qla to avoid recomputation after abl update 741 729 742 730 IF(ln_ctl) THEN … … 866 854 867 855 ! local scalars ( place there for vector optimisation purposes) 868 IF (ln_abl) rhoa (:,:) = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) !!GS: rhoa must be (re)computed here with ABL to avoid division by zero after (TBI)856 !IF (ln_abl) rhoa (:,:) = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) !!GS: rhoa must be (re)computed here with ABL to avoid division by zero after (TBI) 869 857 zcd_dui(:,:) = wndm_ice(:,:) * Cd_ice(:,:) 870 858 -
NEMO/branches/2019/dev_ASINTER-01-05_merged/src/OCE/SBC/sbcblk_phy.F90
r12015 r12021 20 20 21 21 USE dom_oce ! ocean space and time domain 22 USE sbc_oce, ONLY : ln_abl !!GS23 22 USE phycst ! physical constants 24 23 … … 575 574 INTEGER :: ji, jj, jq ! dummy loop indices 576 575 !!---------------------------------------------------------------------------------- 577 578 !== ABL formulation ==! multiplication by rho_air and turbulent fluxes computation done in ablstp579 IF (ln_abl) THEN580 DO jj = 1, jpj581 DO ji = 1, jpi582 583 zUrho = pUb(ji,jj)584 585 pTau(ji,jj) = zUrho * pCd(ji,jj) !!GS: store cd_du in wind stress586 587 zevap = zUrho * pCe(ji,jj)588 pQsen(ji,jj) = zUrho * pCh(ji,jj)589 pQlat(ji,jj) = zevap !!GS: store evap in latent590 591 END DO592 END DO593 ELSE594 576 DO jj = 1, jpj 595 577 DO ji = 1, jpi … … 617 599 END DO 618 600 END DO 619 END IF620 621 601 END SUBROUTINE BULK_FORMULA_VCTR 622 602 … … 650 630 !!---------------------------------------------------------------------------------- 651 631 652 !== ABL formulation ==! multiplication by rho_air and turbulent fluxes computation done in ablstp653 IF (ln_abl) THEN654 655 zUrho = pUb656 657 pTau = zUrho * pCd658 659 zevap = zUrho * pCe660 pQsen = zUrho * pCh661 pQlat = zevap662 663 ELSE664 632 !! Need ztaa, absolute temperature at pzu (formula to estimate rho_air needs absolute temperature, not the potential temperature "pTa") 665 633 ztaa = pTa ! first guess... … … 681 649 IF( PRESENT(pEvap) ) pEvap = - zevap 682 650 IF( PRESENT(prhoa) ) prhoa = zrho 683 END IF684 651 685 652 END SUBROUTINE BULK_FORMULA_SCLR
Note: See TracChangeset
for help on using the changeset viewer.