Changeset 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRD
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/TRD
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90
r2781 r3294 26 26 USE eosbn2 ! equation of state 27 27 USE phycst ! physical constants 28 USE wrk_nemo ! Memory allocation 29 28 30 29 31 IMPLICIT NONE … … 106 108 ! 107 109 CASE( 'TRA' ) ! Tracers 108 t2(ktrd) = SUM( ptrd2dx(:,:) * e1e2t(:,:) * fse3t(:,:,1) * t n(:,:,1) )109 s2(ktrd) = SUM( ptrd2dy(:,:) * e1e2t(:,:) * fse3t(:,:,1) * sn(:,:,1) )110 t2(ktrd) = SUM( ptrd2dx(:,:) * e1e2t(:,:) * fse3t(:,:,1) * tsn(:,:,1,jp_tem) ) 111 s2(ktrd) = SUM( ptrd2dy(:,:) * e1e2t(:,:) * fse3t(:,:,1) * tsn(:,:,1,jp_sal) ) 110 112 ! 111 113 END SELECT … … 184 186 s2(ktrd) = 0._wp 185 187 DO jk = 1, jpkm1 186 t2(ktrd) = t2(ktrd) + SUM( ptrd3dx(:,:,jk) * t n(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) )187 s2(ktrd) = s2(ktrd) + SUM( ptrd3dy(:,:,jk) * sn(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) )188 t2(ktrd) = t2(ktrd) + SUM( ptrd3dx(:,:,jk) * tsn(:,:,jk,jp_tem) * e1e2t(:,:) * fse3t(:,:,jk) ) 189 s2(ktrd) = s2(ktrd) + SUM( ptrd3dy(:,:,jk) * tsn(:,:,jk,jp_sal) * e1e2t(:,:) * fse3t(:,:,jk) ) 188 190 END DO 189 191 ! … … 251 253 !! ** Purpose : write dynamic trends in ocean.output 252 254 !!---------------------------------------------------------------------- 253 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released254 USE wrk_nemo, ONLY: zkepe => wrk_3d_1 , zkx => wrk_3d_2 ! 3D workspace255 USE wrk_nemo, ONLY: zky => wrk_3d_3 , zkz => wrk_3d_4 ! - -256 255 ! 257 256 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 259 258 INTEGER :: ji, jj, jk ! dummy loop indices 260 259 REAL(wp) :: zcof ! local scalar 261 !!---------------------------------------------------------------------- 262 263 IF( wrk_in_use(3, 1,2,3,4) ) THEN 264 CALL ctl_stop('trd_dwr: requested workspace arrays unavailable') ; RETURN 265 ENDIF 260 REAL(wp), POINTER, DIMENSION(:,:,:) :: zkx, zky, zkz, zkepe 261 !!---------------------------------------------------------------------- 262 263 CALL wrk_alloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 266 264 267 265 ! I. Momentum trends … … 439 437 ENDIF 440 438 ! 441 IF( wrk_not_released(3, 1,2,3,4) ) CALL ctl_stop('trd_dwr: failed to release workspace arrays')439 CALL wrk_dealloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 442 440 ! 443 441 END SUBROUTINE trd_dwr -
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 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdmod.F90
r2715 r3294 24 24 USE trdmld ! ocean active mixed layer tracers trends 25 25 USE in_out_manager ! I/O manager 26 USE lib_mpp ! MPP library 26 USE lib_mpp ! MPP library 27 USE wrk_nemo ! Memory allocation 28 27 29 28 30 IMPLICIT NONE … … 52 54 !! integral constraints 53 55 !!---------------------------------------------------------------------- 54 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released55 USE wrk_nemo, ONLY: ztswu => wrk_2d_1, &56 ztswv => wrk_2d_2, &57 ztbfu => wrk_2d_3, &58 ztbfv => wrk_2d_4, &59 z2dx => wrk_2d_5, &60 z2dy => wrk_2d_661 56 ! 62 57 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend … … 67 62 !! 68 63 INTEGER :: ji, jj ! dummy loop indices 69 !!---------------------------------------------------------------------- 70 71 IF(wrk_in_use(2, 1,2,3,4,5,6))THEN 72 CALL ctl_warn('trd_mod: Requested workspace arrays already in use.') ; RETURN 73 END IF 64 REAL(wp), POINTER, DIMENSION(:,:) :: ztswu, ztswv, ztbfu, ztbfv, z2dx, z2dy 65 !!---------------------------------------------------------------------- 66 67 CALL wrk_alloc( jpi, jpj, ztswu, ztswv, ztbfu, ztbfv, z2dx, z2dy ) 74 68 75 69 z2dx(:,:) = 0._wp ; z2dy(:,:) = 0._wp ! initialization of workspace arrays … … 101 95 CASE ( jptra_trd_zad ) ; CALL trd_icp( ptrdx, ptrdy, jpicpt_zad, ctype ) ! z- vertical adv 102 96 CALL trd_icp( ptrdx, ptrdy, jpicpt_zad, ctype ) 103 ! compute the surface flux condition wn(:,:,1)*t n(:,:,1)104 z2dx(:,:) = wn(:,:,1)*t n(:,:,1)/fse3t(:,:,1)105 z2dy(:,:) = wn(:,:,1)* sn(:,:,1)/fse3t(:,:,1)97 ! compute the surface flux condition wn(:,:,1)*tsn(:,:,1,jp_tem) 98 z2dx(:,:) = wn(:,:,1)*tsn(:,:,1,jp_tem)/fse3t(:,:,1) 99 z2dy(:,:) = wn(:,:,1)*tsn(:,:,1,jp_sal)/fse3t(:,:,1) 106 100 CALL trd_icp( z2dx , z2dy , jpicpt_zl1, ctype ) ! 1st z- vertical adv 107 101 END SELECT … … 227 221 ENDIF 228 222 ! 229 IF( wrk_not_released(2, 1,2,3,4,5,6) ) CALL ctl_warn('trd_mod: Failed to release workspace arrays.')223 CALL wrk_dealloc( jpi, jpj, ztswu, ztswv, ztbfu, ztbfv, z2dx, z2dy ) 230 224 ! 231 225 END SUBROUTINE trd_mod -
trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
r2715 r3294 18 18 USE in_out_manager ! I/O manager 19 19 USE lib_mpp ! MPP library 20 USE wrk_nemo ! Memory allocation 21 20 22 21 23 IMPLICIT NONE … … 61 63 !! nn_ctls > 1 : use fixed level surface jk = nn_ctls 62 64 !!---------------------------------------------------------------------- 63 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released64 USE wrk_nemo, ONLY: ztrds => wrk_3d_10 ! 3D workspace65 65 ! 66 66 INTEGER , INTENT(in) :: kt ! time step … … 70 70 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: ptrd ! tracer trend or flux 71 71 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: pun ! velocity 72 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: ptra ! Tracer variable 73 ! !----------------------------------------------------------------------74 75 IF( wrk_in_use(3, 10) ) THEN76 CALL ctl_stop('trd_tra: requested workspace array unavailable') ; RETURN 77 ENDIF72 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: ptra ! Tracer variablea 73 ! 74 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrds 75 !!---------------------------------------------------------------------- 76 77 CALL wrk_alloc( jpi, jpj, jpk, ztrds ) 78 78 79 79 IF( .NOT. ALLOCATED( trdtx ) ) THEN ! allocate trdtra arrays … … 138 138 ENDIF 139 139 ! 140 IF( wrk_not_released(3, 10) ) CALL ctl_stop('trd_tra: failed to release workspace array')140 CALL wrk_dealloc( jpi, jpj, jpk, ztrds ) 141 141 ! 142 142 END SUBROUTINE trd_tra -
trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdvor.F90
r2715 r3294 27 27 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 28 28 USE lib_mpp ! MPP library 29 USE wrk_nemo ! Memory allocation 30 29 31 30 32 IMPLICIT NONE … … 107 109 !! trends output in netCDF format using ioipsl 108 110 !!---------------------------------------------------------------------- 109 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released110 USE wrk_nemo, ONLY: zudpvor => wrk_2d_1 , zvdpvor => wrk_2d_2 ! total cmulative trends111 111 ! 112 112 INTEGER , INTENT(in ) :: ktrd ! ocean trend index … … 116 116 INTEGER :: ji, jj ! dummy loop indices 117 117 INTEGER :: ikbu, ikbv ! local integers 118 !!----------------------------------------------------------------------119 120 IF( wrk_in_use(2, 1,2) ) THEN 121 CALL ctl_stop('trd_vor_zint_2d: requested workspace arrays unavailable') ; RETURN122 ENDIF123 124 ! Initialization 125 zudpvor(:,:) = 0._wp ; zvdpvor(:,:) = 0._wp 118 REAL(wp), POINTER, DIMENSION(:,:) :: zudpvor, zvdpvor ! total cmulative trends 119 !!---------------------------------------------------------------------- 120 121 ! 122 CALL wrk_alloc( jpi, jpj, zudpvor, zvdpvor ) ! Memory allocation 123 ! 124 125 zudpvor(:,:) = 0._wp ; zvdpvor(:,:) = 0._wp ! Initialisation 126 126 CALL lbc_lnk( putrdvor, 'U', -1. ) ; CALL lbc_lnk( pvtrdvor, 'V', -1. ) ! lateral boundary condition 127 127 … … 167 167 ENDIF 168 168 ! 169 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('trd_vor_zint_2d : failed to release workspace arrays.')169 CALL wrk_dealloc( jpi, jpj, zudpvor, zvdpvor ) 170 170 ! 171 171 END SUBROUTINE trd_vor_zint_2d … … 199 199 !! trends output in netCDF format using ioipsl 200 200 !!---------------------------------------------------------------------- 201 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released202 USE wrk_nemo, ONLY: zubet => wrk_2d_1, zvbet => wrk_2d_2 ! Beta.V203 USE wrk_nemo, ONLY: zudpvor => wrk_2d_3, zvdpvor => wrk_2d_4 ! total cmulative trends204 201 ! 205 202 INTEGER , INTENT(in ) :: ktrd ! ocean trend index … … 208 205 ! 209 206 INTEGER :: ji, jj, jk ! dummy loop indices 207 REAL(wp), POINTER, DIMENSION(:,:) :: zubet , zvbet ! Beta.V 208 REAL(wp), POINTER, DIMENSION(:,:) :: zudpvor, zvdpvor ! total cmulative trends 210 209 !!---------------------------------------------------------------------- 211 210 212 IF( wrk_in_use(2, 1,2,3,4) ) THEN 213 CALL ctl_stop('trd_vor_zint_3d: requested workspace arrays unavailable.') ; RETURN 214 ENDIF 211 CALL wrk_alloc( jpi,jpj, zubet, zvbet, zudpvor, zvdpvor ) 215 212 216 213 ! Initialization … … 276 273 ENDIF 277 274 ! 278 IF( wrk_not_released(2, 1,2,3,4) ) CALL ctl_stop('trd_vor_zint_3d: failed to release workspace arrays')275 CALL wrk_dealloc( jpi,jpj, zubet, zvbet, zudpvor, zvdpvor ) 279 276 ! 280 277 END SUBROUTINE trd_vor_zint_3d … … 288 285 !! and make outputs (NetCDF or DIMG format) 289 286 !!---------------------------------------------------------------------- 290 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released291 USE wrk_nemo, ONLY: zun => wrk_2d_1 , zvn => wrk_2d_2 ! 2D workspace292 287 ! 293 288 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 296 291 INTEGER :: it, itmod ! local integers 297 292 REAL(wp) :: zmean ! local scalars 298 !!---------------------------------------------------------------------- 299 300 IF( wrk_in_use(2, 1,2) ) THEN 301 CALL ctl_stop('trd_vor: requested workspace arrays unavailable.') ; RETURN 302 ENDIF 293 REAL(wp), POINTER, DIMENSION(:,:) :: zun, zvn 294 !!---------------------------------------------------------------------- 295 296 CALL wrk_alloc( jpi, jpj, zun, zvn ) 303 297 304 298 ! ================= … … 467 461 IF( kt == nitend ) CALL histclo( nidvor ) 468 462 ! 469 IF( wrk_not_released(2, 1,2) ) CALL ctl_stop('trd_vor: failed to release workspace arrays')463 CALL wrk_dealloc( jpi, jpj, zun, zvn ) 470 464 ! 471 465 END SUBROUTINE trd_vor
Note: See TracChangeset
for help on using the changeset viewer.