New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 3155 for branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90 – NEMO

Ignore:
Timestamp:
2011-11-18T12:40:14+01:00 (13 years ago)
Author:
smasson
Message:

dev_NEMO_MERGE_2011: new dynamical allocation in LDF and ZDF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r3116 r3155  
    3131   USE in_out_manager  ! I/O manager 
    3232   USE prtctl          ! Print control 
     33   USE wrk_nemo_2      ! work arrays 
    3334 
    3435   IMPLICIT NONE 
     
    5657 
    5758   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 workspace 
    60    ! arrays from the wrk_nemo module with a bit of code re-writing. The 4D workspace 
    61    ! 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 gradients 
    63    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   zti_mlb, ztj_mlb            ! for Griffies operator only 
    6459 
    6560   !! * Substitutions 
     
    7469   !!---------------------------------------------------------------------- 
    7570CONTAINS 
    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_alloc 
    90  
    9171 
    9272   SUBROUTINE ldf_slp( kt, prd, pn2 ) 
     
    11595      !!               of now neutral surfaces at u-, w- and v- w-points, resp. 
    11696      !!---------------------------------------------------------------------- 
    117       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    11897      USE oce     , ONLY:   zwz => ua       , zww => va   ! (ua,va) used as workspace 
    11998      USE oce     , ONLY:   tsa                           ! (tsa) used as workspace 
    120       USE wrk_nemo, ONLY:   zdzr => wrk_3d_1              ! 3D workspace 
    12199      !! 
    122100      INTEGER , INTENT(in)                   ::   kt    ! ocean time-step index 
     
    131109      REAL(wp) ::   zcj, zfj, zav, zbv, zaj, zbj   !   -      - 
    132110      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 ) 
    139115      ! 
    140116      zgru => tsa(:,:,:,1) 
     
    386362      ENDIF 
    387363      ! 
    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 ) 
    389365      ! 
    390366   END SUBROUTINE ldf_slp 
     
    405381      !!             - wslp2              squared slope of neutral surfaces at w-points. 
    406382      !!---------------------------------------------------------------------- 
    407       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    408383      USE oce     , ONLY:   zalbet  => ua       ! use ua as workspace 
    409       USE wrk_nemo, ONLY:   z1_mlbw => wrk_2d_1 
    410384      !! 
    411385      INTEGER, INTENT( in ) ::   kt             ! ocean time-step index 
     
    420394      REAL(wp) ::   zdzrho_raw 
    421395      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  ) 
    427404      ! 
    428405      !--------------------------------! 
     
    616593      CALL lbc_lnk( wslp2, 'W', 1. )      ! lateral boundary confition on wslp2 only   ==>>> gm : necessary ? to be checked 
    617594      ! 
    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  ) 
    621598      ! 
    622599   END SUBROUTINE ldf_slp_grif 
     
    768745         ALLOCATE( triadi  (jpi,jpj,jpk,0:1,0:1) , triadj  (jpi,jpj,jpk,0:1,0:1)                      , STAT=ierr ) 
    769746         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' ) 
    771747         ! 
    772748         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.