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/DYN/divcur.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/DYN/divcur.F90

    r2715 r3294  
    2727   USE sbc_oce, ONLY : ln_rnf   ! surface boundary condition: ocean 
    2828   USE sbcrnf          ! river runoff  
    29    USE obc_oce         ! ocean lateral open boundary condition 
    3029   USE cla             ! cross land advection             (cla_div routine) 
    3130   USE in_out_manager  ! I/O manager 
    3231   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3332   USE lib_mpp         ! MPP library 
     33   USE wrk_nemo        ! Memory Allocation 
     34   USE timing          ! Timing 
    3435 
    3536   IMPLICIT NONE 
     
    8485      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    8586      ! 
    86       REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zwu   ! specific 2D workspace 
    87       REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   zwv   ! specific 2D workspace 
    88       ! 
    8987      INTEGER ::   ji, jj, jk, jl           ! dummy loop indices 
    9088      INTEGER ::   ii, ij, ijt, iju, ierr   ! local integer 
    9189      REAL(wp) ::  zraur, zdep              ! local scalar 
    92       !!---------------------------------------------------------------------- 
    93  
     90      REAL(wp), POINTER,  DIMENSION(:,:) ::   zwu   ! specific 2D workspace 
     91      REAL(wp), POINTER,  DIMENSION(:,:) ::   zwv   ! specific 2D workspace 
     92      !!---------------------------------------------------------------------- 
     93      ! 
     94      IF( nn_timing == 1 )  CALL timing_start('div_cur') 
     95      ! 
     96      CALL wrk_alloc( jpi  , jpj+2, zwu               ) 
     97      CALL wrk_alloc( jpi+4, jpj  , zwv, kjstart = -1 ) 
     98      ! 
    9499      IF( kt == nit000 ) THEN 
    95100         IF(lwp) WRITE(numout,*) 
    96101         IF(lwp) WRITE(numout,*) 'div_cur : horizontal velocity divergence and relative vorticity' 
    97102         IF(lwp) WRITE(numout,*) '~~~~~~~   NOT optimal for auto-tasking case' 
    98          ! 
    99          ALLOCATE( zwu( jpi, 1:jpj+2) , zwv(-1:jpi+2, jpj) , STAT=ierr ) 
    100          IF( lk_mpp    )   CALL mpp_sum( ierr ) 
    101          IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'div_cur : unable to allocate arrays' ) 
    102103      ENDIF 
    103104 
     
    121122         END DO 
    122123 
    123 #if defined key_obc 
    124          IF( Agrif_Root() ) THEN 
    125             ! open boundaries (div must be zero behind the open boundary) 
    126             !  mpp remark: The zeroing of hdivn can probably be extended to 1->jpi/jpj for the correct row/column 
    127             IF( lp_obc_east  )   hdivn(nie0p1:nie1p1,nje0  :nje1  ,jk) = 0.e0      ! east 
    128             IF( lp_obc_west  )   hdivn(niw0  :niw1  ,njw0  :njw1  ,jk) = 0.e0      ! west 
    129             IF( lp_obc_north )   hdivn(nin0  :nin1  ,njn0p1:njn1p1,jk) = 0.e0      ! north 
    130             IF( lp_obc_south )   hdivn(nis0  :nis1  ,njs0  :njs1  ,jk) = 0.e0      ! south 
    131          ENDIF 
    132 #endif          
    133124         IF( .NOT. AGRIF_Root() ) THEN 
    134125            IF ((nbondi ==  1).OR.(nbondi == 2)) hdivn(nlci-1 , :     ,jk) = 0.e0      ! east 
     
    241232      CALL lbc_lnk( hdivn, 'T', 1. )   ;   CALL lbc_lnk( rotn , 'F', 1. )    ! lateral boundary cond. (no sign change) 
    242233      ! 
     234      CALL wrk_dealloc( jpi  , jpj+2, zwu               ) 
     235      CALL wrk_dealloc( jpi+4, jpj  , zwv, kjstart = -1 ) 
     236      ! 
     237      IF( nn_timing == 1 )  CALL timing_stop('div_cur') 
     238      ! 
    243239   END SUBROUTINE div_cur 
    244240    
     
    278274      REAL(wp) ::   zraur, zdep   ! local scalars 
    279275      !!---------------------------------------------------------------------- 
    280  
     276      ! 
     277      IF( nn_timing == 1 )  CALL timing_start('div_cur') 
     278      ! 
    281279      IF( kt == nit000 ) THEN 
    282280         IF(lwp) WRITE(numout,*) 
     
    304302         END DO   
    305303 
    306 #if defined key_obc 
    307          IF( Agrif_Root() ) THEN 
    308             ! open boundaries (div must be zero behind the open boundary) 
    309             !  mpp remark: The zeroing of hdivn can probably be extended to 1->jpi/jpj for the correct row/column 
    310             IF( lp_obc_east  )   hdivn(nie0p1:nie1p1,nje0  :nje1  ,jk) = 0.e0      ! east 
    311             IF( lp_obc_west  )   hdivn(niw0  :niw1  ,njw0  :njw1  ,jk) = 0.e0      ! west 
    312             IF( lp_obc_north )   hdivn(nin0  :nin1  ,njn0p1:njn1p1,jk) = 0.e0      ! north 
    313             IF( lp_obc_south )   hdivn(nis0  :nis1  ,njs0  :njs1  ,jk) = 0.e0      ! south 
    314          ENDIF 
    315 #endif          
    316304         IF( .NOT. AGRIF_Root() ) THEN 
    317305            IF ((nbondi ==  1).OR.(nbondi == 2)) hdivn(nlci-1 , :     ,jk) = 0.e0      ! east 
     
    340328      CALL lbc_lnk( hdivn, 'T', 1. )   ;   CALL lbc_lnk( rotn , 'F', 1. )     ! lateral boundary cond. (no sign change) 
    341329      ! 
     330      IF( nn_timing == 1 )  CALL timing_stop('div_cur') 
     331      ! 
    342332   END SUBROUTINE div_cur 
    343333    
Note: See TracChangeset for help on using the changeset viewer.