- Timestamp:
- 2010-05-06T10:40:07+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r1837_mass_heat_salt_fluxes/NEMO/OPA_SRC/SBC/sbcfwb.F90
r1822 r1859 4 4 !! Ocean fluxes : domain averaged freshwater budget 5 5 !!====================================================================== 6 !! History : 8.2 ! 01-02 (E. Durand) Original code 7 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 8 !! 9.0 ! 06-08 (G. Madec) Surface module 9 !! 9.2 ! 09-07 (C. Talandier) emp mean s spread over erp area 6 !! History : OPA ! 2001-02 (E. Durand) Original code 7 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 8 !! 3.0 ! 2006-08 (G. Madec) Surface module 9 !! 3.2 ! 2009-07 (C. Talandier) emp mean s spread over erp area 10 !! 3.3 ! 2010-05 (Y. Aksenov G. Madec) embedded sea-ice case 10 11 !!---------------------------------------------------------------------- 11 12 … … 27 28 PRIVATE 28 29 29 PUBLIC sbc_fwb 30 31 REAL(wp) :: a_fwb_b 32 REAL(wp) :: a_fwb 33 REAL(wp) :: empold 34 REAL(wp) :: area 30 PUBLIC sbc_fwb ! routine called by step 31 32 REAL(wp) :: a_fwb_b ! annual domain averaged freshwater budget 33 REAL(wp) :: a_fwb ! for 2 year before (_b) and before year. 34 REAL(wp) :: empold ! empold to be suppressed 35 REAL(wp) :: area ! global mean ocean surface (interior domain) 35 36 36 37 REAL(wp), DIMENSION(jpi,jpj) :: e1e2_i ! area of the interior domain (e1t*e2t*tmask_i) … … 40 41 # include "vectopt_loop_substitute.h90" 41 42 !!---------------------------------------------------------------------- 42 !! OPA 9.0 , LOCEAN-IPSL (2006)43 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 43 44 !! $Id$ 44 45 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 57 58 !! =2 annual global mean corrected from previous year 58 59 !! =3 global mean of emp set to zero at each nn_fsbc time step 59 !! &spread out over erp area depending its sign60 !! and spread out over erp area depending its sign 60 61 !!---------------------------------------------------------------------- 61 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 63 64 INTEGER, INTENT( in ) :: kn_fwb ! ocean time-step index 64 65 !! 65 INTEGER :: inum 66 INTEGER :: ikty, iyear 67 REAL(wp) :: z_emp, z_emp_nsrf, zsum_emp, zsum_erp 68 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread 69 REAL(wp), DIMENSION(jpi,jpj) :: ztmsk_neg, ztmsk_ pos, ztmsk_tospread70 REAL(wp), DIMENSION(jpi,jpj) :: z _wgt, zerp_cor66 INTEGER :: inum ! temporary logical unit 67 INTEGER :: ikty, iyear ! 68 REAL(wp) :: z_emp, z_emp_nsrf, zsum_emp, zsum_erp, zcoef ! temporary scalars 69 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread ! - - 70 REAL(wp), DIMENSION(jpi,jpj) :: ztmsk_neg, ztmsk_tospread ! 2D workspace 71 REAL(wp), DIMENSION(jpi,jpj) :: ztmsk_pos, z_wgt, zerp_cor ! - - 71 72 !!---------------------------------------------------------------------- 72 73 ! … … 83 84 IF( kn_fwb == 3 .AND. nn_sssr /= 2 ) & 84 85 & CALL ctl_stop( 'The option nn_fwb = 3 must be associated to nn_sssr = 2 ' ) 85 86 86 ENDIF 87 87 ! … … 99 99 CALL ctl_stop( ctmp1 ) 100 100 ! 101 102 !103 101 CASE ( 1 ) ! global mean emp set to zero 104 102 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 105 103 z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 106 104 IF( lk_mpp ) CALL mpp_sum( z_emp ) ! sum over the global domain 107 emp (:,:) = emp (:,:) - z_emp 108 emps(:,:) = emps(:,:) - z_emp 105 zcoef = z_emp * rcp 106 emp(:,:) = emp(:,:) - z_emp 107 qns(:,:) = qns(:,:) + zcoef * sst_m(:,:) 109 108 ENDIF 110 109 ! … … 138 137 ! correct the freshwater fluxes 139 138 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 140 emp (:,:) = emp (:,:) + empold 141 emps(:,:) = emps(:,:) + empold 139 zcoef = z_emp * rcp 140 emp(:,:) = emp (:,:) + empold 141 qns(:,:) = qns(:,:) - zcoef * sst_m(:,:) 142 142 ENDIF 143 143 ! … … 152 152 ! 153 153 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 154 ! Select <0 and >0 area of erp154 ! ! Select <0 and >0 area of erp 155 155 ztmsk_pos(:,:) = tmask_i(:,:) 156 WHERE( erp < 0.e0 ) ztmsk_pos= 0.e0156 WHERE( erp(:,:) < 0.e0 ) ztmsk_pos(:,:) = 0.e0 157 157 ztmsk_neg(:,:) = tmask_i(:,:) - ztmsk_pos(:,:) 158 158 159 ! Area filled by <0 and >0 erp160 zsurf_neg = SUM( e1e2_i(:,:)*ztmsk_neg(:,:))161 zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:))159 ! ! Area filled by <0 and >0 erp 160 zsurf_neg = SUM( e1e2_i(:,:) * ztmsk_neg(:,:) ) 161 zsurf_pos = SUM( e1e2_i(:,:) * ztmsk_pos(:,:) ) 162 162 163 ! emp global mean163 ! ! emp global mean 164 164 z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 165 165 ! 166 IF( lk_mpp ) CALL mpp_sum( z_emp )166 IF( lk_mpp ) CALL mpp_sum( z_emp ) 167 167 IF( lk_mpp ) CALL mpp_sum( zsurf_neg ) 168 168 IF( lk_mpp ) CALL mpp_sum( zsurf_pos ) 169 169 170 IF( z_emp < 0.e0 ) THEN 171 ! to spread out over >0 erp area to increase evaporation damping process 170 IF( z_emp < 0.e0 ) THEN ! spread out over >0 erp area to increase evaporation damping process 172 171 zsurf_tospread = zsurf_pos 173 172 ztmsk_tospread(:,:) = ztmsk_pos(:,:) 174 ELSE 175 ! to spread out over <0 erp area to increase precipitation damping process 173 ELSE ! spread out over <0 erp area to increase precipitation damping process 176 174 zsurf_tospread = zsurf_neg 177 175 ztmsk_tospread(:,:) = ztmsk_neg(:,:) … … 192 190 CALL lbc_lnk( zerp_cor, 'T', 1. ) 193 191 194 emp (:,:) = emp(:,:) + zerp_cor(:,:)195 emps(:,:) = emps(:,:) + zerp_cor(:,:)196 erp (:,:) = erp(:,:) + zerp_cor(:,:)192 emp(:,:) = emp(:,:) + zerp_cor(:,:) 193 qns(:,:) = qns(:,:) - zerp_cor(:,:) * rcp * sst_m(:,:) 194 erp(:,:) = erp(:,:) + zerp_cor(:,:) 197 195 198 196 IF( nprint == 1 .AND. lwp ) THEN
Note: See TracChangeset
for help on using the changeset viewer.