Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90
r2528 r2715 8 8 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 9 9 !!---------------------------------------------------------------------- 10 #if defined key_zdftmx 10 #if defined key_zdftmx || defined key_esopa 11 11 !!---------------------------------------------------------------------- 12 12 !! 'key_zdftmx' Tidal vertical mixing … … 24 24 USE in_out_manager ! I/O manager 25 25 USE iom ! I/O Manager 26 USE lib_mpp ! MPP library 27 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 26 28 27 29 IMPLICIT NONE … … 30 32 PUBLIC zdf_tmx ! called in step module 31 33 PUBLIC zdf_tmx_init ! called in opa module 34 PUBLIC zdf_tmx_alloc ! called in nemogcm module 32 35 33 36 LOGICAL, PUBLIC, PARAMETER :: lk_zdftmx = .TRUE. !: tidal mixing flag … … 41 44 REAL(wp) :: rn_tfe_itf = 1. ! ITF tidal dissipation efficiency (St Laurent et al. 2002) 42 45 43 REAL(wp), DIMENSION(jpi,jpj):: en_tmx ! energy available for tidal mixing (W/m2)44 REAL(wp), DIMENSION(jpi,jpj):: mask_itf ! mask to use over Indonesian area45 REAL(wp), DIMENSION(jpi,jpj,jpk) :: az_tmx ! coefficient used to evaluate the tidal induced Kz46 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: en_tmx ! energy available for tidal mixing (W/m2) 47 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: mask_itf ! mask to use over Indonesian area 48 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: az_tmx ! coefficient used to evaluate the tidal induced Kz 46 49 47 50 !! * Substitutions … … 49 52 # include "vectopt_loop_substitute.h90" 50 53 !!---------------------------------------------------------------------- 51 !! NEMO/OPA 3.3 , NEMO Consortium (2010)54 !! NEMO/OPA 4.0 , NEMO Consortium (2011) 52 55 !! $Id$ 53 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 54 !!---------------------------------------------------------------------- 55 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 57 !!---------------------------------------------------------------------- 56 58 CONTAINS 59 60 INTEGER FUNCTION zdf_tmx_alloc() 61 !!---------------------------------------------------------------------- 62 !! *** FUNCTION zdf_tmx_alloc *** 63 !!---------------------------------------------------------------------- 64 ALLOCATE(en_tmx(jpi,jpj), mask_itf(jpi,jpj), az_tmx(jpi,jpj,jpk), STAT=zdf_tmx_alloc ) 65 ! 66 IF( lk_mpp ) CALL mpp_sum ( zdf_tmx_alloc ) 67 IF( zdf_tmx_alloc /= 0 ) CALL ctl_warn('zdf_tmx_alloc: failed to allocate arrays') 68 END FUNCTION zdf_tmx_alloc 69 57 70 58 71 SUBROUTINE zdf_tmx( kt ) … … 91 104 !!---------------------------------------------------------------------- 92 105 USE oce, zav_tide => ua ! use ua as workspace 106 USE wrk_nemo, ONLY: zkz => wrk_2d_1 93 107 !! 94 108 INTEGER, INTENT(in) :: kt ! ocean time-step … … 96 110 INTEGER :: ji, jj, jk ! dummy loop indices 97 111 REAL(wp) :: ztpc ! scalar workspace 98 REAL(wp), DIMENSION(jpi,jpj) :: zkz ! temporary 2D workspace 99 !!---------------------------------------------------------------------- 100 112 !!---------------------------------------------------------------------- 113 114 IF(wrk_in_use(2, 1))THEN 115 CALL ctl_stop('zdf_tmx : requested workspace array unavailable.') ; RETURN 116 END IF 101 117 ! ! ----------------------- ! 102 118 ! ! Standard tidal mixing ! (compute zav_tide) … … 160 176 IF(ln_ctl) CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 161 177 ! 178 IF(wrk_not_released(2, 1))THEN 179 CALL ctl_stop('zdf_tmx : failed to release workspace array.') 180 END IF 181 ! 162 182 END SUBROUTINE zdf_tmx 163 183 … … 183 203 !! References : Koch-Larrouy et al. 2007, GRL 184 204 !!---------------------------------------------------------------------- 205 USE wrk_nemo, ONLY: zkz => wrk_2d_5 206 USE wrk_nemo, ONLY: zsum1 => wrk_2d_2, zsum2 => wrk_2d_3, zsum => wrk_2d_4 207 USE wrk_nemo, ONLY: zempba_3d_1 => wrk_3d_1, zempba_3d_2 => wrk_3d_2 208 USE wrk_nemo, ONLY: zempba_3d => wrk_3d_3, zdn2dz => wrk_3d_4 209 USE wrk_nemo, ONLY: zavt_itf => wrk_3d_5 210 !! 185 211 INTEGER , INTENT(in ) :: kt ! ocean time-step 186 212 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pav ! Tidal mixing coef. … … 188 214 INTEGER :: ji, jj, jk ! dummy loop indices 189 215 REAL(wp) :: zcoef, ztpc ! temporary scalar 190 REAL(wp), DIMENSION(jpi,jpj) :: zkz ! 2D workspace 191 REAL(wp), DIMENSION(jpi,jpj) :: zsum1 , zsum2 , zsum ! - - 192 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zempba_3d_1, zempba_3d_2 ! 3D workspace 193 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zempba_3d , zdn2dz ! - - 194 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zavt_itf ! - - 195 !!---------------------------------------------------------------------- 196 216 !!---------------------------------------------------------------------- 217 ! 218 IF( wrk_in_use(2, 2,3,4,5) .OR. wrk_in_use(3, 1,2,3,4,5) )THEN 219 CALL ctl_stop('tmx_itf : requested workspace arrays unavailable.') 220 RETURN 221 END IF 197 222 ! ! compute the form function using N2 at each time step 198 223 zempba_3d_1(:,:,jpk) = 0.e0 … … 279 304 END DO 280 305 ! 306 IF( wrk_not_released(2, 2,3,4,5) .OR. & 307 wrk_not_released(3, 1,2,3,4,5) )THEN 308 CALL ctl_stop('tmx_itf : failed to release workspace arrays.') 309 END IF 310 ! 281 311 END SUBROUTINE tmx_itf 282 312 … … 317 347 !! Koch-Larrouy et al. 2007, GRL. 318 348 !!---------------------------------------------------------------------- 319 USE oce, zav_tide => ua ! use ua as workspace 320 !! 321 INTEGER :: ji, jj, jk ! dummy loop indices 322 INTEGER :: inum ! temporary logical unit 323 REAL(wp) :: ztpc, ze_z ! total power consumption 324 REAL(wp), DIMENSION(jpi,jpj) :: zem2, zek1 ! read M2 and K1 tidal energy 325 REAL(wp), DIMENSION(jpi,jpj) :: zkz ! total M2, K1 and S2 tidal energy 326 REAL(wp), DIMENSION(jpi,jpj) :: zfact ! used for vertical structure function 327 REAL(wp), DIMENSION(jpi,jpj) :: zhdep ! Ocean depth 328 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpc ! power consumption 349 USE oce , zav_tide => ua ! ua used as workspace 350 USE wrk_nemo, ONLY: zem2 => wrk_2d_1 ! read M2 and 351 USE wrk_nemo, ONLY: zek1 => wrk_2d_2 ! K1 tidal energy 352 USE wrk_nemo, ONLY: zkz => wrk_2d_3 ! total M2, K1 and S2 tidal energy 353 USE wrk_nemo, ONLY: zfact => wrk_2d_4 ! used for vertical structure function 354 USE wrk_nemo, ONLY: zhdep => wrk_2d_5 ! Ocean depth 355 USE wrk_nemo, ONLY: zpc => wrk_3d_1 ! power consumption 356 !! 357 INTEGER :: ji, jj, jk ! dummy loop indices 358 INTEGER :: inum ! local integer 359 REAL(wp) :: ztpc, ze_z ! local scalars 329 360 !! 330 361 NAMELIST/namzdf_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 331 362 !!---------------------------------------------------------------------- 363 364 IF( wrk_in_use(2, 1,2,3,4,5) .OR. wrk_in_use(3, 1) ) THEN 365 CALL ctl_stop('zdf_tmx_init : requested workspace arrays unavailable.') ; RETURN 366 END IF 332 367 333 368 REWIND( numnam ) ! Read Namelist namtmx : Tidal Mixing … … 347 382 ENDIF 348 383 384 ! ! allocate tmx arrays 385 IF( zdf_tmx_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_tmx_init : unable to allocate tmx arrays' ) 386 349 387 IF( ln_tmx_itf ) THEN ! read the Indonesian Through Flow mask 350 388 CALL iom_open('mask_itf',inum) … … 488 526 ENDIF 489 527 ! 528 IF(wrk_not_released(2, 1,2,3,4,5) .OR. & 529 wrk_not_released(3, 1) ) CALL ctl_stop( 'zdf_tmx_init : failed to release workspace arrays' ) 530 ! 490 531 END SUBROUTINE zdf_tmx_init 491 532
Note: See TracChangeset
for help on using the changeset viewer.