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 2715 for trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90 – NEMO

Ignore:
Timestamp:
2011-03-30T17:58:35+02:00 (13 years ago)
Author:
rblod
Message:

First attempt to put dynamic allocation on the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90

    r2528 r2715  
    1010   !!---------------------------------------------------------------------- 
    1111   !!   'key_top'                                                TOP models 
    12    !!---------------------------------------------------------------------- 
    1312   !!---------------------------------------------------------------------- 
    1413   !!   trc_adv      : compute ocean tracer advection trend 
     
    2625   USE traadv_eiv      ! eddy induced velocity     (tra_adv_eiv    routine) 
    2726   USE ldftra_oce      ! lateral diffusion coefficient on tracers 
    28    USE in_out_manager  ! I/O manager 
    29    USE prtctl_trc          ! Print control 
     27   USE prtctl_trc      ! Print control 
    3028 
    3129   IMPLICIT NONE 
    3230   PRIVATE 
    3331 
    34    PUBLIC   trc_adv    ! routine called by step module 
     32   PUBLIC   trc_adv          ! routine called by step module 
     33   PUBLIC   trc_adv_alloc    ! routine called by nemogcm module 
    3534 
    3635   INTEGER ::   nadv   ! choice of the type of advection scheme 
    37    REAL(wp), DIMENSION(jpk) ::   r2dt  ! vertical profile time-step, = 2 rdttra 
    38       !                                ! except at nit000 (=rdttra) if neuler=0 
     36   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   r2dt  ! vertical profile time-step, = 2 rdttra 
     37   !                                                    ! except at nit000 (=rdttra) if neuler=0 
    3938 
    4039   !! * Substitutions 
     
    4645   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    4746   !!---------------------------------------------------------------------- 
    48  
    4947CONTAINS 
     48 
     49   INTEGER FUNCTION trc_adv_alloc() 
     50      !!---------------------------------------------------------------------- 
     51      !!                  ***  ROUTINE trc_adv_alloc  *** 
     52      !!---------------------------------------------------------------------- 
     53 
     54      ALLOCATE( r2dt(jpk), STAT=trc_adv_alloc ) 
     55 
     56      IF( trc_adv_alloc /= 0 ) CALL ctl_warn('trc_adv_alloc : failed to allocate array.') 
     57 
     58   END FUNCTION trc_adv_alloc 
     59 
    5060 
    5161   SUBROUTINE trc_adv( kt ) 
     
    5767      !! ** Method  : - Update the tracer with the advection term following nadv 
    5868      !!---------------------------------------------------------------------- 
     69      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
     70      USE wrk_nemo, ONLY: zun => wrk_3d_4, zvn => wrk_3d_5, zwn => wrk_3d_6   ! effective velocity 
    5971      !! 
    60       INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    61       ! 
    62       INTEGER :: jk  
    63       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zun, zvn, zwn   ! effective velocity 
    64       CHARACTER (len=22) :: charout 
    65       !!---------------------------------------------------------------------- 
     72      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     73      ! 
     74      INTEGER ::   jk  
     75      CHARACTER (len=22) ::   charout 
     76      !!---------------------------------------------------------------------- 
     77      ! 
     78      IF( wrk_in_use(3, 4,5,6) ) THEN 
     79         CALL ctl_stop('trc_adv : requested workspace arrays unavailable')   ;   RETURN 
     80      ENDIF 
    6681 
    6782      IF( kt == nit000 )   CALL trc_adv_ctl          ! initialisation & control of options 
     
    8095      DO jk = 1, jpkm1 
    8196         !                                                ! eulerian transport only 
    82          zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 
    83          zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
    84          zwn(:,:,jk) = e1t(:,:) * e2t(:,:)      * wn(:,:,jk) 
     97         zun(:,:,jk) = e2u  (:,:) * fse3u(:,:,jk) * un(:,:,jk) 
     98         zvn(:,:,jk) = e1v  (:,:) * fse3v(:,:,jk) * vn(:,:,jk) 
     99         zwn(:,:,jk) = e1e2t(:,:)                 * wn(:,:,jk) 
    85100         ! 
    86101      END DO 
     
    125140                                            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    126141      END IF 
     142      ! 
     143      IF( wrk_not_released(3, 4,5,6) ) CALL ctl_stop('trc_adv : failed to release workspace arrays.') 
    127144      ! 
    128145   END SUBROUTINE trc_adv 
     
    171188      ! 
    172189   END SUBROUTINE trc_adv_ctl 
     190    
    173191#else 
    174192   !!---------------------------------------------------------------------- 
     
    181199   END SUBROUTINE trc_adv 
    182200#endif 
     201 
    183202  !!====================================================================== 
    184203END MODULE trcadv 
Note: See TracChangeset for help on using the changeset viewer.