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

Changeset 3181


Ignore:
Timestamp:
2011-11-25T12:07:40+01:00 (12 years ago)
Author:
cetlod
Message:

New dynamical allocation on OPA_SRC/TRD routines

Location:
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRD
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90

    r2977 r3181  
    2626   USE eosbn2          ! equation of state 
    2727   USE phycst          ! physical constants 
     28   USE wrk_nemo_2      ! Memory allocation 
     29 
    2830 
    2931   IMPLICIT NONE 
     
    251253      !! ** Purpose :  write dynamic trends in ocean.output  
    252254      !!---------------------------------------------------------------------- 
    253       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    254       USE wrk_nemo, ONLY:   zkepe => wrk_3d_1 , zkx => wrk_3d_2   ! 3D workspace 
    255       USE wrk_nemo, ONLY:   zky   => wrk_3d_3 , zkz => wrk_3d_4   !  -      - 
    256255      ! 
    257256      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     
    259258      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    260259      REAL(wp) ::   zcof         ! local scalar 
    261       !!---------------------------------------------------------------------- 
    262  
    263       IF( wrk_in_use(3, 1,2,3,4) ) THEN 
    264          CALL ctl_stop('trd_dwr: requested workspace arrays unavailable')   ;   RETURN 
    265       ENDIF 
     260      REAL(wp), POINTER, DIMENSION(:,:,:)  ::  zkx, zky, zkz, zkepe   
     261      !!---------------------------------------------------------------------- 
     262 
     263      CALL wrk_alloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 
    266264 
    267265      ! I. Momentum trends 
     
    439437      ENDIF 
    440438      ! 
    441       IF( wrk_not_released(3, 1,2,3,4) )   CALL ctl_stop('trd_dwr: failed to release workspace arrays') 
     439      CALL wrk_dealloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 
    442440      ! 
    443441   END SUBROUTINE trd_dwr 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld.F90

    r2977 r3181  
    3838   USE restart         ! for lrst_oce 
    3939   USE lib_mpp         ! MPP library 
     40   USE wrk_nemo_2      ! Memory allocation 
    4041 
    4142   IMPLICIT NONE 
     
    9394      !!            surface and the control surface is called "mixed-layer" 
    9495      !!---------------------------------------------------------------------- 
    95       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    96       USE wrk_nemo, ONLY:   zvlmsk => wrk_2d_10     ! 2D workspace 
    9796      ! 
    9897      INTEGER                         , INTENT( in ) ::   ktrd       ! ocean trend index 
     
    102101      ! 
    103102      INTEGER ::   ji, jj, jk, isum 
    104       !!---------------------------------------------------------------------- 
    105  
    106       IF( wrk_in_use(2, 10) ) THEN 
    107          CALL ctl_stop('trd_mld_zint : requested workspace arrays unavailable')   ;   RETURN 
    108       ENDIF 
     103      REAL(wp), POINTER, DIMENSION(:,:)  :: zvlmsk  
     104      !!---------------------------------------------------------------------- 
     105 
     106      CALL wrk_alloc( jpi, jpj, zvlmsk )  
    109107 
    110108      ! I. Definition of control surface and associated fields 
     
    195193      END SELECT 
    196194      ! 
    197       IF( wrk_not_released(2, 10) )   CALL ctl_stop('trd_mld_zint: failed to release workspace arrays') 
     195      CALL wrk_dealloc( jpi, jpj, zvlmsk )  
    198196      ! 
    199197   END SUBROUTINE trd_mld_zint 
     
    247245      !!       - See NEMO documentation (in preparation) 
    248246      !!---------------------------------------------------------------------- 
    249       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    250       USE wrk_nemo, ONLY: ztmltot => wrk_2d_1,  zsmltot => wrk_2d_2 ! dT/dt over the anlysis window (including Asselin) 
    251       USE wrk_nemo, ONLY: ztmlres => wrk_2d_3,  zsmlres => wrk_2d_4 ! residual = dh/dt entrainment term 
    252       USE wrk_nemo, ONLY: ztmlatf => wrk_2d_5,  zsmlatf => wrk_2d_6 ! needed for storage only 
    253       USE wrk_nemo, ONLY: ztmltot2 => wrk_2d_7, ztmlres2 => wrk_2d_8, ztmltrdm2 => wrk_2d_9    ! \  working arrays to diagnose the trends 
    254       USE wrk_nemo, ONLY: zsmltot2 => wrk_2d_10, zsmlres2 => wrk_2d_11, zsmltrdm2 => wrk_2d_12 !  > associated with the time meaned ML T & S 
    255       USE wrk_nemo, ONLY: ztmlatf2 => wrk_2d_13, zsmlatf2 => wrk_2d_14     
    256       USE wrk_nemo, ONLY: wrk_3d_1, wrk_3d_2                     ! / 
    257247      ! 
    258248      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     
    261251      LOGICAL :: lldebug = .TRUE. 
    262252      REAL(wp) :: zavt, zfn, zfn2 
     253      !                                              ! z(ts)mltot : dT/dt over the anlysis window (including Asselin) 
     254      !                                              ! z(ts)mlres : residual = dh/dt entrainment term 
     255      REAL(wp), POINTER, DIMENSION(:,:  ) ::  ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf 
     256      REAL(wp), POINTER, DIMENSION(:,:  ) ::  ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2   
    263257      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztmltrd2, zsmltrd2   ! only needed for mean diagnostics 
    264258#if defined key_dimgout 
     
    267261#endif 
    268262      !!---------------------------------------------------------------------- 
    269        
    270       ! Check that the workspace arrays are all OK to be used 
    271       IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14)  .OR. & 
    272           wrk_in_use(3, 1,2)                                 ) THEN 
    273          CALL ctl_stop('trd_mld : requested workspace arrays unavailable')   ;   RETURN 
    274       ELSE IF(jpltrd > jpk) THEN 
    275          ! ARPDBG, is this reasonable or will this cause trouble in the future? 
    276          CALL ctl_stop('trd_mld : no. of mixed-layer trends (jpltrd) exceeds no. of model levels so cannot use 3D workspaces.') 
    277          RETURN          
    278       END IF 
    279       ! Set-up pointers into sub-arrays of 3d-workspaces 
    280       ztmltrd2 => wrk_3d_1(1:,:,1:jpltrd) 
    281       zsmltrd2 => wrk_3d_2(1:,:,1:jpltrd) 
     263   
     264      CALL wrk_alloc( jpi, jpj,         ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf                        ) 
     265      CALL wrk_alloc( jpi, jpj,         ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 )   
     266      CALL wrk_alloc( jpi, jpj, jpltrd, ztmltrd2, zsmltrd2                                                               ) 
    282267 
    283268      ! ====================================================================== 
     
    740725      IF( lrst_oce )   CALL trd_mld_rst_write( kt )  
    741726 
    742       IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14)  .OR. & 
    743           wrk_not_released(3, 1,2)                                )   & 
    744           CALL ctl_stop('trd_mld : failed to release workspace arrays.') 
     727      CALL wrk_dealloc( jpi, jpj,         ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf                        ) 
     728      CALL wrk_dealloc( jpi, jpj,         ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 )   
     729      CALL wrk_dealloc( jpi, jpj, jpltrd, ztmltrd2, zsmltrd2                                                               ) 
    745730      ! 
    746731   END SUBROUTINE trd_mld 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRD/trdmod.F90

    r2977 r3181  
    2424   USE trdmld                  ! ocean active mixed layer tracers trends  
    2525   USE in_out_manager          ! I/O manager 
    26    USE lib_mpp         ! MPP library 
     26   USE lib_mpp                 ! MPP library 
     27   USE wrk_nemo_2              ! Memory allocation 
     28 
    2729 
    2830   IMPLICIT NONE 
     
    5254      !!              integral constraints 
    5355      !!---------------------------------------------------------------------- 
    54       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    55       USE wrk_nemo, ONLY: ztswu => wrk_2d_1,  & 
    56                           ztswv => wrk_2d_2,  & 
    57                           ztbfu => wrk_2d_3,  & 
    58                           ztbfv => wrk_2d_4,  & 
    59                           z2dx  => wrk_2d_5,  & 
    60                           z2dy  => wrk_2d_6 
    6156      ! 
    6257      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdx   ! Temperature or U trend  
     
    6762      !! 
    6863      INTEGER ::   ji, jj   ! dummy loop indices 
    69       !!---------------------------------------------------------------------- 
    70  
    71       IF(wrk_in_use(2, 1,2,3,4,5,6))THEN 
    72          CALL ctl_warn('trd_mod: Requested workspace arrays already in use.')   ;   RETURN 
    73       END IF 
     64      REAL(wp), POINTER, DIMENSION(:,:)  :: ztswu, ztswv, ztbfu, ztbfv, z2dx, z2dy  
     65      !!---------------------------------------------------------------------- 
     66 
     67      CALL wrk_alloc( jpi, jpj, ztswu, ztswv, ztbfu, ztbfv, z2dx, z2dy ) 
    7468 
    7569      z2dx(:,:) = 0._wp   ;   z2dy(:,:) = 0._wp                            ! initialization of workspace arrays 
     
    227221      ENDIF 
    228222      ! 
    229       IF( wrk_not_released(2, 1,2,3,4,5,6) )   CALL ctl_warn('trd_mod: Failed to release workspace arrays.') 
     223      CALL wrk_dealloc( jpi, jpj, ztswu, ztswv, ztbfu, ztbfv, z2dx, z2dy ) 
    230224      ! 
    231225   END SUBROUTINE trd_mod 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90

    r2715 r3181  
    1818   USE in_out_manager   ! I/O manager 
    1919   USE lib_mpp          ! MPP library 
     20   USE wrk_nemo_2      ! Memory allocation 
     21 
    2022 
    2123   IMPLICIT NONE 
     
    6163      !!        nn_ctls > 1  : use fixed level surface jk = nn_ctls 
    6264      !!---------------------------------------------------------------------- 
    63       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    64       USE wrk_nemo, ONLY:   ztrds => wrk_3d_10   ! 3D workspace 
    6565      ! 
    6666      INTEGER                         , INTENT(in)           ::  kt      ! time step 
     
    7070      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)           ::  ptrd    ! tracer trend  or flux 
    7171      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::  pun     ! velocity  
    72       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::  ptra    ! Tracer variable  
    73       !!---------------------------------------------------------------------- 
    74  
    75       IF( wrk_in_use(3, 10) ) THEN 
    76          CALL ctl_stop('trd_tra: requested workspace array unavailable')   ;   RETURN 
    77       ENDIF 
     72      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::  ptra    ! Tracer variablea 
     73      ! 
     74      REAL(wp), POINTER, DIMENSION(:,:,:)  ::  ztrds 
     75      !!---------------------------------------------------------------------- 
     76 
     77      CALL wrk_alloc( jpi, jpj, jpk, ztrds ) 
    7878 
    7979      IF( .NOT. ALLOCATED( trdtx ) ) THEN       ! allocate trdtra arrays 
     
    138138      ENDIF 
    139139      ! 
    140       IF( wrk_not_released(3, 10) )   CALL ctl_stop('trd_tra: failed to release workspace array') 
     140      CALL wrk_dealloc( jpi, jpj, jpk, ztrds ) 
    141141      ! 
    142142   END SUBROUTINE trd_tra 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/TRD/trdvor.F90

    r2715 r3181  
    2727   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2828   USE lib_mpp         ! MPP library 
     29   USE wrk_nemo_2      ! Memory allocation 
     30 
    2931 
    3032   IMPLICIT NONE 
     
    107109      !!      trends output in netCDF format using ioipsl 
    108110      !!---------------------------------------------------------------------- 
    109       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    110       USE wrk_nemo, ONLY:   zudpvor => wrk_2d_1 , zvdpvor => wrk_2d_2   ! total cmulative trends 
    111111      ! 
    112112      INTEGER                     , INTENT(in   ) ::   ktrd       ! ocean trend index 
     
    116116      INTEGER ::   ji, jj       ! dummy loop indices 
    117117      INTEGER ::   ikbu, ikbv   ! local integers 
    118       !!---------------------------------------------------------------------- 
    119  
    120       IF( wrk_in_use(2, 1,2) ) THEN 
    121          CALL ctl_stop('trd_vor_zint_2d: requested workspace arrays unavailable')   ;   RETURN 
    122       ENDIF 
    123  
    124       ! Initialization 
    125       zudpvor(:,:) = 0._wp                 ;   zvdpvor(:,:) = 0._wp 
     118      REAL(wp), POINTER, DIMENSION(:,:) :: zudpvor, zvdpvor  ! total cmulative trends 
     119      !!---------------------------------------------------------------------- 
     120 
     121      ! 
     122      CALL wrk_alloc( jpi, jpj, zudpvor, zvdpvor )                                     ! Memory allocation 
     123      ! 
     124 
     125      zudpvor(:,:) = 0._wp                 ;   zvdpvor(:,:) = 0._wp                    ! Initialisation 
    126126      CALL lbc_lnk( putrdvor, 'U', -1. )   ;   CALL lbc_lnk( pvtrdvor, 'V', -1. )      ! lateral boundary condition 
    127127       
     
    167167      ENDIF 
    168168      ! 
    169       IF( wrk_not_released(2, 1,2) )   CALL ctl_stop('trd_vor_zint_2d : failed to release workspace arrays.') 
     169      CALL wrk_dealloc( jpi, jpj, zudpvor, zvdpvor )                                    
    170170      ! 
    171171   END SUBROUTINE trd_vor_zint_2d 
     
    199199      !!      trends output in netCDF format using ioipsl 
    200200      !!---------------------------------------------------------------------- 
    201       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    202       USE wrk_nemo, ONLY:   zubet   => wrk_2d_1,   zvbet => wrk_2d_2   ! Beta.V  
    203       USE wrk_nemo, ONLY:   zudpvor => wrk_2d_3, zvdpvor => wrk_2d_4   ! total cmulative trends 
    204201      ! 
    205202      INTEGER                         , INTENT(in   ) ::   ktrd       ! ocean trend index 
     
    208205      ! 
    209206      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     207      REAL(wp), POINTER, DIMENSION(:,:  ) :: zubet  , zvbet  ! Beta.V    
     208      REAL(wp), POINTER, DIMENSION(:,:,:) :: zudpvor, zvdpvor  ! total cmulative trends 
    210209      !!---------------------------------------------------------------------- 
    211210      
    212       IF( wrk_in_use(2, 1,2,3,4) ) THEN 
    213          CALL ctl_stop('trd_vor_zint_3d: requested workspace arrays unavailable.')   ;   RETURN 
    214       ENDIF 
     211      CALL wrk_alloc( jpi, jpj,      zubet  , zvbet   )                                    
     212      CALL wrk_alloc( jpi, jpj, jpk, zudpvor, zvdpvor )                                    
    215213 
    216214      ! Initialization 
     
    276274      ENDIF 
    277275      ! 
    278       IF( wrk_not_released(2, 1,2,3,4) )   CALL ctl_stop('trd_vor_zint_3d: failed to release workspace arrays') 
     276      CALL wrk_dealloc( jpi, jpj,      zubet  , zvbet   )                                    
     277      CALL wrk_dealloc( jpi, jpj, jpk, zudpvor, zvdpvor )                                    
    279278      ! 
    280279   END SUBROUTINE trd_vor_zint_3d 
     
    288287      !!               and make outputs (NetCDF or DIMG format) 
    289288      !!---------------------------------------------------------------------- 
    290       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    291       USE wrk_nemo, ONLY:   zun => wrk_2d_1 , zvn => wrk_2d_2 ! 2D workspace 
    292289      ! 
    293290      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     
    296293      INTEGER  ::   it, itmod        ! local integers 
    297294      REAL(wp) ::   zmean            ! local scalars 
    298       !!---------------------------------------------------------------------- 
    299  
    300       IF( wrk_in_use(2, 1,2) ) THEN 
    301          CALL ctl_stop('trd_vor: requested workspace arrays unavailable.')   ;   RETURN 
    302       ENDIF 
     295      REAL(wp), POINTER, DIMENSION(:,:) :: zun, zvn 
     296      !!---------------------------------------------------------------------- 
     297 
     298      CALL wrk_alloc( jpi, jpj, zun, zvn )                                    
    303299 
    304300      !  ================= 
     
    467463      IF( kt == nitend )   CALL histclo( nidvor ) 
    468464      ! 
    469       IF( wrk_not_released(2, 1,2) )   CALL ctl_stop('trd_vor: failed to release workspace arrays') 
     465      CALL wrk_dealloc( jpi, jpj, zun, zvn )                                    
    470466      ! 
    471467   END SUBROUTINE trd_vor 
Note: See TracChangeset for help on using the changeset viewer.