Changeset 11182
- Timestamp:
- 2019-06-26T12:08:17+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC
- Files:
-
- 5 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbc_oce.F90
r11111 r11182 114 114 !! wndm is used onmpute surface gases exchanges in ice-free ocean or leads 115 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhoa !: air density at "rn_zu" m above the sea [kg/m3] !LB 116 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr !: sea heat flux: solar [W/m2] 117 118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns , qns_b !: sea heat flux: non solar [W/m2] … … 173 174 ! 174 175 ALLOCATE( utau(jpi,jpj) , utau_b(jpi,jpj) , taum(jpi,jpj) , & 175 & vtau(jpi,jpj) , vtau_b(jpi,jpj) , wndm(jpi,jpj) , STAT=ierr(1) )176 & vtau(jpi,jpj) , vtau_b(jpi,jpj) , wndm(jpi,jpj) , rhoa(jpi,jpj) , STAT=ierr(1) ) 176 177 ! 177 178 ALLOCATE( qns_tot(jpi,jpj) , qns (jpi,jpj) , qns_b(jpi,jpj), & -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk.F90
r11111 r11182 56 56 USE prtctl ! Print control 57 57 58 USE sbcblk_phy mbl !LB: all thermodynamics functions, rho_air, q_sat, etc...58 USE sbcblk_phy !LB: all thermodynamics functions in the marine boundary layer, rho_air, q_sat, etc... 59 59 60 60 … … 109 109 !LB: 110 110 LOGICAL :: ln_skin ! use the cool-skin / warm-layer parameterization (only available in ECMWF and COARE algorithms) !LB 111 !LB: => sbc_oce.F90: REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: tsk ! sea-surface skin temperature out of the cool-skin/warm-layer parameterization [Celsius]111 LOGICAL :: ln_humi_dpt ! humidity read in files ("sn_humi") is dew-point temperature if .true. (specific humidity espected if .false.) !LB 112 112 !LB. 113 113 … … 175 175 & cn_dir , ln_taudif, rn_zqt, rn_zu, & 176 176 & rn_pfac, rn_efac, rn_vfac, ln_Cd_L12, ln_Cd_L15, & 177 & ln_skin ! cool-skin / warm-layer param. !LB177 & ln_skin, ln_humi_dpt ! cool-skin / warm-layer param. !LB 178 178 !!--------------------------------------------------------------------- 179 179 ! … … 292 292 WRITE(numout,*) 293 293 WRITE(numout,*) ' use cool-skin/warm-layer parameterization (SSST) ln_skin = ', ln_skin !LB 294 WRITE(numout,*) 295 WRITE(numout,*) ' air humidity read in files is dew-point temperature? ln_humi_dpt = ', ln_humi_dpt !LB 294 296 ! 295 297 ENDIF … … 346 348 ENDIF 347 349 tatm_ice(:,:) = sf(jp_tair)%fnow(:,:,1) 348 qatm_ice(:,:) = sf(jp_humi)%fnow(:,:,1) 350 !LB: 351 IF ( ln_humi_dpt ) THEN 352 qatm_ice(:,:) = q_sat( sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) ) 353 ELSE 354 qatm_ice(:,:) = sf(jp_humi)%fnow(:,:,1) 355 END IF 356 !LB. 349 357 tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac 350 358 sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac … … 386 394 REAL(wp) :: zztmp ! local variable 387 395 REAL(wp), DIMENSION(jpi,jpj) :: zwnd_i, zwnd_j ! wind speed components at T-point 388 REAL(wp), DIMENSION(jpi,jpj) :: zsq ! specific humidity at pst 396 REAL(wp), DIMENSION(jpi,jpj) :: zsq ! specific humidity at pst [kg/kg] 389 397 REAL(wp), DIMENSION(jpi,jpj) :: zqlw, zqsb ! long wave and sensible heat fluxes 390 398 REAL(wp), DIMENSION(jpi,jpj) :: zqla, zevap ! latent heat fluxes and evaporation … … 392 400 REAL(wp), DIMENSION(jpi,jpj) :: zU_zu ! bulk wind speed at height zu [m/s] 393 401 REAL(wp), DIMENSION(jpi,jpj) :: ztpot ! potential temperature of air at z=rn_zqt [K] 394 REAL(wp), DIMENSION(jpi,jpj) :: z rhoa ! density of air [kg/m^3]402 REAL(wp), DIMENSION(jpi,jpj) :: zqair ! specific humidity of air at z=rn_zqt [kg/kg] !LB 395 403 !!--------------------------------------------------------------------- 396 404 ! … … 443 451 ! ... specific humidity at SST and IST tmask( 444 452 zsq(:,:) = rdct_qsat_salt * q_sat( zst(:,:), sf(jp_slp)%fnow(:,:,1) ) 445 !! 453 454 !LB: 455 ! spec. hum. of air at "rn_zqt" m above thes sea: 456 IF ( ln_humi_dpt ) THEN 457 ! spec. hum. of air is deduced from dew-point temperature and SLP: q_air = q_sat( d_air, slp) 458 IF (lwp) PRINT *, ' *** LB(sbcblk.F90) => computing q_air out of d_air and slp !' 459 zqair(:,:) = q_sat( sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) ) 460 ELSE 461 zqair(:,:) = sf(jp_humi)%fnow(:,:,1) ! what we read in file is already a spec. humidity! 462 END IF 463 !LB. 464 446 465 !! Estimate of potential temperature at z=rn_zqt, based on adiabatic lapse-rate 447 466 !! (see Josey, Gulev & Yu, 2013) / doi=10.1016/B978-0-12-391851-2.00005-2 448 467 !! (since reanalysis products provide T at z, not theta !) 449 ztpot = sf(jp_tair)%fnow(:,:,1) + gamma_moist( sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1) ) * rn_zqt468 ztpot = sf(jp_tair)%fnow(:,:,1) + gamma_moist( sf(jp_tair)%fnow(:,:,1), zqair(:,:) ) * rn_zqt 450 469 451 470 SELECT CASE( nblk ) !== transfer coefficients ==! Cd, Ch, Ce at T-point 452 471 ! 453 CASE( np_NCAR ) ; CALL turb_ncar ( rn_zqt, rn_zu, zst, ztpot, zsq, sf(jp_humi)%fnow, wndm, & ! NCAR-COREv2472 CASE( np_NCAR ) ; CALL turb_ncar ( rn_zqt, rn_zu, zst, ztpot, zsq, zqair, wndm, & ! NCAR-COREv2 454 473 & Cd_atm, Ch_atm, Ce_atm, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 455 CASE( np_COARE_3p0 ) ; CALL turb_coare ( rn_zqt, rn_zu, zst, ztpot, zsq, sf(jp_humi)%fnow, wndm, & ! COARE v3.0474 CASE( np_COARE_3p0 ) ; CALL turb_coare ( rn_zqt, rn_zu, zst, ztpot, zsq, zqair, wndm, & ! COARE v3.0 456 475 & Cd_atm, Ch_atm, Ce_atm, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 457 CASE( np_COARE_3p5 ) ; CALL turb_coare3p5( rn_zqt, rn_zu, zst, ztpot, zsq, sf(jp_humi)%fnow, wndm, & ! COARE v3.5476 CASE( np_COARE_3p5 ) ; CALL turb_coare3p5( rn_zqt, rn_zu, zst, ztpot, zsq, zqair, wndm, & ! COARE v3.5 458 477 & Cd_atm, Ch_atm, Ce_atm, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 459 478 … … 463 482 !IF (lwp) PRINT *, ' *** LB(sbcblk.F90) => calling "turb_ecmwf" WITH CSWL optional arrays!!!' 464 483 !IF (lwp) PRINT *, ' *** LB(sbcblk.F90) => BEFORE ZST(40:50,30) =', zst(40:50,30) 465 CALL turb_ecmwf ( rn_zqt, rn_zu, zst, ztpot, zsq, sf(jp_humi)%fnow, wndm, & ! ECMWF466 & 467 & 484 CALL turb_ecmwf ( rn_zqt, rn_zu, zst, ztpot, zsq, zqair, wndm, & ! ECMWF 485 & Cd_atm, Ch_atm, Ce_atm, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce, & 486 & Qsw=qsr(:,:), rad_lw=sf(jp_qlw)%fnow(:,:,1), slp=sf(jp_slp)%fnow(:,:,1)) 468 487 !LB: "zst" and "zsq" have been updated with skin temp. !!! (from bulk SST)... 469 488 zst(:,:) = zst(:,:)*tmask(:,:,1) … … 472 491 ELSE 473 492 IF (lwp) PRINT *, ' *** LB(sbcblk.F90) => calling "turb_ecmwf" WITHOUT CSWL optional arrays!!!' 474 CALL turb_ecmwf ( rn_zqt, rn_zu, zst, ztpot, zsq, sf(jp_humi)%fnow, wndm, & ! ECMWF493 CALL turb_ecmwf ( rn_zqt, rn_zu, zst, ztpot, zsq, zqair, wndm, & ! ECMWF 475 494 & Cd_atm, Ch_atm, Ce_atm, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 476 495 END IF … … 487 506 488 507 ! ! Compute true air density : 489 IF( ABS(rn_zu - rn_zqt) > 0.01 ) THEN ! At zu: (probably useless to remove zrho*grav*rn_zu from SLP...)490 zrhoa(:,:) = rho_air( t_zu(:,:) , q_zu(:,:) , sf(jp_slp)%fnow(:,:,1) )508 IF( ABS(rn_zu - rn_zqt) > 0.01 ) THEN ! At zu: (probably useless to remove rhoa*grav*rn_zu from SLP...) 509 rhoa(:,:) = rho_air( t_zu(:,:) , q_zu(:,:) , sf(jp_slp)%fnow(:,:,1) ) 491 510 ELSE ! At zt: 492 zrhoa(:,:) = rho_air( sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) )511 rhoa(:,:) = rho_air( sf(jp_tair)%fnow(:,:,1), zqair(:,:), sf(jp_slp)%fnow(:,:,1) ) 493 512 END IF 494 513 … … 498 517 DO jj = 1, jpj ! tau module, i and j component 499 518 DO ji = 1, jpi 500 zztmp = zrhoa(ji,jj) * zU_zu(ji,jj) * Cd_atm(ji,jj) ! using bulk wind speed519 zztmp = rhoa(ji,jj) * zU_zu(ji,jj) * Cd_atm(ji,jj) ! using bulk wind speed 501 520 taum (ji,jj) = zztmp * wndm (ji,jj) 502 521 zwnd_i(ji,jj) = zztmp * zwnd_i(ji,jj) … … 527 546 528 547 ! zqla used as temporary array, for rho*U (common term of bulk formulae): 529 zqla(:,:) = zrhoa(:,:) * zU_zu(:,:) * tmask(:,:,1)548 zqla(:,:) = rhoa(:,:) * zU_zu(:,:) * tmask(:,:,1) 530 549 531 550 IF( ABS( rn_zu - rn_zqt) < 0.01_wp ) THEN 532 551 !! q_air and t_air are given at 10m (wind reference height) 533 zevap(:,:) = rn_efac*MAX( 0._wp, zqla(:,:)*Ce_atm(:,:)*(zsq(:,:) - sf(jp_humi)%fnow(:,:,1)) ) ! Evaporation, using bulk wind speed534 zqsb (:,:) = cp_air( sf(jp_humi)%fnow(:,:,1))*zqla(:,:)*Ch_atm(:,:)*(zst(:,:) - ztpot(:,:) ) ! Sensible Heat, using bulk wind speed552 zevap(:,:) = rn_efac*MAX( 0._wp, zqla(:,:)*Ce_atm(:,:)*(zsq(:,:) - zqair(:,:)) ) ! Evaporation, using bulk wind speed 553 zqsb (:,:) = cp_air(zqair(:,:))*zqla(:,:)*Ch_atm(:,:)*(zst(:,:) - ztpot(:,:) ) ! Sensible Heat, using bulk wind speed 535 554 ELSE 536 555 !! q_air and t_air are not given at 10m (wind reference height) 537 556 ! Values of temp. and hum. adjusted to height of wind during bulk algorithm iteration must be used!!! 538 557 zevap(:,:) = rn_efac*MAX( 0._wp, zqla(:,:)*Ce_atm(:,:)*(zsq(:,:) - q_zu(:,:) ) ) ! Evaporation, using bulk wind speed 539 zqsb (:,:) = cp_air( sf(jp_humi)%fnow(:,:,1))*zqla(:,:)*Ch_atm(:,:)*(zst(:,:) - t_zu(:,:) ) ! Sensible Heat, using bulk wind speed558 zqsb (:,:) = cp_air(zqair(:,:))*zqla(:,:)*Ch_atm(:,:)*(zst(:,:) - t_zu(:,:) ) ! Sensible Heat, using bulk wind speed 540 559 ENDIF 541 560 … … 584 603 ! 585 604 !!#LB: NO WHY???? IF ( nn_ice == 0 ) THEN 586 CALL iom_put( "rho_air" , zrhoa )! output air density (kg/m^3) !#LB605 CALL iom_put( "rho_air" , rhoa ) ! output air density (kg/m^3) !#LB 587 606 CALL iom_put( "qlw_oce" , zqlw ) ! output downward longwave heat over the ocean 588 607 CALL iom_put( "qsb_oce" , - zqsb ) ! output downward sensible heat over the ocean … … 638 657 REAL(wp) :: zwndi_f , zwndj_f, zwnorm_f ! relative wind module and components at F-point 639 658 REAL(wp) :: zwndi_t , zwndj_t ! relative wind components at T-point 640 REAL(wp), DIMENSION(jpi,jpj) :: zrhoa ! transfer coefficient for momentum (tau)641 659 !!--------------------------------------------------------------------- 642 660 ! … … 673 691 674 692 ! local scalars ( place there for vector optimisation purposes) 675 ! Computing density of air! Way denser that 1.2 over sea-ice !!!676 zrhoa (:,:) = rho_air(sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1))677 693 678 694 !!gm brutal.... … … 687 703 DO jj = 2, jpjm1 688 704 DO ji = fs_2, fs_jpim1 ! vect. opt. 689 utau_ice(ji,jj) = 0.5 * zrhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji+1,jj ) + wndm_ice(ji,jj) ) &705 utau_ice(ji,jj) = 0.5 * rhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji+1,jj ) + wndm_ice(ji,jj) ) & 690 706 & * ( 0.5 * (sf(jp_wndi)%fnow(ji+1,jj,1) + sf(jp_wndi)%fnow(ji,jj,1) ) - rn_vfac * u_ice(ji,jj) ) 691 vtau_ice(ji,jj) = 0.5 * zrhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji,jj+1 ) + wndm_ice(ji,jj) ) &707 vtau_ice(ji,jj) = 0.5 * rhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji,jj+1 ) + wndm_ice(ji,jj) ) & 692 708 & * ( 0.5 * (sf(jp_wndj)%fnow(ji,jj+1,1) + sf(jp_wndj)%fnow(ji,jj,1) ) - rn_vfac * v_ice(ji,jj) ) 693 709 END DO … … 732 748 REAL(wp), DIMENSION(jpi,jpj,jpl) :: z_dqsb ! sensible heat sensitivity over ice 733 749 REAL(wp), DIMENSION(jpi,jpj) :: zevap, zsnw ! evaporation and snw distribution after wind blowing (SI3) 734 REAL(wp), DIMENSION(jpi,jpj) :: z rhoa750 REAL(wp), DIMENSION(jpi,jpj) :: zqair ! specific humidity of air at z=rn_zqt [kg/kg] !LB 735 751 !!--------------------------------------------------------------------- 736 752 ! … … 738 754 zcoef_dqla = -rLsub * 11637800._wp * (-5897.8_wp) !LB: BAD! 739 755 ! 740 zrhoa(:,:) = rho_air( sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) ) 741 ! 756 757 !LB: 758 ! spec. hum. of air at "rn_zqt" m above thes sea: 759 IF ( ln_humi_dpt ) THEN 760 ! spec. hum. of air is deduced from dew-point temperature and SLP: q_air = q_sat( d_air, slp) 761 IF (lwp) PRINT *, ' *** LB(sbcblk.F90) => ICE !!! computing q_air out of d_air and slp !' 762 zqair(:,:) = q_sat( sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) ) 763 ELSE 764 zqair(:,:) = sf(jp_humi)%fnow(:,:,1) ! what we read in file is already a spec. humidity! 765 END IF 766 !LB. 767 742 768 zztmp = 1. / ( 1. - albo ) 743 769 WHERE( ptsu(:,:,:) /= 0._wp ) ; z1_st(:,:,:) = 1._wp / ptsu(:,:,:) … … 766 792 ! ... turbulent heat fluxes with Ch_atm recalculated in blk_ice_tau 767 793 ! Sensible Heat 768 z_qsb(ji,jj,jl) = zrhoa(ji,jj) * rCp_air * Ch_atm(ji,jj) * wndm_ice(ji,jj) * (ptsu(ji,jj,jl) - sf(jp_tair)%fnow(ji,jj,1))794 z_qsb(ji,jj,jl) = rhoa(ji,jj) * rCp_air * Ch_atm(ji,jj) * wndm_ice(ji,jj) * (ptsu(ji,jj,jl) - sf(jp_tair)%fnow(ji,jj,1)) 769 795 ! Latent Heat 770 qla_ice(ji,jj,jl) = rn_efac * MAX( 0.e0, zrhoa(ji,jj) * rLsub * Ch_atm(ji,jj) * wndm_ice(ji,jj) * &771 & ( 11637800. * EXP( -5897.8 * z1_st(ji,jj,jl) ) / zrhoa(ji,jj) - sf(jp_humi)%fnow(ji,jj,1) ) )796 qla_ice(ji,jj,jl) = rn_efac * MAX( 0.e0, rhoa(ji,jj) * rLsub * Ch_atm(ji,jj) * wndm_ice(ji,jj) * & 797 & ( 11637800. * EXP( -5897.8 * z1_st(ji,jj,jl) ) / rhoa(ji,jj) - zqair(ji,jj) ) ) 772 798 ! Latent heat sensitivity for ice (Dqla/Dt) 773 799 IF( qla_ice(ji,jj,jl) > 0._wp ) THEN … … 779 805 780 806 ! Sensible heat sensitivity (Dqsb_ice/Dtn_ice) 781 z_dqsb(ji,jj,jl) = zrhoa(ji,jj) * rCp_air * Ch_atm(ji,jj) * wndm_ice(ji,jj)807 z_dqsb(ji,jj,jl) = rhoa(ji,jj) * rCp_air * Ch_atm(ji,jj) * wndm_ice(ji,jj) 782 808 783 809 ! ----------------------------! -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_coare.F90
r11111 r11182 31 31 USE sbc_ice ! Surface boundary condition: ice fields 32 32 #endif 33 USE sbcblk_phy mbl!LB: all thermodynamics functions, rho_air, q_sat, etc...33 USE sbcblk_phy !LB: all thermodynamics functions, rho_air, q_sat, etc... 34 34 USE in_out_manager ! I/O manager 35 35 USE iom ! I/O manager library … … 104 104 INTEGER :: j_itt 105 105 LOGICAL :: l_zt_equal_zu = .FALSE. ! if q and t are given at same height as U 106 106 ! 107 107 REAL(wp), DIMENSION(jpi,jpj) :: & 108 108 & u_star, t_star, q_star, & -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_ecmwf.F90
r11111 r11182 38 38 39 39 USE sbc_oce ! Surface boundary condition: ocean fields 40 USE sbcblk_phy mbl!LB: all thermodynamics functions, rho_air, q_sat, etc...40 USE sbcblk_phy !LB: all thermodynamics functions, rho_air, q_sat, etc... 41 41 USE sbcblk_skin ! cool-skin/warm layer scheme (CSWL_ECMWF) 42 42 … … 265 265 Linv = ztmp0*func_m*func_m/func_h / zu ! From Eq. 3.23, Chap.3.2.3, IFS doc - Cy40r1 266 266 !! Note: it is slightly different that the L we would get with the usual 267 !! expression, as in coare algorithm or in 'mod_phy mbl.f90' (One_on_L_MO())267 !! expression, as in coare algorithm or in 'mod_phy.f90' (One_on_L_MO()) 268 268 Linv = SIGN( MIN(ABS(Linv),200._wp), Linv ) ! (prevent FPE from stupid values from masked region later on...) !#LOLO 269 269 -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_phy.F90
r11181 r11182 1 MODULE sbcblk_phy mbl1 MODULE sbcblk_phy 2 2 !!====================================================================== 3 !! *** MODULE sbcblk_phy mbl***3 !! *** MODULE sbcblk_phy *** 4 4 !! A set of functions to compute air themodynamics parameters 5 5 !! needed by Aerodynamic Bulk Formulas … … 15 15 !! visc_air : kinematic viscosity (aka Nu_air) of air from temperature 16 16 17 USE oce ! ocean dynamics and tracers18 17 USE dom_oce ! ocean space and time domain 19 18 USE phycst ! physical constants 20 !USE sbc_oce ! Surface boundary condition: ocean fields21 !USE sbcdcy ! surface boundary condition: diurnal cycle22 !USE sbcwave , ONLY : cdn_wave ! wave module23 !USE sbc_ice ! Surface boundary condition: ice fields24 USE lib_fortran ! to use key_nosignedzero25 !26 !USE iom ! I/O manager library27 !USE in_out_manager ! I/O manager28 USE lib_mpp ! distribued memory computing library29 !USE lbclnk ! ocean lateral boundary conditions (or mpp link)30 !USE prtctl ! Print control31 19 32 20 IMPLICIT NONE … … 98 86 ! 99 87 INTEGER :: ji, jj ! dummy loop indices 100 REAL(wp) :: z e_sat, ztmp ! local scalar88 REAL(wp) :: zta, ze_sat, ztmp ! local scalar 101 89 !!---------------------------------------------------------------------------------- 102 90 ! … … 104 92 DO ji = 1, jpi 105 93 ! 106 ztmp = rt0 / ptak(ji,jj) 94 zta = MAX( ptak(ji,jj) , 180._wp ) ! air temp., prevents fpe0 errors dute to unrealistically low values over masked regions... 95 ztmp = rt0 / zta 107 96 ! 108 97 ! Vapour pressure at saturation [hPa] : WMO, (Goff, 1957) 109 ze_sat = 10.**( 10.79574*(1. - ztmp) - 5.028*LOG10( ptak(ji,jj)/rt0) &110 & + 1.50475*10.**(-4)*(1. - 10.**(-8.2969*( ptak(ji,jj)/rt0 - 1.)) ) &98 ze_sat = 10.**( 10.79574*(1. - ztmp) - 5.028*LOG10(zta/rt0) & 99 & + 1.50475*10.**(-4)*(1. - 10.**(-8.2969*(zta/rt0 - 1.)) ) & 111 100 & + 0.42873*10.**(-3)*(10.**(4.76955*(1. - ztmp)) - 1.) + 0.78614 ) 112 101 ! … … 191 180 192 181 !!====================================================================== 193 END MODULE sbcblk_phy mbl182 END MODULE sbcblk_phy -
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_skin.F90
r11111 r11182 25 25 USE sbc_oce ! Surface boundary condition: ocean fields 26 26 27 USE sbcblk_phy mbl!LOLO: all thermodynamics functions, rho_air, q_sat, etc...27 USE sbcblk_phy !LOLO: all thermodynamics functions, rho_air, q_sat, etc... 28 28 29 29 USE lib_mpp ! distribued memory computing library
Note: See TracChangeset
for help on using the changeset viewer.