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 3162 for branches/2011/dev_NEMO_MERGE_2011/NEMOGCM – NEMO

Ignore:
Timestamp:
2011-11-20T17:38:17+01:00 (12 years ago)
Author:
cetlod
Message:

New dynamical allocation & timing in OPA_SRC/DOM and OPA_SRC/SOL routines

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

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90

    r2715 r3162  
    3434   USE restart         !  
    3535   USE trc_oce, ONLY : lk_offline ! offline flag 
     36   USE timing          ! Timing 
    3637 
    3738   IMPLICIT NONE 
     
    7071      REAL(wp) ::   zjul 
    7172      !!---------------------------------------------------------------------- 
    72  
     73      ! 
     74      IF( nn_timing == 1 )  CALL timing_start('day_init') 
     75      ! 
    7376      ! all calendar staff is based on the fact that MOD( rday, rdttra(1) ) == 0 
    7477      IF( MOD( rday     , rdttra(1) ) /= 0. )   CALL ctl_stop( 'the time step must devide the number of second of in a day' ) 
     
    127130      ! call day to set the calendar parameters at the begining of the current simulaton. needed by iom_init 
    128131      CALL day( nit000 ) 
    129  
     132      ! 
     133      IF( nn_timing == 1 )  CALL timing_stop('day_init') 
     134      ! 
    130135   END SUBROUTINE day_init 
    131136 
     
    204209      REAL(wp)           ::   zprec      ! fraction of day corresponding to 0.1 second 
    205210      !!---------------------------------------------------------------------- 
     211      ! 
     212      IF( nn_timing == 1 )  CALL timing_start('day') 
     213      ! 
    206214      zprec = 0.1 / rday 
    207215      !                                                 ! New time-step 
     
    255263      IF( .NOT. lk_offline ) CALL rst_opn( kt )               ! Open the restart file if needed and control lrst_oce 
    256264      IF( lrst_oce         ) CALL day_rst( kt, 'WRITE' )      ! write day restart information 
     265      ! 
     266      IF( nn_timing == 1 )  CALL timing_stop('day') 
    257267      ! 
    258268   END SUBROUTINE day 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r2528 r3162  
    3535   USE c1d             ! 1D vertical configuration 
    3636   USE dyncor_c1d      ! Coriolis term (c1d case)         (cor_c1d routine) 
     37   USE timing          ! Timing 
    3738 
    3839   IMPLICIT NONE 
     
    7071      !!---------------------------------------------------------------------- 
    7172      ! 
     73      IF( nn_timing == 1 )  CALL timing_start('dom_init') 
     74      ! 
    7275      IF(lwp) THEN 
    7376         WRITE(numout,*) 
     
    102105      IF( nmsh /= 0      )   CALL dom_wri      ! Create a domain file 
    103106      IF( .NOT.ln_rstart )   CALL dom_ctl      ! Domain control 
     107      ! 
     108      IF( nn_timing == 1 )  CALL timing_stop('dom_init') 
    104109      ! 
    105110   END SUBROUTINE dom_init 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domcfg.F90

    r2715 r3162  
    1515   USE in_out_manager  ! I/O manager 
    1616   USE lib_mpp         ! distributed memory computing library 
     17   USE timing          ! Timing 
    1718 
    1819   IMPLICIT NONE 
     
    3536      !! 
    3637      !!---------------------------------------------------------------------- 
    37  
     38      ! 
     39      IF( nn_timing == 1 )  CALL timing_start('dom_cfg') 
     40      ! 
    3841      IF(lwp) THEN                   ! Control print 
    3942         WRITE(numout,*) 
     
    5659      ! 
    5760      CALL dom_glo                   ! global domain versus zoom and/or local domain 
     61      ! 
     62      IF( nn_timing == 1 )  CALL timing_stop('dom_cfg') 
    5863      ! 
    5964   END SUBROUTINE dom_cfg 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90

    r2715 r3162  
    2525   USE in_out_manager ! I/O manager 
    2626   USE lib_mpp        ! MPP library 
     27   USE timing         ! Timing 
    2728 
    2829   IMPLICIT NONE 
     
    105106      REAL(wp) ::   zphi1, zsin_alpha, zim05, zjm05 
    106107      !!---------------------------------------------------------------------- 
    107  
     108      ! 
     109      IF( nn_timing == 1 )  CALL timing_start('dom_hgr') 
     110      ! 
    108111      IF(lwp) THEN 
    109112         WRITE(numout,*) 
     
    568571         IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 
    569572      ENDIF 
    570  
     573      ! 
     574      IF( nn_timing == 1 )  CALL timing_stop('dom_hgr') 
     575      ! 
    571576   END SUBROUTINE dom_hgr 
    572577 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r3116 r3162  
    2929   USE lib_mpp 
    3030   USE dynspg_oce      ! choice/control of key cpp for surface pressure gradient 
     31   USE wrk_nemo_2      ! Memory allocation 
     32   USE timing          ! Timing 
    3133 
    3234   IMPLICIT NONE 
     
    127129      !!               tmask_i  : interior ocean mask 
    128130      !!---------------------------------------------------------------------- 
    129       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released, iwrk_in_use, iwrk_not_released 
    130       USE wrk_nemo, ONLY:   zwf  =>  wrk_2d_1      ! 2D real    workspace 
    131       USE wrk_nemo, ONLY:   imsk => iwrk_2d_1      ! 2D integer workspace 
    132131      ! 
    133132      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
    134133      INTEGER  ::   iif, iil, ii0, ii1, ii   ! local integers 
    135134      INTEGER  ::   ijf, ijl, ij0, ij1       !   -       - 
     135      INTEGER , POINTER, DIMENSION(:,:) ::  imsk 
     136      REAL(wp), POINTER, DIMENSION(:,:) ::  zwf 
    136137      !! 
    137138      NAMELIST/namlbc/ rn_shlat, ln_vorlat 
    138139      !!--------------------------------------------------------------------- 
    139        
    140       IF( wrk_in_use(2, 1) .OR. iwrk_in_use(2, 1) ) THEN 
    141          CALL ctl_stop('dom_msk: requested workspace arrays unavailable')   ;   RETURN 
    142       ENDIF 
    143  
     140      ! 
     141      IF( nn_timing == 1 )  CALL timing_start('dom_msk') 
     142      ! 
     143      CALL wrk_alloc( jpi, jpj, imsk ) 
     144      CALL wrk_alloc( jpi, jpj, zwf  ) 
     145      ! 
    144146      REWIND( numnam )              ! Namelist namlbc : lateral momentum boundary condition 
    145147      READ  ( numnam, namlbc ) 
     
    440442      ENDIF 
    441443      ! 
    442       IF( wrk_not_released(2, 1)  .OR.   & 
    443          iwrk_not_released(2, 1)  )   CALL ctl_stop('dom_msk: failed to release workspace arrays') 
     444      CALL wrk_dealloc( jpi, jpj, imsk ) 
     445      CALL wrk_dealloc( jpi, jpj, zwf  ) 
     446      ! 
     447      IF( nn_timing == 1 )  CALL timing_stop('dom_msk') 
    444448      ! 
    445449   END SUBROUTINE dom_msk 
     
    464468      REAL(wp) ::   zaa 
    465469      !!--------------------------------------------------------------------- 
    466  
     470      ! 
     471      IF( nn_timing == 1 )  CALL timing_start('dom_msk_nsa') 
     472      ! 
    467473      IF(lwp) WRITE(numout,*) 
    468474      IF(lwp) WRITE(numout,*) 'dom_msk_nsa : noslip accurate boundary condition' 
     
    624630      ENDIF 
    625631      ! 
     632      IF( nn_timing == 1 )  CALL timing_stop('dom_msk_nsa') 
     633      ! 
    626634   END SUBROUTINE dom_msk_nsa 
    627635 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domngb.F90

    r2715 r3162  
    1212   USE dom_oce        ! ocean space and time domain 
    1313   USE lib_mpp        ! for mppsum 
     14   USE wrk_nemo_2     ! Memory allocation 
     15   USE timing         ! Timing 
     16 
    1417 
    1518   IMPLICIT NONE 
     
    3437      !!                -> not good if located at too high latitude... 
    3538      !!---------------------------------------------------------------------- 
    36       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    37       USE wrk_nemo, ONLY:   zglam => wrk_2d_2 , zgphi => wrk_2d_3 , zmask => wrk_2d_4 , zdist => wrk_2d_5 
    3839      ! 
    3940      REAL(wp)        , INTENT(in   ) ::   plon, plat   ! longitude,latitude of the point 
     
    4344      INTEGER , DIMENSION(2) ::   iloc 
    4445      REAL(wp)               ::   zlon, zmini 
     46      REAL(wp), POINTER, DIMENSION(:,:) ::  zglam, zgphi, zmask, zdist 
    4547      !!-------------------------------------------------------------------- 
    4648      ! 
    47       IF( wrk_in_use(2, 2,3,4,5) )   CALL ctl_stop('dom_ngb: Requested workspaces already in use') 
     49      IF( nn_timing == 1 )  CALL timing_start('dom_ngb') 
     50      ! 
     51      CALL wrk_alloc( jpi, jpj, zglam, zgphi, zmask, zdist ) 
    4852      ! 
    4953      zmask(:,:) = 0._wp 
     
    7276      ENDIF 
    7377      ! 
    74       IF( wrk_not_released(2, 2,3,4,5) )   CALL ctl_stop('dom_ngb: error releasing workspaces') 
     78      CALL wrk_dealloc( jpi, jpj, zglam, zgphi, zmask, zdist ) 
     79      ! 
     80      IF( nn_timing == 1 )  CALL timing_stop('dom_ngb') 
    7581      ! 
    7682   END SUBROUTINE dom_ngb 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r3116 r3162  
    2020   USE lib_mpp         ! distributed memory computing library 
    2121   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     22   USE wrk_nemo_2      ! Memory allocation 
     23   USE timing          ! Timing 
    2224 
    2325   IMPLICIT NONE 
     
    6668      !!              (also f-point in now case) 
    6769      !!---------------------------------------------------------------------- 
    68       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    69       USE wrk_nemo, ONLY:   zee_t => wrk_2d_1, zee_u => wrk_2d_2, zee_v => wrk_2d_3, zee_f => wrk_2d_4   ! 2D workspace 
    7070      ! 
    7171      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    7272      REAL(wp) ::   zcoefu, zcoefv , zcoeff                ! local scalars 
    7373      REAL(wp) ::   zvt   , zvt_ip1, zvt_jp1, zvt_ip1jp1   !   -      - 
    74       !!---------------------------------------------------------------------- 
    75  
    76       IF( wrk_in_use(2, 1,2,3,4) ) THEN 
    77          CALL ctl_stop('dom_vvl: requested workspace arrays unavailable')   ;   RETURN 
    78       ENDIF 
    79  
     74      REAL(wp), POINTER, DIMENSION(:,:) ::  zee_t, zee_u, zee_v, zee_f   ! 2D workspace 
     75      !!---------------------------------------------------------------------- 
     76      ! 
     77      IF( nn_timing == 1 )  CALL timing_start('dom_vvl') 
     78      ! 
     79      CALL wrk_alloc( jpi, jpj, zee_t, zee_u, zee_v, zee_f ) 
     80      ! 
    8081      IF(lwp) THEN 
    8182         WRITE(numout,*) 
     
    165166      CALL lbc_lnk( sshf_n, 'F', 1. ) 
    166167      ! 
    167       IF( wrk_not_released(2, 1,2,3,4) )   CALL ctl_stop('dom_vvl: failed to release workspace arrays') 
     168      CALL wrk_dealloc( jpi, jpj, zee_t, zee_u, zee_v, zee_f ) 
     169      ! 
     170      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl') 
    168171      ! 
    169172   END SUBROUTINE dom_vvl 
     
    191194      REAL(wp) ::   zvt          ! local scalars 
    192195      !!---------------------------------------------------------------------- 
    193  
     196      ! 
     197      IF( nn_timing == 1 )  CALL timing_start('dom_vvl_2') 
     198      ! 
    194199      IF( lwp .AND. kt == nit000 ) THEN 
    195200         WRITE(numout,*) 
     
    456461      pe3v_b(:,:,:) = pe3v_b(:,:,:) + fse3v_0(:,:,:) 
    457462      ! 
     463      IF( nn_timing == 1 )  CALL timing_stop('dom_vvl_2') 
     464      ! 
    458465   END SUBROUTINE dom_vvl_2 
    459466    
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domwri.F90

    r2715 r3162  
    2020   USE lbclnk          ! lateral boundary conditions - mpp exchanges 
    2121   USE lib_mpp         ! MPP library 
     22   USE wrk_nemo_2      ! Memory allocation 
     23   USE timing          ! Timing 
    2224 
    2325   IMPLICIT NONE 
     
    6365      !!                                   masks, depth and vertical scale factors 
    6466      !!---------------------------------------------------------------------- 
    65       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    66       USE wrk_nemo, ONLY:   zprt  => wrk_2d_1 , zprw  => wrk_2d_2    ! 2D workspace 
    67       USE wrk_nemo, ONLY:   zdepu => wrk_3d_1 , zdepv => wrk_3d_2    ! 3D     - 
    6867      !! 
    6968      INTEGER           ::   inum0    ! temprary units for 'mesh_mask.nc' file 
     
    7877      CHARACTER(len=21) ::   clnam4   ! filename (vertical   mesh informations) 
    7978      INTEGER           ::   ji, jj, jk   ! dummy loop indices 
    80       !!---------------------------------------------------------------------- 
    81  
    82       IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 1,2) )THEN 
    83          CALL ctl_stop('dom_wri: requested workspace arrays unavailable')   ;   RETURN 
    84       END IF 
    85  
     79      !                                   !  workspaces 
     80      REAL(wp), POINTER, DIMENSION(:,:  ) :: zprt, zprw  
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepu, zdepv 
     82      !!---------------------------------------------------------------------- 
     83      ! 
     84      IF( nn_timing == 1 )  CALL timing_start('dom_wri') 
     85      ! 
     86      CALL wrk_alloc( jpi, jpj, zprt, zprw ) 
     87      CALL wrk_alloc( jpi, jpj, jpk, zdepu, zdepv ) 
     88      ! 
    8689      IF(lwp) WRITE(numout,*) 
    8790      IF(lwp) WRITE(numout,*) 'dom_wri : create NetCDF mesh and mask information file(s)' 
     
    260263      END SELECT 
    261264      ! 
    262       IF( wrk_not_released(2, 1,2)  .OR.   & 
    263           wrk_not_released(3, 1,2)  )   CALL ctl_stop('dom_wri: failed to release workspace arrays') 
     265      CALL wrk_dealloc( jpi, jpj, zprt, zprw ) 
     266      CALL wrk_dealloc( jpi, jpj, jpk, zdepu, zdepv ) 
     267      ! 
     268      IF( nn_timing == 1 )  CALL timing_stop('dom_wri') 
    264269      ! 
    265270   END SUBROUTINE dom_wri 
     
    275280      !!                2) check which elements have been changed 
    276281      !!---------------------------------------------------------------------- 
    277       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    278       USE wrk_nemo, ONLY:   ztstref => wrk_2d_3      ! array with different values for each element 
    279282      ! 
    280283      CHARACTER(len=1)        , INTENT(in   ) ::   cdgrd   !  
     
    284287      INTEGER  ::  ji       ! dummy loop indices 
    285288      LOGICAL, DIMENSION(SIZE(puniq,1),SIZE(puniq,2),1) ::  lldbl  ! store whether each point is unique or not 
    286       !!---------------------------------------------------------------------- 
    287  
    288       IF( wrk_in_use(2, 3) ) THEN 
    289          CALL ctl_stop('dom_uniq: requested workspace array unavailable')   ;   RETURN 
    290       ENDIF 
    291  
     289      REAL(wp), POINTER, DIMENSION(:,:) :: ztstref 
     290      !!---------------------------------------------------------------------- 
     291      ! 
     292      IF( nn_timing == 1 )  CALL timing_start('dom_uniq') 
     293      ! 
     294      CALL wrk_alloc( jpi, jpj, ztstref ) 
     295      ! 
    292296      ! build an array with different values for each element  
    293297      ! in mpp: make sure that these values are different even between process 
     
    304308      puniq(nldi:nlei,nldj:nlej) = REAL( COUNT( lldbl(nldi:nlei,nldj:nlej,:), dim = 3 ) , wp ) 
    305309      ! 
    306       IF( wrk_not_released(2, 3) )   CALL ctl_stop('dom_uniq: failed to release workspace array') 
     310      CALL wrk_alloc( jpi, jpj, ztstref ) 
     311      ! 
     312      IF( nn_timing == 1 )  CALL timing_stop('dom_uniq') 
    307313      ! 
    308314   END SUBROUTINE dom_uniq 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r3116 r3162  
    3838   USE lbclnk            ! ocean lateral boundary conditions (or mpp link) 
    3939   USE lib_mpp           ! distributed memory computing library 
     40   USE wrk_nemo_2      ! Memory allocation 
     41   USE timing          ! Timing 
    4042 
    4143   IMPLICIT NONE 
     
    8688      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco 
    8789      !!---------------------------------------------------------------------- 
    88  
     90      ! 
     91      IF( nn_timing == 1 )  CALL timing_start('dom_zgr') 
     92      ! 
    8993      REWIND( numnam )                 ! Read Namelist namzgr : vertical coordinate' 
    9094      READ  ( numnam, namzgr ) 
     
    139143      ENDIF 
    140144      ! 
     145      IF( nn_timing == 1 )  CALL timing_stop('dom_zgr') 
     146      ! 
    141147   END SUBROUTINE dom_zgr 
    142148 
     
    170176      REAL(wp) ::   za2, zkth2, zacr2      ! Values for optional double tanh function set from parameters  
    171177      !!---------------------------------------------------------------------- 
    172  
     178      ! 
     179      IF( nn_timing == 1 )  CALL timing_start('zgr_z') 
     180      ! 
    173181      ! Set variables from parameters 
    174182      ! ------------------------------ 
     
    280288      END DO 
    281289      ! 
     290      IF( nn_timing == 1 )  CALL timing_stop('zgr_z') 
     291      ! 
    282292   END SUBROUTINE zgr_z 
    283293 
     
    319329      REAL(wp) ::   r_bump , h_bump , h_oce   ! bump characteristics  
    320330      REAL(wp) ::   zi, zj, zh, zhmin         ! local scalars 
    321       INTEGER , DIMENSION(jpidta,jpjdta) ::   idta   ! global domain integer data 
    322       REAL(wp), DIMENSION(jpidta,jpjdta) ::   zdta   ! global domain scalar data 
    323       !!---------------------------------------------------------------------- 
    324  
     331      INTEGER , POINTER, DIMENSION(:,:) ::   idta   ! global domain integer data 
     332      REAL(wp), POINTER, DIMENSION(:,:) ::   zdta   ! global domain scalar data 
     333      !!---------------------------------------------------------------------- 
     334      ! 
     335      IF( nn_timing == 1 )  CALL timing_start('zgr_bat') 
     336      ! 
     337      CALL wrk_alloc( jpidta, jpjdta, idta ) 
     338      CALL wrk_alloc( jpidta, jpjdta, zdta ) 
     339      ! 
    325340      IF(lwp) WRITE(numout,*) 
    326341      IF(lwp) WRITE(numout,*) '    zgr_bat : defines level and meter bathymetry' 
     
    512527      ENDIF 
    513528      ! 
     529      CALL wrk_dealloc( jpidta, jpjdta, idta ) 
     530      CALL wrk_dealloc( jpidta, jpjdta, zdta ) 
     531      ! 
     532      IF( nn_timing == 1 )  CALL timing_stop('zgr_bat') 
     533      ! 
    514534   END SUBROUTINE zgr_bat 
    515535 
     
    589609      !!              - update bathy : meter bathymetry (in meters) 
    590610      !!---------------------------------------------------------------------- 
    591       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    592       USE wrk_nemo, ONLY:   zbathy => wrk_2d_1 
    593611      !! 
    594612      INTEGER ::   ji, jj, jl                    ! dummy loop indices 
    595613      INTEGER ::   icompt, ibtest, ikmax         ! temporary integers 
    596       !!---------------------------------------------------------------------- 
    597  
    598       IF( wrk_in_use(2, 1) ) THEN 
    599          CALL ctl_stop('zgr_bat_ctl: requested workspace array unavailable')   ;   RETURN 
    600       ENDIF 
    601  
     614      REAL(wp), POINTER, DIMENSION(:,:) ::  zbathy 
     615      !!---------------------------------------------------------------------- 
     616      ! 
     617      IF( nn_timing == 1 )  CALL timing_start('zgr_bat_ctl') 
     618      ! 
     619      CALL wrk_alloc( jpi, jpj, zbathy ) 
     620      ! 
    602621      IF(lwp) WRITE(numout,*) 
    603622      IF(lwp) WRITE(numout,*) '    zgr_bat_ctl : check the bathymetry' 
     
    702721      ENDIF 
    703722      ! 
    704       IF( wrk_not_released(2, 1) )   CALL ctl_stop('zgr_bat_ctl: failed to release workspace array') 
     723      CALL wrk_dealloc( jpi, jpj, zbathy ) 
     724      ! 
     725      IF( nn_timing == 1 )  CALL timing_stop('zgr_bat_ctl') 
    705726      ! 
    706727   END SUBROUTINE zgr_bat_ctl 
     
    719740      !!                                     (min value = 1 over land) 
    720741      !!---------------------------------------------------------------------- 
    721       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    722       USE wrk_nemo, ONLY:   zmbk => wrk_2d_1 
    723742      !! 
    724743      INTEGER ::   ji, jj   ! dummy loop indices 
    725       !!---------------------------------------------------------------------- 
    726       ! 
    727       IF( wrk_in_use(2, 1) ) THEN 
    728          CALL ctl_stop('zgr_bot_level: requested 2D workspace unavailable')   ;   RETURN 
    729       ENDIF 
     744      REAL(wp), POINTER, DIMENSION(:,:) ::  zmbk 
     745      !!---------------------------------------------------------------------- 
     746      ! 
     747      IF( nn_timing == 1 )  CALL timing_start('zgr_bot_level') 
     748      ! 
     749      CALL wrk_alloc( jpi, jpj, zmbk ) 
    730750      ! 
    731751      IF(lwp) WRITE(numout,*) 
     
    745765      zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk(zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    746766      ! 
    747       IF( wrk_not_released(2, 1) )   CALL ctl_stop('zgr_bot_level: failed to release workspace array') 
     767      CALL wrk_dealloc( jpi, jpj, zmbk ) 
     768      ! 
     769      IF( nn_timing == 1 )  CALL timing_stop('zgr_bot_level') 
    748770      ! 
    749771   END SUBROUTINE zgr_bot_level 
     
    760782      INTEGER  ::   jk 
    761783      !!---------------------------------------------------------------------- 
     784      ! 
     785      IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
    762786      ! 
    763787      DO jk = 1, jpk 
     
    774798      END DO 
    775799      ! 
     800      IF( nn_timing == 1 )  CALL timing_stop('zgr_zco') 
     801      ! 
    776802   END SUBROUTINE zgr_zco 
    777803 
     
    822848      !!  Reference :   Pacanowsky & Gnanadesikan 1997, Mon. Wea. Rev., 126, 3248-3270. 
    823849      !!---------------------------------------------------------------------- 
    824       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    825       USE wrk_nemo, ONLY:   zprt => wrk_3d_1 
    826850      !! 
    827851      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
     
    833857      REAL(wp) ::   zdiff            ! temporary scalar 
    834858      REAL(wp) ::   zrefdep          ! temporary scalar 
     859      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
    835860      !!--------------------------------------------------------------------- 
    836       !  
    837       IF( wrk_in_use(3, 1) ) THEN 
    838          CALL ctl_stop('zgr_zps: requested workspace unavailable.')   ;   RETURN 
    839       ENDIF 
    840  
     861      ! 
     862      IF( nn_timing == 1 )  CALL timing_start('zgr_zps') 
     863      ! 
     864      CALL wrk_alloc( jpi, jpj, jpk, zprt ) 
     865      ! 
    841866      IF(lwp) WRITE(numout,*) 
    842867      IF(lwp) WRITE(numout,*) '    zgr_zps : z-coordinate with partial steps' 
     
    10281053      ENDIF   
    10291054      ! 
    1030       IF( wrk_not_released(3, 1) )   CALL ctl_stop('zgr_zps: failed to release workspace') 
     1055      CALL wrk_dealloc( jpi, jpj, jpk, zprt ) 
     1056      ! 
     1057      IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
    10311058      ! 
    10321059   END SUBROUTINE zgr_zps 
     
    11161143      !! Reference : Madec, Lott, Delecluse and Crepon, 1996. JPO, 26, 1393-1408. 
    11171144      !!---------------------------------------------------------------------- 
    1118       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    1119       USE wrk_nemo, ONLY:   zenv => wrk_2d_1 , ztmp => wrk_2d_2 , zmsk  => wrk_2d_3 
    1120       USE wrk_nemo, ONLY:   zri  => wrk_2d_4 , zrj  => wrk_2d_5 , zhbat => wrk_2d_6 
    1121       USE wrk_nemo, ONLY:   gsigw3  => wrk_3d_1 
    1122       USE wrk_nemo, ONLY:   gsigt3  => wrk_3d_2 
    1123       USE wrk_nemo, ONLY:   gsi3w3  => wrk_3d_3 
    1124       USE wrk_nemo, ONLY:   esigt3  => wrk_3d_4 
    1125       USE wrk_nemo, ONLY:   esigw3  => wrk_3d_5 
    1126       USE wrk_nemo, ONLY:   esigtu3 => wrk_3d_6 
    1127       USE wrk_nemo, ONLY:   esigtv3 => wrk_3d_7 
    1128       USE wrk_nemo, ONLY:   esigtf3 => wrk_3d_8 
    1129       USE wrk_nemo, ONLY:   esigwu3 => wrk_3d_9 
    1130       USE wrk_nemo, ONLY:   esigwv3 => wrk_3d_10 
    11311145      ! 
    11321146      INTEGER  ::   ji, jj, jk, jl           ! dummy loop argument 
     
    11341148      REAL(wp) ::   zcoeft, zcoefw, zrmax, ztaper   ! temporary scalars 
    11351149      ! 
     1150      REAL(wp), POINTER, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
     1151      REAL(wp), POINTER, DIMENSION(:,:,:) :: gsigw3, gsigt3, gsi3w3 
     1152      REAL(wp), POINTER, DIMENSION(:,:,:) :: esigt3, esigw3, esigtu3, esigtv3, esigtf3, esigwu3, esigwv3            
    11361153 
    11371154      NAMELIST/namzgr_sco/ rn_sbot_max, rn_sbot_min, rn_theta, rn_thetb, rn_rmax, ln_s_sigma, rn_bb, rn_hc 
    11381155      !!---------------------------------------------------------------------- 
    1139  
    1140       IF( wrk_in_use(2, 1,2,3,4,5,6) .OR. wrk_in_use(3, 1,2,3,4,5,6,7,8,9,10) ) THEN 
    1141          CALL ctl_stop('zgr_sco: ERROR - requested workspace arrays unavailable')   ;   RETURN 
    1142       ENDIF 
    1143  
     1156      ! 
     1157      IF( nn_timing == 1 )  CALL timing_start('zgr_sco') 
     1158      ! 
     1159      CALL wrk_alloc( jpi, jpj,      zenv, ztmp, zmsk, zri, zrj, zhbat                           ) 
     1160      CALL wrk_alloc( jpi, jpj, jpk, gsigw3, gsigt3, gsi3w3                                      ) 
     1161      CALL wrk_alloc( jpi, jpj, jpk, esigt3, esigw3, esigtu3, esigtv3, esigtf3, esigwu3, esigwv3 ) 
     1162      ! 
    11441163      REWIND( numnam )                       ! Read Namelist namzgr_sco : sigma-stretching parameters 
    11451164      READ  ( numnam, namzgr_sco ) 
     
    15981617!!gm bug    #endif 
    15991618      ! 
    1600       IF( wrk_not_released(2, 1,2,3,4,5,6) .OR. wrk_not_released(3, 1,2,3,4,5,6,7,8,9,10) )  & 
    1601         &  CALL ctl_stop('dom:zgr_sco: failed to release workspace arrays') 
     1619      CALL wrk_dealloc( jpi, jpj,      zenv, ztmp, zmsk, zri, zrj, zhbat                           ) 
     1620      CALL wrk_dealloc( jpi, jpj, jpk, gsigw3, gsigt3, gsi3w3                                      ) 
     1621      CALL wrk_dealloc( jpi, jpj, jpk, esigt3, esigw3, esigtu3, esigtv3, esigtf3, esigwu3, esigwv3 ) 
     1622      ! 
     1623      IF( nn_timing == 1 )  CALL timing_stop('zgr_sco') 
    16021624      ! 
    16031625   END SUBROUTINE zgr_sco 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/dtatsd.F90

    r3132 r3162  
    2121   USE phycst          ! physical constants 
    2222   USE lib_mpp         ! MPP library 
     23   USE wrk_nemo_2      ! Memory allocation 
     24   USE timing          ! Timing 
    2325 
    2426   IMPLICIT NONE 
     
    6163      NAMELIST/namtsd/   ln_tsd_init, ln_tsd_tradmp, cn_dir, sn_tem, sn_sal 
    6264      !!---------------------------------------------------------------------- 
    63   
     65      ! 
     66      IF( nn_timing == 1 )  CALL timing_start('dta_tsd_init') 
     67      ! 
    6468      !                             ! set default namelist values  
    6569      cn_dir = './'                       ! directory in which the model is executed 
     
    116120         ! 
    117121      ENDIF 
     122      ! 
     123      IF( nn_timing == 1 )  CALL timing_stop('dta_tsd_init') 
    118124      ! 
    119125   END SUBROUTINE dta_tsd_init 
     
    141147      INTEGER ::   ik, il0, il1, ii0, ii1, ij0, ij1   ! local integers 
    142148      REAL(wp)::   zl, zi 
    143       REAL(wp), DIMENSION(jpk) ::  ztp, zsp   ! 1D workspace 
    144       !!---------------------------------------------------------------------- 
     149      REAL(wp), POINTER, DIMENSION(:) ::  ztp, zsp   ! 1D workspace 
     150      !!---------------------------------------------------------------------- 
     151      ! 
     152      IF( nn_timing == 1 )  CALL timing_start('dta_tsd') 
    145153      ! 
    146154      CALL fld_read( kt, 1, sf_tsd )      !==   read T & S data at kt time step   ==! 
     
    200208      ! 
    201209      IF( ln_sco ) THEN                   !==   s- or mixed s-zps-coordinate   ==! 
     210         ! 
     211         CALL wrk_alloc( jpk, ztp, zsp ) 
    202212         ! 
    203213         IF( kt == nit000 .AND. lwp )THEN 
     
    235245         END DO 
    236246         !  
     247         CALL wrk_dealloc( jpk, ztp, zsp ) 
     248         !  
    237249      ELSE                                !==   z- or zps- coordinate   ==! 
    238250         !                              
     
    286298      ENDIF 
    287299      ! 
     300      IF( nn_timing == 1 )  CALL timing_stop('dta_tsd') 
     301      ! 
    288302   END SUBROUTINE dta_tsd 
    289303 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r3116 r3162  
    4343   USE dynspg_ts       ! pressure gradient schemes 
    4444   USE lib_mpp         ! MPP library 
     45   USE wrk_nemo_2      ! Memory allocation 
     46   USE timing          ! Timing 
    4547 
    4648   IMPLICIT NONE 
     
    6769      ! - ML - needed for initialization of e3t_b 
    6870      INTEGER  ::  jk     ! dummy loop indice 
     71      !!---------------------------------------------------------------------- 
     72      ! 
     73      IF( nn_timing == 1 )  CALL timing_start('istate_init') 
     74      ! 
    6975 
    7076      IF(lwp) WRITE(numout,*) 
     
    137143      ENDIF 
    138144      ! 
     145      IF( nn_timing == 1 )  CALL timing_stop('istate_init') 
     146      ! 
    139147   END SUBROUTINE istate_init 
    140148 
     
    406414      !!                 p=integral [ rau*g dz ] 
    407415      !!---------------------------------------------------------------------- 
    408       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    409       USE wrk_nemo, ONLY:   zprn => wrk_3d_1    ! 3D workspace 
    410  
    411416      USE dynspg          ! surface pressure gradient             (dyn_spg routine) 
    412417      USE divcur          ! hor. divergence & rel. vorticity      (div_cur routine) 
     
    416421      INTEGER ::   indic             ! ??? 
    417422      REAL(wp) ::   zmsv, zphv, zmsu, zphu, zalfg     ! temporary scalars 
    418       !!---------------------------------------------------------------------- 
    419  
    420       IF(wrk_in_use(3, 1) ) THEN 
    421          CALL ctl_stop('istate_uvg: requested workspace array unavailable')   ;   RETURN 
    422       ENDIF 
    423  
     423      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprn 
     424      !!---------------------------------------------------------------------- 
     425      ! 
     426      CALL wrk_alloc( jpi, jpj, jpk, zprn) 
     427      ! 
    424428      IF(lwp) WRITE(numout,*)  
    425429      IF(lwp) WRITE(numout,*) 'istate_uvg : Start from Geostrophy' 
     
    517521      rotb (:,:,:) = rotn (:,:,:)       ! set the before to the now value 
    518522      ! 
    519       IF( wrk_not_released(3, 1) ) THEN 
    520          CALL ctl_stop('istate_uvg: failed to release workspace array') 
    521       ENDIF 
     523      CALL wrk_dealloc( jpi, jpj, jpk, zprn) 
    522524      ! 
    523525   END SUBROUTINE istate_uvg 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/SOL/solmat.F90

    r2715 r3162  
    3131   USE lib_mpp         ! distributed memory computing 
    3232   USE in_out_manager  ! I/O manager 
     33   USE timing          ! timing 
    3334 
    3435   IMPLICIT NONE 
     
    6465      REAL(wp) ::   z2dt, zcoef 
    6566      !!---------------------------------------------------------------------- 
    66  
     67      ! 
     68      IF( nn_timing == 1 )  CALL timing_start('sol_mat') 
     69      ! 
    6770       
    6871      ! 1. Construction of the matrix 
     
    297300      gccd (:,:) = 0.e0 
    298301      !  
     302      IF( nn_timing == 1 )  CALL timing_stop('sol_mat') 
     303      ! 
    299304   END SUBROUTINE sol_mat 
    300305 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/SOL/solpcg.F90

    r2715 r3162  
    1414   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    1515   USE in_out_manager  ! I/O manager 
    16    USE lib_fortran 
     16   USE lib_fortran     ! Fortran routines library 
     17   USE wrk_nemo_2      ! Memory allocation 
     18   USE timing          ! Timing 
    1719 
    1820   IMPLICIT NONE 
     
    8385      !!        !  08-01  (R. Benshila) mpp optimization 
    8486      !!---------------------------------------------------------------------- 
    85       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    86       USE wrk_nemo, ONLY:   zgcr => wrk_2d_1 
    8787      !! 
    8888      INTEGER, INTENT(inout) ::   kindic   ! solver indicator, < 0 if the conver- 
     
    9393      REAL(wp) ::   zgcad        ! temporary scalars 
    9494      REAL(wp), DIMENSION(2) ::   zsum 
     95      REAL(wp), POINTER, DIMENSION(:,:) ::   zgcr 
    9596      !!---------------------------------------------------------------------- 
    96        
    97       IF( wrk_in_use(2, 1) )THEN 
    98          CALL ctl_stop('sol_pcg: requested workspace array is unavailable')   ;   RETURN 
    99       ENDIF 
    100  
     97      ! 
     98      IF( nn_timing == 1 )  CALL timing_start('sol_pcg') 
     99      ! 
     100      CALL wrk_alloc( jpi, jpj, zgcr ) 
     101      ! 
    101102      ! Initialization of the algorithm with standard PCG 
    102103      ! ------------------------------------------------- 
     
    209210      CALL lbc_lnk( gcx, c_solver_pt, 1. )      ! Output in gcx with lateral b.c. applied 
    210211      !  
    211       IF( wrk_not_released(2, 1) )   CALL ctl_stop('sol_pcg: failed to release workspace array') 
     212      CALL wrk_dealloc( jpi, jpj, zgcr ) 
     213      ! 
     214      IF( nn_timing == 1 )  CALL timing_stop('sol_pcg') 
    212215      ! 
    213216   END SUBROUTINE sol_pcg 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/SOL/solsor.F90

    r2715 r3162  
    2222   USE lib_mpp         ! distributed memory computing 
    2323   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    24    USE lib_fortran 
     24   USE lib_fortran     ! Fortran routines library 
     25   USE wrk_nemo_2      ! Memory allocation 
     26   USE timing          ! Timing 
    2527 
    2628   IMPLICIT NONE 
     
    5759      !!                Beare and Stevens 1997 Ann. Geophysicae 15, 1369-1377 
    5860      !!---------------------------------------------------------------------- 
    59       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    60       USE wrk_nemo, ONLY:   ztab => wrk_2d_1    ! 2D workspace 
    6161      !! 
    6262      INTEGER, INTENT(inout) ::   kindic   ! solver indicator, < 0 if the convergence is not reached: 
     
    6666      INTEGER  ::   ishift, icount, ijmppodd, ijmppeven, ijpr2d   ! local integers 
    6767      REAL(wp) ::   ztmp, zres, zres2                             ! local scalars 
     68      REAL(wp), POINTER, DIMENSION(:,:) ::   ztab                 ! 2D workspace 
    6869      !!---------------------------------------------------------------------- 
    69        
    70       IF( wrk_in_use(2, 1) )THEN 
    71          CALL ctl_stop('sol_sor: requested workspace array is unavailable')   ;   RETURN 
    72       ENDIF 
    73  
     70      ! 
     71      IF( nn_timing == 1 )  CALL timing_start('sol_sor') 
     72      ! 
     73      CALL wrk_alloc( jpi, jpj, ztab ) 
     74      ! 
    7475      ijmppeven = MOD( nimpp+njmpp+jpr2di+jpr2dj   , 2 ) 
    7576      ijmppodd  = MOD( nimpp+njmpp+jpr2di+jpr2dj+1 , 2 ) 
     
    167168      !  ------------- 
    168169      CALL lbc_lnk_e( gcx, c_solver_pt, 1. )    ! boundary conditions 
    169       !  
    170       IF( wrk_not_released(2, 1) )   CALL ctl_stop('sol_sor: failed to release workspace array') 
     170      ! 
     171      CALL wrk_dealloc( jpi, jpj, ztab ) 
     172      ! 
     173      IF( nn_timing == 1 )  CALL timing_stop('sol_sor') 
    171174      ! 
    172175   END SUBROUTINE sol_sor 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/OPA_SRC/SOL/solver.F90

    r3116 r3162  
    2626   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2727   USE lib_mpp         ! MPP library 
     28   USE timing          ! timing 
    2829 
    2930   IMPLICIT NONE 
     
    5354      NAMELIST/namsol/ nn_solv, nn_sol_arp, nn_nmin, nn_nmax, nn_nmod, rn_eps, rn_resmax, rn_sor 
    5455      !!---------------------------------------------------------------------- 
     56      ! 
     57      IF( nn_timing == 1 )  CALL timing_start('solver_init') 
     58      ! 
    5559 
    5660      IF(lwp) THEN                  !* open elliptic solver statistics file (only on the printing processors) 
     
    110114      CALL sol_mat( kt )            !* Construction of the elliptic system matrix 
    111115      ! 
     116      IF( nn_timing == 1 )  CALL timing_stop('solver_init') 
     117      ! 
    112118   END SUBROUTINE solver_init 
    113119#endif 
Note: See TracChangeset for help on using the changeset viewer.