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

Changeset 2593


Ignore:
Timestamp:
2011-02-18T18:31:11+01:00 (13 years ago)
Author:
trackstand2
Message:

Made module vars dynamic and added _alloc() routine

Location:
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/prtctl_trc.F90

    r2528 r2593  
    6262      !!                it must looks like: CALL prt_ctl( mask=tmask ). 
    6363      !!---------------------------------------------------------------------- 
     64      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     65      USE wrk_nemo, ONLY: zmask => wrk_3d_1, ztab3d => wrk_3d_2 
     66      !! 
    6467      REAL(wp)         , DIMENSION(:,:,:,:), INTENT(in), OPTIONAL ::   tab4d     ! 4D array 
    6568      REAL(wp)         , DIMENSION(:,:,:)  , INTENT(in), OPTIONAL ::   mask      ! 3D mask to apply to the tab4d array 
     
    7174      INTEGER  ::   overlap, jn, js, sind, eind, kdir, j_id 
    7275      REAL(wp) ::   zsum, zvctl 
    73       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask, ztab3d 
    7476      CHARACTER (len=20), DIMENSION(jptra) ::   cl 
    7577      CHARACTER (len=10) ::   cl2 
    7678      !!---------------------------------------------------------------------- 
     79 
     80      IF(.NOT. wrk_use(3, 1,2))THEN 
     81         CALL ctl_stop('prt_ctl_trc : requested workspace arrays unavailable.') 
     82         RETURN 
     83      END IF 
    7784 
    7885      !                                      ! Arrays, scalars initialization  
     
    178185         WRITE(j_id,*) clinfo 
    179186      END DO 
     187      ! 
     188      IF(.NOT. wrk_release(3, 1,2))THEN 
     189         CALL ctl_stop('prt_ctl_trc : failed to release workspace arrays.') 
     190      END IF 
    180191      ! 
    181192   END SUBROUTINE prt_ctl_trc_info 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r2568 r2593  
    1818   IMPLICIT NONE 
    1919   PUBLIC 
     20 
     21   PUBLIC    trc_alloc          ! called by nemogcm.F90 
    2022 
    2123   !! passive tracers names and units (read in namelist) 
     
    110112   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    111113   !!====================================================================== 
     114#if defined key_top 
     115CONTAINS 
     116 
     117   FUNCTION trc_alloc() 
     118      !!------------------------------------------------------------------- 
     119      !!                    *** ROUTINE trc_alloc *** 
     120      !!------------------------------------------------------------------- 
     121      INTEGER :: trc_alloc 
     122      !!------------------------------------------------------------------- 
     123 
     124      ALLOCATE(cvol(jpi,jpj,jpk),                                  & 
     125               trn(jpi,jpj,jpk,jptra),                             & 
     126               tra(jpi,jpj,jpk,jptra),                             & 
     127               trb(jpi,jpj,jpk,jptra),                             & 
     128               gtru(jpi,jpj,jptra), gtrv(jpi,jpj,jptra),           & 
     129               rdttrc(jpk),                                        & 
     130# if defined key_diatrc && ! defined key_iomput 
     131               trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), & 
     132#endif 
     133# if defined key_diabio 
     134               trbio(jpi,jpj,jpk,jpdiabio),                        & 
     135#endif 
     136               Stat=trc_alloc) 
     137 
     138      IF(trc_alloc /= 0)THEN 
     139         CALL ctl_warn('trc_alloc: failed to allocate arrays.') 
     140      END IF 
     141 
     142   END FUNCTION trc_alloc 
     143#endif 
     144 
    112145END MODULE trc 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcdia.F90

    r2567 r2593  
    3232   PRIVATE 
    3333 
    34    PUBLIC   trc_dia   ! called by XXX module  
     34   PUBLIC   trc_dia        ! called by XXX module  
     35   PUBLIC   trc_dia_alloc  ! called by nemogcm.F90 
    3536 
    3637   INTEGER  ::   nit5      !: id for tracer output file 
     
    4041   INTEGER  ::   ndimt51   !: number of ocean points in index array 
    4142   REAL(wp) ::   zjulian   !: ????   not DOCTOR ! 
    42    INTEGER , DIMENSION (jpij*jpk) ::   ndext50   !: integer arrays for ocean 3D index 
    43    INTEGER , DIMENSION (jpij)    ::   ndext51   !: integer arrays for ocean surface index 
     43   INTEGER , ALLOCATABLE, SAVE, DIMENSION (:) ::   ndext50   !: integer arrays for ocean 3D index 
     44   INTEGER , ALLOCATABLE, SAVE, DIMENSION (:) ::   ndext51   !: integer arrays for ocean surface index 
    4445# if defined key_diatrc 
    4546   INTEGER  ::   nitd      !: id for additional array output file 
     
    6162   !!---------------------------------------------------------------------- 
    6263CONTAINS 
     64 
     65   FUNCTION trc_dia_alloc() 
     66      !!--------------------------------------------------------------------- 
     67      !!                     ***  ROUTINE trc_dia_alloc  *** 
     68      !!--------------------------------------------------------------------- 
     69      INTEGER :: trc_dia_alloc 
     70      !!--------------------------------------------------------------------- 
     71 
     72      ALLOCATE(ndext50(jpij*jpk), ndext51(jpij), Stat=trc_dia_alloc) 
     73 
     74      IF(trc_dia_alloc /= 0)THEN 
     75         CALL ctl_warn('trc_dia_alloc : failed to allocate arrays.') 
     76      END IF 
     77 
     78   END FUNCTION trc_dia_alloc 
     79 
    6380 
    6481   SUBROUTINE trc_dia( kt )   
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcdta.F90

    r2528 r2593  
    2323   PRIVATE 
    2424 
    25    PUBLIC trc_dta   ! called in trcini.F90 and trcdmp.F90 
     25   PUBLIC trc_dta         ! called in trcini.F90 and trcdmp.F90 
     26   PUBLIC trc_dta_alloc   ! called in nemogcm.F90 
    2627 
    2728   LOGICAL , PUBLIC, PARAMETER ::   lk_dtatrc = .TRUE.   !: temperature data flag 
    28    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk,jptra) ::   trdta   !: tracer data at given time-step 
    29  
    30    REAL(wp), DIMENSION(jpi,jpj,jpk,jptra,2) ::   tracdta            ! tracer data at two consecutive times 
    31    INTEGER , DIMENSION(jptra) ::   nlectr      !: switch for reading once 
    32    INTEGER , DIMENSION(jptra) ::   ntrc1       !: number of first month when reading 12 monthly value 
    33    INTEGER , DIMENSION(jptra) ::   ntrc2       !: number of second month when reading 12 monthly value 
     29   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   trdta   !: tracer data at given time-step 
     30 
     31   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) ::   tracdta       ! tracer data at two consecutive times 
     32   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   nlectr      !: switch for reading once 
     33   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   ntrc1       !: number of first month when reading 12 monthly value 
     34   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) ::   ntrc2       !: number of second month when reading 12 monthly value 
    3435 
    3536   !! * Substitutions 
     
    4142   !!---------------------------------------------------------------------- 
    4243CONTAINS 
     44 
     45   FUNCTION trc_dta_alloc() 
     46      !!---------------------------------------------------------------------- 
     47      !!                   ***  ROUTINE trc_dta_alloc  *** 
     48      !!---------------------------------------------------------------------- 
     49      INTEGER :: trc_dta_alloc 
     50      !!---------------------------------------------------------------------- 
     51 
     52      ALLOCATE(trdta(jpi,jpj,jpk,jptra),                   & 
     53               tracdta(jpi,jpj,jpk,jptra,2),               & 
     54               nlectr(jptra), ntrc1(jptra), ntrc2,(jptra), &  
     55               ! 
     56               Stat = trc_dta_alloc) 
     57 
     58      IF(trc_dta_alloc /= 0)THEN 
     59         CALL ctl_warn('trc_dta_alloc : failed to allocate arrays.') 
     60      END IF 
     61 
     62   END FUNCTION trc_dta_alloc 
     63 
    4364 
    4465   SUBROUTINE trc_dta( kt ) 
Note: See TracChangeset for help on using the changeset viewer.