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/OPA_SRC/DYN/dynadv_ubs.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/OPA_SRC/DYN/dynadv_ubs.F90

    r2528 r2715  
    1616   USE oce            ! ocean dynamics and tracers 
    1717   USE dom_oce        ! ocean space and time domain 
    18    USE in_out_manager ! I/O manager 
    19    USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    2018   USE trdmod         ! ocean dynamics trends 
    2119   USE trdmod_oce     ! ocean variables trends 
     20   USE in_out_manager ! I/O manager 
    2221   USE prtctl         ! Print control 
     22   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     23   USE lib_mpp        ! MPP library 
    2324 
    2425   IMPLICIT NONE 
     
    3435#  include "vectopt_loop_substitute.h90" 
    3536   !!---------------------------------------------------------------------- 
    36    !! NEMO/OPA 3.2 , LODYC-IPSL  (2009) 
     37   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    3738   !! $Id$ 
    38    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    39    !!---------------------------------------------------------------------- 
    40  
     39   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     40   !!---------------------------------------------------------------------- 
    4141CONTAINS 
    4242 
     
    6868      !! Reference : Shchepetkin & McWilliams, 2005, Ocean Modelling.  
    6969      !!---------------------------------------------------------------------- 
    70       USE oce, ONLY:   zfu => ta   ! use ta as 3D workspace 
    71       USE oce, ONLY:   zfv => sa   ! use sa as 3D workspace 
    72       !! 
     70      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     71      USE oce     , ONLY:   zfu    => ta       , zfv    => sa      ! (ta,sa) used as 3D workspace 
     72      USE wrk_nemo, ONLY:   zfu_t  => wrk_3d_1 , zfv_t  =>wrk_3d_4 , zfu_uw =>wrk_3d_6   ! 3D workspace 
     73      USE wrk_nemo, ONLY:   zfu_f  => wrk_3d_2 , zfv_f  =>wrk_3d_5 , zfv_vw =>wrk_3d_7 
     74      USE wrk_nemo, ONLY:   zfw    => wrk_3d_3 
     75      USE wrk_nemo, ONLY:   zlu_uu => wrk_4d_1 , zlv_vv=>wrk_4d_3   ! 4D workspace 
     76      USE wrk_nemo, ONLY:   zlu_uv => wrk_4d_2 , zlv_vu=>wrk_4d_4 
     77      ! 
    7378      INTEGER, INTENT(in) ::   kt     ! ocean time-step index 
    74       !! 
     79      ! 
    7580      INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    7681      REAL(wp) ::   zbu, zbv    ! temporary scalars 
    7782      REAL(wp) ::   zui, zvj, zfuj, zfvi, zl_u, zl_v   ! temporary scalars 
    78       REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfu_t, zfu_f     ! temporary workspace 
    79       REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfv_t, zfv_f     !    "           " 
    80       REAL(wp), DIMENSION(jpi,jpj,jpk)   ::   zfw, zfu_uw, zfv_vw 
    81       REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   zlu_uu, zlu_uv   ! temporary workspace 
    82       REAL(wp), DIMENSION(jpi,jpj,jpk,2) ::   zlv_vv, zlv_vu   ! temporary workspace 
    8383      !!---------------------------------------------------------------------- 
    8484 
     
    8888         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    8989      ENDIF 
    90       zfu_t(:,:,:) = 0.e0 
    91       zfv_t(:,:,:) = 0.e0 
    92       zfu_f(:,:,:) = 0.e0 
    93       zfv_f(:,:,:) = 0.e0 
    94       ! 
    95       zlu_uu(:,:,:,:) = 0.e0  
    96       zlv_vv(:,:,:,:) = 0.e0  
    97       zlu_uv(:,:,:,:) = 0.e0  
    98       zlv_vu(:,:,:,:) = 0.e0  
     90 
     91      ! Check that required workspace arrays are not already in use 
     92      IF( wrk_in_use(3, 1,2,3,4,5,6,7) .OR. wrk_in_use(4, 1,2,3,4) ) THEN 
     93         CALL ctl_stop('dyn_adv_ubs: requested workspace array unavailable')   ;   RETURN 
     94      ENDIF 
     95 
     96      zfu_t(:,:,:) = 0._wp 
     97      zfv_t(:,:,:) = 0._wp 
     98      zfu_f(:,:,:) = 0._wp 
     99      zfv_f(:,:,:) = 0._wp 
     100      ! 
     101      zlu_uu(:,:,:,:) = 0._wp 
     102      zlv_vv(:,:,:,:) = 0._wp  
     103      zlu_uv(:,:,:,:) = 0._wp  
     104      zlv_vu(:,:,:,:) = 0._wp  
    99105 
    100106      IF( l_trddyn ) THEN           ! Save ua and va trends 
     
    116122               zlu_uv(ji,jj,jk,1) = ( ub (ji,jj+1,jk)-2.*ub (ji,jj,jk)+ub (ji,jj-1,jk) ) * umask(ji,jj,jk) 
    117123               zlv_vu(ji,jj,jk,1) = ( vb (ji+1,jj,jk)-2.*vb (ji,jj,jk)+vb (ji-1,jj,jk) ) * vmask(ji,jj,jk) 
    118                 
     124               ! 
    119125               zlu_uu(ji,jj,jk,2) = ( zfu(ji+1,jj,jk)-2.*zfu(ji,jj,jk)+zfu(ji-1,jj,jk) ) * umask(ji,jj,jk) 
    120126               zlv_vv(ji,jj,jk,2) = ( zfv(ji,jj+1,jk)-2.*zfv(ji,jj,jk)+zfv(ji,jj-1,jk) ) * vmask(ji,jj,jk) 
     
    125131      END DO 
    126132!!gm BUG !!!  just below this should be +1 in all the communications 
    127       CALL lbc_lnk( zlu_uu(:,:,:,1), 'U', -1.)   ;   CALL lbc_lnk( zlu_uv(:,:,:,1), 'U', -1.) 
    128       CALL lbc_lnk( zlu_uu(:,:,:,2), 'U', -1.)   ;   CALL lbc_lnk( zlu_uv(:,:,:,2), 'U', -1.) 
    129       CALL lbc_lnk( zlv_vv(:,:,:,1), 'V', -1.)   ;   CALL lbc_lnk( zlv_vu(:,:,:,1), 'V', -1.) 
    130       CALL lbc_lnk( zlv_vv(:,:,:,2), 'V', -1.)   ;   CALL lbc_lnk( zlv_vu(:,:,:,2), 'V', -1.)  
    131  
     133!      CALL lbc_lnk( zlu_uu(:,:,:,1), 'U', -1.)   ;   CALL lbc_lnk( zlu_uv(:,:,:,1), 'U', -1.) 
     134!      CALL lbc_lnk( zlu_uu(:,:,:,2), 'U', -1.)   ;   CALL lbc_lnk( zlu_uv(:,:,:,2), 'U', -1.) 
     135!      CALL lbc_lnk( zlv_vv(:,:,:,1), 'V', -1.)   ;   CALL lbc_lnk( zlv_vu(:,:,:,1), 'V', -1.) 
     136!      CALL lbc_lnk( zlv_vv(:,:,:,2), 'V', -1.)   ;   CALL lbc_lnk( zlv_vu(:,:,:,2), 'V', -1.) 
     137! 
    132138!!gm corrected: 
    133139      CALL lbc_lnk( zlu_uu(:,:,:,1), 'U', 1. )   ;   CALL lbc_lnk( zlu_uv(:,:,:,1), 'U', 1. ) 
     
    248254         &                       tab3d_2=va, clinfo2=           ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    249255      ! 
     256      IF( wrk_not_released(3, 1,2,3,4,5,6,7) .OR.   & 
     257          wrk_not_released(4, 1,2,3,4)       )   CALL ctl_stop('dyn_adv_ubs: failed to release workspace array') 
     258      ! 
    250259   END SUBROUTINE dyn_adv_ubs 
    251260 
Note: See TracChangeset for help on using the changeset viewer.