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 3159 for branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90 – NEMO

Ignore:
Timestamp:
2011-11-18T22:41:44+01:00 (13 years ago)
Author:
cetlod
Message:

New dynamical allocation + timing on TRA/ routines

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90

    r3116 r3159  
    2525   USE trc_oce         ! share passive tracers/Ocean variables 
    2626   USE lib_mpp         ! MPP library 
     27   USE wrk_nemo_2      ! Memory Allocation 
     28   USE timing          ! Timing 
    2729 
    2830   IMPLICIT NONE 
     
    6668      !!               biharmonic mixing trend. 
    6769      !!---------------------------------------------------------------------- 
    68       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    69       USE wrk_nemo, ONLY:   wk1 => wrk_4d_1 , wk2 => wrk_4d_2     ! 4D workspace 
    7070      ! 
    7171      INTEGER         , INTENT(in   )                      ::   kt       ! ocean time-step index 
     
    7777      ! 
    7878      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
    79       !!---------------------------------------------------------------------- 
    80  
    81       IF( wrk_in_use(4, 1,2) ) THEN 
    82          CALL ctl_stop('tra_ldf_bilapg: requested workspace arrays unavailable')   ;   RETURN 
    83       ENDIF 
    84  
     79      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zwk1, zwk2  
     80      !!---------------------------------------------------------------------- 
     81      ! 
     82      IF( nn_timing == 1 )  CALL timing_start('tra_ldf_bilapg') 
     83      ! 
     84      CALL wrk_alloc( jpi, jpj, jpk, kjpt, zwk1, zwk2 )  
     85      ! 
    8586      IF( kt == kit000 )  THEN 
    8687         IF(lwp) WRITE(numout,*) 
     
    9192      ! 1. Laplacian of ptb * aht 
    9293      ! -----------------------------  
    93       CALL ldfght( kt, cdtype, ptb, wk1, kjpt, 1 )      ! rotated harmonic operator applied to ptb and multiply by aht  
     94      CALL ldfght( kt, cdtype, ptb, zwk1, kjpt, 1 )      ! rotated harmonic operator applied to ptb and multiply by aht  
    9495      !                                                 ! output in wk1  
    9596      ! 
    9697      DO jn = 1, kjpt 
    97          CALL lbc_lnk( wk1(:,:,:,jn) , 'T', 1. )        ! Lateral boundary conditions on wk1   (unchanged sign) 
     98         CALL lbc_lnk( zwk1(:,:,:,jn) , 'T', 1. )        ! Lateral boundary conditions on wk1   (unchanged sign) 
    9899      END DO 
    99100 
    100101      ! 2. Bilaplacian of ptb 
    101102      ! ------------------------- 
    102       CALL ldfght( kt, cdtype, wk1, wk2, kjpt, 2 )      ! rotated harmonic operator applied to wk1 ; output in wk2 
     103      CALL ldfght( kt, cdtype, zwk1, zwk2, kjpt, 2 )      ! rotated harmonic operator applied to wk1 ; output in wk2 
    103104 
    104105 
     
    110111               DO ji = 2, jpim1 
    111112                  ! add it to the general tracer trends 
    112                   pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + wk2(ji,jj,jk,jn) 
     113                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zwk2(ji,jj,jk,jn) 
    113114               END DO 
    114115            END DO 
     
    116117      END DO 
    117118      ! 
    118       IF( wrk_not_released(4, 1,2) )   CALL ctl_stop('tra_ldf_bilapg : failed to release workspace arrays.') 
     119      CALL wrk_dealloc( jpi, jpj, jpk, kjpt, zwk1, zwk2 )  
     120      ! 
     121      IF( nn_timing == 1 )  CALL timing_stop('tra_ldf_bilapg') 
    119122      ! 
    120123   END SUBROUTINE tra_ldf_bilapg 
     
    159162      !! 
    160163      !!---------------------------------------------------------------------- 
    161       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz 
    162164      USE oce     , ONLY:   zftv => ua       ! ua used as workspace 
    163       USE wrk_nemo, ONLY:   zftu => wrk_2d_1 , zdkt  => wrk_2d_2 , zdk1t => wrk_2d_3 
    164       USE wrk_nemo, ONLY:   zftw => wrk_xz_1 , zdit  => wrk_xz_2  
    165       USE wrk_nemo, ONLY:   zdjt => wrk_xz_3 , zdj1t => wrk_xz_4 
    166165      ! 
    167166      INTEGER         , INTENT(in )                              ::  kt      ! ocean time-step index 
     
    180179      REAL(wp) ::  zbtr, ztah, ztav 
    181180      REAL(wp) ::  zcof0, zcof1, zcof2, zcof3, zcof4 
    182       !!---------------------------------------------------------------------- 
    183  
    184       IF( wrk_in_use(2, 1,2,3) .OR. wrk_in_use_xz(1,2,3,4) )THEN 
    185          CALL ctl_stop('ldfght : requested workspace arrays unavailable')   ;   RETURN 
    186       ENDIF 
     181      REAL(wp), POINTER, DIMENSION(:,:) ::  zftu, zdkt, zdk1t 
     182      REAL(wp), POINTER, DIMENSION(:,:) ::  zftw, zdit, zdjt, zdj1t 
     183      !!---------------------------------------------------------------------- 
     184      ! 
     185      IF( nn_timing == 1 )  CALL timing_start('ldfght') 
     186      ! 
     187      CALL wrk_alloc( jpi, jpj, zftu, zdkt, zdk1t )  
     188      CALL wrk_alloc( jpi, jpk, zftw, zdit, zdjt, zdj1t )  
    187189      ! 
    188190      DO jn = 1, kjpt 
     
    336338      END DO 
    337339      ! 
    338       IF( wrk_not_released(2, 1,2,3)   .OR.   & 
    339           wrk_not_released_xz(1,2,3,4) )   CALL ctl_stop('ldfght : failed to release workspace arrays.') 
     340      CALL wrk_dealloc( jpi, jpj, zftu, zdkt, zdk1t )  
     341      CALL wrk_dealloc( jpi, jpk, zftw, zdit, zdjt, zdj1t )  
     342      ! 
     343      IF( nn_timing == 1 )  CALL timing_stop('ldfght') 
    340344      ! 
    341345   END SUBROUTINE ldfght 
Note: See TracChangeset for help on using the changeset viewer.