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 3161 for branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DYN/dynnept.F90 – NEMO

Ignore:
Timestamp:
2011-11-20T16:02:18+01:00 (12 years ago)
Author:
cetlod
Message:

New dynamical allocation & timing in OPA_SRC/DYN routines

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DYN/dynnept.F90

    r3116 r3161  
    3030   USE phycst 
    3131   USE lbclnk 
    32  
     32   USE wrk_nemo_2      ! Memory Allocation 
    3333 
    3434   IMPLICIT NONE 
     
    102102      USE iom 
    103103      !! 
    104 !!    Local dynamic allocation 
    105104      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    106       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   ht       ! temporary 2D workspace 
    107       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   htn      ! temporary 2D workspace 
    108       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   tscale   ! temporary 2D workspace 
    109       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   tsp      ! temporary 2D workspace 
    110       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   hur_n    ! temporary 2D workspace 
    111       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   hvr_n    ! temporary 2D workspace 
    112       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   hu_n     ! temporary 2D workspace 
    113       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   hv_n     ! temporary 2D workspace 
    114       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   znmask   ! temporary 3D array for nmask 
    115105      REAL(wp) :: unemin,unemax,vnemin,vnemax   ! extrema of (u*, v*) fields 
    116106      REAL(wp) :: zhdivmin,zhdivmax             ! extrema of horizontal divergence of (u*, v*) fields 
     
    118108      REAL(wp) :: ustar,vstar                   ! (u*, v*) before tapering in shallow water 
    119109      REAL(wp) :: hramp                         ! depth over which Neptune vel. is ramped down 
    120       !! 
    121       NAMELIST/namdyn_nept/ ln_neptsimp,      & 
    122                             ln_smooth_neptvel,& 
    123              rn_tslse,        & 
    124              rn_tslsp,        & 
    125                             ln_neptramp,      & 
    126                             rn_htrmin,        & 
    127              rn_htrmax 
    128       !!---------------------------------------------------------------------- 
    129  
     110      ! 
     111      REAL(wp), POINTER, DIMENSION(:,:  ) :: ht, htn, tscale, tsp, hur_n, hvr_n, hu_n, hv_n       
     112      REAL(wp), POINTER, DIMENSION(:,:,:) :: znmask 
     113      !! 
     114      NAMELIST/namdyn_nept/ ln_neptsimp, ln_smooth_neptvel, rn_tslse, rn_tslsp,      & 
     115                            ln_neptramp, rn_htrmin, rn_htrmax 
     116      !!---------------------------------------------------------------------- 
     117      !                                                           ! Dynamically allocate local work arrays 
     118      CALL wrk_alloc( jpi, jpj     , ht, htn, tscale, tsp, hur_n, hvr_n, hu_n, hv_n  )  
     119      CALL wrk_alloc( jpi, jpj, jpk, znmask                                          )  
     120      ! 
    130121      ! Define the (simplified) Neptune parameters 
    131122      ! ========================================== 
     
    179170!!    Perform dynamic allocation of shared module variables 
    180171      IF( dynnept_alloc() /= 0 )   CALL ctl_warn('dynnept_alloc: array allocate failed.') 
    181  
    182 !!    Dynamically allocate local work arrays 
    183       ALLOCATE( ht(jpi,jpj), htn(jpi,jpj), tscale(jpi,jpj), tsp(jpi,jpj),      & 
    184          &      hur_n(jpi,jpj), hvr_n(jpi,jpj), hu_n(jpi,jpj), hv_n(jpi,jpj),  & 
    185          &      znmask(jpi,jpj,jpk) ) 
    186172 
    187173      IF( .not. ln_rstart ) THEN      ! If restarting, these arrays are read from the restart file 
     
    350336!!    Deallocate temporary workspace arrays, which are all local to 
    351337!!    this routine, except where passed as arguments to other routines 
    352       DEALLOCATE( ht, htn, tscale, tsp, hur_n, hvr_n, hu_n, hv_n, znmask ) 
    353  
     338      CALL wrk_dealloc( jpi, jpj     , ht, htn, tscale, tsp, hur_n, hvr_n, hu_n, hv_n  )  
     339      CALL wrk_dealloc( jpi, jpj, jpk, znmask                                          )  
     340      ! 
    354341   END SUBROUTINE dyn_nept_init 
    355342 
     
    393380      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    394381      !!---------------------------------------------------------------------- 
    395  
    396  
     382      !     
    397383      IF(lwp) WRITE(numout,*) 
    398384      IF(lwp) WRITE(numout,*) 'dyn_nept_div_cur_init :' 
     
    501487         ENDIF 
    502488         ! 
    503     lastkt = kt        ! Store kt 
    504     ! 
     489         lastkt = kt     ! Store kt 
     490        ! 
    505491      ENDIF 
    506492      ! 
     
    530516 
    531517 
    532    SUBROUTINE dyn_nept_smooth_vel( htold, htnew, option ) 
     518   SUBROUTINE dyn_nept_smooth_vel( htold, htnew, ld_option ) 
    533519 
    534520      !!---------------------------------------------------------------------- 
     
    539525      !! ** Action : - Updates the array htnew (output) with a smoothed 
    540526      !!               version of the (input) array htold. Form of smoothing 
    541       !!               algorithm is controlled by the (logical) argument option. 
    542       !!---------------------------------------------------------------------- 
    543  
    544       INTEGER                                   ::   ji, jj  ! dummy loop indices 
    545       REAL(wp), DIMENSION(jpi,jpj), INTENT(IN)  ::   htold   ! temporary 2D workspace 
    546       LOGICAL, INTENT(IN)                       ::   option  ! temporary 2D workspace 
    547       REAL(wp), DIMENSION(jpi,jpj)              ::   htnew   ! temporary 2D workspace 
    548       REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   work    ! temporary 2D workspace 
    549       INTEGER,  ALLOCATABLE, DIMENSION(:,:)     ::   nb      ! temporary 2D workspace 
    550       INTEGER,  ALLOCATABLE, DIMENSION(:,:)     ::   iwork   ! temporary 2D workspace 
    551  
    552 !!    Dynamically allocate local work arrays 
    553       ALLOCATE( work(jpi,jpj), nb(jpi,jpj), iwork(jpi,jpj) ) 
    554  
     527      !!               algorithm is controlled by the (logical) argument ld_option. 
     528      !!---------------------------------------------------------------------- 
     529      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   )  ::  htold      ! temporary 2D workspace 
     530      LOGICAL                     , INTENT(in   )  ::  ld_option  ! temporary 2D workspace 
     531      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout)  ::  htnew      ! temporary 2D workspace 
     532      ! 
     533      INTEGER                           ::  ji, jj  ! dummy loop indices 
     534      INTEGER , POINTER, DIMENSION(:,:) ::  nb, iwork 
     535      REAL(wp), POINTER, DIMENSION(:,:) ::  work    ! temporary 2D workspace 
     536      !!---------------------------------------------------------------------- 
     537      ! 
     538      CALL wrk_alloc( jpi, jpj, nb, iwork )  
     539      CALL wrk_alloc( jpi, jpj, work      )  
     540      ! 
    555541      iwork(:,:) = 0 
    556542 
     
    565551      !! htnew contains valid ocean depths from htold, or zero 
    566552 
    567       !! set work to a smoothed/averaged version of htnew; choice controlled by option 
     553      !! set work to a smoothed/averaged version of htnew; choice controlled by ld_option 
    568554      !! nb is set to the sum of the weights of the valid values used in work 
    569       IF( option ) THEN 
     555      IF( ld_option ) THEN 
    570556 
    571557         !! Apply scale-selective smoothing in determining work from htnew 
     
    615601      END WHERE 
    616602 
    617 !!    Deallocate temporary workspace arrays, all local to this routine 
    618       DEALLOCATE( work, nb, iwork ) 
    619  
     603      !!    Deallocate temporary workspace arrays, all local to this routine 
     604      CALL wrk_dealloc( jpi, jpj, nb, iwork )  
     605      CALL wrk_dealloc( jpi, jpj, work      )  
     606      ! 
    620607   END SUBROUTINE dyn_nept_smooth_vel 
    621608 
Note: See TracChangeset for help on using the changeset viewer.