Changeset 10879
- Timestamp:
- 2019-04-16T14:58:06+02:00 (5 years ago)
- Location:
- branches/UKMO/dev_r5518_FOAMv14_output_heat_fluxes/NEMOGCM/NEMO/OPA_SRC/SBC
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_FOAMv14_output_heat_fluxes/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r8046 r10879 98 98 LOGICAL , PUBLIC :: lhftau = .FALSE. !: HF tau used in TKE: mean(stress module) - module(mean stress) 99 99 !! !! now ! before !! 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau , utau_b !: sea surface i-stress (ocean referential) [N/m2]101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau , vtau_b !: sea surface j-stress (ocean referential) [N/m2]102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: taum !: module of sea surface stress (at T-point) [N/m2]100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau , utau_b !: sea surface i-stress (ocean referential) [N/m2] 101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau , vtau_b !: sea surface j-stress (ocean referential) [N/m2] 102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: taum !: module of sea surface stress (at T-point) [N/m2] 103 103 !! wndm is used onmpute surface gases exchanges in ice-free ocean or leads 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr !: sea heat flux: solar [W/m2] 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns , qns_b !: sea heat flux: non solar [W/m2] 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_tot !: total solar heat flux (over sea and ice) [W/m2] 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns_tot !: total non solar heat flux (over sea and ice) [W/m2] 109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp , emp_b !: freshwater budget: volume flux [Kg/m2/s] 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx , sfx_b !: salt flux [PSU/m2/s] 111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_tot !: total E-P over ocean and ice [Kg/m2/s] 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fmmflx !: freshwater budget: freezing/melting [Kg/m2/s] 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr !: sea heat flux: solar [W/m2] 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns , qns_b !: sea heat flux: non solar [W/m2] 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qlw !: downward longwave heat flux over sea non solar [W/m2] 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsb !: downward sensible heat flux over sea non solar [W/m2] 109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qla !: downward latent heat flux over sea non solar [W/m2] 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_tot !: total solar heat flux (over sea and ice) [W/m2] 111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns_tot !: total non solar heat flux (over sea and ice) [W/m2] 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp , emp_b !: freshwater budget: volume flux [Kg/m2/s] 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx , sfx_b !: salt flux [PSU/m2/s] 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_tot !: total E-P over ocean and ice [Kg/m2/s] 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fmmflx !: freshwater budget: freezing/melting [Kg/m2/s] 113 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rnf , rnf_b !: river runoff [Kg/m2/s] 114 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf , fwfisf_b !: ice shelf melting [Kg/m2/s] … … 188 191 ! 189 192 ALLOCATE( qns_tot(jpi,jpj) , qns (jpi,jpj) , qns_b(jpi,jpj), & 193 & qlw (jpi,jpj) , qsb (jpi,jpj) , qla (jpi,jpj), & 190 194 & qsr_tot(jpi,jpj) , qsr (jpi,jpj) , & 191 195 & emp (jpi,jpj) , emp_b(jpi,jpj) , & -
branches/UKMO/dev_r5518_FOAMv14_output_heat_fluxes/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r9288 r10879 253 253 REAL(wp), DIMENSION(:,:), POINTER :: zwnd_i, zwnd_j ! wind speed components at T-point 254 254 REAL(wp), DIMENSION(:,:), POINTER :: zqsatw ! specific humidity at pst 255 REAL(wp), DIMENSION(:,:), POINTER :: zqlw, zqsb ! long wave and sensible heat fluxes 256 REAL(wp), DIMENSION(:,:), POINTER :: zqla, zevap ! latent heat fluxes and evaporation 255 REAL(wp), DIMENSION(:,:), POINTER :: zevap ! evaporation 257 256 REAL(wp), DIMENSION(:,:), POINTER :: Cd ! transfer coefficient for momentum (tau) 258 257 REAL(wp), DIMENSION(:,:), POINTER :: Ch ! transfer coefficient for sensible heat (Q_sens) … … 265 264 IF( nn_timing == 1 ) CALL timing_start('blk_oce_core') 266 265 ! 267 CALL wrk_alloc( jpi,jpj, zwnd_i, zwnd_j, zqsatw, z qlw, zqsb, zqla, zevap )266 CALL wrk_alloc( jpi,jpj, zwnd_i, zwnd_j, zqsatw, zevap ) 268 267 CALL wrk_alloc( jpi,jpj, Cd, Ch, Ce, zst, zt_zu, zq_zu ) 269 268 ! … … 311 310 ENDIF 312 311 313 zqlw(:,:) = ( sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:) ) * tmask(:,:,1) ! Long Wave312 qlw(:,:) = ( sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:) ) * tmask(:,:,1) ! Long Wave 314 313 ! ----------------------------------------------------------------------------- ! 315 314 ! II Turbulent FLUXES ! … … 359 358 !! q_air and t_air are (or "are almost") given at 10m (wind reference height) 360 359 zevap(:,:) = rn_efac*MAX( 0._wp, rhoa*Ce(:,:)*( zqsatw(:,:) - sf(jp_humi)%fnow(:,:,1) )*wndm(:,:) ) ! Evaporation 361 zqsb (:,:) = cpa*rhoa*Ch(:,:)*( zst (:,:) - sf(jp_tair)%fnow(:,:,1) )*wndm(:,:) ! Sensible Heat360 qsb (:,:) = cpa*rhoa*Ch(:,:)*( zst (:,:) - sf(jp_tair)%fnow(:,:,1) )*wndm(:,:) ! Sensible Heat 362 361 ELSE 363 362 !! q_air and t_air are not given at 10m (wind reference height) 364 363 ! Values of temp. and hum. adjusted to height of wind during bulk algorithm iteration must be used!!! 365 364 zevap(:,:) = rn_efac*MAX( 0._wp, rhoa*Ce(:,:)*( zqsatw(:,:) - zq_zu(:,:) )*wndm(:,:) ) ! Evaporation 366 zqsb (:,:) = cpa*rhoa*Ch(:,:)*( zst (:,:) - zt_zu(:,:) )*wndm(:,:) ! Sensible Heat367 ENDIF 368 zqla (:,:) = Lv * zevap(:,:) ! Latent Heat365 qsb (:,:) = cpa*rhoa*Ch(:,:)*( zst (:,:) - zt_zu(:,:) )*wndm(:,:) ! Sensible Heat 366 ENDIF 367 qla (:,:) = Lv * zevap(:,:) ! Latent Heat 369 368 370 369 IF(ln_ctl) THEN 371 CALL prt_ctl( tab2d_1= zqla , clinfo1=' blk_oce_core: zqla : ', tab2d_2=Ce , clinfo2=' Ce : ' )372 CALL prt_ctl( tab2d_1= zqsb , clinfo1=' blk_oce_core: zqsb : ', tab2d_2=Ch , clinfo2=' Ch : ' )373 CALL prt_ctl( tab2d_1= zqlw , clinfo1=' blk_oce_core: zqlw : ', tab2d_2=qsr, clinfo2=' qsr : ' )370 CALL prt_ctl( tab2d_1=qla , clinfo1=' blk_oce_core: qla : ', tab2d_2=Ce , clinfo2=' Ce : ' ) 371 CALL prt_ctl( tab2d_1=qsb , clinfo1=' blk_oce_core: qsb : ', tab2d_2=Ch , clinfo2=' Ch : ' ) 372 CALL prt_ctl( tab2d_1=qlw , clinfo1=' blk_oce_core: qlw : ', tab2d_2=qsr, clinfo2=' qsr : ' ) 374 373 CALL prt_ctl( tab2d_1=zqsatw, clinfo1=' blk_oce_core: zqsatw : ', tab2d_2=zst, clinfo2=' zst : ' ) 375 374 CALL prt_ctl( tab2d_1=utau , clinfo1=' blk_oce_core: utau : ', mask1=umask, & … … 386 385 & - sf(jp_prec)%fnow(:,:,1) * rn_pfac ) * tmask(:,:,1) 387 386 ! 388 qns(:,:) = zqlw(:,:) - zqsb(:,:) - zqla(:,:)& ! Downward Non Solar387 qns(:,:) = qlw(:,:) - qsb(:,:) - qla(:,:) & ! Downward Non Solar 389 388 & - sf(jp_snow)%fnow(:,:,1) * rn_pfac * lfus & ! remove latent melting heat for solid precip 390 389 & - zevap(:,:) * pst(:,:) * rcp & ! remove evap heat content at SST … … 395 394 ! 396 395 #if defined key_lim3 397 qns_oce(:,:) = zqlw(:,:) - zqsb(:,:) - zqla(:,:) ! non solar without emp (only needed by LIM3)396 qns_oce(:,:) = qlw(:,:) - qsb(:,:) - qla(:,:) ! non solar without emp (only needed by LIM3) 398 397 qsr_oce(:,:) = qsr(:,:) 399 398 #endif 400 399 ! 401 400 IF ( nn_ice == 0 ) THEN 402 CALL iom_put( "qlw_oce" , zqlw )! output downward longwave heat over the ocean403 CALL iom_put( "qsb_oce" , - zqsb )! output downward sensible heat over the ocean404 CALL iom_put( "qla_oce" , - zqla )! output downward latent heat over the ocean405 CALL iom_put( "qemp_oce", qns-zqlw+zqsb+zqla )! output downward heat content of E-P over the ocean406 CALL iom_put( "qns_oce" , qns ) ! output downward non solar heat over the ocean407 CALL iom_put( "qsr_oce" , qsr ) ! output downward solar heat over the ocean408 CALL iom_put( "qt_oce" , qns+qsr ) ! output total downward heat over the ocean409 tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac ! output total precipitation [kg/m2/s]410 sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac ! output solid precipitation [kg/m2/s]411 CALL iom_put( 'snowpre', sprecip * 86400. ) ! Snow412 CALL iom_put( 'precip' , tprecip * 86400. ) ! Total precipitation401 CALL iom_put( "qlw_oce" , qlw ) ! output downward longwave heat over the ocean 402 CALL iom_put( "qsb_oce" , - qsb ) ! output downward sensible heat over the ocean 403 CALL iom_put( "qla_oce" , - qla ) ! output downward latent heat over the ocean 404 CALL iom_put( "qemp_oce", qns-qlw+qsb+qla ) ! output downward heat content of E-P over the ocean 405 CALL iom_put( "qns_oce" , qns ) ! output downward non solar heat over the ocean 406 CALL iom_put( "qsr_oce" , qsr ) ! output downward solar heat over the ocean 407 CALL iom_put( "qt_oce" , qns+qsr ) ! output total downward heat over the ocean 408 tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac ! output total precipitation [kg/m2/s] 409 sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac ! output solid precipitation [kg/m2/s] 410 CALL iom_put( 'snowpre', sprecip * 86400. ) ! Snow 411 CALL iom_put( 'precip' , tprecip * 86400. ) ! Total precipitation 413 412 ENDIF 414 413 ! 415 414 IF(ln_ctl) THEN 416 CALL prt_ctl(tab2d_1= zqsb , clinfo1=' blk_oce_core: zqsb : ', tab2d_2=zqlw , clinfo2=' zqlw : ')417 CALL prt_ctl(tab2d_1= zqla , clinfo1=' blk_oce_core: zqla : ', tab2d_2=qsr , clinfo2=' qsr : ')415 CALL prt_ctl(tab2d_1=qsb , clinfo1=' blk_oce_core: qsb : ', tab2d_2=qlw , clinfo2=' qlw : ') 416 CALL prt_ctl(tab2d_1=qla , clinfo1=' blk_oce_core: qla : ', tab2d_2=qsr , clinfo2=' qsr : ') 418 417 CALL prt_ctl(tab2d_1=pst , clinfo1=' blk_oce_core: pst : ', tab2d_2=emp , clinfo2=' emp : ') 419 418 CALL prt_ctl(tab2d_1=utau , clinfo1=' blk_oce_core: utau : ', mask1=umask, & … … 421 420 ENDIF 422 421 ! 423 CALL wrk_dealloc( jpi,jpj, zwnd_i, zwnd_j, zqsatw, z qlw, zqsb, zqla, zevap )422 CALL wrk_dealloc( jpi,jpj, zwnd_i, zwnd_j, zqsatw, zevap ) 424 423 CALL wrk_dealloc( jpi,jpj, Cd, Ch, Ce, zst, zt_zu, zq_zu ) 425 424 ! -
branches/UKMO/dev_r5518_FOAMv14_output_heat_fluxes/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r10302 r10879 668 668 ! Solar penetrative radiation and non solar surface heat flux 669 669 670 ! Scale qsr and qnsaccording to ice fraction (bulk formulae only)670 ! Scale qsr, qns, qlw, qsb, qla according to ice fraction (bulk formulae only) 671 671 672 672 IF (ksbc == jp_core) THEN 673 673 qsr(:,:)=qsr(:,:)*(1.0-fr_i(:,:)) 674 674 qns(:,:)=qns(:,:)*(1.0-fr_i(:,:)) 675 qlw(:,:)=qlw(:,:)*(1.0-fr_i(:,:)) 676 qsb(:,:)=qsb(:,:)*(1.0-fr_i(:,:)) 677 qla(:,:)=qla(:,:)*(1.0-fr_i(:,:)) 675 678 ENDIF 676 679 ! Take into account snow melting except for fully coupled when already in qns_tot … … 680 683 ELSE 681 684 qns(:,:)= qns(:,:)-sprecip(:,:)*Lfresh*(1.0-fr_i(:,:)) 685 qla(:,:)= qla(:,:)+sprecip(:,:)*Lfresh*(1.0-fr_i(:,:)) 682 686 ENDIF 683 687 -
branches/UKMO/dev_r5518_FOAMv14_output_heat_fluxes/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r10302 r10879 479 479 CALL iom_put( "taum" , taum ) ! wind stress module 480 480 CALL iom_put( "wspd" , wndm ) ! wind speed module over free ocean or leads in presence of sea-ice 481 IF( nn_ice > 0 ) THEN 482 CALL iom_put( "qlw_oce" , qlw ) ! output surface_net_downward_longwave_flux 483 CALL iom_put( "qsb_oce" , - qsb ) ! output surface_downward_sensible_heat_flux 484 CALL iom_put( "qla_oce" , - qla ) ! output surface_downward_latent_heat_flux 485 ENDIF 481 486 ENDIF 482 487 !
Note: See TracChangeset
for help on using the changeset viewer.