- Timestamp:
- 2017-12-13T15:58:53+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
r7646 r9019 2 2 !!====================================================================== 3 3 !! *** MODULE trcsubstp *** 4 !! TOP : Averages physics variables for TOP substepping.4 !! TOP : Averages physics variables for TOP substepping. 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2011-10 (K. Edwards) Original … … 8 8 #if defined key_top 9 9 !!---------------------------------------------------------------------- 10 !! trc_sub : passive tracer system sub-stepping10 !! trc_sub : passive tracer system sub-stepping 11 11 !!---------------------------------------------------------------------- 12 USE oce_trc 12 USE oce_trc ! ocean dynamics and active tracers variables 13 13 USE trc 14 USE prtctl_trc ! Print control for debbuging 15 USE iom 16 USE in_out_manager 17 USE lbclnk 18 USE trabbl 14 USE trabbl ! bottom boundary layer 19 15 USE zdf_oce 20 16 USE domvvl 21 USE divhor ! horizontal divergence (div_hor routine) 22 USE sbcrnf , ONLY: h_rnf, nk_rnf ! River runoff 23 USE bdy_oce , ONLY: ln_bdy, bdytmask ! BDY 17 USE divhor ! horizontal divergence 18 USE sbcrnf , ONLY: h_rnf, nk_rnf ! River runoff 19 USE bdy_oce , ONLY: ln_bdy, bdytmask ! BDY 20 ! 21 USE prtctl_trc ! Print control for debbuging 22 USE in_out_manager ! 23 USE iom 24 USE lbclnk 24 25 #if defined key_agrif 25 26 USE agrif_opa_update … … 29 30 IMPLICIT NONE 30 31 31 PUBLIC trc_sub_stp ! called by trc_stp 32 PUBLIC trc_sub_ini ! called by trc_ini to initialize substepping arrays. 33 PUBLIC trc_sub_reset ! called by trc_stp to reset physics variables 34 PUBLIC trc_sub_ssh ! called by trc_stp to reset physics variables 35 36 REAL(wp) :: r1_ndttrc ! 1 / nn_dttrc 37 REAL(wp) :: r1_ndttrcp1 ! 1 / (nn_dttrc+1) 38 39 ! !* iso-neutral slopes (if l_ldfslp=T) 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_temp, vslp_temp, wslpi_temp, wslpj_temp !: hold current values 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_tm , vslp_tm , wslpi_tm , wslpj_tm !: time mean 32 PUBLIC trc_sub_stp ! called by trc_stp 33 PUBLIC trc_sub_ini ! called by trc_ini to initialize substepping arrays. 34 PUBLIC trc_sub_reset ! called by trc_stp to reset physics variables 35 PUBLIC trc_sub_ssh ! called by trc_stp to reset physics variables 36 37 REAL(wp) :: r1_ndttrc ! = 1 / nn_dttrc 38 REAL(wp) :: r1_ndttrcp1 ! = 1 / (nn_dttrc+1) 39 40 41 !! averaged and temporary saved variables (needed when a larger passive tracer time-step is used) 42 !! ---------------------------------------------------------------- 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: un_tm , un_temp !: i-horizontal velocity average [m/s] 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vn_tm , vn_temp !: j-horizontal velocity average [m/s] 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wn_temp !: hold current values of avt, un, vn, wn 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tsn_tm , tsn_temp !: t/s average [m/s] 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avs_tm , avs_temp !: vertical diffusivity coeff. at w-point [m2/s] 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhop_tm , rhop_temp !: 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshn_tm , sshn_temp !: average ssh for the now step [m] 50 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rnf_tm , rnf_temp !: river runoff 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: h_rnf_tm , h_rnf_temp !: depth in metres to the bottom of the relevant grid box 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hmld_tm , hmld_temp !: mixed layer depth average [m] 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr_i_tm , fr_i_temp !: average ice fraction [m/s] 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_tm , emp_temp !: freshwater budget: volume flux [Kg/m2/s] 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fmmflx_tm , fmmflx_temp !: freshwater budget: freezing/melting [Kg/m2/s] 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_b_hold, emp_b_temp !: hold emp from the beginning of each sub-stepping[m] 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_tm , qsr_temp !: solar radiation average [m] 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm_tm , wndm_temp !: 10m wind average [m] 60 ! 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshb_hold !:hold sshb from the beginning of each sub-stepping[m] 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshb_temp, ssha_temp 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdivn_temp, rotn_temp 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdivb_temp, rotb_temp 65 ! 66 ! !!- bottom boundary layer param (ln_trabbl=T) 67 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahu_bbl_tm, ahu_bbl_temp ! BBL diffusive i-coef. 68 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahv_bbl_tm, ahv_bbl_temp ! BBL diffusive j-coef. 69 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: utr_bbl_tm, utr_bbl_temp ! BBL u-advection 70 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtr_bbl_tm, vtr_bbl_temp ! BBL v-advection 71 72 ! !!- iso-neutral slopes (if l_ldfslp=T) 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_temp, vslp_temp, wslpi_temp, wslpj_temp !: hold current values 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_tm , vslp_tm , wslpi_tm , wslpj_tm !: time mean 75 42 76 43 77 !!---------------------------------------------------------------------- 44 !! NEMO/TOP 3.3 , NEMO Consortium (2010)78 !! NEMO/TOP 4.0 , NEMO Consortium (2017) 45 79 !! $Id$ 46 80 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 57 91 !! on TOP steps, calculate averages. 58 92 !!------------------------------------------------------------------- 59 INTEGER, INTENT( in ) :: kt ! ocean time-step index 60 INTEGER :: ji,jj,jk ! dummy loop indices 61 REAL(wp) :: z1_ne3t, z1_ne3u, z1_ne3v, z1_ne3w 93 INTEGER, INTENT( in ) :: kt ! ocean time-step index 94 ! 95 INTEGER :: ji, jj, jk ! dummy loop indices 96 REAL(wp):: z1_ne3t, z1_ne3u, z1_ne3v, z1_ne3w ! local scalars 62 97 !!------------------------------------------------------------------- 63 98 ! … … 74 109 r1_ndttrc = 1._wp / REAL( nn_dttrc , wp ) 75 110 r1_ndttrcp1 = 1._wp / REAL( nn_dttrc + 1, wp ) 76 !77 111 ENDIF 78 112 79 IF( MOD( kt , nn_dttrc ) /= 0 ) THEN 80 ! 81 un_tm (:,:,:) = un_tm (:,:,:) + un (:,:,:) * e3u_n(:,:,:) 82 vn_tm (:,:,:) = vn_tm (:,:,:) + vn (:,:,:) * e3v_n(:,:,:) 83 tsn_tm (:,:,:,jp_tem) = tsn_tm (:,:,:,jp_tem) + tsn (:,:,:,jp_tem) * e3t_n(:,:,:) 84 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 85 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * e3t_n(:,:,:) 86 avt_tm (:,:,:) = avt_tm (:,:,:) + avt (:,:,:) * e3w_n(:,:,:) 87 # if defined key_zdfddm 88 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * e3w_n(:,:,:) 89 # endif 113 IF( MOD( kt , nn_dttrc ) /= 0 ) THEN 114 ! 115 un_tm (:,:,:) = un_tm (:,:,:) + un (:,:,:) * e3u_n(:,:,:) 116 vn_tm (:,:,:) = vn_tm (:,:,:) + vn (:,:,:) * e3v_n(:,:,:) 117 tsn_tm (:,:,:,jp_tem) = tsn_tm (:,:,:,jp_tem) + tsn (:,:,:,jp_tem) * e3t_n(:,:,:) 118 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 119 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * e3t_n(:,:,:) 120 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * e3w_n(:,:,:) 90 121 IF( l_ldfslp ) THEN 91 122 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp (:,:,:) … … 94 125 wslpj_tm(:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:) 95 126 ENDIF 96 # if defined key_trabbl 97 IF( nn_bbl_ldf == 1 ) THEN98 ahu_bbl_tm(:,:) = ahu_bbl_tm(:,:) + ahu_bbl(:,:)99 ahv_bbl_tm(:,:) = ahv_bbl_tm(:,:) + ahv_bbl(:,:)100 ENDIF101 IF( nn_bbl_adv == 1 ) THEN102 utr_bbl_tm(:,:) = utr_bbl_tm(:,:) + utr_bbl(:,:)103 vtr_bbl_tm(:,:) = vtr_bbl_tm(:,:) + vtr_bbl(:,:)104 ENDIF105 # endif 106 107 108 109 110 111 112 113 114 115 116 127 IF( ln_trabbl ) THEN 128 IF( nn_bbl_ldf == 1 ) THEN 129 ahu_bbl_tm(:,:) = ahu_bbl_tm(:,:) + ahu_bbl(:,:) 130 ahv_bbl_tm(:,:) = ahv_bbl_tm(:,:) + ahv_bbl(:,:) 131 ENDIF 132 IF( nn_bbl_adv == 1 ) THEN 133 utr_bbl_tm(:,:) = utr_bbl_tm(:,:) + utr_bbl(:,:) 134 vtr_bbl_tm(:,:) = vtr_bbl_tm(:,:) + vtr_bbl(:,:) 135 ENDIF 136 ENDIF 137 ! 138 sshn_tm (:,:) = sshn_tm (:,:) + sshn (:,:) 139 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 140 h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 141 hmld_tm (:,:) = hmld_tm (:,:) + hmld (:,:) 142 fr_i_tm (:,:) = fr_i_tm (:,:) + fr_i (:,:) 143 emp_tm (:,:) = emp_tm (:,:) + emp (:,:) 144 fmmflx_tm(:,:) = fmmflx_tm(:,:) + fmmflx(:,:) 145 qsr_tm (:,:) = qsr_tm (:,:) + qsr (:,:) 146 wndm_tm (:,:) = wndm_tm (:,:) + wndm (:,:) 147 ! 117 148 ELSE ! It is time to substep 118 ! 1. set temporary arrays to hold physics variables149 ! 1. set temporary arrays to hold physics/dynamical variables 119 150 un_temp (:,:,:) = un (:,:,:) 120 151 vn_temp (:,:,:) = vn (:,:,:) … … 122 153 tsn_temp (:,:,:,:) = tsn (:,:,:,:) 123 154 rhop_temp (:,:,:) = rhop (:,:,:) 124 avt_temp (:,:,:) = avt (:,:,:)125 # if defined key_zdfddm126 155 avs_temp (:,:,:) = avs (:,:,:) 127 # endif128 156 IF( l_ldfslp ) THEN 129 157 uslp_temp (:,:,:) = uslp (:,:,:) ; wslpi_temp (:,:,:) = wslpi (:,:,:) 130 158 vslp_temp (:,:,:) = vslp (:,:,:) ; wslpj_temp (:,:,:) = wslpj (:,:,:) 131 159 ENDIF 132 # if defined key_trabbl 133 IF( nn_bbl_ldf == 1 ) THEN134 ahu_bbl_temp(:,:) = ahu_bbl(:,:)135 ahv_bbl_temp(:,:) = ahv_bbl(:,:)136 ENDIF137 IF( nn_bbl_adv == 1 ) THEN138 utr_bbl_temp(:,:) = utr_bbl(:,:)139 vtr_bbl_temp(:,:) = vtr_bbl(:,:)140 ENDIF141 # endif 160 IF( ln_trabbl ) THEN 161 IF( nn_bbl_ldf == 1 ) THEN 162 ahu_bbl_temp(:,:) = ahu_bbl(:,:) 163 ahv_bbl_temp(:,:) = ahv_bbl(:,:) 164 ENDIF 165 IF( nn_bbl_adv == 1 ) THEN 166 utr_bbl_temp(:,:) = utr_bbl(:,:) 167 vtr_bbl_temp(:,:) = vtr_bbl(:,:) 168 ENDIF 169 ENDIF 142 170 sshn_temp (:,:) = sshn (:,:) 143 171 sshb_temp (:,:) = sshb (:,:) … … 161 189 tsn_tm (:,:,:,jp_sal) = tsn_tm (:,:,:,jp_sal) + tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 162 190 rhop_tm (:,:,:) = rhop_tm (:,:,:) + rhop (:,:,:) * e3t_n(:,:,:) 163 avt_tm (:,:,:) = avt_tm (:,:,:) + avt (:,:,:) * e3w_n(:,:,:)164 # if defined key_zdfddm165 191 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * e3w_n(:,:,:) 166 # endif167 192 IF( l_ldfslp ) THEN 168 193 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp (:,:,:) … … 171 196 wslpj_tm (:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:) 172 197 ENDIF 173 # if defined key_trabbl 174 IF( nn_bbl_ldf == 1 ) THEN175 ahu_bbl_tm(:,:) = ahu_bbl_tm(:,:) + ahu_bbl(:,:)176 ahv_bbl_tm(:,:) = ahv_bbl_tm(:,:) + ahv_bbl(:,:)177 ENDIF178 IF( nn_bbl_adv == 1 ) THEN179 utr_bbl_tm(:,:) = utr_bbl_tm(:,:) + utr_bbl(:,:)180 vtr_bbl_tm(:,:) = vtr_bbl_tm(:,:) + vtr_bbl(:,:)181 ENDIF182 # endif 198 IF( ln_trabbl ) THEN 199 IF( nn_bbl_ldf == 1 ) THEN 200 ahu_bbl_tm(:,:) = ahu_bbl_tm(:,:) + ahu_bbl(:,:) 201 ahv_bbl_tm(:,:) = ahv_bbl_tm(:,:) + ahv_bbl(:,:) 202 ENDIF 203 IF( nn_bbl_adv == 1 ) THEN 204 utr_bbl_tm(:,:) = utr_bbl_tm(:,:) + utr_bbl(:,:) 205 vtr_bbl_tm(:,:) = vtr_bbl_tm(:,:) + vtr_bbl(:,:) 206 ENDIF 207 ENDIF 183 208 sshn_tm (:,:) = sshn_tm (:,:) + sshn (:,:) 184 209 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) … … 204 229 fmmflx(:,:) = fmmflx_tm (:,:) * r1_ndttrc 205 230 fr_i (:,:) = fr_i_tm (:,:) * r1_ndttrc 206 # if defined key_trabbl 207 IF( nn_bbl_ldf == 1 ) THEN208 ahu_bbl(:,:) = ahu_bbl_tm (:,:) * r1_ndttrc209 ahv_bbl(:,:) = ahv_bbl_tm (:,:) * r1_ndttrc210 ENDIF211 IF( nn_bbl_adv == 1 ) THEN212 utr_bbl(:,:) = utr_bbl_tm (:,:) * r1_ndttrc213 vtr_bbl(:,:) = vtr_bbl_tm (:,:) * r1_ndttrc214 ENDIF215 # endif 231 IF( ln_trabbl ) THEN 232 IF( nn_bbl_ldf == 1 ) THEN 233 ahu_bbl(:,:) = ahu_bbl_tm (:,:) * r1_ndttrc 234 ahv_bbl(:,:) = ahv_bbl_tm (:,:) * r1_ndttrc 235 ENDIF 236 IF( nn_bbl_adv == 1 ) THEN 237 utr_bbl(:,:) = utr_bbl_tm (:,:) * r1_ndttrc 238 vtr_bbl(:,:) = vtr_bbl_tm (:,:) * r1_ndttrc 239 ENDIF 240 ENDIF 216 241 ELSE 217 242 wndm (:,:) = wndm_tm (:,:) * r1_ndttrcp1 … … 220 245 fmmflx(:,:) = fmmflx_tm (:,:) * r1_ndttrcp1 221 246 fr_i (:,:) = fr_i_tm (:,:) * r1_ndttrcp1 222 # if defined key_trabbl 223 IF( nn_bbl_ldf == 1 ) THEN224 ahu_bbl(:,:) = ahu_bbl_tm (:,:) * r1_ndttrcp1225 ahv_bbl(:,:) = ahv_bbl_tm (:,:) * r1_ndttrcp1226 ENDIF227 IF( nn_bbl_adv == 1 ) THEN228 utr_bbl(:,:) = utr_bbl_tm (:,:) * r1_ndttrcp1229 vtr_bbl(:,:) = vtr_bbl_tm (:,:) * r1_ndttrcp1230 ENDIF231 # endif 247 IF( ln_trabbl ) THEN 248 IF( nn_bbl_ldf == 1 ) THEN 249 ahu_bbl(:,:) = ahu_bbl_tm (:,:) * r1_ndttrcp1 250 ahv_bbl(:,:) = ahv_bbl_tm (:,:) * r1_ndttrcp1 251 ENDIF 252 IF( nn_bbl_adv == 1 ) THEN 253 utr_bbl(:,:) = utr_bbl_tm (:,:) * r1_ndttrcp1 254 vtr_bbl(:,:) = vtr_bbl_tm (:,:) * r1_ndttrcp1 255 ENDIF 256 ENDIF 232 257 ENDIF 233 258 ! … … 245 270 tsn (ji,jj,jk,jp_sal) = tsn_tm (ji,jj,jk,jp_sal) * z1_ne3t 246 271 rhop (ji,jj,jk) = rhop_tm (ji,jj,jk) * z1_ne3t 247 !!gm : BUG? ==>> for avt & avs I don't understand the division by e3w 248 avt (ji,jj,jk) = avt_tm (ji,jj,jk) * z1_ne3w 249 # if defined key_zdfddm 272 !!gm : BUG ==>> for avs I don't understand the division by e3w 250 273 avs (ji,jj,jk) = avs_tm (ji,jj,jk) * z1_ne3w 251 # endif252 274 END DO 253 275 END DO … … 264 286 ENDIF 265 287 ! 266 IF( nn_timing == 1 ) CALL timing_st art('trc_sub_stp')288 IF( nn_timing == 1 ) CALL timing_stop('trc_sub_stp') 267 289 ! 268 290 END SUBROUTINE trc_sub_stp … … 297 319 rhop_tm (:,:,:) = rhop (:,:,:) * e3t_n(:,:,:) 298 320 !!gm : BUG? ==>> for avt & avs I don't understand the division by e3w 299 avt_tm (:,:,:) = avt (:,:,:) * e3w_n(:,:,:)300 # if defined key_zdfddm301 321 avs_tm (:,:,:) = avs (:,:,:) * e3w_n(:,:,:) 302 # endif303 322 IF( l_ldfslp ) THEN 304 323 wslpi_tm(:,:,:) = wslpi(:,:,:) … … 313 332 314 333 ! Physics variables that are set after initialization: 315 fr_i_tm (:,:) = 0._wp316 emp_tm (:,:) = 0._wp334 fr_i_tm (:,:) = 0._wp 335 emp_tm (:,:) = 0._wp 317 336 fmmflx_tm(:,:) = 0._wp 318 qsr_tm (:,:) = 0._wp319 wndm_tm (:,:) = 0._wp320 # if defined key_trabbl 321 IF( nn_bbl_ldf == 1 ) THEN322 ahu_bbl_tm(:,:) = 0._wp323 ahv_bbl_tm(:,:) = 0._wp324 ENDIF325 IF( nn_bbl_adv == 1 ) THEN326 utr_bbl_tm(:,:) = 0._wp327 vtr_bbl_tm(:,:) = 0._wp328 ENDIF329 # endif 337 qsr_tm (:,:) = 0._wp 338 wndm_tm (:,:) = 0._wp 339 IF( ln_trabbl ) THEN 340 IF( nn_bbl_ldf == 1 ) THEN 341 ahu_bbl_tm(:,:) = 0._wp 342 ahv_bbl_tm(:,:) = 0._wp 343 ENDIF 344 IF( nn_bbl_adv == 1 ) THEN 345 utr_bbl_tm(:,:) = 0._wp 346 vtr_bbl_tm(:,:) = 0._wp 347 ENDIF 348 ENDIF 330 349 ! 331 350 IF( nn_timing == 1 ) CALL timing_stop('trc_sub_ini') … … 354 373 tsn (:,:,:,:) = tsn_temp (:,:,:,:) 355 374 rhop (:,:,:) = rhop_temp (:,:,:) 356 avt (:,:,:) = avt_temp (:,:,:)357 # if defined key_zdfddm358 375 avs (:,:,:) = avs_temp (:,:,:) 359 # endif360 376 IF( l_ldfslp ) THEN 361 377 wslpi (:,:,:)= wslpi_temp (:,:,:) … … 377 393 qsr (:,:) = qsr_temp (:,:) 378 394 wndm (:,:) = wndm_temp (:,:) 379 # if defined key_trabbl 380 IF( nn_bbl_ldf == 1 ) THEN381 ahu_bbl(:,:) = ahu_bbl_temp(:,:)382 ahv_bbl(:,:) = ahv_bbl_temp(:,:)383 ENDIF384 IF( nn_bbl_adv == 1 ) THEN385 utr_bbl(:,:) = utr_bbl_temp(:,:)386 vtr_bbl(:,:) = vtr_bbl_temp(:,:)387 ENDIF388 # endif 395 IF( ln_trabbl ) THEN 396 IF( nn_bbl_ldf == 1 ) THEN 397 ahu_bbl(:,:) = ahu_bbl_temp(:,:) 398 ahv_bbl(:,:) = ahv_bbl_temp(:,:) 399 ENDIF 400 IF( nn_bbl_adv == 1 ) THEN 401 utr_bbl(:,:) = utr_bbl_temp(:,:) 402 vtr_bbl(:,:) = vtr_bbl_temp(:,:) 403 ENDIF 404 ENDIF 389 405 ! 390 406 hdivn (:,:,:) = hdivn_temp (:,:,:) … … 396 412 tsn_tm (:,:,:,jp_sal) = tsn (:,:,:,jp_sal) * e3t_n(:,:,:) 397 413 rhop_tm (:,:,:) = rhop (:,:,:) * e3t_n(:,:,:) 398 avt_tm (:,:,:) = avt (:,:,:) * e3w_n(:,:,:)399 # if defined key_zdfddm400 414 avs_tm (:,:,:) = avs (:,:,:) * e3w_n(:,:,:) 401 # endif402 415 IF( l_ldfslp ) THEN 403 416 uslp_tm (:,:,:) = uslp (:,:,:) … … 418 431 qsr_tm (:,:) = qsr (:,:) 419 432 wndm_tm (:,:) = wndm (:,:) 420 # if defined key_trabbl 421 IF( nn_bbl_ldf == 1 ) THEN422 ahu_bbl_tm(:,:) = ahu_bbl(:,:)423 ahv_bbl_tm(:,:) = ahv_bbl(:,:)424 ENDIF425 IF( nn_bbl_adv == 1 ) THEN426 utr_bbl_tm(:,:) = utr_bbl(:,:)427 vtr_bbl_tm(:,:) = vtr_bbl(:,:)428 ENDIF429 # endif 433 IF( ln_trabbl ) THEN 434 IF( nn_bbl_ldf == 1 ) THEN 435 ahu_bbl_tm(:,:) = ahu_bbl(:,:) 436 ahv_bbl_tm(:,:) = ahv_bbl(:,:) 437 ENDIF 438 IF( nn_bbl_adv == 1 ) THEN 439 utr_bbl_tm(:,:) = utr_bbl(:,:) 440 vtr_bbl_tm(:,:) = vtr_bbl(:,:) 441 ENDIF 442 ENDIF 430 443 ! 431 444 ! … … 530 543 !!------------------------------------------------------------------- 531 544 USE lib_mpp, ONLY: ctl_warn 532 INTEGER :: ierr 533 !!------------------------------------------------------------------- 534 ! 535 ALLOCATE( un_temp(jpi,jpj,jpk) , vn_temp(jpi,jpj,jpk) , & 536 & wn_temp(jpi,jpj,jpk) , avt_temp(jpi,jpj,jpk) , & 537 & rhop_temp(jpi,jpj,jpk) , rhop_tm(jpi,jpj,jpk) , & 538 & sshn_temp(jpi,jpj) , sshb_temp(jpi,jpj) , & 539 & ssha_temp(jpi,jpj) , & 540 #if defined key_trabbl 541 & ahu_bbl_temp(jpi,jpj) , ahv_bbl_temp(jpi,jpj), & 542 & utr_bbl_temp(jpi,jpj) , vtr_bbl_temp(jpi,jpj), & 543 #endif 544 & rnf_temp(jpi,jpj) , h_rnf_temp(jpi,jpj) , & 545 & tsn_temp(jpi,jpj,jpk,2) , emp_b_temp(jpi,jpj), & 546 & emp_temp(jpi,jpj) , fmmflx_temp(jpi,jpj), & 547 & hmld_temp(jpi,jpj) , qsr_temp(jpi,jpj) , & 548 & fr_i_temp(jpi,jpj) , fr_i_tm(jpi,jpj) , & 549 & wndm_temp(jpi,jpj) , wndm_tm(jpi,jpj) , & 550 # if defined key_zdfddm 551 & avs_tm(jpi,jpj,jpk) , avs_temp(jpi,jpj,jpk) , & 552 # endif 553 & hdivn_temp(jpi,jpj,jpk) , hdivb_temp(jpi,jpj,jpk), & 554 & un_tm(jpi,jpj,jpk) , vn_tm(jpi,jpj,jpk) , & 555 & avt_tm(jpi,jpj,jpk) , & 556 & sshn_tm(jpi,jpj) , sshb_hold(jpi,jpj) , & 557 & tsn_tm(jpi,jpj,jpk,2) , & 558 & emp_tm(jpi,jpj) , fmmflx_tm(jpi,jpj) , & 559 & emp_b_hold(jpi,jpj) , & 560 & hmld_tm(jpi,jpj) , qsr_tm(jpi,jpj) , & 561 #if defined key_trabbl 562 & ahu_bbl_tm(jpi,jpj) , ahv_bbl_tm(jpi,jpj), & 563 & utr_bbl_tm(jpi,jpj) , vtr_bbl_tm(jpi,jpj), & 564 #endif 565 & rnf_tm(jpi,jpj) , h_rnf_tm(jpi,jpj) , STAT=trc_sub_alloc ) 545 INTEGER :: ierr(3) 546 !!------------------------------------------------------------------- 547 ! 548 ierr(:) = 0 549 ! 550 ALLOCATE( un_temp(jpi,jpj,jpk) , vn_temp(jpi,jpj,jpk) , & 551 & wn_temp(jpi,jpj,jpk) , & 552 & rhop_temp(jpi,jpj,jpk) , rhop_tm(jpi,jpj,jpk) , & 553 & sshn_temp(jpi,jpj) , sshb_temp(jpi,jpj) , & 554 & ssha_temp(jpi,jpj) , & 555 & rnf_temp(jpi,jpj) , h_rnf_temp(jpi,jpj) , & 556 & tsn_temp(jpi,jpj,jpk,2) , emp_b_temp(jpi,jpj) , & 557 & emp_temp(jpi,jpj) , fmmflx_temp(jpi,jpj) , & 558 & hmld_temp(jpi,jpj) , qsr_temp(jpi,jpj) , & 559 & fr_i_temp(jpi,jpj) , fr_i_tm(jpi,jpj) , & 560 & wndm_temp(jpi,jpj) , wndm_tm(jpi,jpj) , & 561 & avs_tm(jpi,jpj,jpk) , avs_temp(jpi,jpj,jpk) , & 562 & hdivn_temp(jpi,jpj,jpk) , hdivb_temp(jpi,jpj,jpk), & 563 & un_tm(jpi,jpj,jpk) , vn_tm(jpi,jpj,jpk) , & 564 & sshn_tm(jpi,jpj) , sshb_hold(jpi,jpj) , & 565 & tsn_tm(jpi,jpj,jpk,2) , & 566 & emp_tm(jpi,jpj) , fmmflx_tm(jpi,jpj) , & 567 & emp_b_hold(jpi,jpj) , & 568 & hmld_tm(jpi,jpj) , qsr_tm(jpi,jpj) , & 569 & rnf_tm(jpi,jpj) , h_rnf_tm(jpi,jpj) , STAT=ierr(1) ) 570 ! 571 IF( l_ldfslp ) THEN 572 ALLOCATE( uslp_temp(jpi,jpj,jpk) , wslpi_temp(jpi,jpj,jpk), & 573 & vslp_temp(jpi,jpj,jpk) , wslpj_temp(jpi,jpj,jpk), & 574 & uslp_tm (jpi,jpj,jpk) , wslpi_tm (jpi,jpj,jpk), & 575 & vslp_tm (jpi,jpj,jpk) , wslpj_tm (jpi,jpj,jpk), STAT=ierr(2) ) 576 ENDIF 577 IF( ln_trabbl ) THEN 578 ALLOCATE( ahu_bbl_temp(jpi,jpj) , utr_bbl_temp(jpi,jpj) , & 579 & ahv_bbl_temp(jpi,jpj) , vtr_bbl_temp(jpi,jpj) , & 580 & ahu_bbl_tm (jpi,jpj) , utr_bbl_tm (jpi,jpj) , & 581 & ahv_bbl_tm (jpi,jpj) , vtr_bbl_tm (jpi,jpj) , STAT=ierr(3) ) 582 ENDIF 583 ! 584 trc_sub_alloc = MAXVAL( ierr ) 566 585 ! 567 586 IF( trc_sub_alloc /= 0 ) CALL ctl_warn('trc_sub_alloc: failed to allocate arrays') 568 !569 IF( l_ldfslp ) THEN570 ALLOCATE( uslp_temp(jpi,jpj,jpk) , wslpi_temp(jpi,jpj,jpk), &571 & vslp_temp(jpi,jpj,jpk) , wslpj_temp(jpi,jpj,jpk), &572 & uslp_tm (jpi,jpj,jpk) , wslpi_tm (jpi,jpj,jpk), &573 & vslp_tm (jpi,jpj,jpk) , wslpj_tm (jpi,jpj,jpk), STAT=trc_sub_alloc )574 ENDIF575 !576 IF( trc_sub_alloc /= 0 ) CALL ctl_warn('trc_sub_alloc: failed to allocate ldf_slp arrays')577 587 ! 578 588 END FUNCTION trc_sub_alloc
Note: See TracChangeset
for help on using the changeset viewer.