- Timestamp:
- 2021-12-03T20:32:50+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14318_RK3_stage1
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14318_RK3_stage1
- Property svn:externals
-
old new 9 9 10 10 # SETTE 11 ^/utils/CI/sette@14244 sette 11 ^/utils/CI/sette@HEAD sette 12
-
- Property svn:externals
-
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/DIA/diahsb.F90
r14784 r15574 83 83 REAL(wp) :: z_wn_trd_t , z_wn_trd_s ! - - 84 84 REAL(wp) :: z_ssh_hc , z_ssh_sc ! - - 85 REAL(wp), DIMENSION(jpi,jpj) :: z2d0, z2d1 ! 2D workspace 86 REAL(wp), DIMENSION(jpi,jpj,jpkm1) :: zwrk ! 3D workspace 85 REAL(wp), DIMENSION(jpi,jpj,13) :: ztmp 86 REAL(wp), DIMENSION(jpi,jpj,jpkm1,4) :: ztmpk 87 REAL(wp), DIMENSION(17) :: zbg 87 88 !!--------------------------------------------------------------------------- 88 89 IF( ln_timing ) CALL timing_start('dia_hsb') 89 90 ! 91 ztmp (:,:,:) = 0._wp ! should be better coded 92 ztmpk(:,:,:,:) = 0._wp ! should be better coded 93 ! 90 94 ts(:,:,:,1,Kmm) = ts(:,:,:,1,Kmm) * tmask(:,:,:) ; ts(:,:,:,1,Kbb) = ts(:,:,:,1,Kbb) * tmask(:,:,:) ; 91 95 ts(:,:,:,2,Kmm) = ts(:,:,:,2,Kmm) * tmask(:,:,:) ; ts(:,:,:,2,Kbb) = ts(:,:,:,2,Kbb) * tmask(:,:,:) ; 96 ! 92 97 ! ------------------------- ! 93 98 ! 1 - Trends due to forcing ! 94 99 ! ------------------------- ! 95 z_frc_trd_v = r1_rho0 * glob_sum( 'diahsb', - ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) * surf(:,:) ) ! volume fluxes 96 #if defined key_RK3 97 !!st 98 z_frc_trd_t = glob_sum( 'diahsb', sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes 99 z_frc_trd_s = glob_sum( 'diahsb', sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes 100 !!st CALL ctl_stop( 'dia_hsb: not yet instrumented for RK3' ) 101 #else 102 z_frc_trd_t = glob_sum( 'diahsb', sbc_tsc(:,:,jp_tem) * surf(:,:) ) ! heat fluxes 103 z_frc_trd_s = glob_sum( 'diahsb', sbc_tsc(:,:,jp_sal) * surf(:,:) ) ! salt fluxes 104 #endif 105 ! ! Add runoff heat & salt input 106 IF( ln_rnf ) z_frc_trd_t = z_frc_trd_t + glob_sum( 'diahsb', rnf_tsc(:,:,jp_tem) * surf(:,:) ) 107 IF( ln_rnf_sal) z_frc_trd_s = z_frc_trd_s + glob_sum( 'diahsb', rnf_tsc(:,:,jp_sal) * surf(:,:) ) 108 ! ! Add ice shelf heat & salt input 109 IF( ln_isf ) z_frc_trd_t = z_frc_trd_t & 110 & + glob_sum( 'diahsb', ( risf_cav_tsc(:,:,jp_tem) + risf_par_tsc(:,:,jp_tem) ) * surf(:,:) ) 111 ! ! Add penetrative solar radiation 112 IF( ln_traqsr ) z_frc_trd_t = z_frc_trd_t + r1_rho0_rcp * glob_sum( 'diahsb', qsr (:,:) * surf(:,:) ) 113 ! ! Add geothermal heat flux 114 IF( ln_trabbc ) z_frc_trd_t = z_frc_trd_t + glob_sum( 'diahsb', qgh_trd0(:,:) * surf(:,:) ) 115 ! 116 IF( ln_linssh ) THEN 100 ! prepare trends 101 ztmp(:,:,1) = - r1_rho0 * ( emp(:,:) - rnf(:,:) - fwfisf_cav(:,:) - fwfisf_par(:,:) ) * surf(:,:) ! volume 102 ztmp(:,:,2) = sbc_tsc(:,:,jp_tem) * surf(:,:) ! heat 103 ztmp(:,:,3) = sbc_tsc(:,:,jp_sal) * surf(:,:) ! salt 104 IF( ln_rnf ) ztmp(:,:,4) = rnf_tsc(:,:,jp_tem) * surf(:,:) ! runoff temp 105 IF( ln_rnf_sal ) ztmp(:,:,5) = rnf_tsc(:,:,jp_sal) * surf(:,:) ! runoff salt 106 IF( ln_isf ) ztmp(:,:,6) = ( risf_cav_tsc(:,:,jp_tem) + risf_par_tsc(:,:,jp_tem) ) * surf(:,:) ! isf temp 107 IF( ln_traqsr ) ztmp(:,:,7) = r1_rho0_rcp * qsr(:,:) * surf(:,:) ! penetrative solar radiation 108 IF( ln_trabbc ) ztmp(:,:,8) = qgh_trd0(:,:) * surf(:,:) ! geothermal heat 109 ! 110 IF( ln_linssh ) THEN ! Advection flux through fixed surface (z=0) 117 111 IF( ln_isfcav ) THEN 118 112 DO ji=1,jpi 119 113 DO jj=1,jpj 120 z 2d0(ji,jj) =surf(ji,jj) * ww(ji,jj,mikt(ji,jj)) * ts(ji,jj,mikt(ji,jj),jp_tem,Kbb)121 z 2d1(ji,jj) =surf(ji,jj) * ww(ji,jj,mikt(ji,jj)) * ts(ji,jj,mikt(ji,jj),jp_sal,Kbb)114 ztmp(ji,jj,9 ) = - surf(ji,jj) * ww(ji,jj,mikt(ji,jj)) * ts(ji,jj,mikt(ji,jj),jp_tem,Kbb) 115 ztmp(ji,jj,10) = - surf(ji,jj) * ww(ji,jj,mikt(ji,jj)) * ts(ji,jj,mikt(ji,jj),jp_sal,Kbb) 122 116 END DO 123 117 END DO 124 118 ELSE 125 z 2d0(:,:) =surf(:,:) * ww(:,:,1) * ts(:,:,1,jp_tem,Kbb)126 z 2d1(:,:) =surf(:,:) * ww(:,:,1) * ts(:,:,1,jp_sal,Kbb)119 ztmp(:,:,9 ) = - surf(:,:) * ww(:,:,1) * ts(:,:,1,jp_tem,Kbb) 120 ztmp(:,:,10) = - surf(:,:) * ww(:,:,1) * ts(:,:,1,jp_sal,Kbb) 127 121 END IF 128 z_wn_trd_t = - glob_sum( 'diahsb', z2d0 ) 129 z_wn_trd_s = - glob_sum( 'diahsb', z2d1 ) 130 ENDIF 131 122 ENDIF 123 124 ! global sum 125 zbg(1:10) = glob_sum_vec( 'dia_hsb', ztmp(:,:,1:10) ) 126 127 ! adding up 128 z_frc_trd_v = zbg(1) ! volume fluxes 129 z_frc_trd_t = zbg(2) ! heat fluxes 130 z_frc_trd_s = zbg(3) ! salt fluxes 131 IF( ln_rnf ) z_frc_trd_t = z_frc_trd_t + zbg(4) ! runoff heat 132 IF( ln_rnf_sal) z_frc_trd_s = z_frc_trd_s + zbg(5) ! runoff salt 133 IF( ln_isf ) z_frc_trd_t = z_frc_trd_t + zbg(6) ! isf heat 134 IF( ln_traqsr ) z_frc_trd_t = z_frc_trd_t + zbg(7) ! penetrative solar flux 135 IF( ln_trabbc ) z_frc_trd_t = z_frc_trd_t + zbg(8) ! geothermal heat 136 ! 132 137 frc_v = frc_v + z_frc_trd_v * rn_Dt 133 138 frc_t = frc_t + z_frc_trd_t * rn_Dt … … 135 140 ! ! Advection flux through fixed surface (z=0) 136 141 IF( ln_linssh ) THEN 142 z_wn_trd_t = zbg(9) 143 z_wn_trd_s = zbg(10) 144 ! 137 145 frc_wn_t = frc_wn_t + z_wn_trd_t * rn_Dt 138 146 frc_wn_s = frc_wn_s + z_wn_trd_s * rn_Dt 139 147 ENDIF 140 148 141 ! ------------------------ !142 ! 2 - Content variations !143 ! ------------------------ !149 ! --------------------------------- ! 150 ! 2 - Content variations with ssh ! 151 ! --------------------------------- ! 144 152 ! glob_sum_full is needed because you keep the full interior domain to compute the sum (iscpl) 145 153 ! 146 154 ! ! volume variation (calculated with ssh) 147 z diff_v1 = glob_sum_full( 'diahsb', surf(:,:)*ssh(:,:,Kmm) - surf_ini(:,:)*ssh_ini(:,:))155 ztmp(:,:,11) = surf(:,:)*ssh(:,:,Kmm) - surf_ini(:,:)*ssh_ini(:,:) 148 156 149 157 ! ! heat & salt content variation (associated with ssh) … … 152 160 DO ji = 1, jpi 153 161 DO jj = 1, jpj 154 z 2d0(ji,jj) = surf(ji,jj) * ( ts(ji,jj,mikt(ji,jj),jp_tem,Kmm) * ssh(ji,jj,Kmm) - ssh_hc_loc_ini(ji,jj) )155 z 2d1(ji,jj) = surf(ji,jj) * ( ts(ji,jj,mikt(ji,jj),jp_sal,Kmm) * ssh(ji,jj,Kmm) - ssh_sc_loc_ini(ji,jj) )162 ztmp(ji,jj,12) = surf(ji,jj) * ( ts(ji,jj,mikt(ji,jj),jp_tem,Kmm) * ssh(ji,jj,Kmm) - ssh_hc_loc_ini(ji,jj) ) 163 ztmp(ji,jj,13) = surf(ji,jj) * ( ts(ji,jj,mikt(ji,jj),jp_sal,Kmm) * ssh(ji,jj,Kmm) - ssh_sc_loc_ini(ji,jj) ) 156 164 END DO 157 165 END DO 158 166 ELSE ! no under ice-shelf seas 159 z 2d0(:,:) = surf(:,:) * ( ts(:,:,1,jp_tem,Kmm) * ssh(:,:,Kmm) - ssh_hc_loc_ini(:,:) )160 z 2d1(:,:) = surf(:,:) * ( ts(:,:,1,jp_sal,Kmm) * ssh(:,:,Kmm) - ssh_sc_loc_ini(:,:) )167 ztmp(:,:,12) = surf(:,:) * ( ts(:,:,1,jp_tem,Kmm) * ssh(:,:,Kmm) - ssh_hc_loc_ini(:,:) ) 168 ztmp(:,:,13) = surf(:,:) * ( ts(:,:,1,jp_sal,Kmm) * ssh(:,:,Kmm) - ssh_sc_loc_ini(:,:) ) 161 169 END IF 162 z_ssh_hc = glob_sum_full( 'diahsb', z2d0 ) 163 z_ssh_sc = glob_sum_full( 'diahsb', z2d1 ) 164 ENDIF 165 ! 166 DO jk = 1, jpkm1 ! volume variation (calculated with scale factors) 167 zwrk(:,:,jk) = surf (:,:) * e3t (:,:,jk,Kmm)*tmask (:,:,jk) & 168 & - surf_ini(:,:) * e3t_ini(:,:,jk )*tmask_ini(:,:,jk) 170 ENDIF 171 172 ! global sum 173 zbg(11:13) = glob_sum_full_vec( 'dia_hsb', ztmp(:,:,11:13) ) 174 175 zdiff_v1 = zbg(11) 176 ! ! heat & salt content variation (associated with ssh) 177 IF( ln_linssh ) THEN ! linear free surface case 178 z_ssh_hc = zbg(12) 179 z_ssh_sc = zbg(13) 180 ENDIF 181 ! 182 ! --------------------------------- ! 183 ! 3 - Content variations with e3t ! 184 ! --------------------------------- ! 185 ! glob_sum_full is needed because you keep the full interior domain to compute the sum (iscpl) 186 ! 187 DO jk = 1, jpkm1 ! volume 188 ztmpk(:,:,jk,1) = surf (:,:) * e3t(:,:,jk,Kmm)*tmask(:,:,jk) & 189 & - surf_ini(:,:) * e3t_ini(:,:,jk )*tmask_ini(:,:,jk) 169 190 END DO 170 zdiff_v2 = glob_sum_full( 'diahsb', zwrk(:,:,:) ) ! glob_sum_full needed as tmask and tmask_ini could be different 171 DO jk = 1, jpkm1 ! heat content variation 172 zwrk(:,:,jk) = ( surf (:,:) * e3t(:,:,jk,Kmm)*ts(:,:,jk,jp_tem,Kmm) & 173 & - surf_ini(:,:) * hc_loc_ini(:,:,jk) ) 191 DO jk = 1, jpkm1 ! heat 192 ztmpk(:,:,jk,2) = ( surf (:,:) * e3t(:,:,jk,Kmm)*ts(:,:,jk,jp_tem,Kmm) & 193 & - surf_ini(:,:) * hc_loc_ini(:,:,jk) ) 174 194 END DO 175 zdiff_hc = glob_sum_full( 'diahsb', zwrk(:,:,:) ) 176 DO jk = 1, jpkm1 ! salt content variation 177 zwrk(:,:,jk) = ( surf (:,:) * e3t(:,:,jk,Kmm)*ts(:,:,jk,jp_sal,Kmm) & 178 & - surf_ini(:,:) * sc_loc_ini(:,:,jk) ) 195 DO jk = 1, jpkm1 ! salt 196 ztmpk(:,:,jk,3) = ( surf (:,:) * e3t(:,:,jk,Kmm)*ts(:,:,jk,jp_sal,Kmm) & 197 & - surf_ini(:,:) * sc_loc_ini(:,:,jk) ) 179 198 END DO 180 zdiff_sc = glob_sum_full( 'diahsb', zwrk(:,:,:) ) 199 DO jk = 1, jpkm1 ! total ocean volume 200 ztmpk(:,:,jk,4) = surf(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 201 END DO 202 203 ! global sum 204 zbg(14:17) = glob_sum_full_vec( 'dia_hsb', ztmpk(:,:,:,1:4) ) 205 206 zdiff_v2 = zbg(14) ! glob_sum_full needed as tmask and tmask_ini could be different 207 zdiff_hc = zbg(15) 208 zdiff_sc = zbg(16) 209 zvol_tot = zbg(17) 181 210 182 211 ! ------------------------ ! 183 ! 3- Drifts !212 ! 4 - Drifts ! 184 213 ! ------------------------ ! 185 214 zdiff_v1 = zdiff_v1 - frc_v … … 193 222 zerr_sc1 = z_ssh_sc - frc_wn_s 194 223 ENDIF 195 196 ! ----------------------- !197 ! 4 - Diagnostics writing !198 ! ----------------------- !199 DO jk = 1, jpkm1 ! total ocean volume (calculated with scale factors)200 zwrk(:,:,jk) = surf(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk)201 END DO202 zvol_tot = glob_sum( 'diahsb', zwrk(:,:,:) )203 224 204 225 !!gm to be added ?
Note: See TracChangeset
for help on using the changeset viewer.