Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
r2528 r2715 16 16 USE oce ! ocean dynamics and active tracers 17 17 USE dom_oce ! ocean space and time domain 18 USE phycst ! physical constants 18 19 USE trc_oce ! share passive tracers/Ocean variables 19 20 USE zdf_oce ! ocean vertical physics … … 23 24 USE in_out_manager ! I/O manager 24 25 USE iom ! I/O library 25 #if defined key_diaar526 USE phycst ! physical constants27 26 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 28 #endif 27 USE lib_mpp ! MPP library 29 28 30 29 IMPLICIT NONE 31 30 PRIVATE 32 31 33 PUBLIC tra_ldf_iso_grif ! routine called by traldf.F9034 35 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: psix_eiv36 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: psiy_eiv37 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE :: ah_wslp232 PUBLIC tra_ldf_iso_grif ! routine called by traldf.F90 33 34 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE :: psix_eiv, psiy_eiv !: eiv stream function (diag only) 35 REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE :: ah_wslp2 !: aeiv*w-slope^2 36 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE :: zdkt ! atypic workspace 38 37 39 38 !! * Substitutions … … 90 89 !! ** Action : Update pta arrays with the before rotated diffusion 91 90 !!---------------------------------------------------------------------- 92 USE oce, zftu => ua ! use ua as workspace 93 USE oce, zftv => va ! use va as workspace 94 !! 91 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 92 USE oce , ONLY: zftu => ua , zftv => va ! (ua,va) used as 3D workspace 93 USE wrk_nemo, ONLY: zdit => wrk_3d_6 , zdjt => wrk_3d_7 , ztfw => wrk_3d_8 ! 3D workspace 94 USE wrk_nemo, ONLY: z2d => wrk_2d_1 ! 2D workspace 95 ! 95 96 INTEGER , INTENT(in ) :: kt ! ocean time-step index 96 97 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 100 101 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 101 102 REAL(wp) , INTENT(in ) :: pahtb0 ! background diffusion coef 102 ! !103 ! 103 104 INTEGER :: ji, jj, jk,jn ! dummy loop indices 104 105 INTEGER :: ip,jp,kp ! dummy loop indices … … 107 108 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - 108 109 REAL(wp) :: zcoef0, zbtr ! - - 109 REAL(wp), DIMENSION(jpi,jpj,0:1) :: zdkt ! 2D+1 workspace 110 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdit, zdjt, ztfw ! 3D workspace 110 !REAL(wp), POINTER, DIMENSION(:,:,:) :: zdkt ! 2D+1 workspace 111 111 ! 112 112 REAL(wp) :: zslope_skew, zslope_iso, zslope2, zbu, zbv … … 114 114 REAL(wp) :: zah, zah_slp, zaei_slp 115 115 #if defined key_diaar5 116 REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace 117 REAL(wp) :: zztmp ! local scalar 116 REAL(wp) :: zztmp ! local scalar 118 117 #endif 119 118 !!---------------------------------------------------------------------- 119 120 IF( wrk_in_use(3, 6,7,8) .OR. wrk_in_use(2, 1) ) THEN 121 CALL ctl_stop('tra_ldf_iso_grif: requested workspace arrays unavailable.') ; RETURN 122 ENDIF 123 ! ARP - line below uses 'bounds re-mapping' which is only defined in 124 ! Fortran 2003 and up. We would be OK if code was written to use 125 ! zdkt(:,:,1:2) instead as then wouldn't need to re-map bounds. 126 ! As it is, we make zdkt a module array and allocate it in _alloc(). 127 !zdkt(1:jpi,1:jpj,0:1) => wrk_3d_9(:,:,1:2) 120 128 121 129 IF( kt == nit000 ) THEN … … 124 132 IF(lwp) WRITE(numout,*) ' WARNING: STILL UNDER TEST, NOT RECOMMENDED. USE AT YOUR OWN PERIL' 125 133 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 126 ALLOCATE( ah_wslp2(jpi,jpj,jpk) , STAT=ierr ) 127 IF( ierr > 0 ) THEN 128 CALL ctl_stop( 'tra_ldf_iso_grif : unable to allocate Griffies operator ah_wslp2 ' ) ; RETURN 129 ENDIF 134 ALLOCATE( ah_wslp2(jpi,jpj,jpk) , zdkt(jpi,jpj,0:1), STAT=ierr ) 135 IF( lk_mpp ) CALL mpp_sum ( ierr ) 136 IF( ierr > 0 ) CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate arrays') 130 137 IF( ln_traldf_gdia ) THEN 131 138 ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr ) 132 IF( ierr > 0 ) THEN 133 CALL ctl_stop( 'tra_ldf_iso_grif : unable to allocate Griffies operator diagnostics ' ) ; RETURN 134 ENDIF 139 IF( lk_mpp ) CALL mpp_sum ( ierr ) 140 IF( ierr > 0 ) CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate diagnostics') 135 141 ENDIF 136 142 ENDIF … … 342 348 END DO 343 349 ! 350 IF( wrk_not_released(3, 6,7,8) .OR. & 351 wrk_not_released(2, 1) ) CALL ctl_stop('tra_ldf_iso_grif: failed to release workspace arrays') 352 ! 344 353 END SUBROUTINE tra_ldf_iso_grif 345 354
Note: See TracChangeset
for help on using the changeset viewer.