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 – NEMO

Changeset 3155


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

dev_NEMO_MERGE_2011: new dynamical allocation in LDF and ZDF

Location:
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC
Files:
9 edited

Legend:

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

    r2715 r3155  
    2525   USE prtctl          ! Print control 
    2626   USE iom             ! I/O library 
     27   USE wrk_nemo_2      ! work arrays 
    2728 
    2829   IMPLICIT NONE 
     
    5354      !!             - wslpi, wslpj : i- and j-slopes of neutral surfaces at w-points.  
    5455      !!---------------------------------------------------------------------- 
    55       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    56       USE wrk_nemo, ONLY:   zn  => wrk_2d_1 , zah   => wrk_2d_2   ! 2D workspace 
    57       USE wrk_nemo, ONLY:   zhw => wrk_2d_3 , zross => wrk_2d_4 
    58       ! 
    5956      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
    6057      ! 
    6158      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    6259      REAL(wp) ::   zfw, ze3w, zn2, zf20, zaht, zaht_min      ! temporary scalars 
     60      REAL(wp), DIMENSION(:,:), POINTER ::   zn, zah, zhw, zross   ! 2D workspace 
    6361      !!---------------------------------------------------------------------- 
    6462       
    65       IF( wrk_in_use(2, 1,2,3,4) ) THEN 
    66          CALL ctl_stop('ldf_eiv: requested workspace arrays are unavailable.')   ;   RETURN 
    67       ENDIF 
     63      CALL wrk_alloc( jpi,jpj, zn, zah, zhw, zross ) 
    6864 
    6965      IF( kt == nit000 ) THEN 
     
    243239      CALL iom_put( "aht2d_eiv", aeiw )   ! EIV lateral eddy diffusivity 
    244240      !   
    245       IF( wrk_not_released(2, 1,2,3,4) )   CALL ctl_stop('ldf_eiv: failed to release workspace arrays') 
     241      CALL wrk_dealloc( jpi,jpj, zn, zah, zhw, zross ) 
    246242      ! 
    247243   END SUBROUTINE ldf_eiv 
  • 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' ) 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r2715 r3155  
    2121   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2222   USE prtctl          ! Print control 
    23    USE lib_mpp            ! MPP library 
     23   USE lib_mpp         ! MPP library 
     24   USE wrk_nemo_2      ! work arrays 
    2425 
    2526   IMPLICIT NONE 
     
    9192      !! References :   Merryfield et al., JPO, 29, 1124-1142, 1999. 
    9293      !!---------------------------------------------------------------------- 
    93       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    94       USE wrk_nemo, ONLY:   zmsks  => wrk_2d_1 , zmskf  => wrk_2d_2 , zmskd1 => wrk_2d_3   ! 2D workspace 
    95       USE wrk_nemo, ONLY:   zmskd2 => wrk_2d_4 , zmskd3 => wrk_2d_5                        !  -      - 
    96       ! 
    9794      INTEGER, INTENT(in) ::   kt   ! ocean time-step indexocean time step 
    9895      ! 
     
    10198      REAL(wp) ::   zavft, zavfs    !    -         - 
    10299      REAL(wp) ::   zavdt, zavds    !    -         - 
    103       !!---------------------------------------------------------------------- 
    104  
    105       IF( wrk_in_use(2, 1,2,3,4,5) ) THEN 
    106          CALL ctl_stop('zdf_ddm: Requested workspace arrays already in use')   ;   RETURN 
    107       ENDIF 
     100      REAL(wp), POINTER, DIMENSION(:,:) ::   zmsks, zmskf, zmskd1, zmskd2, zmskd3 
     101      !!---------------------------------------------------------------------- 
     102 
     103      CALL wrk_alloc( jpi,jpj, zmsks, zmskf, zmskd1, zmskd2, zmskd3 ) 
    108104 
    109105      !                                                ! =============== 
     
    197193      ENDIF 
    198194      ! 
    199       IF( wrk_not_released(2, 1,2,3,4,5) )   CALL ctl_stop('zdf_ddm: Release of workspace arrays failed') 
     195      CALL wrk_dealloc( jpi,jpj, zmsks, zmskf, zmskd1, zmskd2, zmskd3 ) 
    200196      ! 
    201197   END SUBROUTINE zdf_ddm 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r3125 r3155  
    2626   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    2727   USE lib_mpp        ! MPP manager 
     28   USE wrk_nemo_2     ! work arrays 
    2829   USE prtctl         ! Print control 
    2930   USE in_out_manager ! I/O manager 
     
    134135      USE oce     , ONLY: z_elem_a  =>   ua   ! use ua as workspace 
    135136      USE oce     , ONLY: z_elem_b  =>   va   ! use va as workspace 
    136       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    137       USE wrk_nemo, ONLY: zdep      => wrk_2d_1 
    138       USE wrk_nemo, ONLY: zflxs     => wrk_2d_2     ! Turbulence fluxed induced by internal waves  
    139       USE wrk_nemo, ONLY: zhsro     => wrk_2d_3     ! Surface roughness (surface waves) 
    140       USE wrk_nemo, ONLY: eb        => wrk_3d_1   ! tke at time before 
    141       USE wrk_nemo, ONLY: mxlb      => wrk_3d_2   ! mixing length at time before 
    142       USE wrk_nemo, ONLY: shear     => wrk_3d_3   ! vertical shear 
    143       USE wrk_nemo, ONLY: eps       => wrk_3d_4   ! dissipation rate 
    144       USE wrk_nemo, ONLY: zwall_psi => wrk_3d_5   ! Wall function use in the wb case (ln_sigpsi.AND.ln_crban=T) 
    145137      ! 
    146138      INTEGER, INTENT(in) ::   kt ! ocean time step 
     
    151143      REAL(wp) ::   prod, buoy, diss, zdiss, sm         !   -      - 
    152144      REAL(wp) ::   gh, gm, shr, dif, zsqen, zav        !   -      - 
    153       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_elem_c, psi 
     145      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zdep 
     146      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zflxs       ! Turbulence fluxed induced by internal waves  
     147      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zhsro       ! Surface roughness (surface waves) 
     148      REAL(wp), POINTER, DIMENSION(:,:,:) ::   eb          ! tke at time before 
     149      REAL(wp), POINTER, DIMENSION(:,:,:) ::   mxlb        ! mixing length at time before 
     150      REAL(wp), POINTER, DIMENSION(:,:,:) ::   shear       ! vertical shear 
     151      REAL(wp), POINTER, DIMENSION(:,:,:) ::   eps         ! dissipation rate 
     152      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zwall_psi   ! Wall function use in the wb case (ln_sigpsi.AND.ln_crban=T) 
     153      REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_elem_c, psi 
    154154      !!-------------------------------------------------------------------- 
    155155 
    156       IF(  wrk_in_use(2, 1,2,3)  .OR.  wrk_in_use(3, 1,2,3,4,5)  ) THEN 
    157          CALL ctl_stop('zdf_gls: requested workspace arrays unavailable.')   ;   RETURN 
    158       END IF 
     156      CALL wrk_alloc( jpi,jpj, zdep, zflxs, zhsro ) 
     157      CALL wrk_alloc( jpi,jpj,jpk, eb, mxlb, shear, eps, zwall_psi ) 
    159158      ! 
    160159      z_elem_c  => tsa(:,:,:,1) 
     
    265264               IF( ln_sigpsi ) THEN 
    266265                  zsigpsi = MIN( 1._wp, zesh2 / eps(ji,jj,jk) )     ! 0. <= zsigpsi <= 1. 
    267                   zwall_psi(ji,jj,jk) = rsc_psi / (  zsigpsi * rsc_psi + (1._wp-zsigpsi) * rsc_psi0 / MAX( zwall(ji,jj,jk), 1._wp )  ) 
     266                  zwall_psi(ji,jj,jk) = rsc_psi /   &  
     267                     &     (  zsigpsi * rsc_psi + (1._wp-zsigpsi) * rsc_psi0 / MAX( zwall(ji,jj,jk), 1._wp )  ) 
    268268               ELSE 
    269269                  zwall_psi(ji,jj,jk) = 1._wp 
     
    886886      ENDIF 
    887887      ! 
    888       IF( wrk_not_released(2, 1,2,3)     .OR. & 
    889           wrk_not_released(3, 1,2,3,4,5)  )   CALL ctl_stop('zdf_gls: failed to release workspace arrays') 
     888      CALL wrk_dealloc( jpi,jpj, zdep, zflxs, zhsro ) 
     889      CALL wrk_dealloc( jpi,jpj,jpk, eb, mxlb, shear, eps, zwall_psi ) 
    890890      ! 
    891891   END SUBROUTINE zdf_gls 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfkpp.F90

    r2977 r3155  
    2929   USE in_out_manager  ! I/O manager 
    3030   USE lib_mpp         ! MPP library 
     31   USE wrk_nemo_2      ! work arrays 
    3132   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3233   USE prtctl          ! Print control 
     
    208209      USE oce     , zviscos => ua   ! temp. array for viscosities use ua as workspace 
    209210      USE oce     , zdiffut => va   ! temp. array for diffusivities use sa as workspace 
    210       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz 
    211       USE wrk_nemo, ONLY: zBo    => wrk_2d_1, &  ! Surface buoyancy forcing, 
    212                           zBosol => wrk_2d_2, &  ! friction velocity 
    213                           zustar => wrk_2d_3 
    214       USE wrk_nemo, ONLY: zmask  => wrk_2d_4 
    215 !gm      USE wrk_nemo, ONLY: wrk_2d_5, wrk_2d_6, wrk_2d_7, wrk_2d_8, wrk_2d_9, & 
    216       USE wrk_nemo, ONLY:           wrk_2d_6, wrk_2d_7, wrk_2d_8, wrk_2d_9, & 
    217                           wrk_2d_10,wrk_2d_11 
    218       USE wrk_nemo, ONLY: wrk_1d_1,  wrk_1d_2,  wrk_1d_3,  wrk_1d_4,  & 
    219                           wrk_1d_5,  wrk_1d_6,  wrk_1d_7,  wrk_1d_8,  & 
    220                           wrk_1d_9,  wrk_1d_10, wrk_1d_11, wrk_1d_12, & 
    221                           wrk_1d_13, wrk_1d_14 
    222       USE wrk_nemo, ONLY: zblcm => wrk_xz_1, &   ! Boundary layer  
    223                           zblct => wrk_xz_2      !  diffusivities/viscosities 
    224 #if defined key_zdfddm 
    225       USE wrk_nemo, ONLY: zdiffus => wrk_3d_1 
    226       USE wrk_nemo, ONLY: zblcs   => wrk_xz_3 
    227 #endif 
    228211      !! 
    229212      INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
     
    250233      REAL(wp) ::   zflag, ztemp, zrn2, zdep21, zdep32, zdep43 
    251234      REAL(wp) ::   zdku2, zdkv2, ze3sqr, zsh2, zri, zfri          ! Interior richardson mixing 
    252 !gm      REAL(wp), POINTER, DIMENSION(:,:) ::   zmoek                 ! Moning-Obukov limitation 
    253       REAL(wp), DIMENSION(jpi,0:2) ::   zmoek                 ! Moning-Obukov limitation 
     235      REAL(wp), POINTER, DIMENSION(:,:) ::   zmoek                 ! Moning-Obukov limitation 
    254236      REAL(wp), POINTER, DIMENSION(:)   ::   zmoa, zekman                 
    255237      REAL(wp)                          ::   zmob, zek 
     
    266248      REAL(wp), POINTER, DIMENSION(:)   ::   za2s, za3s, zkmps 
    267249      REAL(wp) ::                            zkm1s 
    268 #endif 
     250      REAL(wp), POINTER, DIMENSION(:,:) ::   zblcs 
     251      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdiffus 
     252#endif 
     253      REAL(wp), POINTER, DIMENSION(:,:) ::   zBo, zBosol, zustar         ! Surface buoyancy forcing, friction velocity 
     254      REAL(wp), POINTER, DIMENSION(:,:) ::   zmask, zblcm, zblct 
    269255      !!-------------------------------------------------------------------- 
    270256      
    271       IF( wrk_in_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR.   & 
    272           wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11)          .OR.   & 
    273           wrk_in_use(3, 1)                                .OR. & 
    274           wrk_in_use_xz(1,2,3)                              ) THEN 
    275          CALL ctl_stop('zdf_kpp : requested workspace arrays unavailable.')   ;   RETURN 
    276       ENDIF 
    277       ! Set-up pointers to 2D spaces 
    278 !gm      zmoek(1:jpi,0:2) => wrk_2d_5(1:jpi,1:3) 
    279       zdepw => wrk_2d_6(:,1:4) 
    280       zdift => wrk_2d_7(:,1:4) 
    281       zvisc => wrk_2d_8(:,1:4) 
    282       zdept => wrk_2d_9(:,1:3) 
    283       zriblk => wrk_2d_10(:,1:2) 
    284       ! 1D spaces 
    285       zmoa   => wrk_1d_1(1:jpi) 
    286       zekman => wrk_1d_2(1:jpi) 
    287       zhmax  => wrk_1d_3(1:jpi) 
    288       zria   => wrk_1d_4(1:jpi) 
    289       zhbl   => wrk_1d_5(1:jpi) 
    290       za2m   => wrk_1d_6(1:jpi) 
    291       za3m   => wrk_1d_7(1:jpi) 
    292       zkmpm  => wrk_1d_8(1:jpi) 
    293       za2t   => wrk_1d_9(1:jpi) 
    294       za3t   => wrk_1d_10(1:jpi) 
    295       zkmpt  => wrk_1d_11(1:jpi) 
     257      CALL wrk_alloc( jpi, zmoa, zekman, zhmax, zria, zhbl ) 
     258      CALL wrk_alloc( jpi, za2m, za3m, zkmpm, za2t, za3t, zkmpt ) 
     259      CALL wrk_alloc( jpi,2, zriblk ) 
     260      CALL wrk_alloc( jpi,3, zmoek, kjstart = 0 ) 
     261      CALL wrk_alloc( jpi,3, zdept ) 
     262      CALL wrk_alloc( jpi,4, zdepw, zdift, zvisc ) 
     263      CALL wrk_alloc( jpi,jpj, zBo, zBosol, zustar ) 
     264      CALL wrk_alloc( jpi,jpk, zmask, zblcm, zblct, zblcs ) 
    296265#if defined key_zdfddm 
    297       zdifs => wrk_2d_11(:,1:4) 
    298       za2s  => wrk_1d_12(1:jpi) 
    299       za3s  => wrk_1d_13(1:jpi) 
    300       zkmps => wrk_1d_14(1:jpi) 
     266      CALL wrk_alloc( jpi,4, zdifs ) 
     267      CALL wrk_alloc( jpi, zmoa, za2s, za3s, zkmps ) 
     268      CALL wrk_alloc( jpi,jpk, zblcs ) 
     269      CALL wrk_alloc( jpi,jpi,jpk, zdiffus ) 
    301270#endif 
    302271 
     
    12301199         ENDIF 
    12311200 
    1232       IF( wrk_not_released(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 
    1233           wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11)          .OR. & 
    1234           wrk_not_released(3, 1)                                .OR. & 
    1235           wrk_not_released_xz(1,2,3)  )   CALL ctl_stop('zdf_kpp : failed to release workspace arrays') 
     1201      CALL wrk_dealloc( jpi, zmoa, zekman, zhmax, zria, zhbl ) 
     1202      CALL wrk_dealloc( jpi, za2m, za3m, zkmpm, za2t, za3t, zkmpt ) 
     1203      CALL wrk_dealloc( jpi,2, zriblk ) 
     1204      CALL wrk_dealloc( jpi,3, zmoek, kjstart = 0 ) 
     1205      CALL wrk_dealloc( jpi,3, zdept ) 
     1206      CALL wrk_dealloc( jpi,4, zdepw, zdift, zvisc ) 
     1207      CALL wrk_dealloc( jpi,jpj, zBo, zBosol, zustar ) 
     1208      CALL wrk_dealloc( jpi,jpk, zmask, zblcm, zblct, zblcs ) 
     1209#if defined key_zdfddm 
     1210      CALL wrk_dealloc( jpi,4, zdifs ) 
     1211      CALL wrk_dealloc( jpi, zmoa, za2s, za3s, zkmps ) 
     1212      CALL wrk_dealloc( jpi,jpk, zblcs ) 
     1213      CALL wrk_dealloc( jpi,jpi,jpk, zdiffus ) 
     1214#endif 
    12361215      ! 
    12371216   END SUBROUTINE zdf_kpp 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90

    r2787 r3155  
    1616   USE iom             ! I/O library 
    1717   USE lib_mpp         ! MPP library 
     18   USE wrk_nemo_2      ! work arrays 
    1819   USE trc_oce, ONLY : lk_offline ! offline flag 
    1920 
     
    6970      !! ** Action  :   nmln, hmld, hmlp, hmlpt 
    7071      !!---------------------------------------------------------------------- 
    71       USE wrk_nemo, ONLY:   iwrk_in_use, iwrk_not_released 
    72       USE wrk_nemo, ONLY:   imld => iwrk_2d_1    ! 2D integer workspace 
    73       !! 
    7472      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    7573      !! 
    7674      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    7775      INTEGER  ::   iikn, iiki          ! temporary integer within a do loop 
     76      INTEGER, POINTER, DIMENSION(:,:) ::   imld                ! temporary workspace 
    7877      REAL(wp) ::   zrho_c = 0.01_wp    ! density criterion for mixed layer depth 
    7978      REAL(wp) ::   zavt_c = 5.e-4_wp   ! Kz criterion for the turbocline depth 
    8079      !!---------------------------------------------------------------------- 
    8180 
    82       IF( iwrk_in_use(2, 1) ) THEN 
    83          CALL ctl_stop('zdf_mxl : requested workspace array unavailable')   ;   RETURN 
    84       ENDIF 
     81      CALL wrk_alloc( jpi,jpj, imld ) 
    8582 
    8683      IF( kt == nit000 ) THEN 
     
    120117      IF(ln_ctl)   CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmlp, clinfo2=' hmlp : ', ovlap=1 ) 
    121118      ! 
    122       IF( iwrk_not_released(2, 1) )   CALL ctl_stop('zdf_mxl: failed to release workspace array') 
     119      CALL wrk_dealloc( jpi,jpj, imld ) 
    123120      ! 
    124121   END SUBROUTINE zdf_mxl 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90

    r3104 r3155  
    2727   USE lbclnk                ! ocean lateral boundary condition (or mpp link) 
    2828   USE lib_mpp               ! MPP library 
     29   USE wrk_nemo_2            ! work arrays 
    2930   USE eosbn2, ONLY : nn_eos 
    3031 
     
    109110      !!              PFJ Lermusiaux 2001. 
    110111      !!---------------------------------------------------------------------- 
    111       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    112       USE wrk_nemo, ONLY:   zwx => wrk_2d_1         ! 2D workspace 
    113       USE wrk_nemo, ONLY:   ekm_dep => wrk_2d_2     ! 2D workspace 
    114112      USE phycst,   ONLY:   rsmall,rau0 
    115113      USE sbc_oce,  ONLY:   taum 
     
    120118      REAL(wp) ::   zcoef, zdku, zdkv, zri, z05alp, zflageos  ! temporary scalars 
    121119      REAL(wp) ::   zrhos, zustar 
    122       !!---------------------------------------------------------------------- 
    123  
    124       IF( wrk_in_use(2, 1,2) ) THEN 
    125          CALL ctl_stop('zdf_ric : requested workspace array unavailable')   ;   RETURN 
    126       ENDIF 
     120      REAL(wp), POINTER, DIMENSION(:,:) ::   zwx, ekm_dep   
     121      !!---------------------------------------------------------------------- 
     122 
     123      CALL wrk_alloc( jpi,jpj, zwx, ekm_dep ) 
    127124      !                                                ! =============== 
    128125      DO jk = 2, jpkm1                                 ! Horizontal slab 
     
    224221      CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. ) 
    225222      ! 
    226       IF( wrk_not_released(2, 1,2) )   CALL ctl_stop('zdf_ric: failed to release workspace array') 
     223      CALL wrk_dealloc( jpi,jpj, zwx, ekm_dep ) 
    227224      ! 
    228225   END SUBROUTINE zdf_ric 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r2977 r3155  
    5050   USE iom            ! I/O manager library 
    5151   USE lib_mpp        ! MPP library 
     52   USE wrk_nemo_2     ! work arrays 
    5253 
    5354   IMPLICIT NONE 
     
    190191      !!                (= Kz dz[Ub] * dz[Un] ) 
    191192      !! --------------------------------------------------------------------- 
    192       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released, iwrk_in_use, iwrk_not_released 
    193193      USE oce     , ONLY:   zdiag => ua          ! (ua,va) used  as workspace 
    194194      USE oce     , ONLY:   tsa                  ! (tsa) used  as workspace 
    195       USE wrk_nemo, ONLY:   imlc  => iwrk_2d_1   ! 2D INTEGER workspace 
    196       USE wrk_nemo, ONLY:   zhlc  =>  wrk_2d_1   ! 2D REAL workspace 
    197       USE wrk_nemo, ONLY:   zpelc =>  wrk_3d_1   ! 3D REAL workspace 
    198195      !! 
    199196      INTEGER  ::   ji, jj, jk                      ! dummy loop arguments 
     
    210207!!bfr      REAL(wp) ::   zebot                           !    -         - 
    211208      REAL(wp), POINTER, DIMENSION(:,:,:) :: zd_up, zd_lw 
     209      INTEGER , POINTER, DIMENSION(:,:  ) :: imlc 
     210      REAL(wp), POINTER, DIMENSION(:,:  ) :: zhlc 
     211      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpelc 
    212212      !!-------------------------------------------------------------------- 
    213213      ! 
    214       IF( iwrk_in_use(2, 1) .OR.   & 
    215            wrk_in_use(2, 1) .OR.   & 
    216            wrk_in_use(3, 1)   ) THEN 
    217          CALL ctl_stop('tke_tke: requested workspace arrays unavailable')   ;   RETURN 
    218       END IF 
     214      CALL wrk_alloc( jpi,jpj, imlc )    ! integer 
     215      CALL wrk_alloc( jpi,jpj, zhlc )  
     216      CALL wrk_alloc( jpi,jpj,jpk, zpelc )  
    219217      ! 
    220218      zd_up => tsa(:,:,:,1)  
     
    434432      CALL lbc_lnk( en, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    435433      ! 
    436       IF( iwrk_not_released(2 ,1) .OR.   & 
    437            wrk_not_released(2, 1) .OR.   & 
    438            wrk_not_released(3, 1)  )   CALL ctl_stop( 'tke_tke: failed to release workspace arrays' ) 
     434      CALL wrk_dealloc( jpi,jpj, imlc )    ! integer 
     435      CALL wrk_dealloc( jpi,jpj, zhlc )  
     436      CALL wrk_dealloc( jpi,jpj,jpk, zpelc )  
    439437      ! 
    440438   END SUBROUTINE tke_tke 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r2715 r3155  
    2525   USE iom             ! I/O Manager 
    2626   USE lib_mpp         ! MPP library 
     27   USE wrk_nemo_2      ! work arrays 
    2728   USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    2829 
     
    104105      !!---------------------------------------------------------------------- 
    105106      USE oce, zav_tide  =>   ua    ! use ua as workspace 
    106       USE wrk_nemo, ONLY: zkz => wrk_2d_1 
    107107      !! 
    108108      INTEGER, INTENT(in) ::   kt   ! ocean time-step  
     
    110110      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    111111      REAL(wp) ::   ztpc         ! scalar workspace 
    112       !!---------------------------------------------------------------------- 
    113  
    114       IF(wrk_in_use(2, 1))THEN 
    115          CALL ctl_stop('zdf_tmx : requested workspace array unavailable.')   ;   RETURN 
    116       END IF 
     112      REAL(wp), POINTER, DIMENSION(:,:) ::   zkz 
     113      !!---------------------------------------------------------------------- 
     114 
     115      CALL wrk_alloc( jpi,jpj, zkz ) 
     116 
    117117      !                          ! ----------------------- ! 
    118118      !                          !  Standard tidal mixing  !  (compute zav_tide) 
     
    176176      IF(ln_ctl)   CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 
    177177      ! 
    178       IF(wrk_not_released(2, 1))THEN 
    179          CALL ctl_stop('zdf_tmx : failed to release workspace array.') 
    180       END IF 
     178      CALL wrk_dealloc( jpi,jpj, zkz ) 
    181179      ! 
    182180   END SUBROUTINE zdf_tmx 
     
    203201      !! References :  Koch-Larrouy et al. 2007, GRL  
    204202      !!---------------------------------------------------------------------- 
    205       USE wrk_nemo, ONLY: zkz => wrk_2d_5 
    206       USE wrk_nemo, ONLY: zsum1 => wrk_2d_2, zsum2 => wrk_2d_3, zsum => wrk_2d_4 
    207       USE wrk_nemo, ONLY: zempba_3d_1 => wrk_3d_1, zempba_3d_2 => wrk_3d_2 
    208       USE wrk_nemo, ONLY: zempba_3d   => wrk_3d_3, zdn2dz      => wrk_3d_4 
    209       USE wrk_nemo, ONLY: zavt_itf    => wrk_3d_5 
    210       !! 
    211203      INTEGER , INTENT(in   )                         ::   kt   ! ocean time-step 
    212204      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pav  ! Tidal mixing coef. 
     
    214206      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    215207      REAL(wp) ::   zcoef, ztpc   ! temporary scalar 
    216       !!---------------------------------------------------------------------- 
    217       ! 
    218       IF( wrk_in_use(2, 2,3,4,5) .OR. wrk_in_use(3, 1,2,3,4,5) )THEN 
    219          CALL ctl_stop('tmx_itf : requested workspace arrays unavailable.') 
    220          RETURN 
    221       END IF 
     208      REAL(wp), DIMENSION(:,:)  , POINTER ::   zkz                        ! 2D workspace 
     209      REAL(wp), DIMENSION(:,:)  , POINTER ::   zsum1 , zsum2 , zsum       !  -      - 
     210      REAL(wp), DIMENSION(:,:,:), POINTER ::   zempba_3d_1, zempba_3d_2   ! 3D workspace 
     211      REAL(wp), DIMENSION(:,:,:), POINTER ::   zempba_3d  , zdn2dz        !  -      - 
     212      REAL(wp), DIMENSION(:,:,:), POINTER ::   zavt_itf                   !  -      - 
     213      !!---------------------------------------------------------------------- 
     214      ! 
     215      CALL wrk_alloc( jpi,jpj, zkz, zsum1 , zsum2 , zsum ) 
     216      CALL wrk_alloc( jpi,jpj,jpk, zempba_3d_1, zempba_3d_2, zempba_3d, zdn2dz, zavt_itf ) 
     217 
    222218      !                             ! compute the form function using N2 at each time step 
    223219      zempba_3d_1(:,:,jpk) = 0.e0 
     
    304300      END DO 
    305301      ! 
    306       IF( wrk_not_released(2, 2,3,4,5) .OR. & 
    307           wrk_not_released(3, 1,2,3,4,5) )THEN 
    308          CALL ctl_stop('tmx_itf : failed to release workspace arrays.') 
    309       END IF 
     302      CALL wrk_dealloc( jpi,jpj, zkz, zsum1 , zsum2 , zsum ) 
     303      CALL wrk_dealloc( jpi,jpj,jpk, zempba_3d_1, zempba_3d_2, zempba_3d, zdn2dz, zavt_itf ) 
    310304      ! 
    311305   END SUBROUTINE tmx_itf 
     
    348342      !!---------------------------------------------------------------------- 
    349343      USE oce     ,         zav_tide =>  ua         ! ua used as workspace 
    350       USE wrk_nemo, ONLY:   zem2     =>  wrk_2d_1   ! read M2 and  
    351       USE wrk_nemo, ONLY:   zek1     =>  wrk_2d_2   ! K1 tidal energy 
    352       USE wrk_nemo, ONLY:   zkz      =>  wrk_2d_3   ! total M2, K1 and S2 tidal energy 
    353       USE wrk_nemo, ONLY:   zfact    =>  wrk_2d_4   ! used for vertical structure function 
    354       USE wrk_nemo, ONLY:   zhdep    =>  wrk_2d_5   ! Ocean depth  
    355       USE wrk_nemo, ONLY:   zpc      =>  wrk_3d_1   ! power consumption 
    356344      !! 
    357345      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    358346      INTEGER  ::   inum         ! local integer 
    359347      REAL(wp) ::   ztpc, ze_z   ! local scalars 
     348      REAL(wp), DIMENSION(:,:)  , POINTER ::  zem2, zek1   ! read M2 and K1 tidal energy 
     349      REAL(wp), DIMENSION(:,:)  , POINTER ::  zkz          ! total M2, K1 and S2 tidal energy 
     350      REAL(wp), DIMENSION(:,:)  , POINTER ::  zfact        ! used for vertical structure function 
     351      REAL(wp), DIMENSION(:,:)  , POINTER ::  zhdep        ! Ocean depth  
     352      REAL(wp), DIMENSION(:,:,:), POINTER ::  zpc      ! power consumption 
    360353      !! 
    361354      NAMELIST/namzdf_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 
    362355      !!---------------------------------------------------------------------- 
    363356 
    364       IF( wrk_in_use(2, 1,2,3,4,5)  .OR.  wrk_in_use(3, 1)  ) THEN 
    365          CALL ctl_stop('zdf_tmx_init : requested workspace arrays unavailable.')   ;   RETURN 
    366       END IF 
    367  
     357      CALL wrk_alloc( jpi,jpj, zem2, zek1, zkz, zfact, zhdep ) 
     358      CALL wrk_alloc( jpi,jpj,jpk, zpc ) 
     359       
    368360      REWIND( numnam )               ! Read Namelist namtmx : Tidal Mixing 
    369361      READ  ( numnam, namzdf_tmx ) 
     
    526518      ENDIF 
    527519      ! 
    528       IF(wrk_not_released(2, 1,2,3,4,5) .OR.   & 
    529          wrk_not_released(3, 1)          )   CALL ctl_stop( 'zdf_tmx_init : failed to release workspace arrays' ) 
     520      CALL wrk_dealloc( jpi,jpj, zem2, zek1, zkz, zfact, zhdep ) 
     521      CALL wrk_dealloc( jpi,jpj,jpk, zpc ) 
    530522      ! 
    531523   END SUBROUTINE zdf_tmx_init 
Note: See TracChangeset for help on using the changeset viewer.