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/PISCES/p4zopt.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/PISCES/p4zopt.F90

    r2528 r2715  
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    8    !!             3.2  !  2009-04  (C. Ethe, G. Madec)  optimisaion 
     8   !!             3.2  !  2009-04  (C. Ethe, G. Madec)  optimisation 
    99   !!---------------------------------------------------------------------- 
    1010#if defined  key_pisces 
     
    2424   PUBLIC   p4z_opt        ! called in p4zbio.F90 module 
    2525   PUBLIC   p4z_opt_init   ! called in trcsms_pisces.F90 module 
    26  
    27    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   etot, enano, ediat   !: PAR for phyto, nano and diat  
    28    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   emoy                 !: averaged PAR in the mixed layer 
    29  
    30    INTEGER  ::  nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
    31    REAL(wp) ::  parlux = 0.43 / 3.e0 
    32  
    33    REAL(wp), DIMENSION(3,61), PUBLIC ::   xkrgb  !: tabulated attenuation coefficients for RGB absorption 
     26   PUBLIC   p4z_opt_alloc 
     27 
     28   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot, enano, ediat   !: PAR for phyto, nano and diat  
     29   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy                 !: averaged PAR in the mixed layer 
     30 
     31   INTEGER  ::   nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
     32   REAL(wp) ::   parlux = 0.43_wp / 3._wp 
     33 
     34   REAL(wp), DIMENSION(3,61), PUBLIC ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
    3435    
    3536   !!* Substitution 
     
    3839   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    3940   !! $Id$  
    40    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    41    !!---------------------------------------------------------------------- 
    42  
     41   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     42   !!---------------------------------------------------------------------- 
    4343CONTAINS 
    4444 
     
    5252      !! ** Method  : - ??? 
    5353      !!--------------------------------------------------------------------- 
    54       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     54      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     55      USE wrk_nemo, ONLY:   zdepmoy => wrk_2d_1 , zetmp => wrk_2d_2 
     56      USE wrk_nemo, ONLY:   zekg    => wrk_3d_2 , zekr  => wrk_3d_3 , zekb => wrk_3d_4 
     57      USE wrk_nemo, ONLY:   ze0     => wrk_3d_5 , ze1   => wrk_3d_6 
     58      USE wrk_nemo, ONLY:   ze2     => wrk_3d_7 , ze3   => wrk_3d_8 
     59      ! 
     60      INTEGER, INTENT(in) ::   kt, jnt   ! ocean time step 
     61      ! 
    5562      INTEGER  ::   ji, jj, jk 
    5663      INTEGER  ::   irgb 
    5764      REAL(wp) ::   zchl, zxsi0r 
    5865      REAL(wp) ::   zc0 , zc1 , zc2, zc3 
    59       REAL(wp), DIMENSION(jpi,jpj)     ::   zdepmoy, zetmp 
    60       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zekg, zekr, zekb 
    61       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ze1 , ze2 , ze3, ze0 
    6266      !!--------------------------------------------------------------------- 
    6367 
     68      IF(  wrk_in_use(2, 1,2)   .OR.   wrk_in_use(3, 2,3,4,5,6,7,8)   ) THEN 
     69         CALL ctl_stop('p4z_opt: requested workspace arrays unavailable')   ;   RETURN 
     70      ENDIF 
    6471 
    6572      !     Initialisation of variables used to compute PAR 
    6673      !     ----------------------------------------------- 
    67       ze1 (:,:,jpk) = 0.e0 
    68       ze2 (:,:,jpk) = 0.e0 
    69       ze3 (:,:,jpk) = 0.e0 
     74      ze1 (:,:,jpk) = 0._wp 
     75      ze2 (:,:,jpk) = 0._wp 
     76      ze3 (:,:,jpk) = 0._wp 
    7077 
    7178      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
     
    203210!CDIR NOVERRCHK 
    204211            DO ji = 1, jpi 
    205                IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) & 
    206        &           emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 
     212               IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) )   emoy(ji,jj,jk) = zetmp(ji,jj) / ( zdepmoy(ji,jj) + rtrn ) 
    207213            END DO 
    208214         END DO 
     
    223229#endif 
    224230      ! 
     231      IF(  wrk_not_released(2, 1,2)           .OR.   & 
     232           wrk_not_released(3, 2,3,4,5,6,7,8)   )   CALL ctl_stop('p4z_opt: failed to release workspace arrays') 
     233      ! 
    225234   END SUBROUTINE p4z_opt 
     235 
    226236 
    227237   SUBROUTINE p4z_opt_init 
     
    230240      !! 
    231241      !! ** Purpose :   Initialization of tabulated attenuation coef 
    232       !! 
    233       !! 
    234       !!---------------------------------------------------------------------- 
    235  
     242      !!---------------------------------------------------------------------- 
     243      ! 
    236244      CALL trc_oce_rgb( xkrgb )                  ! tabulated attenuation coefficients 
    237 !!      CALL trc_oce_rgb_read( xkrgb )               ! tabulated attenuation coefficients 
    238245      nksrp = trc_oce_ext_lev( r_si2, 0.33e2 )     ! max level of light extinction (Blue Chl=0.01) 
     246      ! 
    239247      IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksrp, ' ref depth = ', gdepw_0(nksrp+1), ' m' 
    240248      ! 
    241                          etot (:,:,:) = 0.e0 
    242                          enano(:,:,:) = 0.e0 
    243                          ediat(:,:,:) = 0.e0 
    244       IF( ln_qsr_bio )   etot3(:,:,:) = 0.e0 
     249                         etot (:,:,:) = 0._wp 
     250                         enano(:,:,:) = 0._wp 
     251                         ediat(:,:,:) = 0._wp 
     252      IF( ln_qsr_bio )   etot3(:,:,:) = 0._wp 
    245253      !  
    246254   END SUBROUTINE p4z_opt_init 
     255 
     256 
     257   INTEGER FUNCTION p4z_opt_alloc() 
     258      !!---------------------------------------------------------------------- 
     259      !!                     ***  ROUTINE p4z_opt_alloc  *** 
     260      !!---------------------------------------------------------------------- 
     261      ALLOCATE( etot (jpi,jpj,jpk) , enano(jpi,jpj,jpk) ,     & 
     262         &      ediat(jpi,jpj,jpk) , emoy (jpi,jpj,jpk) , STAT=p4z_opt_alloc ) 
     263         ! 
     264      IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 
     265      ! 
     266   END FUNCTION p4z_opt_alloc 
     267 
    247268#else 
    248269   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.