Changeset 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld.F90
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld.F90
r2715 r3294 38 38 USE restart ! for lrst_oce 39 39 USE lib_mpp ! MPP library 40 USE wrk_nemo ! Memory allocation 40 41 41 42 IMPLICIT NONE … … 93 94 !! surface and the control surface is called "mixed-layer" 94 95 !!---------------------------------------------------------------------- 95 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released96 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_10 ! 2D workspace97 96 ! 98 97 INTEGER , INTENT( in ) :: ktrd ! ocean trend index … … 102 101 ! 103 102 INTEGER :: ji, jj, jk, isum 104 !!---------------------------------------------------------------------- 105 106 IF( wrk_in_use(2, 10) ) THEN 107 CALL ctl_stop('trd_mld_zint : requested workspace arrays unavailable') ; RETURN 108 ENDIF 103 REAL(wp), POINTER, DIMENSION(:,:) :: zvlmsk 104 !!---------------------------------------------------------------------- 105 106 CALL wrk_alloc( jpi, jpj, zvlmsk ) 109 107 110 108 ! I. Definition of control surface and associated fields … … 195 193 END SELECT 196 194 ! 197 IF( wrk_not_released(2, 10) ) CALL ctl_stop('trd_mld_zint: failed to release workspace arrays')195 CALL wrk_dealloc( jpi, jpj, zvlmsk ) 198 196 ! 199 197 END SUBROUTINE trd_mld_zint … … 247 245 !! - See NEMO documentation (in preparation) 248 246 !!---------------------------------------------------------------------- 249 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released250 USE wrk_nemo, ONLY: ztmltot => wrk_2d_1, zsmltot => wrk_2d_2 ! dT/dt over the anlysis window (including Asselin)251 USE wrk_nemo, ONLY: ztmlres => wrk_2d_3, zsmlres => wrk_2d_4 ! residual = dh/dt entrainment term252 USE wrk_nemo, ONLY: ztmlatf => wrk_2d_5, zsmlatf => wrk_2d_6 ! needed for storage only253 USE wrk_nemo, ONLY: ztmltot2 => wrk_2d_7, ztmlres2 => wrk_2d_8, ztmltrdm2 => wrk_2d_9 ! \ working arrays to diagnose the trends254 USE wrk_nemo, ONLY: zsmltot2 => wrk_2d_10, zsmlres2 => wrk_2d_11, zsmltrdm2 => wrk_2d_12 ! > associated with the time meaned ML T & S255 USE wrk_nemo, ONLY: ztmlatf2 => wrk_2d_13, zsmlatf2 => wrk_2d_14256 USE wrk_nemo, ONLY: wrk_3d_1, wrk_3d_2 ! /257 247 ! 258 248 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 261 251 LOGICAL :: lldebug = .TRUE. 262 252 REAL(wp) :: zavt, zfn, zfn2 253 ! ! z(ts)mltot : dT/dt over the anlysis window (including Asselin) 254 ! ! z(ts)mlres : residual = dh/dt entrainment term 255 REAL(wp), POINTER, DIMENSION(:,: ) :: ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf 256 REAL(wp), POINTER, DIMENSION(:,: ) :: ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 263 257 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmltrd2, zsmltrd2 ! only needed for mean diagnostics 264 258 #if defined key_dimgout … … 267 261 #endif 268 262 !!---------------------------------------------------------------------- 269 270 ! Check that the workspace arrays are all OK to be used 271 IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 272 wrk_in_use(3, 1,2) ) THEN 273 CALL ctl_stop('trd_mld : requested workspace arrays unavailable') ; RETURN 274 ELSE IF(jpltrd > jpk) THEN 275 ! ARPDBG, is this reasonable or will this cause trouble in the future? 276 CALL ctl_stop('trd_mld : no. of mixed-layer trends (jpltrd) exceeds no. of model levels so cannot use 3D workspaces.') 277 RETURN 278 END IF 279 ! Set-up pointers into sub-arrays of 3d-workspaces 280 ztmltrd2 => wrk_3d_1(1:,:,1:jpltrd) 281 zsmltrd2 => wrk_3d_2(1:,:,1:jpltrd) 263 264 CALL wrk_alloc( jpi, jpj, ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf ) 265 CALL wrk_alloc( jpi, jpj, ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 ) 266 CALL wrk_alloc( jpi, jpj, jpltrd, ztmltrd2, zsmltrd2 ) 282 267 283 268 ! ====================================================================== … … 293 278 zavt = avt(ji,jj,ik) 294 279 tmltrd(ji,jj,jpmld_zdf) = - zavt / fse3w(ji,jj,ik) * tmask(ji,jj,ik) & 295 & * ( t n(ji,jj,ik-1) - tn(ji,jj,ik) ) &280 & * ( tsn(ji,jj,ik-1,jp_tem) - tsn(ji,jj,ik,jp_tem) ) & 296 281 & / MAX( 1., rmld(ji,jj) ) * tmask(ji,jj,1) 297 282 zavt = fsavs(ji,jj,ik) 298 283 smltrd(ji,jj,jpmld_zdf) = - zavt / fse3w(ji,jj,ik) * tmask(ji,jj,ik) & 299 & * ( sn(ji,jj,ik-1) - sn(ji,jj,ik) ) &284 & * ( tsn(ji,jj,ik-1,jp_sal) - tsn(ji,jj,ik,jp_sal) ) & 300 285 & / MAX( 1., rmld(ji,jj) ) * tmask(ji,jj,1) 301 286 END DO … … 334 319 tml(:,:) = 0.e0 ; sml(:,:) = 0.e0 335 320 DO jk = 1, jpktrd - 1 336 tml(:,:) = tml(:,:) + wkx(:,:,jk) * t n(:,:,jk)337 sml(:,:) = sml(:,:) + wkx(:,:,jk) * sn(:,:,jk)321 tml(:,:) = tml(:,:) + wkx(:,:,jk) * tsn(:,:,jk,jp_tem) 322 sml(:,:) = sml(:,:) + wkx(:,:,jk) * tsn(:,:,jk,jp_sal) 338 323 END DO 339 324 … … 740 725 IF( lrst_oce ) CALL trd_mld_rst_write( kt ) 741 726 742 IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. &743 wrk_not_released(3, 1,2) ) &744 CALL ctl_stop('trd_mld : failed to release workspace arrays.')727 CALL wrk_dealloc( jpi, jpj, ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf ) 728 CALL wrk_dealloc( jpi, jpj, ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 ) 729 CALL wrk_dealloc( jpi, jpj, jpltrd, ztmltrd2, zsmltrd2 ) 745 730 ! 746 731 END SUBROUTINE trd_mld
Note: See TracChangeset
for help on using the changeset viewer.