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/dynvor.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/dynvor.F90

    r2715 r3294  
    2727   USE oce            ! ocean dynamics and tracers 
    2828   USE dom_oce        ! ocean space and time domain 
     29   USE dommsk         ! ocean mask 
    2930   USE dynadv         ! momentum advection (use ln_dynadv_vec value) 
    3031   USE trdmod         ! ocean dynamics trends  
     
    3334   USE prtctl         ! Print control 
    3435   USE in_out_manager ! I/O manager 
    35    USE lib_mpp 
     36   USE lib_mpp        ! MPP library 
     37   USE wrk_nemo       ! Memory Allocation 
     38   USE timing         ! Timing 
     39 
    3640 
    3741   IMPLICIT NONE 
     
    7175      !!               and planetary vorticity trends) ('key_trddyn') 
    7276      !!---------------------------------------------------------------------- 
    73       USE oce, ONLY:   ztrdu => ta , ztrdv => sa   ! (ta,sa) used as 3D workspace 
    74       ! 
    7577      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    76       !!---------------------------------------------------------------------- 
     78      ! 
     79      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdu, ztrdv 
     80      !!---------------------------------------------------------------------- 
     81      ! 
     82      IF( nn_timing == 1 )  CALL timing_start('dyn_vor') 
     83      ! 
     84      IF( l_trddyn )   CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
    7785      ! 
    7886      !                                          ! vorticity term  
     
    175183         &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    176184      ! 
     185      IF( l_trddyn )   CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
     186      ! 
     187      IF( nn_timing == 1 )  CALL timing_stop('dyn_vor') 
     188      ! 
    177189   END SUBROUTINE dyn_vor 
    178190 
     
    204216      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    205217      !!---------------------------------------------------------------------- 
    206       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    207       USE wrk_nemo, ONLY:   zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3     ! 2D workspace 
    208218      ! 
    209219      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
     
    215225      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    216226      REAL(wp) ::   zx1, zy1, zfact2, zx2, zy2   ! local scalars 
    217       !!---------------------------------------------------------------------- 
    218  
    219       IF( wrk_in_use(2, 1,2,3) ) THEN 
    220          CALL ctl_stop('dyn:vor_ene: requested workspace arrays unavailable')   ;   RETURN 
    221       ENDIF 
    222  
     227      REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zwz 
     228      !!---------------------------------------------------------------------- 
     229      ! 
     230      IF( nn_timing == 1 )  CALL timing_start('vor_ene') 
     231      ! 
     232      CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
     233      ! 
    223234      IF( kt == nit000 ) THEN 
    224235         IF(lwp) WRITE(numout,*) 
     
    284295      END DO                                           !   End of slab 
    285296      !                                                ! =============== 
    286       IF( wrk_not_released(2, 1,2,3) )   CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays') 
     297      CALL wrk_dealloc( jpi, jpj, zwx, zwy, zwz )  
     298      ! 
     299      IF( nn_timing == 1 )  CALL timing_stop('vor_ene') 
    287300      ! 
    288301   END SUBROUTINE vor_ene 
     
    320333      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    321334      !!---------------------------------------------------------------------- 
    322       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    323       USE wrk_nemo, ONLY:   zwx => wrk_2d_4 , zwy => wrk_2d_5 , zwz => wrk_2d_6 , zww => wrk_2d_7   ! 2D workspace 
    324335      ! 
    325336      INTEGER, INTENT(in) ::   kt   ! ocean timestep index 
     
    328339      REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! local scalars 
    329340      REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !   -      - 
    330       !!---------------------------------------------------------------------- 
    331  
    332       IF( wrk_in_use(2, 4,5,6,7) ) THEN 
    333          CALL ctl_stop('dyn:vor_mix: requested workspace arrays unavailable')   ;   RETURN 
    334       ENDIF 
    335  
     341      REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zwz, zww 
     342      !!---------------------------------------------------------------------- 
     343      ! 
     344      IF( nn_timing == 1 )  CALL timing_start('vor_mix') 
     345      ! 
     346      CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz, zww )  
     347      ! 
    336348      IF( kt == nit000 ) THEN 
    337349         IF(lwp) WRITE(numout,*) 
     
    404416      END DO                                           !   End of slab 
    405417      !                                                ! =============== 
    406       IF( wrk_not_released(2, 4,5,6,7) )   CALL ctl_stop('dyn:vor_mix: failed to release workspace arrays') 
     418      CALL wrk_dealloc( jpi, jpj, zwx, zwy, zwz, zww )  
     419      ! 
     420      IF( nn_timing == 1 )  CALL timing_stop('vor_mix') 
    407421      ! 
    408422   END SUBROUTINE vor_mix 
     
    435449      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    436450      !!---------------------------------------------------------------------- 
    437       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    438       USE wrk_nemo, ONLY:   zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6    ! 2D workspace 
    439451      ! 
    440452      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
     
    446458      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    447459      REAL(wp) ::   zfact1, zuav, zvau   ! temporary scalars 
    448       !!---------------------------------------------------------------------- 
    449        
    450       IF( wrk_in_use(2, 4,5,6) ) THEN 
    451          CALL ctl_stop('dyn:vor_ens: requested workspace arrays unavailable')   ;   RETURN 
    452       END IF 
    453  
     460      REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zwz, zww 
     461      !!---------------------------------------------------------------------- 
     462      ! 
     463      IF( nn_timing == 1 )  CALL timing_start('vor_ens') 
     464      ! 
     465      CALL wrk_alloc( jpi, jpj, zwx, zwy, zwz )  
     466      ! 
    454467      IF( kt == nit000 ) THEN 
    455468         IF(lwp) WRITE(numout,*) 
     
    523536      END DO                                           !   End of slab 
    524537      !                                                ! =============== 
    525       IF( wrk_not_released(2, 4,5,6) )   CALL ctl_stop('dyn:vor_ens: failed to release workspace arrays') 
     538      CALL wrk_dealloc( jpi, jpj, zwx, zwy, zwz )  
     539      ! 
     540      IF( nn_timing == 1 )  CALL timing_stop('vor_ens') 
    526541      ! 
    527542   END SUBROUTINE vor_ens 
     
    547562      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    548563      !!---------------------------------------------------------------------- 
    549       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    550       USE wrk_nemo, ONLY:   zwx  => wrk_2d_1 , zwy  => wrk_2d_2 ,  zwz => wrk_2d_3     ! 2D workspace 
    551       USE wrk_nemo, ONLY:   ztnw => wrk_2d_4 , ztne => wrk_2d_5  
    552       USE wrk_nemo, ONLY:   ztsw => wrk_2d_6 , ztse => wrk_2d_7 
    553 #if defined key_vvl 
    554       USE wrk_nemo, ONLY:   ze3f => wrk_3d_1                                           ! 3D workspace (lk_vvl=T) 
    555 #endif 
    556564      ! 
    557565      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
     
    561569      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
    562570      !! 
    563       INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    564       INTEGER  ::   ierr               ! local integer 
    565       REAL(wp) ::   zfac12, zua, zva   ! local scalars 
     571      INTEGER  ::   ji, jj, jk                                    ! dummy loop indices 
     572      INTEGER  ::   ierr                                          ! local integer 
     573      REAL(wp) ::   zfac12, zua, zva                              ! local scalars 
     574      !                                                           !  3D workspace  
     575      REAL(wp), POINTER    , DIMENSION(:,:  )         :: zwx, zwy, zwz 
     576      REAL(wp), POINTER    , DIMENSION(:,:  )         :: ztnw, ztne, ztsw, ztse 
     577#if defined key_vvl 
     578      REAL(wp), POINTER    , DIMENSION(:,:,:)         :: ze3f     !  3D workspace (lk_vvl=T) 
     579#endif 
    566580#if ! defined key_vvl 
    567       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE ::  ze3f     ! lk_vvl=F, ze3f=1/e3f saved one for all 
     581      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE   :: ze3f     ! lk_vvl=F, ze3f=1/e3f saved one for all 
    568582#endif 
    569583      !!---------------------------------------------------------------------- 
    570  
    571       IF( wrk_in_use(2, 1,2,3,4,5,6,7) .OR. wrk_in_use(3, 1) ) THEN 
    572          CALL ctl_stop('dyn:vor_een: requested workspace arrays unavailable')   ;   RETURN 
    573       ENDIF 
    574  
     584      ! 
     585      IF( nn_timing == 1 )  CALL timing_start('vor_een') 
     586      ! 
     587      CALL wrk_alloc( jpi, jpj,      zwx , zwy , zwz        )  
     588      CALL wrk_alloc( jpi, jpj,      ztnw, ztne, ztsw, ztse )  
     589#if defined key_vvl 
     590      CALL wrk_alloc( jpi, jpj, jpk, ze3f                   ) 
     591#endif 
     592      ! 
    575593      IF( kt == nit000 ) THEN 
    576594         IF(lwp) WRITE(numout,*) 
     
    670688      END DO                                           !   End of slab 
    671689      !                                                ! =============== 
    672       IF( wrk_not_released(2, 1,2,3,4,5,6,7) .OR.   & 
    673           wrk_not_released(3, 1)             )   CALL ctl_stop('dyn:vor_een: failed to release workspace arrays') 
     690      CALL wrk_dealloc( jpi, jpj,      zwx , zwy , zwz        )  
     691      CALL wrk_dealloc( jpi, jpj,      ztnw, ztne, ztsw, ztse )  
     692#if defined key_vvl 
     693      CALL wrk_dealloc( jpi, jpj, jpk, ze3f                   ) 
     694#endif 
     695      ! 
     696      IF( nn_timing == 1 )  CALL timing_stop('vor_een') 
    674697      ! 
    675698   END SUBROUTINE vor_een 
     
    684707      !!---------------------------------------------------------------------- 
    685708      INTEGER ::   ioptio          ! local integer 
     709      INTEGER ::   ji, jj, jk      ! dummy loop indices 
    686710      !! 
    687711      NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 
     
    700724         WRITE(numout,*) '           mixed enstrophy/energy conserving scheme   ln_dynvor_mix = ', ln_dynvor_mix 
    701725         WRITE(numout,*) '           enstrophy and energy conserving scheme     ln_dynvor_een = ', ln_dynvor_een 
     726      ENDIF 
     727 
     728      ! If energy, enstrophy or mixed advection of momentum in vector form change the value for masks 
     729      ! at angles with three ocean points and one land point 
     730      IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 
     731         DO jk = 1, jpk 
     732            DO jj = 2, jpjm1 
     733               DO ji = 2, jpim1 
     734                  IF( tmask(ji,jj,jk)+tmask(ji+1,jj,jk)+tmask(ji,jj+1,jk)+tmask(ji+1,jj+1,jk) == 3._wp ) & 
     735                      fmask(ji,jj,jk) = 1._wp 
     736               END DO 
     737            END DO 
     738         END DO 
     739          ! 
     740          CALL lbc_lnk( fmask, 'F', 1._wp )      ! Lateral boundary conditions on fmask 
     741          ! 
    702742      ENDIF 
    703743 
Note: See TracChangeset for help on using the changeset viewer.