- Timestamp:
- 2011-11-18T12:40:14+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r3116 r3155 31 31 USE in_out_manager ! I/O manager 32 32 USE prtctl ! Print control 33 USE wrk_nemo_2 ! work arrays 33 34 34 35 IMPLICIT NONE … … 56 57 57 58 REAL(wp) :: repsln = 1.e-25_wp ! tiny value used as minium of di(rho), dj(rho) and dk(rho) 58 59 ! Workspace arrays for ldf_slp_grif. These could be replaced by several 3D and 2D workspace60 ! arrays from the wrk_nemo module with a bit of code re-writing. The 4D workspace61 ! arrays can't be used here because of the zero-indexing of some of the ranks. ARPDBG.62 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: zdzrho , zdyrho, zdxrho ! Horizontal and vertical density gradients63 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: zti_mlb, ztj_mlb ! for Griffies operator only64 59 65 60 !! * Substitutions … … 74 69 !!---------------------------------------------------------------------- 75 70 CONTAINS 76 77 INTEGER FUNCTION ldf_slp_alloc()78 !!----------------------------------------------------------------------79 !! *** FUNCTION ldf_slp_alloc ***80 !!----------------------------------------------------------------------81 !82 ALLOCATE( zdxrho (jpi,jpj,jpk,0:1) , zti_mlb(jpi,jpj,0:1,0:1) , &83 & zdyrho (jpi,jpj,jpk,0:1) , ztj_mlb(jpi,jpj,0:1,0:1) , &84 & zdzrho (jpi,jpj,jpk,0:1) , STAT=ldf_slp_alloc )85 !86 IF( lk_mpp ) CALL mpp_sum ( ldf_slp_alloc )87 IF( ldf_slp_alloc /= 0 ) CALL ctl_warn('ldf_slp_alloc : failed to allocate arrays.')88 !89 END FUNCTION ldf_slp_alloc90 91 71 92 72 SUBROUTINE ldf_slp( kt, prd, pn2 ) … … 115 95 !! of now neutral surfaces at u-, w- and v- w-points, resp. 116 96 !!---------------------------------------------------------------------- 117 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released118 97 USE oce , ONLY: zwz => ua , zww => va ! (ua,va) used as workspace 119 98 USE oce , ONLY: tsa ! (tsa) used as workspace 120 USE wrk_nemo, ONLY: zdzr => wrk_3d_1 ! 3D workspace121 99 !! 122 100 INTEGER , INTENT(in) :: kt ! ocean time-step index … … 131 109 REAL(wp) :: zcj, zfj, zav, zbv, zaj, zbj ! - - 132 110 REAL(wp) :: zck, zfk, zbw ! - - 133 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgru, zgrv 134 !!---------------------------------------------------------------------- 135 136 IF( wrk_in_use(3, 1) ) THEN 137 CALL ctl_stop('ldf_slp: requested workspace arrays are unavailable') ; RETURN 138 ENDIF 111 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgru, zgrv, zdzr 112 !!---------------------------------------------------------------------- 113 114 CALL wrk_alloc( jpi,jpj,jpk, zdzr ) 139 115 ! 140 116 zgru => tsa(:,:,:,1) … … 386 362 ENDIF 387 363 ! 388 IF( wrk_not_released(3, 1) ) CALL ctl_stop('ldf_slp: failed to release workspace arrays.')364 CALL wrk_dealloc( jpi,jpj,jpk, zdzr ) 389 365 ! 390 366 END SUBROUTINE ldf_slp … … 405 381 !! - wslp2 squared slope of neutral surfaces at w-points. 406 382 !!---------------------------------------------------------------------- 407 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released408 383 USE oce , ONLY: zalbet => ua ! use ua as workspace 409 USE wrk_nemo, ONLY: z1_mlbw => wrk_2d_1410 384 !! 411 385 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 420 394 REAL(wp) :: zdzrho_raw 421 395 REAL(wp) :: zbeta0 422 !!---------------------------------------------------------------------- 423 424 IF( wrk_in_use(4, 1,2,3) .OR. wrk_in_use(3, 2,3) .OR. wrk_in_use(2, 1) ) THEN 425 CALL ctl_stop('ldf_slp_grif: ERROR: requested workspace arrays are unavailable.') ; RETURN 426 END IF 396 REAL(wp), POINTER, DIMENSION(:,:) :: z1_mlbw 397 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zdxrho , zdyrho, zdzrho ! Horizontal and vertical density gradients 398 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zti_mlb, ztj_mlb ! for Griffies operator only 399 !!---------------------------------------------------------------------- 400 401 CALL wrk_alloc( jpi,jpj, z1_mlbw ) 402 CALL wrk_alloc( jpi,jpj,jpk,2, zdxrho , zdyrho, zdzrho, klstart = 0 ) 403 CALL wrk_alloc( jpi,jpj, 2,2, zti_mlb, ztj_mlb, kkstart = 0, klstart = 0 ) 427 404 ! 428 405 !--------------------------------! … … 616 593 CALL lbc_lnk( wslp2, 'W', 1. ) ! lateral boundary confition on wslp2 only ==>>> gm : necessary ? to be checked 617 594 ! 618 IF( wrk_not_released(4, 1,2,3) .OR. &619 wrk_not_released(3, 2,3 ) .OR. &620 wrk_not_released(2, 1 ) ) CALL ctl_stop('ldf_slp_grif: ERROR: failed to release workspace arrays.')595 CALL wrk_dealloc( jpi,jpj, z1_mlbw ) 596 CALL wrk_dealloc( jpi,jpj,jpk,2, zdxrho , zdyrho, zdzrho, klstart = 0 ) 597 CALL wrk_dealloc( jpi,jpj, 2,2, zti_mlb, ztj_mlb, kkstart = 0, klstart = 0 ) 621 598 ! 622 599 END SUBROUTINE ldf_slp_grif … … 768 745 ALLOCATE( triadi (jpi,jpj,jpk,0:1,0:1) , triadj (jpi,jpj,jpk,0:1,0:1) , STAT=ierr ) 769 746 IF( ierr > 0 ) CALL ctl_stop( 'STOP', 'ldf_slp_init : unable to allocate Griffies operator slope' ) 770 IF( ldf_slp_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'ldf_slp_init : unable to allocate workspace arrays' )771 747 ! 772 748 IF( ln_dynldf_iso ) CALL ctl_stop( 'ldf_slp_init: Griffies operator on momentum not supported' )
Note: See TracChangeset
for help on using the changeset viewer.