Changeset 5034 for branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90
- Timestamp:
- 2015-01-15T14:48:42+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90
r4347 r5034 19 19 USE phycst ! physical constants 20 20 USE sbcrnf ! ocean runoffs 21 USE sbcisf ! ice shelf melting contribution 21 22 USE sbcssr ! SS damping terms 22 23 USE in_out_manager ! I/O manager … … 57 58 !! =1 global mean of emp set to zero at each nn_fsbc time step 58 59 !! =2 annual global mean corrected from previous year 60 !! =3 global mean of emp set to zero at each nn_fsbc time step 61 !! & spread out over erp area depending its sign 59 62 !! Note: if sea ice is embedded it is taken into account when computing the budget 60 63 !!---------------------------------------------------------------------- … … 81 84 IF( kn_fwb == 1 ) WRITE(numout,*) ' instantaneously set to zero' 82 85 IF( kn_fwb == 2 ) WRITE(numout,*) ' adjusted from previous year budget' 83 ENDIF 86 IF( kn_fwb == 3 ) WRITE(numout,*) ' fwf set to zero and spread out over erp area' 87 ENDIF 88 ! 89 IF( kn_fwb == 3 .AND. nn_sssr /= 2 ) CALL ctl_stop( 'sbc_fwb: nn_fwb = 3 requires nn_sssr = 2, we stop ' ) 84 90 ! 85 91 area = glob_sum( e1e2t(:,:) ) ! interior global domain surface 86 92 ! 87 #if ! defined key_lim2 && ! defined key_lim3 && ! defined key_cice 93 #if ! defined key_lim2 && ! defined key_lim3 && ! defined key_cice 88 94 snwice_mass_b(:,:) = 0.e0 ! no sea-ice model is being used : no snow+ice mass 89 95 snwice_mass (:,:) = 0.e0 … … 98 104 ! 99 105 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 100 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) - snwice_fmass(:,:) ) ) / area ! sum over the global domain106 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) - snwice_fmass(:,:) ) ) / area ! sum over the global domain 101 107 zcoef = z_fwf * rcp 102 108 emp(:,:) = emp(:,:) - z_fwf … … 142 148 ENDIF 143 149 ! 150 CASE ( 3 ) !== global fwf set to zero and spread out over erp area ==! 151 ! 152 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 153 ztmsk_pos(:,:) = tmask_i(:,:) ! Select <0 and >0 area of erp 154 WHERE( erp < 0._wp ) ztmsk_pos = 0._wp 155 ztmsk_neg(:,:) = tmask_i(:,:) - ztmsk_pos(:,:) 156 ! 157 zsurf_neg = glob_sum( e1e2t(:,:)*ztmsk_neg(:,:) ) ! Area filled by <0 and >0 erp 158 zsurf_pos = glob_sum( e1e2t(:,:)*ztmsk_pos(:,:) ) 159 ! ! fwf global mean (excluding ocean to ice/snow exchanges) 160 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) - snwice_fmass(:,:) ) ) / area 161 ! 162 IF( z_fwf < 0._wp ) THEN ! spread out over >0 erp area to increase evaporation 163 zsurf_tospread = zsurf_pos 164 ztmsk_tospread(:,:) = ztmsk_pos(:,:) 165 ELSE ! spread out over <0 erp area to increase precipitation 166 zsurf_tospread = zsurf_neg 167 ztmsk_tospread(:,:) = ztmsk_neg(:,:) 168 ENDIF 169 ! 170 zsum_fwf = glob_sum( e1e2t(:,:) * z_fwf ) ! fwf global mean over <0 or >0 erp area 171 !!gm : zsum_fwf = z_fwf * area ??? it is right? I think so.... 172 z_fwf_nsrf = zsum_fwf / ( zsurf_tospread + rsmall ) 173 ! ! weight to respect erp field 2D structure 174 zsum_erp = glob_sum( ztmsk_tospread(:,:) * erp(:,:) * e1e2t(:,:) ) 175 z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( zsum_erp + rsmall ) 176 ! ! final correction term to apply 177 zerp_cor(:,:) = -1. * z_fwf_nsrf * zsurf_tospread * z_wgt(:,:) 178 ! 179 !!gm ===>>>> lbc_lnk should be useless as all the computation is done over the whole domain ! 180 CALL lbc_lnk( zerp_cor, 'T', 1. ) 181 ! 182 emp(:,:) = emp(:,:) + zerp_cor(:,:) 183 qns(:,:) = qns(:,:) - zerp_cor(:,:) * rcp * sst_m(:,:) ! account for change to the heat budget due to fw correction 184 erp(:,:) = erp(:,:) + zerp_cor(:,:) 185 ! 186 IF( nprint == 1 .AND. lwp ) THEN ! control print 187 IF( z_fwf < 0._wp ) THEN 188 WRITE(numout,*)' z_fwf < 0' 189 WRITE(numout,*)' SUM(erp+) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2t(:,:) )*1.e-9,' Sv' 190 ELSE 191 WRITE(numout,*)' z_fwf >= 0' 192 WRITE(numout,*)' SUM(erp-) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2t(:,:) )*1.e-9,' Sv' 193 ENDIF 194 WRITE(numout,*)' SUM(empG) = ', SUM( z_fwf*e1e2t(:,:) )*1.e-9,' Sv' 195 WRITE(numout,*)' z_fwf = ', z_fwf ,' Kg/m2/s' 196 WRITE(numout,*)' z_fwf_nsrf = ', z_fwf_nsrf ,' Kg/m2/s' 197 WRITE(numout,*)' MIN(zerp_cor) = ', MINVAL(zerp_cor) 198 WRITE(numout,*)' MAX(zerp_cor) = ', MAXVAL(zerp_cor) 199 ENDIF 200 ENDIF 201 ! 144 202 CASE DEFAULT !== you should never be there ==! 145 CALL ctl_stop( 'sbc_fwb : wrong nn_fwb value for the FreshWater Budget correction, choose either 1 or 2' )203 CALL ctl_stop( 'sbc_fwb : wrong nn_fwb value for the FreshWater Budget correction, choose either 1, 2 or 3' ) 146 204 ! 147 205 END SELECT
Note: See TracChangeset
for help on using the changeset viewer.