Changeset 1553
- Timestamp:
- 2009-07-29T12:29:21+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/SBC/sbcfwb.F90
r1245 r1553 7 7 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 8 8 !! 9.0 ! 06-08 (G. Madec) Surface module 9 !! 9.2 ! 09-07 (C. Talandier) emp mean s spread over erp area 9 10 !!---------------------------------------------------------------------- 10 11 … … 18 19 USE phycst ! physical constants 19 20 USE sbcrnf ! ocean runoffs 21 USE sbcssr ! SS damping terms 20 22 USE daymod ! calendar 21 23 USE in_out_manager ! I/O manager 22 24 USE lib_mpp ! distribued memory computing library 25 USE lbclnk ! ocean lateral boundary conditions 23 26 24 27 IMPLICIT NONE … … 54 57 !! =1 global mean of emp set to zero at each nn_fsbc time step 55 58 !! =2 annual global mean corrected from previous year 59 !! =3 global mean of emp set to zero at each nn_fsbc time step 60 !! & spread out over erp area depending its sign 56 61 !!---------------------------------------------------------------------- 57 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 62 67 INTEGER :: ikty, iyear ! 63 68 CHARACTER (len=32) :: clname 64 REAL(wp) :: z_emp ! temporary scalars 69 REAL(wp) :: z_emp, z_emp_nsrf ! temporary scalars 70 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread 71 REAL(wp), DIMENSION(jpi,jpj) :: ztmsk_neg, ztmsk_pos, ztmsk_tospread 72 REAL(wp), DIMENSION(jpi,jpj) :: z_wgt, zerp_cor 65 73 !!---------------------------------------------------------------------- 66 74 ! … … 73 81 IF( kn_fwb == 1 ) WRITE(numout,*) ' instantaneously set to zero' 74 82 IF( kn_fwb == 2 ) WRITE(numout,*) ' adjusted from previous year budget' 83 IF( kn_fwb == 3 ) WRITE(numout,*) ' set to zero and spread out over erp area' 75 84 ENDIF 76 85 ! … … 142 151 ENDIF 143 152 ! 153 CASE ( 3 ) ! global emp set to zero and spread out over erp area 154 ! 155 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 156 ! Select <0 and >0 area of erp 157 ztmsk_pos(:,:) = tmask_i(:,:) 158 WHERE( erp < 0.e0 ) ztmsk_pos = 0.e0 159 ztmsk_neg(:,:) = tmask_i(:,:) - ztmsk_pos(:,:) 160 161 ! Area filled by <0 and >0 erp 162 zsurf_neg = SUM( e1e2_i(:,:)*ztmsk_neg(:,:) ) 163 zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 164 165 ! emp global mean 166 z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 167 ! 168 IF( lk_mpp ) CALL mpp_sum( z_emp ) 169 170 IF( z_emp < 0.e0 ) THEN 171 ! to spread out over >0 erp area to increase evaporation damping process 172 zsurf_tospread = zsurf_pos 173 ztmsk_tospread(:,:) = ztmsk_pos(:,:) 174 ELSE 175 ! to spread out over <0 erp area to increase precipitation damping process 176 zsurf_tospread = zsurf_neg 177 ztmsk_tospread(:,:) = ztmsk_neg(:,:) 178 ENDIF 179 180 ! emp global mean over <0 or >0 erp area 181 z_emp_nsrf = SUM( e1e2_i(:,:) * z_emp ) / ( zsurf_tospread + rsmall ) 182 ! weight to respect erp field 2D structure 183 z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( SUM( ztmsk_tospread(:,:) * erp(:,:) * e1e2_i(:,:) ) + rsmall ) 184 ! final correction term to apply 185 zerp_cor(:,:) = -1. * z_emp_nsrf * zsurf_tospread * z_wgt(:,:) 186 187 CALL lbc_lnk( zerp_cor, 'T', 1. ) 188 189 emp (:,:) = emp (:,:) + zerp_cor(:,:) 190 emps(:,:) = emps(:,:) + zerp_cor(:,:) 191 erp (:,:) = erp (:,:) + zerp_cor(:,:) 192 193 IF( nprint == 1 .AND. lwp ) THEN 194 IF( z_emp < 0.e0 ) THEN 195 WRITE(numout,*)' z_emp < 0' 196 WRITE(numout,*)' SUM(erp+) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 197 ELSE 198 WRITE(numout,*)' z_emp >= 0' 199 WRITE(numout,*)' SUM(erp-) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 200 ENDIF 201 WRITE(numout,*)' SUM(empG) = ', SUM( z_emp*e1e2_i(:,:) )*1.e-3,' m3.s-1' 202 WRITE(numout,*)' z_emp = ', z_emp ,' mm.s-1' 203 WRITE(numout,*)' z_emp_nsrf = ', z_emp_nsrf ,' mm.s-1' 204 WRITE(numout,*)' MIN(zerp_cor) = ', MINVAL(zerp_cor) 205 WRITE(numout,*)' MAX(zerp_cor) = ', MAXVAL(zerp_cor) 206 ENDIF 207 ! 208 ENDIF 209 ! 144 210 CASE DEFAULT ! you should never be there 145 211 WRITE(ctmp1,*)'sbc_fwb : nn_fwb = ', kn_fwb, ' is not permitted for the FreshWater Budget correction, choose either 1/2'
Note: See TracChangeset
for help on using the changeset viewer.