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/p4zsed.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/p4zsed.F90

    r2528 r2715  
    1818   USE oce_trc         ! 
    1919   USE sms_pisces 
    20    USE lib_mpp 
    21    USE lib_fortran 
    2220   USE prtctl_trc 
    2321   USE p4zbio 
     
    2725   USE p4zrem 
    2826   USE p4zlim 
    29    USE lbclnk 
    3027   USE iom 
    3128 
     
    3633   PUBLIC   p4z_sed    
    3734   PUBLIC   p4z_sed_init    
     35   PUBLIC   p4z_sed_alloc 
    3836 
    3937   !! * Shared module variables 
    40    LOGICAL, PUBLIC ::    & 
    41      ln_dustfer  = .FALSE.      ,  &  !: 
    42      ln_river    = .FALSE.      ,  &  !: 
    43      ln_ndepo    = .FALSE.      ,  &  !: 
    44      ln_sedinput = .FALSE.            !: 
    45  
    46    REAL(wp), PUBLIC ::   & 
    47      sedfeinput = 1.E-9_wp   ,  &  !: 
    48      dustsolub  = 0.014_wp         !: 
     38   LOGICAL, PUBLIC :: ln_dustfer  = .FALSE.    !: boolean for dust input from the atmosphere 
     39   LOGICAL, PUBLIC :: ln_river    = .FALSE.    !: boolean for river input of nutrients 
     40   LOGICAL, PUBLIC :: ln_ndepo    = .FALSE.    !: boolean for atmospheric deposition of N 
     41   LOGICAL, PUBLIC :: ln_sedinput = .FALSE.    !: boolean for Fe input from sediments 
     42 
     43   REAL(wp), PUBLIC :: sedfeinput = 1.E-9_wp   !: Coastal release of Iron 
     44   REAL(wp), PUBLIC :: dustsolub  = 0.014_wp   !: Solubility of the dust 
    4945 
    5046   !! * Module variables 
    51    REAL(wp) :: ryyss               !: number of seconds per year  
    52    REAL(wp) :: ryyss1              !: inverse of ryyss 
    53    REAL(wp) :: rmtss               !: number of seconds per month 
    54    REAL(wp) :: rday1               !: inverse of rday 
    55  
    56    INTEGER , PARAMETER :: & 
    57         jpmth = 12, jpyr = 1 
    58    INTEGER ::                   & 
    59       numdust,                  &  !: logical unit for surface fluxes data 
    60       nflx1 , nflx2,            &  !: first and second record used 
    61       nflx11, nflx12      ! ??? 
    62    REAL(wp), DIMENSION(jpi,jpj,jpmth) ::  dustmo    !: set of dust fields 
    63    REAL(wp), DIMENSION(jpi,jpj)      ::  rivinp, cotdep, nitdep, dust  
    64    REAL(wp), DIMENSION(jpi,jpj)      ::  e1e2t 
    65    REAL(wp), DIMENSION(jpi,jpj,jpk)  ::  ironsed  
     47   REAL(wp) :: ryyss                  !: number of seconds per year  
     48   REAL(wp) :: ryyss1                 !: inverse of ryyss 
     49   REAL(wp) :: rmtss                  !: number of seconds per month 
     50   REAL(wp) :: rday1                  !: inverse of rday 
     51 
     52   INTEGER , PARAMETER :: jpmth = 12  !: number of months per year 
     53   INTEGER , PARAMETER :: jpyr  = 1   !: one year 
     54 
     55   INTEGER ::  numdust                !: logical unit for surface fluxes data 
     56   INTEGER ::  nflx1 , nflx2          !: first and second record used 
     57   INTEGER ::  nflx11, nflx12 
     58 
     59   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dustmo    !: set of dust fields 
     60   REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: dust      !: dust fields 
     61   REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivinp, cotdep    !: river input fields 
     62   REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: nitdep    !: atmospheric N deposition  
     63   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ironsed   !: Coastal supply of iron 
     64 
    6665   REAL(wp) :: sumdepsi, rivalkinput, rivpo4input, nitdepinput 
    6766 
     
    7675CONTAINS 
    7776 
     77 
    7878   SUBROUTINE p4z_sed( kt, jnt ) 
    7979      !!--------------------------------------------------------------------- 
     
    8686      !! ** Method  : - ??? 
    8787      !!--------------------------------------------------------------------- 
     88      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
     89      USE wrk_nemo, ONLY: zsidep => wrk_2d_1, zwork => wrk_2d_2, zwork1 => wrk_2d_3 
     90      USE wrk_nemo, ONLY: znitrpot => wrk_3d_2, zirondep => wrk_3d_3 
     91      ! 
    8892      INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
    8993      INTEGER  ::   ji, jj, jk, ikt 
     
    9498      REAL(wp) ::   zdenitot, znitrpottot, zlim, zfact 
    9599      REAL(wp) ::   zwsbio3, zwsbio4, zwscal 
    96       REAL(wp), DIMENSION(jpi,jpj)     ::   zsidep 
    97       REAL(wp), DIMENSION(jpi,jpj)     ::   zwork, zwork1 
    98       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   znitrpot, zirondep 
    99100      CHARACTER (len=25) :: charout 
    100101      !!--------------------------------------------------------------------- 
     102 
     103      IF( ( wrk_in_use(2, 1,2,3) ) .OR. ( wrk_in_use(3, 2,3) ) ) THEN 
     104         CALL ctl_stop('p4z_sed: requested workspace arrays unavailable')  ;  RETURN 
     105      END IF 
    101106 
    102107      IF( jnt == 1  .AND.  ln_dustfer  )  CALL p4z_sbc( kt ) 
     
    288293       ENDIF 
    289294 
     295      IF( ( wrk_not_released(2, 1,2,3) ) .OR. ( wrk_not_released(3, 2,3) ) )   & 
     296        &         CALL ctl_stop('p4z_sed: failed to release workspace arrays') 
     297 
    290298   END SUBROUTINE p4z_sed 
    291299 
     
    474482      ryyss1 = 1. / ryyss 
    475483      !                                    ! ocean surface cell 
    476       e1e2t(:,:) = e1t(:,:) * e2t(:,:) 
    477484 
    478485      ! total atmospheric supply of Si 
     
    512519   END SUBROUTINE p4z_sed_init 
    513520 
     521   INTEGER FUNCTION p4z_sed_alloc() 
     522      !!---------------------------------------------------------------------- 
     523      !!                     ***  ROUTINE p4z_sed_alloc  *** 
     524      !!---------------------------------------------------------------------- 
     525 
     526      ALLOCATE( dustmo(jpi,jpj,jpmth), dust(jpi,jpj)       ,     & 
     527        &       rivinp(jpi,jpj)      , cotdep(jpi,jpj)     ,     & 
     528        &       nitdep(jpi,jpj)      , ironsed(jpi,jpj,jpk), STAT=p4z_sed_alloc )   
     529 
     530      IF( p4z_sed_alloc /= 0 ) CALL ctl_warn('p4z_sed_alloc : failed to allocate arrays.') 
     531 
     532   END FUNCTION p4z_sed_alloc 
    514533#else 
    515534   !!====================================================================== 
Note: See TracChangeset for help on using the changeset viewer.