Changeset 2590 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF
- Timestamp:
- 2011-02-18T13:49:27+01:00 (13 years ago)
- Location:
- branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn.F90
r2528 r2590 207 207 REAL(wp), INTENT(in ) :: pwam ! width of inflection 208 208 REAL(wp), INTENT(in ) :: pbot ! bottom value (0<pbot<= 1) 209 REAL(wp), INTENT(in ), DIMENSION (jpk) :: pdep ! depth of the gridpoint (T, U, V, F)210 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: pah ! adimensional vertical profile209 REAL(wp), INTENT(in ), DIMENSION (:) :: pdep ! depth of the gridpoint (T, U, V, F) 210 REAL(wp), INTENT(inout), DIMENSION (:,:,:) :: pah ! adimensional vertical profile 211 211 !! 212 212 INTEGER :: jk ! dummy loop indices … … 249 249 REAL(wp), INTENT(in ) :: pwam ! width of inflection 250 250 REAL(wp), INTENT(in ) :: pbot ! bottom value (0<pbot<= 1) 251 REAL(wp), INTENT(in ), DIMENSION (jpi,jpj,jpk) :: pdep ! dep of the gridpoint (T, U, V, F)252 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: pah ! adimensional vertical profile251 REAL(wp), INTENT(in ), DIMENSION (:,:,:) :: pdep ! dep of the gridpoint (T, U, V, F) 252 REAL(wp), INTENT(inout), DIMENSION (:,:,:) :: pah ! adimensional vertical profile 253 253 !! 254 254 INTEGER :: jk ! dummy loop indices -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r2528 r2590 145 145 !! * Modules used 146 146 USE ldftra_oce, ONLY : aht0 147 147 USE wrk_nemo, ONLY: iwrk_use, iwrk_release 148 USE wrk_nemo, ONLY: icof => iwrk_2d_1 148 149 !! * Arguments 149 150 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout … … 155 156 INTEGER :: ifreq, il1, il2, ij, ii 156 157 INTEGER, DIMENSION(jpidta,jpidta) :: idata 157 INTEGER, DIMENSION(jpi ,jpj ) :: icof158 158 159 159 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk … … 161 161 CHARACTER (len=15) :: clexp 162 162 !!---------------------------------------------------------------------- 163 164 IF(.not. iwrk_use(2, 1))THEN 165 CALL ctl_stop('ldf_dyn_c2d_orca: ERROR: requested workspace array is unavailable.') 166 RETURN 167 END IF 163 168 164 169 IF(lwp) WRITE(numout,*) … … 288 293 ENDIF 289 294 295 IF(.not. iwrk_release(2, 1))THEN 296 CALL ctl_stop('ldf_dyn_c2d_orca: ERROR: failed to release workspace array.') 297 END IF 298 290 299 END SUBROUTINE ldf_dyn_c2d_orca 291 300 … … 307 316 !! * Modules used 308 317 USE ldftra_oce, ONLY : aht0 318 USE wrk_nemo, ONLY: iwrk_use, iwrk_release 319 USE wrk_nemo, ONLY: icof => iwrk_2d_1 309 320 310 321 !! * Arguments … … 317 328 INTEGER :: ifreq, il1, il2, ij, ii 318 329 INTEGER, DIMENSION(jpidta,jpidta) :: idata 319 INTEGER, DIMENSION(jpi ,jpj ) :: icof320 330 321 331 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk, zam20s … … 323 333 CHARACTER (len=15) :: clexp 324 334 !!---------------------------------------------------------------------- 335 336 IF(.not. iwrk_use(2, 1))THEN 337 CALL ctl_stop('ldf_dyn_c2d_orca_R1: ERROR: requested workspace array is unavailable.') 338 RETURN 339 END IF 325 340 326 341 IF(lwp) WRITE(numout,*) … … 457 472 ENDIF 458 473 474 IF(.not. iwrk_release(2, 1))THEN 475 CALL ctl_stop('ldf_dyn_c2d_orca_R1: ERROR: failed to release workspace array.') 476 END IF 477 459 478 END SUBROUTINE ldf_dyn_c2d_orca_R1 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r2528 r2590 27 27 !!---------------------------------------------------------------------- 28 28 USE ldftra_oce, ONLY : aht0 29 USE wrk_nemo, ONLY: wrk_use, wrk_release 30 USE wrk_nemo, ONLY: zcoef => wrk_1d_2 29 31 !! 30 32 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout … … 40 42 zetmax, zefmax, & 41 43 zeumax, zevmax 42 REAL(wp), DIMENSION(jpk) :: zcoef ! temporary workspace 43 !!---------------------------------------------------------------------- 44 !!---------------------------------------------------------------------- 45 46 IF(.not. wrk_use(1,2))THEN 47 CALL ctl_stop('ldf_dyn_c3d: ERROR: requested workspace array unavailable.') 48 RETURN 49 END IF 44 50 45 51 IF(lwp) WRITE(numout,*) … … 182 188 ENDIF 183 189 190 IF(.not. wrk_release(1,2))THEN 191 CALL ctl_stop('ldf_dyn_c3d: ERROR: failed to release workspace array.') 192 END IF 193 184 194 END SUBROUTINE ldf_dyn_c3d 185 195 … … 194 204 !!---------------------------------------------------------------------- 195 205 USE ldftra_oce, ONLY : aht0 206 USE wrk_nemo, ONLY: wrk_use, wrk_release, iwrk_use, iwrk_release 207 USE wrk_nemo, ONLY: icof => iwrk_2d_1 208 USE wrk_nemo, ONLY: zahm0 => wrk_2d_1 209 USE wrk_nemo, ONLY: zcoef => wrk_1d_1 196 210 !! 197 211 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout … … 203 217 INTEGER :: ifreq, il1, il2, ij, ii 204 218 INTEGER, DIMENSION(jpidta, jpjdta) :: idata 205 INTEGER, DIMENSION(jpi , jpj ) :: icof206 219 207 220 REAL(wp) :: & 208 221 zahmeq, zcoff, zcoft, zmsk, & ! ??? 209 222 zemax, zemin, zeref, zahmm 210 REAL(wp), DIMENSION(jpi,jpj) :: zahm0211 REAL(wp), DIMENSION(jpk) :: zcoef212 223 213 224 CHARACTER (len=15) :: clexp 214 225 !!---------------------------------------------------------------------- 226 227 IF( (.not. iwrk_use(2,1)) .OR. (.not. wrk_use(2,1)) .OR. & 228 (.not. wrk_use(1,1)))THEN 229 CALL ctl_stop('ldf_dyn_c3d_orca: ERROR: requested workspace arrays are unavailable.') 230 RETURN 231 END IF 215 232 216 233 IF(lwp) WRITE(numout,*) … … 457 474 ENDIF 458 475 476 IF( (.not. iwrk_release(2,1)) .OR. (.not. wrk_release(2,1)) .OR. & 477 (.not. wrk_release(1,1)))THEN 478 CALL ctl_stop('ldf_dyn_c3d_orca: ERROR: failed to release workspace arrays.') 479 END IF 480 459 481 END SUBROUTINE ldf_dyn_c3d_orca -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90
r2528 r2590 23 23 24 24 #if defined key_dynldf_c3d 25 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: ahm1, ahm2, ahm3, ahm4 ! ** 3D coefficients **25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ahm1, ahm2, ahm3, ahm4 ! ** 3D coefficients ** 26 26 #elif defined key_dynldf_c2d 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj):: ahm1, ahm2, ahm3, ahm4 ! ** 2D coefficients **27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahm1, ahm2, ahm3, ahm4 ! ** 2D coefficients ** 28 28 #elif defined key_dynldf_c1d 29 29 REAL(wp), PUBLIC, DIMENSION(jpk) :: ahm1, ahm2, ahm3, ahm4 ! ** 2D coefficients ** … … 37 37 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 38 38 !!====================================================================== 39 CONTAINS 40 41 FUNCTION ldfdyn_oce_alloc() 42 !!---------------------------------------------------------------------- 43 !!---------------------------------------------------------------------- 44 IMPLICIT none 45 INTEGER :: ldfdyn_oce_alloc 46 47 ldfdyn_oce_alloc = 0 48 49 #if defined key_dynldf_c3d 50 ALLOCATE(ahm1(jpi,jpj,jpk), ahm2(jpi,jpj,jpk), ahm3(jpi,jpj,jpk), & 51 ahm4(jpi,jpj,jpk), Stat=ldfdyn_oce_alloc) 52 #elif defined key_dynldf_c2d 53 ALLOCATE(ahm1(jpi,jpj), ahm2(jpi,jpj), ahm3(jpi,jpj), & 54 ahm4(jpi,jpj), Stat=ldfdyn_oce_alloc) 55 #elif defined key_dynldf_c1d 56 ALLOCATE(ahm1(jpk), ahm2(jpk), ahm3(jpk), & 57 ahm4(jpk), Stat=ldfdyn_oce_alloc) 58 #endif 59 60 END FUNCTION ldfdyn_oce_alloc 61 62 !!---------------------------------------------------------------------- 63 39 64 END MODULE ldfdyn_oce -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfeiv.F90
r2528 r2590 53 53 !! - wslpi, wslpj : i- and j-slopes of neutral surfaces at w-points. 54 54 !!---------------------------------------------------------------------- 55 USE wrk_nemo, ONLY: wrk_use, wrk_release 56 USE wrk_nemo, ONLY: zn => wrk_2d_1, zah => wrk_2d_2, & 57 zhw => wrk_2d_3, zross => wrk_2d_4 58 !! 55 59 INTEGER, INTENT(in) :: kt ! ocean time-step inedx 56 60 !! 57 61 INTEGER :: ji, jj, jk ! dummy loop indices 58 62 REAL(wp) :: zfw, ze3w, zn2, zf20, zaht, zaht_min ! temporary scalars 59 REAL(wp), DIMENSION(jpi,jpj) :: zn, zah, zhw, zross ! 2D workspace60 63 !!---------------------------------------------------------------------- 61 64 65 IF(.not. wrk_use(2, 1,2,3,4))THEN 66 CALL ctl_stop('ldf_eiv: ERROR: requested workspace arrays are unavailable.') 67 RETURN 68 END IF 69 62 70 IF( kt == nit000 ) THEN 63 71 IF(lwp) WRITE(numout,*) … … 235 243 CALL iom_put( "aht2d" , ahtw ) ! lateral eddy diffusivity 236 244 CALL iom_put( "aht2d_eiv", aeiw ) ! EIV lateral eddy diffusivity 245 ! 246 IF(.not. wrk_release(2, 1,2,3,4))THEN 247 CALL ctl_stop('ldf_eiv: ERROR: failed to release workspace arrays.') 248 END IF 237 249 ! 238 250 END SUBROUTINE ldf_eiv … … 244 256 CONTAINS 245 257 SUBROUTINE ldf_eiv( kt ) ! Empty routine 258 INTEGER :: kt 246 259 WRITE(*,*) 'ldf_eiv: You should not have seen this print! error?', kt 247 260 END SUBROUTINE ldf_eiv -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r2528 r2590 38 38 PUBLIC ldf_slp_grif ! routine called by step.F90 39 39 PUBLIC ldf_slp_init ! routine called by opa.F90 40 PUBLIC ldf_slp_alloc ! routine called by nemo_init->nemo_alloc 40 41 41 42 LOGICAL , PUBLIC, PARAMETER :: lk_ldfslp = .TRUE. !: slopes flag 42 43 ! !! Madec operator 43 REAL(wp), PUBLIC, DIMENSION(:,:,:) , ALLOCATABLE:: uslp, wslpi !: i_slope at U- and W-points44 REAL(wp), PUBLIC, DIMENSION(:,:,:) , ALLOCATABLE:: vslp, wslpj !: j-slope at V- and W-points45 ! 46 REAL(wp), PUBLIC, DIMENSION(:,:,:) , ALLOCATABLE:: wslp2 !: wslp**2 from Griffies quarter cells47 REAL(wp), PUBLIC, DIMENSION(:,:,:,:,:), ALLOCATABLE:: triadi_g, triadj_g !: skew flux slopes relative to geopotentials48 REAL(wp), PUBLIC, DIMENSION(:,:,:,:,:), ALLOCATABLE:: triadi , triadj !: isoneutral slopes relative to model-coordinate44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp, wslpi !: i_slope at U- and W-points 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vslp, wslpj !: j-slope at V- and W-points 46 ! !! Griffies operator 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wslp2 !: wslp**2 from Griffies quarter cells 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: triadi_g, triadj_g !: skew flux slopes relative to geopotentials 49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: triadi , triadj !: isoneutral slopes relative to model-coordinate 49 50 50 51 ! !! Madec operator 51 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE:: omlmask ! mask of the surface mixed layer at T-pt52 REAL(wp), DIMENSION(:,:) , ALLOCATABLE:: uslpml, wslpiml ! i_slope at U- and W-points just below the mixed layer53 REAL(wp), DIMENSION(:,:) , ALLOCATABLE:: vslpml, wslpjml ! j_slope at V- and W-points just below the mixed layer52 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: omlmask ! mask of the surface mixed layer at T-pt 53 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: uslpml, wslpiml ! i_slope at U- and W-points just below the mixed layer 54 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: vslpml, wslpjml ! j_slope at V- and W-points just below the mixed layer 54 55 55 56 REAL(wp) :: repsln = 1.e-25_wp ! tiny value used as minium of di(rho), dj(rho) and dk(rho) 57 58 ! Workspace arrays for ldf_slp_grif. These could be replaced by several 3D and 2D workspace 59 ! arrays from the wrk_nemo module with a bit of code re-writing. The 4D workspace 60 ! arrays can't be used here because of the zero-indexing of some of the ranks. ARPDBG. 61 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: zdzrho, zdyrho, zdxrho ! Horizontal and vertical density gradients 62 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: zti_mlb, ztj_mlb 56 63 57 64 !! * Substitutions … … 66 73 !!---------------------------------------------------------------------- 67 74 CONTAINS 75 76 FUNCTION ldf_slp_alloc() 77 !!---------------------------------------------------------------------- 78 !! *** ROUTINE ldf_slp_alloc *** 79 !!---------------------------------------------------------------------- 80 IMPLICIT none 81 INTEGER :: ldf_slp_alloc 82 INTEGER, DIMENSION(3) :: ierr 83 !!---------------------------------------------------------------------- 84 85 ALLOCATE(uslp(jpi,jpj,jpk), wslpi(jpi,jpj,jpk), & 86 vslp(jpi,jpj,jpk), wslpj(jpi,jpj,jpk), Stat=ierr(1)) 87 ! 88 ALLOCATE(omlmask(jpi,jpj,jpk), & 89 uslpml(jpi,jpj), wslpiml(jpi,jpj), & 90 vslpml(jpi,jpj), wslpjml(jpi,jpj), Stat=ierr(2)) 91 ! 92 ALLOCATE(zdzrho(jpi,jpj,jpk,0:1), zdyrho(jpi,jpj,jpk,0:1), & 93 zdxrho(jpi,jpj,jpk,0:1), zti_mlb(jpi,jpj,0:1,0:1), & 94 ztj_mlb(jpi,jpj,0:1,0:1), Stat=ierr(3)) 95 96 ldf_slp_alloc = MAXVAL(ierr) 97 98 END FUNCTION ldf_slp_alloc 99 68 100 69 101 SUBROUTINE ldf_slp( kt, prd, pn2 ) … … 96 128 USE oce , zww => ta ! use ta as workspace 97 129 USE oce , zwz => sa ! use sa as workspace 98 !! 99 INTEGER , INTENT(in) :: kt ! ocean time-step index 100 REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) :: prd ! in situ density 101 REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) :: pn2 ! Brunt-Vaisala frequency (locally ref.) 130 USE wrk_nemo, ONLY: wrk_use, wrk_release 131 USE wrk_nemo, ONLY: zdzr => wrk_3d_1 132 !! 133 INTEGER , INTENT(in) :: kt ! ocean time-step index 134 REAL(wp), INTENT(in), DIMENSION(:,:,:) :: prd ! in situ density 135 REAL(wp), INTENT(in), DIMENSION(:,:,:) :: pn2 ! Brunt-Vaisala frequency (locally ref.) 102 136 !! 103 137 INTEGER :: ji , jj , jk ! dummy loop indices … … 108 142 REAL(wp) :: zcj, zfj, zav, zbv, zaj, zbj ! - - 109 143 REAL(wp) :: zck, zfk, zbw ! - - 110 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdzr ! 3D workspace 111 !!---------------------------------------------------------------------- 112 144 !!---------------------------------------------------------------------- 145 146 IF(.not. wrk_use(3, 1))THEN 147 CALL ctl_stop('ldf_slp: ERROR: requested workspace arrays are unavailable.') 148 RETURN 149 END IF 150 113 151 zeps = 1.e-20_wp !== Local constant initialization ==! 114 152 z1_16 = 1.0_wp / 16._wp … … 354 392 ENDIF 355 393 ! 394 IF(.not. wrk_release(3, 1))THEN 395 CALL ctl_stop('ldf_slp: ERROR: failed to release workspace arrays.') 396 END IF 397 ! 356 398 END SUBROUTINE ldf_slp 357 399 … … 375 417 USE oce, zdjt => ta ! use ta as workspace 376 418 USE oce, zdjs => sa ! use sa as workspace 419 USE wrk_nemo, ONLY: wrk_use, wrk_release 420 USE wrk_nemo, ONLY: zdkt => wrk_3d_2, zdks => wrk_3d_3, & 421 zalpha => wrk_3d_4, zbeta => wrk_3d_5 ! alpha, beta at T points, at depth fsgdept 422 USE wrk_nemo, ONLY: z1_mlbw => wrk_2d_1 377 423 !! 378 424 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 385 431 REAL(wp) :: zdyrho_raw, ztj_coord, ztj_raw, ztj_lim, ztj_lim2, ztj_g_raw, ztj_g_lim 386 432 REAL(wp) :: zdzrho_raw 387 REAL(wp), DIMENSION(jpi,jpj,jpk,0:1) :: zdzrho, zdyrho, zdxrho ! Horizontal and vertical density gradients388 REAL(wp), DIMENSION(jpi,jpj,0:1,0:1) :: zti_mlb, ztj_mlb 389 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdkt, zdks390 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zalpha, zbeta ! alpha, beta at T points, at depth fsgdept391 REAL(wp), DIMENSION(jpi,jpj) :: z1_mlbw392 !!----------------------------------------------------------------------433 !!---------------------------------------------------------------------- 434 435 IF( (.not. wrk_use(3, 2,3,4,5)) .OR. (.not. wrk_use(2, 1)) )THEN 436 CALL ctl_stop('ldf_slp_grif: ERROR: requested workspace arrays are unavailable.') 437 RETURN 438 END IF 393 439 394 440 !--------------------------------! … … 572 618 CALL lbc_lnk( wslp2, 'W', 1. ) ! lateral boundary confition on wslp2 only ==>>> gm : necessary ? to be checked 573 619 ! 620 IF( (.not. wrk_release(3, 2,3,4,5)) .OR. (.not. wrk_release(2, 1)) )THEN 621 CALL ctl_stop('ldf_slp_grif: ERROR: failed to release workspace arrays.') 622 END IF 623 ! 574 624 END SUBROUTINE ldf_slp_grif 575 625 … … 591 641 !! omlmask : mixed layer mask 592 642 !!---------------------------------------------------------------------- 593 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in) :: prd ! in situ density594 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in) :: pn2 ! Brunt-Vaisala frequency (locally ref.)595 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in) :: p_gru, p_grv ! i- & j-gradient of density (u- & v-pts)596 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in) :: p_dzr ! z-gradient of density (T-point)643 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: prd ! in situ density 644 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: pn2 ! Brunt-Vaisala frequency (locally ref.) 645 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: p_gru, p_grv ! i- & j-gradient of density (u- & v-pts) 646 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: p_dzr ! z-gradient of density (T-point) 597 647 !! 598 648 INTEGER :: ji , jj , jk ! dummy loop indices -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90
r2528 r2590 10 10 IMPLICIT NONE 11 11 PRIVATE 12 13 PUBLIC ldftra_oce_alloc ! called by nemo_init->nemo_alloc, nemogcm.F90 12 14 13 15 !!---------------------------------------------------------------------- … … 32 34 33 35 #if defined key_traldf_c3d 34 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: ahtt, ahtu, ahtv, ahtw !: ** 3D coefficients ** at T-, U-, V-, W-points36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ahtt, ahtu, ahtv, ahtw !: ** 3D coefficients ** at T-, U-, V-, W-points 35 37 #elif defined key_traldf_c2d 36 REAL(wp), PUBLIC, DIMENSION(jpi,jpj):: ahtt, ahtu, ahtv, ahtw !: ** 2D coefficients ** at T-, U-, V-, W-points38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahtt, ahtu, ahtv, ahtw !: ** 2D coefficients ** at T-, U-, V-, W-points 37 39 #elif defined key_traldf_c1d 38 REAL(wp), PUBLIC, DIMENSION(jpk) :: ahtt, ahtu, ahtv, ahtw !: ** 1D coefficients ** at T-, U-, V-, W-points 40 REAL(wp), PUBLIC, DIMENSION(jpk) :: ahtt, ahtu, ahtv, ahtw !: ** 1D coefficients ** at T-, U-, V-, W-points ARPDBGjpk 39 41 #else 40 42 REAL(wp), PUBLIC :: ahtt, ahtu, ahtv, ahtw !: ** 0D coefficients ** at T-, U-, V-, W-points … … 49 51 50 52 # if defined key_traldf_c3d 51 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: aeiu, aeiv, aeiw !: ** 3D coefficients ** at U-, V-, W-points [m2/s]53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: aeiu, aeiv, aeiw !: ** 3D coefficients ** at U-, V-, W-points [m2/s] 52 54 # elif defined key_traldf_c2d 53 REAL(wp), PUBLIC, DIMENSION(jpi,jpj):: aeiu, aeiv, aeiw !: ** 2D coefficients ** at U-, V-, W-points [m2/s]55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: aeiu, aeiv, aeiw !: ** 2D coefficients ** at U-, V-, W-points [m2/s] 54 56 # elif defined key_traldf_c1d 55 REAL(wp), PUBLIC, DIMENSION(jpk):: aeiu, aeiv, aeiw !: ** 1D coefficients ** at U-, V-, W-points [m2/s]57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: aeiu, aeiv, aeiw !: ** 1D coefficients ** at U-, V-, W-points [m2/s] 56 58 # else 57 59 REAL(wp), PUBLIC :: aeiu, aeiv, aeiw !: ** 0D coefficients ** at U-, V-, W-points [m2/s] 58 60 # endif 59 61 # if defined key_diaeiv 60 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: u_eiv, v_eiv, w_eiv !: eddy induced velocity [m/s]62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: u_eiv, v_eiv, w_eiv !: eddy induced velocity [m/s] 61 63 # endif 62 64 … … 74 76 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 75 77 !!===================================================================== 78 CONTAINS 79 80 FUNCTION ldftra_oce_alloc() 81 !!---------------------------------------------------------------------- 82 !!---------------------------------------------------------------------- 83 IMPLICIT None 84 INTEGER :: ldftra_oce_alloc 85 INTEGER, DIMENSION(3) :: ierr 86 !!---------------------------------------------------------------------- 87 ierr(:) = 0 88 89 #if defined key_traldf_c3d 90 ALLOCATE(ahtt(jpi,jpj,jpk), ahtu(jpi,jpj,jpk), ahtv(jpi,jpj,jpk), & 91 ahtw(jpi,jpj,jpk), Stat=ierr(1)) 92 #elif defined key_traldf_c2d 93 ALLOCATE(ahtt(jpi,jpj), ahtu(jpi,jpj), ahtv(jpi,jpj), & 94 ahtw(jpi,jpj), Stat=ierr(1)) 95 #elif defined key_traldf_c1d 96 ! No need to allocate arrays where extent only depends on jpk ARPDBGjpk 97 #endif 98 99 #if defined key_traldf_eiv 100 101 #if defined key_traldf_c3d 102 ALLOCATE(aeiu(jpi,jpj,jpk), aeiv(jpi,jpj,jpk), aeiw(jpi,jpj,jpk), & 103 Stat=ierr(2)) 104 #elif defined key_traldf_c2d 105 ALLOCATE(aeiu(jpi,jpj), aeiv(jpi,jpj), aeiw(jpi,jpj), Stat=ierr(2)) 106 #elif defined key_traldf_c1d 107 ALLOCATE(aeiu(jpk), aeiv(jpk), aeiw(jpk), Stat=ierr(2)) 108 #endif 109 110 # if defined key_diaeiv 111 ALLOCATE(u_eiv(jpi,jpj,jpk), v_eiv(jpi,jpj,jpk), w_eiv(jpi,jpj,jpk), & 112 Stat=ierr(3)) 113 # endif 114 115 #endif 116 117 ldftra_oce_alloc = MAXVAL(ierr) 118 119 END FUNCTION ldftra_oce_alloc 120 121 !!---------------------------------------------------------------------- 122 76 123 END MODULE ldftra_oce
Note: See TracChangeset
for help on using the changeset viewer.