Changeset 14717 for NEMO/releases/r4.0/r4.0-HEAD/src
- Timestamp:
- 2021-04-16T11:42:56+02:00 (3 years ago)
- Location:
- NEMO/releases/r4.0/r4.0-HEAD/src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/releases/r4.0/r4.0-HEAD/src/ICE/icedia.F90
r11536 r14717 69 69 REAL(wp) :: zbg_ivol, zbg_item, zbg_area, zbg_isal 70 70 REAL(wp) :: zbg_svol, zbg_stem 71 REAL(wp) :: zbg_ipvol, zbg_ilvol 71 72 REAL(wp) :: z_frc_voltop, z_frc_temtop, z_frc_sal 72 73 REAL(wp) :: z_frc_volbot, z_frc_tembot … … 89 90 ! ----------------------- ! 90 91 IF( iom_use('ibgvol_tot' ) .OR. iom_use('sbgvol_tot' ) .OR. iom_use('ibgarea_tot') .OR. & 91 & iom_use('ibgsalt_tot') .OR. iom_use('ibgheat_tot') .OR. iom_use('sbgheat_tot') ) THEN 92 & iom_use('ibgsalt_tot') .OR. iom_use('ibgheat_tot') .OR. iom_use('sbgheat_tot') .OR. & 93 & iom_use('ipbgvol_tot' ) .OR. iom_use('ilbgvol_tot' ) ) THEN 92 94 93 95 zbg_ivol = glob_sum( 'icedia', vt_i(:,:) * e1e2t(:,:) ) * 1.e-9 ! ice volume (km3) … … 97 99 zbg_item = glob_sum( 'icedia', et_i(:,:) * e1e2t(:,:) ) * 1.e-20 ! heat content (1.e20 J) 98 100 zbg_stem = glob_sum( 'icedia', et_s(:,:) * e1e2t(:,:) ) * 1.e-20 ! heat content (1.e20 J) 101 ! ponds 102 zbg_ipvol = glob_sum( 'icedia', vt_ip(:,:) * e1e2t(:,:) ) * 1.e-9 ! ice pond volume (km3) 103 zbg_ilvol = glob_sum( 'icedia', vt_il(:,:) * e1e2t(:,:) ) * 1.e-9 ! ice pond lid volume (km3) 99 104 100 105 CALL iom_put( 'ibgvol_tot' , zbg_ivol ) … … 103 108 CALL iom_put( 'ibgsalt_tot' , zbg_isal ) 104 109 CALL iom_put( 'ibgheat_tot' , zbg_item ) 105 CALL iom_put( 'sbgheat_tot' , zbg_stem ) 106 110 CALL iom_put( 'sbgheat_tot' , zbg_stem ) 111 ! ponds 112 CALL iom_put( 'ipbgvol_tot' , zbg_ipvol ) 113 CALL iom_put( 'ilbgvol_tot' , zbg_ilvol ) 114 107 115 ENDIF 108 116 -
NEMO/releases/r4.0/r4.0-HEAD/src/ICE/iceupdate.F90
r14590 r14717 292 292 IF( iom_use('hfxcndbot' ) ) CALL iom_put( 'hfxcndbot' , SUM( qcn_ice_bot * a_i_b, dim=3 ) ) ! Bottom conduction flux 293 293 IF( iom_use('hfxcndtop' ) ) CALL iom_put( 'hfxcndtop' , SUM( qcn_ice_top * a_i_b, dim=3 ) ) ! Surface conduction flux 294 !!IF( iom_use('hfxmelt' ) ) CALL iom_put( 'hfxmelt' , SUM( qml_ice * a_i_b, dim=3 ) ) ! Surface melt flux295 !!IF( iom_use('hfxldmelt' ) ) CALL iom_put( 'hfxldmelt' , fhld * at_i_b ) ! Heat in lead for ice melting296 !!IF( iom_use('hfxldgrow' ) ) CALL iom_put( 'hfxldgrow' , qlead * r1_rdtice ) ! Heat in lead for ice growth294 IF( iom_use('hfxmelt' ) ) CALL iom_put( 'hfxmelt' , SUM( qml_ice * a_i_b, dim=3 ) ) ! Surface melt flux 295 IF( iom_use('hfxldmelt' ) ) CALL iom_put( 'hfxldmelt' , fhld * at_i_b ) ! Heat in lead for ice melting 296 IF( iom_use('hfxldgrow' ) ) CALL iom_put( 'hfxldgrow' , qlead * r1_rdtice ) ! Heat in lead for ice growth 297 297 298 298 ! controls -
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) -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbccpl.F90
r14590 r14717 1855 1855 IF( iom_use('snow_ao_cea') ) CALL iom_put( 'snow_ao_cea' , sprecip(:,:) * ( 1._wp - zsnw(:,:) ) ) ! Snow over ice-free ocean (cell average) 1856 1856 IF( iom_use('snow_ai_cea') ) CALL iom_put( 'snow_ai_cea' , sprecip(:,:) * zsnw(:,:) ) ! Snow over sea-ice (cell average) 1857 IF( iom_use('rain_ao_cea') ) CALL iom_put( 'rain_ao_cea' , ( tprecip(:,:) - sprecip(:,:) ) * picefr(:,:) ) ! liquid precipitation over ocean (cell average)1857 IF( iom_use('rain_ao_cea') ) CALL iom_put( 'rain_ao_cea' , ( tprecip(:,:) - sprecip(:,:) ) * ziceld(:,:) ) ! liquid precipitation over ocean (cell average) 1858 1858 IF( iom_use('subl_ai_cea') ) CALL iom_put( 'subl_ai_cea' , zevap_ice_total(:,:) * picefr(:,:) * tmask(:,:,1) ) ! Sublimation over sea-ice (cell average) 1859 1859 IF( iom_use('evap_ao_cea') ) CALL iom_put( 'evap_ao_cea' , ( frcv(jpr_tevp)%z3(:,:,1) & … … 2030 2030 IF ( iom_use('hflx_snow_ai_cea') ) & ! heat flux from snow (over ice) 2031 2031 & CALL iom_put('hflx_snow_ai_cea', sprecip(:,:) * ( zcptsnw(:,:) - rLfus ) * zsnw(:,:) ) 2032 IF( iom_use('hflx_subl_cea') ) & ! heat flux from sublimation 2033 & CALL iom_put('hflx_subl_cea' , SUM( qevap_ice(:,:,:) * a_i(:,:,:), dim=3 ) * tmask(:,:,1) ) 2032 2034 ! note: hflx for runoff and iceshelf are done in sbcrnf and sbcisf resp. 2033 2035 ! -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcfwb.F90
r13581 r14717 112 112 emp(:,:) = emp(:,:) - z_fwfprv(1) * tmask(:,:,1) 113 113 qns(:,:) = qns(:,:) + zcoef * sst_m(:,:) * tmask(:,:,1) ! account for change to the heat budget due to fw correction 114 ! outputs 115 IF( iom_use('hflx_fwb_cea') ) CALL iom_put( 'hflx_fwb_cea', zcoef * sst_m(:,:) * tmask(:,:,1) ) 116 IF( iom_use('vflx_fwb_cea') ) CALL iom_put( 'vflx_fwb_cea', z_fwfprv(1) * tmask(:,:,1) ) 114 117 ENDIF 115 118 ! … … 156 159 emp(:,:) = emp(:,:) + fwfold * tmask(:,:,1) 157 160 qns(:,:) = qns(:,:) - zcoef * sst_m(:,:) * tmask(:,:,1) ! account for change to the heat budget due to fw correction 161 ! outputs 162 IF( iom_use('hflx_fwb_cea') ) CALL iom_put( 'hflx_fwb_cea', -zcoef * sst_m(:,:) * tmask(:,:,1) ) 163 IF( iom_use('vflx_fwb_cea') ) CALL iom_put( 'vflx_fwb_cea', -fwfold * tmask(:,:,1) ) 158 164 ENDIF 159 165 ! Output restart information … … 210 216 qns(:,:) = qns(:,:) - zerp_cor(:,:) * rcp * sst_m(:,:) ! account for change to the heat budget due to fw correction 211 217 erp(:,:) = erp(:,:) + zerp_cor(:,:) 218 ! outputs 219 IF( iom_use('hflx_fwb_cea') ) CALL iom_put( 'hflx_fwb_cea', -zerp_cor(:,:) * rcp * sst_m(:,:) ) 220 IF( iom_use('vflx_fwb_cea') ) CALL iom_put( 'vflx_fwb_cea', -zerp_cor(:,:) ) 212 221 ! 213 222 IF( nprint == 1 .AND. lwp ) THEN ! control print -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcrnf.F90
r13255 r14717 128 128 IF( ln_rnf_icb ) THEN 129 129 fwficb(:,:) = rn_rfact * ( sf_i_rnf(1)%fnow(:,:,1) ) * tmask(:,:,1) ! updated runoff value at time step kt 130 CALL iom_put( 'iceberg_cea' , fwficb(:,:) ) ! output iceberg flux 131 CALL iom_put( 'hflx_icb_cea' , fwficb(:,:) * rLfus ) ! output Heat Flux into Sea Water due to Iceberg Thermodynamics --> 130 rnf(:,:) = rnf(:,:) + fwficb(:,:) 131 qns(:,:) = qns(:,:) - fwficb(:,:) * rLfus 132 !!qns_tot(:,:) = qns_tot(:,:) - fwficb(:,:) * rLfus 133 !!qns_oce(:,:) = qns_oce(:,:) - fwficb(:,:) * rLfus 134 CALL iom_put( 'iceberg_cea' , fwficb(:,:) ) ! output iceberg flux 135 CALL iom_put( 'hflx_icb_cea' , -fwficb(:,:) * rLfus ) ! output Heat Flux into Sea Water due to Iceberg Thermodynamics --> 132 136 ENDIF 133 137 ENDIF … … 149 153 CALL iom_put( 'runoffs' , rnf(:,:) ) ! output runoff mass flux 150 154 IF( iom_use('hflx_rnf_cea') ) CALL iom_put( 'hflx_rnf_cea', rnf_tsc(:,:,jp_tem) * rau0 * rcp ) ! output runoff sensible heat (W/m2) 155 IF( iom_use('sflx_rnf_cea') ) CALL iom_put( 'sflx_rnf_cea', rnf_tsc(:,:,jp_sal) * rau0 ) ! output runoff salt flux (g/m2/s) 151 156 ENDIF 152 157 ! -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcssr.F90
r12276 r14717 91 91 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! Add restoring term ! 92 92 ! ! ========================= ! 93 qrp(:,:) = 0._wp ! necessary init 94 erp(:,:) = 0._wp 93 95 ! 94 96 IF( nn_sstr == 1 ) THEN !* Temperature restoring term … … 140 142 qns(ji,jj) = qns(ji,jj) - zerp * rcp * sst_m(ji,jj) 141 143 erp(ji,jj) = zerp 144 qrp(ji,jj) = qrp(ji,jj) - zerp * rcp * sst_m(ji,jj) 142 145 END DO 143 146 END DO 144 147 ENDIF 148 ! 149 ! outputs 150 CALL iom_put( 'hflx_ssr_cea', qrp(:,:) ) 151 IF( nn_sssr == 1 ) CALL iom_put( 'sflx_ssr_cea', erp(:,:) * sss_m(:,:) ) 152 IF( nn_sssr == 2 ) CALL iom_put( 'vflx_ssr_cea', -erp(:,:) ) 145 153 ! 146 154 ENDIF -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/TRA/tradmp.F90
r11536 r14717 99 99 IF( ln_timing ) CALL timing_start('tra_dmp') 100 100 ! 101 IF( l_trdtra ) THEN!* Save ta and sa trends101 IF( l_trdtra .OR. iom_use('hflx_dmp_cea') .OR. iom_use('sflx_dmp_cea') ) THEN !* Save ta and sa trends 102 102 ALLOCATE( ztrdts(jpi,jpj,jpk,jpts) ) 103 103 ztrdts(:,:,:,:) = tsa(:,:,:,:) … … 149 149 END SELECT 150 150 ! 151 ! outputs 152 IF( iom_use('hflx_dmp_cea') ) & 153 & CALL iom_put('hflx_dmp_cea', SUM( ( tsa(:,:,:,jp_tem) - ztrdts(:,:,:,jp_tem) ) * e3t_n(:,:,:), dim=3 ) * rcp * rau0 ) ! W/m2 154 IF( iom_use('sflx_dmp_cea') ) & 155 & CALL iom_put('sflx_dmp_cea', SUM( ( tsa(:,:,:,jp_sal) - ztrdts(:,:,:,jp_sal) ) * e3t_n(:,:,:), dim=3 ) * rau0 ) ! g/m2/s 156 ! 151 157 IF( l_trdtra ) THEN ! trend diagnostic 152 158 ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:)
Note: See TracChangeset
for help on using the changeset viewer.