Changeset 5831


Ignore:
Timestamp:
2015-10-25T11:33:18+01:00 (6 years ago)
Author:
gm
Message:

#1593: Simplification LDF-ADV: remove the remaining use of ua,va,ta,sa as workspace: concern trazdf_imp, zdfevd, zdftmx and oce_trc modules

Location:
branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90

    r5760 r5831  
    7474      !! ** Action  : - pta  becomes the after tracer 
    7575      !!--------------------------------------------------------------------- 
    76       USE oce     , ONLY:   zwd => ua       , zws => va         ! (ua,va) used as 3D workspace 
    77       ! 
    7876      INTEGER                              , INTENT(in   ) ::   kt       ! ocean time-step index 
    7977      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index 
     
    8684      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
    8785      REAL(wp) ::  zrhs, ze3tb, ze3tn, ze3ta   ! local scalars 
    88       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwi, zwt 
     86      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwi, zwt, zwd, zws 
    8987      !!--------------------------------------------------------------------- 
    9088      ! 
    9189      IF( nn_timing == 1 )  CALL timing_start('tra_zdf_imp') 
    9290      ! 
    93       CALL wrk_alloc( jpi, jpj, jpk, zwi, zwt )  
     91      CALL wrk_alloc( jpi,jpj,jpk,   zwi, zwt, zwd, zws )  
    9492      ! 
    9593      IF( kt == kit000 )  THEN 
     
    226224      !                                               ! ================= ! 
    227225      ! 
    228       CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwt )  
     226      CALL wrk_dealloc( jpi,jpj,jpk,   zwi, zwt, zwd, zws )  
    229227      ! 
    230228      IF( nn_timing == 1 )  CALL timing_stop('tra_zdf_imp') 
  • branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r5758 r5831  
    1111 
    1212   !!---------------------------------------------------------------------- 
    13    !!   zdf_evd      : increase the momentum and tracer Kz at the location of 
    14    !!                  statically unstable portion of the water column (ln_zdfevd=T) 
     13   !!   zdf_evd       : increase the momentum and tracer Kz at the location of 
     14   !!                   statically unstable portion of the water column (ln_zdfevd=T) 
    1515   !!---------------------------------------------------------------------- 
    1616   USE oce             ! ocean dynamics and tracers variables 
    1717   USE dom_oce         ! ocean space and time domain variables 
    1818   USE zdf_oce         ! ocean vertical physics variables 
     19   ! 
    1920   USE in_out_manager  ! I/O manager 
    2021   USE iom             ! for iom_put 
    2122   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     23   USE wrk_nemo        ! work arrays 
    2224   USE timing          ! Timing 
    2325 
     
    5153      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997 
    5254      !!---------------------------------------------------------------------- 
    53       USE oce,   zavt_evd => ua , zavm_evd => va  ! (ua,va) used ua workspace 
    54       ! 
    5555      INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step 
    5656      ! 
    5757      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     58      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zavt_evd, zavm_evd 
    5859      !!---------------------------------------------------------------------- 
    5960      ! 
     
    6667         IF(lwp) WRITE(numout,*) 
    6768      ENDIF 
    68  
     69      ! 
     70      CALL wrk_alloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
     71      ! 
    6972      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application 
    70  
     73      ! 
    7174      SELECT CASE ( nn_evdm ) 
    7275      ! 
     
    111114      CALL iom_put( "avt_evd", zavt_evd )              ! output this change 
    112115      ! 
     116      CALL wrk_dealloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
     117      ! 
    113118      IF( nn_timing == 1 )  CALL timing_stop('zdf_evd') 
    114119      ! 
  • branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r5777 r5831  
    105105      !!              Koch-Larrouy et al. 2007, GRL. 
    106106      !!---------------------------------------------------------------------- 
    107       USE oce, zav_tide  =>   ua    ! use ua as workspace 
    108       !! 
    109107      INTEGER, INTENT(in) ::   kt   ! ocean time-step  
    110       !! 
     108      ! 
    111109      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    112110      REAL(wp) ::   ztpc         ! scalar workspace 
    113       REAL(wp), POINTER, DIMENSION(:,:) ::   zkz 
     111      REAL(wp), POINTER, DIMENSION(:,:)   ::   zkz 
     112      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zav_tide 
    114113      !!---------------------------------------------------------------------- 
    115114      ! 
    116115      IF( nn_timing == 1 )  CALL timing_start('zdf_tmx') 
    117116      ! 
    118       CALL wrk_alloc( jpi,jpj, zkz ) 
    119  
     117      CALL wrk_alloc( jpi,jpj,       zkz ) 
     118      CALL wrk_alloc( jpi,jpj,jpk,   zav_tide ) 
     119      ! 
    120120      !                          ! ----------------------- ! 
    121121      !                          !  Standard tidal mixing  !  (compute zav_tide) 
     
    180180      IF(ln_ctl)   CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 
    181181      ! 
    182       CALL wrk_dealloc( jpi,jpj, zkz ) 
     182      CALL wrk_dealloc( jpi,jpj,       zkz ) 
     183      CALL wrk_dealloc( jpi,jpj,jpk,   zav_tide ) 
    183184      ! 
    184185      IF( nn_timing == 1 )  CALL timing_stop('zdf_tmx') 
     
    351352      !!              Koch-Larrouy et al. 2007, GRL. 
    352353      !!---------------------------------------------------------------------- 
    353       USE oce     ,         zav_tide =>  ua         ! ua used as workspace 
    354       !! 
    355354      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    356355      INTEGER  ::   inum         ! local integer 
    357356      INTEGER  ::   ios 
    358357      REAL(wp) ::   ztpc, ze_z   ! local scalars 
    359       REAL(wp), DIMENSION(:,:)  , POINTER ::  zem2, zek1   ! read M2 and K1 tidal energy 
    360       REAL(wp), DIMENSION(:,:)  , POINTER ::  zkz          ! total M2, K1 and S2 tidal energy 
    361       REAL(wp), DIMENSION(:,:)  , POINTER ::  zfact        ! used for vertical structure function 
    362       REAL(wp), DIMENSION(:,:)  , POINTER ::  zhdep        ! Ocean depth  
    363       REAL(wp), DIMENSION(:,:,:), POINTER ::  zpc      ! power consumption 
     358      REAL(wp), DIMENSION(:,:)  , POINTER ::  zem2, zek1     ! read M2 and K1 tidal energy 
     359      REAL(wp), DIMENSION(:,:)  , POINTER ::  zkz            ! total M2, K1 and S2 tidal energy 
     360      REAL(wp), DIMENSION(:,:)  , POINTER ::  zfact          ! used for vertical structure function 
     361      REAL(wp), DIMENSION(:,:)  , POINTER ::  zhdep          ! Ocean depth  
     362      REAL(wp), DIMENSION(:,:,:), POINTER ::  zpc, zav_tide  ! power consumption 
    364363      !! 
    365364      NAMELIST/namzdf_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 
     
    368367      IF( nn_timing == 1 )  CALL timing_start('zdf_tmx_init') 
    369368      ! 
    370       CALL wrk_alloc( jpi,jpj, zem2, zek1, zkz, zfact, zhdep ) 
    371       CALL wrk_alloc( jpi,jpj,jpk, zpc ) 
    372        
    373       REWIND( numnam_ref )              ! Namelist namzdf_tmx in reference namelist : Tidal Mixing 
     369      CALL wrk_alloc( jpi,jpj,       zem2, zek1, zkz, zfact, zhdep ) 
     370      CALL wrk_alloc( jpi,jpj,jpk,   zpc, zav_tide ) 
     371      ! 
     372      REWIND( numnam_ref )             ! Namelist namzdf_tmx in reference namelist : Tidal Mixing 
    374373      READ  ( numnam_ref, namzdf_tmx, IOSTAT = ios, ERR = 901) 
    375374901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_tmx in reference namelist', lwp ) 
    376  
    377       REWIND( numnam_cfg )              ! Namelist namzdf_tmx in configuration namelist : Tidal Mixing 
     375      ! 
     376      REWIND( numnam_cfg )             ! Namelist namzdf_tmx in configuration namelist : Tidal Mixing 
    378377      READ  ( numnam_cfg, namzdf_tmx, IOSTAT = ios, ERR = 902 ) 
    379378902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_tmx in configuration namelist', lwp ) 
    380379      IF(lwm) WRITE ( numond, namzdf_tmx ) 
    381  
    382       IF(lwp) THEN                   ! Control print 
     380      ! 
     381      IF(lwp) THEN                     ! Control print 
    383382         WRITE(numout,*) 
    384383         WRITE(numout,*) 'zdf_tmx_init : tidal mixing' 
     
    392391         WRITE(numout,*) '      ITF tidal dissipation efficiency      = ', rn_tfe_itf 
    393392      ENDIF 
    394  
    395       !                              ! allocate tmx arrays 
     393      !                                ! allocate tmx arrays 
    396394      IF( zdf_tmx_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_tmx_init : unable to allocate tmx arrays' ) 
    397395 
    398       IF( ln_tmx_itf ) THEN          ! read the Indonesian Through Flow mask 
     396      IF( ln_tmx_itf ) THEN            ! read the Indonesian Through Flow mask 
    399397         CALL iom_open('mask_itf',inum) 
    400398         CALL iom_get (inum, jpdom_data, 'tmaskitf',mask_itf,1) !  
    401399         CALL iom_close(inum) 
    402400      ENDIF 
    403  
    404       ! read M2 tidal energy flux : W/m2  ( zem2 < 0 ) 
     401      !                                ! read M2 tidal energy flux : W/m2  ( zem2 < 0 ) 
    405402      CALL iom_open('M2rowdrg',inum) 
    406403      CALL iom_get (inum, jpdom_data, 'field',zem2,1) !  
    407404      CALL iom_close(inum) 
    408  
    409       ! read K1 tidal energy flux : W/m2  ( zek1 < 0 ) 
     405      !                                ! read K1 tidal energy flux : W/m2  ( zek1 < 0 ) 
    410406      CALL iom_open('K1rowdrg',inum) 
    411407      CALL iom_get (inum, jpdom_data, 'field',zek1,1) !  
    412408      CALL iom_close(inum) 
    413   
    414       ! Total tidal energy ( M2, S2 and K1  with S2=(1/2)^2 * M2 ) 
    415       ! only the energy available for mixing is taken into account, 
    416       ! (mixing efficiency tidal dissipation efficiency) 
     409      !                                ! Total tidal energy ( M2, S2 and K1  with S2=(1/2)^2 * M2 ) 
     410      !                                ! only the energy available for mixing is taken into account, 
     411      !                                ! (mixing efficiency tidal dissipation efficiency) 
    417412      en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * ssmask(:,:) 
    418413 
     
    421416!!gm : you are right, but tidal mixing acts in deep ocean (H>500m) where e3 is O(100m) 
    422417!!     the error is thus ~1% which I feel comfortable with, compared to uncertainties in tidal energy dissipation. 
    423       ! Vertical structure (az_tmx) 
    424       DO jj = 1, jpj                ! part independent of the level 
     418      !                                ! Vertical structure (az_tmx) 
     419      DO jj = 1, jpj                         ! part independent of the level 
    425420         DO ji = 1, jpi 
    426421            zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1)       ! depth of the ocean 
     
    429424         END DO 
    430425      END DO 
    431       DO jk= 1, jpk                 ! complete with the level-dependent part 
     426      DO jk= 1, jpk                          ! complete with the level-dependent part 
    432427         DO jj = 1, jpj 
    433428            DO ji = 1, jpi 
     
    437432      END DO 
    438433!=========== 
    439  
     434      ! 
    440435      IF( nprint == 1 .AND. lwp ) THEN 
    441436         ! Control print 
     
    446441            zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 
    447442         END DO 
    448  
    449          ztpc = 0.e0 
     443         ! 
     444         ztpc = 0._wp 
    450445         zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 
    451446         DO jk= 2, jpkm1 
     
    458453         IF( lk_mpp )   CALL mpp_sum( ztpc ) 
    459454         ztpc= rau0 * 1/(rn_tfe * rn_me) * ztpc 
    460  
     455         ! 
    461456         WRITE(numout,*)  
    462457         WRITE(numout,*) '          Total power consumption of the tidally driven part of Kz : ztpc = ', ztpc * 1.e-12 ,'TW' 
    463  
    464  
     458         ! 
    465459         ! control print 2 
    466460         zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 )    
    467          zkz(:,:) = 0.e0 
     461         zkz(:,:) = 0._wp 
    468462         DO jk = 2, jpkm1 
    469463               zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX(0.e0, rn2(:,:,jk)) * rau0 * zav_tide(:,:,jk) * wmask(:,:,jk) 
     
    486480         END DO 
    487481         WRITE(numout,*) '          Min de zkz ', ztpc, ' Max = ', maxval(zkz(:,:) ) 
    488  
     482         ! 
    489483         DO jk = 2, jpkm1 
    490484            zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. ) * wmask(:,:,jk)  !kz max = 300 cm2/s 
    491485         END DO 
    492          ztpc = 0.e0 
     486         ztpc = 0._wp 
    493487         zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 
    494488         DO jk= 1, jpk 
  • branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90

    r5777 r5831  
    3838 
    3939   !* ocean fields: here now and after fields * 
    40    USE oce , ONLY :   ua      =>    ua      !: i-horizontal velocity (m s-1)  
    41    USE oce , ONLY :   va      =>    va      !: j-horizontal velocity (m s-1) 
    4240   USE oce , ONLY :   un      =>    un      !: i-horizontal velocity (m s-1)  
    4341   USE oce , ONLY :   vn      =>    vn      !: j-horizontal velocity (m s-1) 
Note: See TracChangeset for help on using the changeset viewer.