Changeset 14717 for NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcblk.F90
- Timestamp:
- 2021-04-16T11:42:56+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcblk.F90
r13348 r14717 390 390 REAL(wp), DIMENSION(jpi,jpj) :: ztpot ! potential temperature of air at z=rn_zqt [K] 391 391 REAL(wp), DIMENSION(jpi,jpj) :: zrhoa ! density of air [kg/m^3] 392 !!--------------------------------------------------------------------- 392 REAL(wp), DIMENSION(jpi,jpj) :: zcptrain, zcptsnw, zcptn ! Heat content per unit mass (J/kg) 393 !!--------------------------------------------------------------------- 394 ! 395 ! Heat content per unit mass (J/kg) 396 zcptrain(:,:) = ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp * tmask(:,:,1) 397 zcptsnw (:,:) = ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) 398 zcptn (:,:) = pst(:,:) * rcp * tmask(:,:,1) 393 399 ! 394 400 ! local scalars ( place there for vector optimisation purposes) … … 541 547 qns(:,:) = zqlw(:,:) - zqsb(:,:) - zqla(:,:) & ! Downward Non Solar 542 548 & - sf(jp_snow)%fnow(:,:,1) * rn_pfac * rLfus & ! remove latent melting heat for solid precip 543 & - zevap(:,:) * pst(:,:) * rcp& ! remove evap heat content at SST549 & - zevap(:,:) * zcptn(:,:) & ! remove evap heat content at SST 544 550 & + ( sf(jp_prec)%fnow(:,:,1) - sf(jp_snow)%fnow(:,:,1) ) * rn_pfac & ! add liquid precip heat content at Tair 545 & * ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp&551 & * zcptrain(:,:) & 546 552 & + sf(jp_snow)%fnow(:,:,1) * rn_pfac & ! add solid precip heat content at min(Tair,Tsnow) 547 & * ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi553 & * zcptsnw(:,:) 548 554 qns(:,:) = qns(:,:) * tmask(:,:,1) 549 555 ! … … 819 825 REAL(wp), DIMENSION(jpi,jpj) :: zevap, zsnw ! evaporation and snw distribution after wind blowing (SI3) 820 826 REAL(wp), DIMENSION(jpi,jpj) :: zrhoa 821 REAL(wp), DIMENSION(jpi,jpj) :: ztmp, ztmp2822 827 REAL(wp), DIMENSION(jpi,jpj) :: ztri 828 REAL(wp), DIMENSION(jpi,jpj) :: zcptrain, zcptsnw, zcptn ! Heat content per unit mass (J/kg) 823 829 !!--------------------------------------------------------------------- 824 830 ! … … 827 833 ! 828 834 zrhoa(:,:) = rho_air( sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1) ) 835 ! 836 ! Heat content per unit mass (J/kg) 837 zcptrain(:,:) = ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp * tmask(:,:,1) 838 zcptsnw (:,:) = ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) 839 zcptn (:,:) = sst_m(:,:) * rcp * tmask(:,:,1) 829 840 ! 830 841 zztmp = 1. / ( 1. - albo ) … … 901 912 902 913 ! --- heat flux associated with emp --- ! 903 qemp_oce(:,:) = - ( 1._wp - at_i_b(:,:) ) * zevap(:,:) * sst_m(:,:) * rcp & ! evap at sst 904 & + ( tprecip(:,:) - sprecip(:,:) ) * ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp & ! liquid precip at Tair 905 & + sprecip(:,:) * ( 1._wp - zsnw ) * & ! solid precip at min(Tair,Tsnow) 906 & ( ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 907 qemp_ice(:,:) = sprecip(:,:) * zsnw * & ! solid precip (only) 908 & ( ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus ) 914 qemp_oce(:,:) = - ( 1._wp - at_i_b(:,:) ) * zevap(:,:) * zcptn(:,:) & ! evap at sst 915 & + ( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) & ! liquid precip at Tair 916 & + sprecip(:,:) * ( 1._wp - zsnw ) * ( zcptsnw (:,:) - rLfus ) ! solid precip at min(Tair,Tsnow) 917 qemp_ice(:,:) = sprecip(:,:) * zsnw * ( zcptsnw (:,:) - rLfus ) ! solid precip (only) 909 918 910 919 ! --- total solar and non solar fluxes --- ! … … 914 923 915 924 ! --- heat content of precip over ice in J/m3 (to be used in 1D-thermo) --- ! 916 qprec_ice(:,:) = rhos * ( ( MIN( sf(jp_tair)%fnow(:,:,1), rt0 ) - rt0 ) * rcpi * tmask(:,:,1) - rLfus )925 qprec_ice(:,:) = rhos * ( zcptsnw(:,:) - rLfus ) 917 926 918 927 ! --- heat content of evap over ice in W/m2 (to be used in 1D-thermo) --- … … 947 956 948 957 IF( iom_use('evap_ao_cea') .OR. iom_use('hflx_evap_cea') ) THEN 949 ztmp(:,:) = zevap(:,:) * ( 1._wp - at_i_b(:,:) ) 950 CALL iom_put( 'evap_ao_cea' , ztmp(:,:) * tmask(:,:,1) ) ! ice-free oce evap (cell average) 951 CALL iom_put( 'hflx_evap_cea', ztmp(:,:) * sst_m(:,:) * rcp * tmask(:,:,1) ) ! heat flux from evap (cell average) 952 ENDIF 953 IF( iom_use('hflx_rain_cea') ) THEN 954 ztmp(:,:) = rcp * ( SUM( (ptsu-rt0) * a_i_b, dim=3 ) + sst_m(:,:) * ( 1._wp - at_i_b(:,:) ) ) 955 CALL iom_put( 'hflx_rain_cea', ( tprecip(:,:) - sprecip(:,:) ) * ztmp(:,:) ) ! heat flux from rain (cell average) 956 ENDIF 957 IF( iom_use('hflx_snow_cea') .OR. iom_use('hflx_snow_ao_cea') .OR. iom_use('hflx_snow_ai_cea') ) THEN 958 WHERE( SUM( a_i_b, dim=3 ) > 1.e-10 ) ; ztmp(:,:) = rcpi * SUM( (ptsu-rt0) * a_i_b, dim=3 ) / SUM( a_i_b, dim=3 ) 959 ELSEWHERE ; ztmp(:,:) = rcp * sst_m(:,:) 960 ENDWHERE 961 ztmp2(:,:) = sprecip(:,:) * ( ztmp(:,:) - rLfus ) 962 CALL iom_put('hflx_snow_cea' , ztmp2(:,:) ) ! heat flux from snow (cell average) 963 CALL iom_put('hflx_snow_ao_cea', ztmp2(:,:) * ( 1._wp - zsnw(:,:) ) ) ! heat flux from snow (over ocean) 964 CALL iom_put('hflx_snow_ai_cea', ztmp2(:,:) * zsnw(:,:) ) ! heat flux from snow (over ice) 965 ENDIF 966 ! 958 CALL iom_put( 'evap_ao_cea' , zevap(:,:) * ( 1._wp - at_i_b(:,:) ) * tmask(:,:,1) ) ! ice-free oce evap (cell average) 959 CALL iom_put( 'hflx_evap_cea', zevap(:,:) * ( 1._wp - at_i_b(:,:) ) * tmask(:,:,1) * zcptn(:,:) ) ! heat flux from evap (cell average) 960 ENDIF 961 IF( iom_use('rain') .OR. iom_use('rain_ao_cea') .OR. iom_use('hflx_rain_cea') ) THEN 962 CALL iom_put( 'rain' , tprecip(:,:) - sprecip(:,:) ) ! liquid precipitation 963 CALL iom_put( 'rain_ao_cea' , ( tprecip(:,:) - sprecip(:,:) ) * ( 1._wp - at_i_b(:,:) ) ) ! liquid precipitation over ocean (cell average) 964 CALL iom_put( 'hflx_rain_cea', ( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) ) ! heat flux from rain (cell average) 965 ENDIF 966 IF( iom_use('snow_ao_cea') .OR. iom_use('snow_ai_cea') .OR. & 967 & iom_use('hflx_snow_cea') .OR. iom_use('hflx_snow_ao_cea') .OR. iom_use('hflx_snow_ai_cea') ) THEN 968 CALL iom_put( 'snow_ao_cea' , sprecip(:,:) * ( 1._wp - zsnw(:,:) ) ) ! Snow over ice-free ocean (cell average) 969 CALL iom_put( 'snow_ai_cea' , sprecip(:,:) * zsnw(:,:) ) ! Snow over sea-ice (cell average) 970 CALL iom_put( 'hflx_snow_cea' , sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) ) ! heat flux from snow (cell average) 971 CALL iom_put( 'hflx_snow_ao_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) * ( 1._wp - zsnw(:,:) ) ) ! heat flux from snow (over ocean) 972 CALL iom_put( 'hflx_snow_ai_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) * zsnw(:,:) ) ! heat flux from snow (over ice) 973 ENDIF 974 IF( iom_use('hflx_prec_cea') ) THEN ! heat flux from precip (cell average) 975 CALL iom_put('hflx_prec_cea' , sprecip(:,:) * ( zcptsnw (:,:) - rLfus ) & 976 & + ( tprecip(:,:) - sprecip(:,:) ) * zcptrain(:,:) ) 977 ENDIF 978 ! 979 IF( iom_use('subl_ai_cea') ) CALL iom_put( 'subl_ai_cea' , SUM( a_i_b(:,:,:) * evap_ice(:,:,:), dim=3 ) * tmask(:,:,1) ) ! Sublimation over sea-ice (cell average) 980 !!clem IF( iom_use('hflx_subl_cea') ) CALL iom_put( 'hflx_subl_cea', SUM( a_i_b(:,:,:) * qevap_ice(:,:,:), dim=3 ) * tmask(:,:,1) ) ! Heat flux from sublimation (cell average) 981 967 982 IF(ln_ctl) THEN 968 983 CALL prt_ctl(tab3d_1=qla_ice , clinfo1=' blk_ice: qla_ice : ', tab3d_2=z_qsb , clinfo2=' z_qsb : ', kdim=jpl)
Note: See TracChangeset
for help on using the changeset viewer.