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 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90 – NEMO

Ignore:
Timestamp:
2012-01-28T17:44:18+01:00 (12 years ago)
Author:
rblod
Message:

Merge of 3.4beta into the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90

    r2715 r3294  
    2929   USE lib_mpp         ! distribued memory computing library 
    3030   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     31   USE wrk_nemo        ! Memory allocation 
     32   USE timing          ! Timing 
    3133 
    3234   IMPLICIT NONE 
     
    5961      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    6062      !! 
    61       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  ztrdt, ztrds 
    62       !!---------------------------------------------------------------------- 
     63      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdt, ztrds 
     64      !!---------------------------------------------------------------------- 
     65      ! 
     66      IF( nn_timing == 1 )  CALL timing_start('tra_ldf') 
     67      ! 
     68      rldf = 1     ! For active tracers the  
    6369 
    6470      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
    65          ALLOCATE( ztrdt(jpi,jpj,jpk) )   ;    ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
    66          ALLOCATE( ztrds(jpi,jpj,jpk) )   ;    ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     71         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds )  
     72         ztrdt(:,:,:) = tsa(:,:,:,jp_tem)  
     73         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
    6774      ENDIF 
    6875 
    6976      SELECT CASE ( nldf )                       ! compute lateral mixing trend and add it to the general trend 
    70       CASE ( 0 )   ;   CALL tra_ldf_lap     ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  ! iso-level laplacian 
     77      CASE ( 0 )   ;   CALL tra_ldf_lap     ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  ! iso-level laplacian 
    7178      CASE ( 1 )                                                                              ! rotated laplacian 
    7279         IF( ln_traldf_grif ) THEN                                                           
    73                        CALL tra_ldf_iso_grif( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )      ! Griffies operator 
     80                       CALL tra_ldf_iso_grif( kt, nit000,'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )      ! Griffies operator 
    7481         ELSE                                                                                 
    75                        CALL tra_ldf_iso     ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )      ! Madec operator 
    76          ENDIF 
    77       CASE ( 2 )   ;   CALL tra_ldf_bilap   ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  ! iso-level bilaplacian 
    78       CASE ( 3 )   ;   CALL tra_ldf_bilapg  ( kt, 'TRA',             tsb, tsa, jpts        )  ! s-coord. geopot. bilap. 
     82                       CALL tra_ldf_iso     ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )      ! Madec operator 
     83         ENDIF 
     84      CASE ( 2 )   ;   CALL tra_ldf_bilap   ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  ! iso-level bilaplacian 
     85      CASE ( 3 )   ;   CALL tra_ldf_bilapg  ( kt, nit000, 'TRA',             tsb, tsa, jpts        )  ! s-coord. geopot. bilap. 
    7986         ! 
    8087      CASE ( -1 )                                ! esopa: test all possibility with control print 
    81          CALL tra_ldf_lap   ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  
     88         CALL tra_ldf_lap   ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  
    8289         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf0 - Ta: ', mask1=tmask,               & 
    8390         &             tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    8491         IF( ln_traldf_grif ) THEN 
    85             CALL tra_ldf_iso_grif( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) 
     92            CALL tra_ldf_iso_grif( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 ) 
    8693         ELSE 
    87             CALL tra_ldf_iso     ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )   
     94            CALL tra_ldf_iso     ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts, ahtb0 )   
    8895         ENDIF 
    8996         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf1 - Ta: ', mask1=tmask,               & 
    9097         &             tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    91          CALL tra_ldf_bilap ( kt, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  
     98         CALL tra_ldf_bilap ( kt, nit000, 'TRA', gtsu, gtsv, tsb, tsa, jpts        )  
    9299         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf2 - Ta: ', mask1=tmask,               & 
    93100         &             tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    94          CALL tra_ldf_bilapg( kt, 'TRA',             tsb, tsa, jpts        )  
     101         CALL tra_ldf_bilapg( kt, nit000, 'TRA',             tsb, tsa, jpts        )  
    95102         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf3 - Ta: ', mask1=tmask,               & 
    96103         &             tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     
    107114         CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_ldf, ztrdt ) 
    108115         CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_ldf, ztrds ) 
    109          DEALLOCATE( ztrdt )      ;     DEALLOCATE( ztrds )  
     116         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds )  
    110117      ENDIF 
    111118      !                                          ! print mean trends (used for debugging) 
    112119      IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' ldf  - Ta: ', mask1=tmask,               & 
    113120         &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     121      ! 
     122      IF( nn_timing == 1 )  CALL timing_stop('tra_ldf') 
    114123      ! 
    115124   END SUBROUTINE tra_ldf 
     
    154163      IF( ln_traldf_hor   )   ioptio = ioptio + 1 
    155164      IF( ln_traldf_iso   )   ioptio = ioptio + 1 
    156       IF( ioptio /= 1 )   CALL ctl_stop( '          use only ONE direction (level/hor/iso)' ) 
     165      IF( ioptio > 1 )   CALL ctl_stop( '          use only ONE direction (level/hor/iso)' ) 
    157166 
    158167      ! defined the type of lateral diffusion from ln_traldf_... logicals 
     
    237246      !! ** Purpose :   initializations of  
    238247      !!---------------------------------------------------------------------- 
    239       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    240       USE wrk_nemo, ONLY:   zt_ref => wrk_3d_1, ztb => wrk_3d_2, zavt => wrk_3d_3   ! 3D workspaces 
    241       USE wrk_nemo, ONLY:   zs_ref => wrk_3d_4, zsb => wrk_3d_5                     ! 3D workspaces 
    242248      ! 
    243249      USE zdf_oce         ! vertical mixing 
     
    249255      LOGICAL  ::   llsave          ! local logical 
    250256      REAL(wp) ::   zt0, zs0, z12   ! local scalar 
    251       !!---------------------------------------------------------------------- 
    252  
    253       IF( wrk_in_use(3, 1,2,3,4,5) ) THEN 
    254          CALL ctl_stop('ldf_ano : requested workspace arrays unavailable')   ;   RETURN 
    255       ENDIF 
     257      REAL(wp), POINTER, DIMENSION(:,:,:) :: zt_ref, zs_ref, ztb, zsb, zavt      
     258      !!---------------------------------------------------------------------- 
     259      ! 
     260      IF( nn_timing == 1 )  CALL timing_start('ldf_ano') 
     261      ! 
     262      CALL wrk_alloc( jpi, jpj, jpk, zt_ref, zs_ref, ztb, zsb, zavt )  
     263      ! 
    256264 
    257265      IF(lwp) THEN 
     
    297305      ! Compute the ldf trends 
    298306      ! ---------------------- 
    299       CALL tra_ldf( nit000+1 )      ! horizontal components (+1: no more init) 
    300       CALL tra_zdf( nit000   )      ! vertical component (if necessary nit000 to performed the init) 
     307      CALL tra_ldf( nit000 + 1 )      ! horizontal components (+1: no more init) 
     308      CALL tra_zdf( nit000     )      ! vertical component (if necessary nit000 to performed the init) 
    301309 
    302310      ! finalise the computation and recover all arrays 
     
    320328      avt(:,:,:)        = zavt(:,:,:) 
    321329      ! 
    322       IF( wrk_not_released(3, 1,2,3,4,5) )   CALL ctl_stop('ldf_ano: failed to release workspace arrays') 
     330      CALL wrk_dealloc( jpi, jpj, jpk, zt_ref, zs_ref, ztb, zsb, zavt )  
     331      ! 
     332      IF( nn_timing == 1 )  CALL timing_stop('ldf_ano') 
    323333      ! 
    324334   END SUBROUTINE ldf_ano 
Note: See TracChangeset for help on using the changeset viewer.