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 503 for trunk/NEMO/OPA_SRC/DYN – NEMO

Changeset 503 for trunk/NEMO/OPA_SRC/DYN


Ignore:
Timestamp:
2006-09-27T10:52:29+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_064 : CT : general trends update including the addition of mean windows analysis possibility in the mixed layer

Location:
trunk/NEMO/OPA_SRC/DYN
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DYN/dynhpg.F90

    r474 r503  
    44   !! Ocean dynamics:  hydrostatic pressure gradient trend 
    55   !!====================================================================== 
     6   !! History :  1.0  !  87-09  (P. Andrich, M.-A. Foujols)  hpg_zco: Original code 
     7   !!            5.0  !  91-11  (G. Madec) 
     8   !!            7.0  !  96-01  (G. Madec)  hpg_sco: Original code for s-coordinates 
     9   !!            8.0  !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
     10   !!            8.5  !  02-07  (G. Madec)  F90: Free form and module 
     11   !!            8.5  !  02-08  (A. Bozec)  hpg_zps: Original code 
     12   !!            9.0  !  05-10  (A. Beckmann, B.W. An)  various s-coordinate options 
     13   !!                           Original code for hpg_ctl, hpg_hel hpg_wdj, hpg_djc, hpg_rot  
     14   !!            9.0  !  05-11  (G. Madec) style & small optimisation 
     15   !!---------------------------------------------------------------------- 
    616 
    717   !!---------------------------------------------------------------------- 
     
    1828   !!       hpg_rot  : s-coordinate (ROTated axes scheme) 
    1929   !!---------------------------------------------------------------------- 
    20    !! * Modules used 
    2130   USE oce             ! ocean dynamics and tracers 
    2231   USE dom_oce         ! ocean space and time domain 
     
    3241   PRIVATE 
    3342 
    34    !! * Accessibility 
    35    PUBLIC dyn_hpg                ! routine called by step.F90 
     43   PUBLIC   dyn_hpg    ! routine called by step module 
    3644 
    3745#if defined key_mpp_omp 
     
    4957#endif 
    5058 
    51    !! * Share module variables 
    52    LOGICAL  ::               & !!! ** nam_dynhpg **   hpg flags 
    53       ln_hpg_zco = .TRUE. ,  &  ! z-coordinate - full steps 
    54       ln_hpg_zps = .FALSE.,  &  ! z-coordinate - partial steps (interpolation) 
    55       ln_hpg_sco = .FALSE.,  &  ! s-coordinate (standard jacobian formulation) 
    56       ln_hpg_hel = .FALSE.,  &  ! s-coordinate (helsinki modification) 
    57       ln_hpg_wdj = .FALSE.,  &  ! s-coordinate (weighted density jacobian) 
    58       ln_hpg_djc = .FALSE.,  &  ! s-coordinate (Density Jacobian with Cubic polynomial) 
    59       ln_hpg_rot = .FALSE.      ! s-coordinate (ROTated axes scheme) 
    60  
    61    REAL(wp) ::               & !!! ** nam_dynhpg **  
    62       gamm = 0.e0               ! weighting coefficient 
    63  
    64    INTEGER  ::               &  !  
    65       nhpg  =  0                 ! = 0 to 6, type of pressure gradient scheme used 
    66       !                         ! (deduced from ln_hpg_... flags) 
     59   !!* Namelist nam_dynhpg : Choice of horizontal pressure gradient computation 
     60   LOGICAL  ::   ln_hpg_zco = .TRUE.    ! z-coordinate - full steps 
     61   LOGICAL  ::   ln_hpg_zps = .FALSE.   ! z-coordinate - partial steps (interpolation) 
     62   LOGICAL  ::   ln_hpg_sco = .FALSE.   ! s-coordinate (standard jacobian formulation) 
     63   LOGICAL  ::   ln_hpg_hel = .FALSE.   ! s-coordinate (helsinki modification) 
     64   LOGICAL  ::   ln_hpg_wdj = .FALSE.   ! s-coordinate (weighted density jacobian) 
     65   LOGICAL  ::   ln_hpg_djc = .FALSE.   ! s-coordinate (Density Jacobian with Cubic polynomial) 
     66   LOGICAL  ::   ln_hpg_rot = .FALSE.   ! s-coordinate (ROTated axes scheme) 
     67   REAL(wp) ::   gamm       = 0.e0      ! weighting coefficient 
     68   NAMELIST/nam_dynhpg/ ln_hpg_zco, ln_hpg_zps, ln_hpg_sco, ln_hpg_hel,   & 
     69      &                 ln_hpg_wdj, ln_hpg_djc, ln_hpg_rot, gamm 
     70 
     71   INTEGER  ::   nhpg  =  0             ! = 0 to 6, type of pressure gradient scheme used 
     72      !                                 ! (deduced from ln_hpg_... flags) 
    6773 
    6874   !! * Substitutions 
     
    7278   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    7379   !! $Header$  
    74    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     80   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    7581   !!---------------------------------------------------------------------- 
    7682 
     
    8288      !! 
    8389      !! ** Method  :   Call the hydrostatic pressure gradient routine  
    84       !!      using the scheme defined in the namelist (nhpg parameter) 
     90      !!              using the scheme defined in the namelist 
    8591      !!    
    8692      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    8793      !!             - Save the trend (l_trddyn=T) 
    88       !!             - Control print  (ln_ctl) 
    89       !! 
    90       !! History : 
    91       !!   9.0  !  05-10  (A. Beckmann, G. Madec) various s-coordinate options 
    92       !!---------------------------------------------------------------------- 
    93       !! * Arguments 
    94       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    95  
    96       !! * local declarations 
    97       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    98          ztrdu, ztrdv                         ! 3D temporary workspace 
     94      !!---------------------------------------------------------------------- 
     95      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     96      !! 
     97      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D temporary workspace 
    9998      !!---------------------------------------------------------------------- 
    10099    
    101100      IF( kt == nit000 )   CALL hpg_ctl      ! initialisation & control of options 
    102101 
    103       ! Temporary saving of ua and va trends (l_trddyn) 
    104       IF( l_trddyn )   THEN 
     102      IF( l_trddyn ) THEN                    ! Temporary saving of ua and va trends (l_trddyn) 
    105103         ztrdu(:,:,:) = ua(:,:,:)   
    106104         ztrdv(:,:,:) = va(:,:,:)  
     
    108106 
    109107      SELECT CASE ( nhpg )      ! Hydrastatic pressure gradient computation 
    110       CASE ( 0 )                  ! z-coordinate  
    111          CALL hpg_zco( kt ) 
    112       CASE ( 1 )                  ! z-coordinate plus partial steps (interpolation) 
    113          CALL hpg_zps( kt ) 
    114       CASE ( 2 )                  ! s-coordinate (standard jacobian formulation) 
    115          CALL hpg_sco( kt ) 
    116       CASE ( 3 )                  ! s-coordinate (helsinki modification) 
    117          CALL hpg_hel( kt ) 
    118       CASE ( 4 )                  ! s-coordinate (weighted density jacobian) 
    119          CALL hpg_wdj( kt ) 
    120       CASE ( 5 )                  ! s-coordinate (Density Jacobian with Cubic polynomial) 
    121          CALL hpg_djc( kt ) 
    122       CASE ( 6 )                  ! s-coordinate (ROTated axes scheme) 
    123          CALL hpg_rot( kt ) 
    124       CASE ( 10 )                  ! z-coordinate 
    125          CALL hpg_zco_jki( kt ) 
    126       CASE ( 11 )                  ! z-coordinate plus partial steps (interpolation) 
    127          CALL hpg_zps_jki( kt ) 
    128       CASE ( 12 )                  ! s-coordinate (standard jacobian formulation) 
    129          CALL hpg_sco_jki( kt ) 
     108      CASE (  0 )   ;   CALL hpg_zco    ( kt )      ! z-coordinate 
     109      CASE (  1 )   ;   CALL hpg_zps    ( kt )      ! z-coordinate plus partial steps (interpolation) 
     110      CASE (  2 )   ;   CALL hpg_sco    ( kt )      ! s-coordinate (standard jacobian formulation) 
     111      CASE (  3 )   ;   CALL hpg_hel    ( kt )      ! s-coordinate (helsinki modification) 
     112      CASE (  4 )   ;   CALL hpg_wdj    ( kt )      ! s-coordinate (weighted density jacobian) 
     113      CASE (  5 )   ;   CALL hpg_djc    ( kt )      ! s-coordinate (Density Jacobian with Cubic polynomial) 
     114      CASE (  6 )   ;   CALL hpg_rot    ( kt )      ! s-coordinate (ROTated axes scheme) 
     115      CASE ( 10 )   ;   CALL hpg_zco_jki( kt )      ! z-coordinate (k-j-i) 
     116      CASE ( 11 )   ;   CALL hpg_zps_jki( kt )      ! z-coordinate plus partial steps (interpolation) (k-j-i) 
     117      CASE ( 12 )   ;   CALL hpg_sco_jki( kt )      ! s-coordinate (standard jacobian formulation) (k-j-i) 
    130118      END SELECT 
    131119 
    132       ! save the hydrostatic pressure gradient trends for momentum trend diagnostics 
    133       IF( l_trddyn )   THEN 
     120      IF( l_trddyn ) THEN      ! save the hydrostatic pressure gradient trends for momentum trend diagnostics 
    134121         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    135122         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    136          CALL trd_mod( ztrdu, ztrdv, jpdtdhpg, 'DYN', kt ) 
     123         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_hpg, 'DYN', kt ) 
    137124      ENDIF           
    138        
    139       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    140          CALL prt_ctl( tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask, & 
    141             &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    142       ENDIF 
    143        
     125      ! 
     126      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask,   & 
     127         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     128      ! 
    144129   END SUBROUTINE dyn_hpg 
    145130 
     
    154139      !! ** Action  :   Read the namelist namdynhpg and check the consistency 
    155140      !!      with the type of vertical coordinate used (zco, zps, sco) 
    156       !! 
    157       !! History : 
    158       !!   9.0  !  05-10  (A. Beckmann)  Original code 
    159141      !!---------------------------------------------------------------------- 
    160142      INTEGER ::   ioptio = 0      ! temporary integer 
    161  
    162       NAMELIST/nam_dynhpg/ ln_hpg_zco, ln_hpg_zps, ln_hpg_sco,               & 
    163          &                 ln_hpg_hel, ln_hpg_wdj, ln_hpg_djc, ln_hpg_rot,   & 
    164          &                 gamm 
    165       !!---------------------------------------------------------------------- 
    166  
    167       ! Read Namelist nam_dynhpg : pressure gradient calculation options 
    168       REWIND ( numnam ) 
     143      !!---------------------------------------------------------------------- 
     144 
     145      REWIND ( numnam )               ! Read Namelist nam_dynhpg : pressure gradient calculation options 
    169146      READ   ( numnam, nam_dynhpg ) 
    170147 
    171       ! Control print 
    172       IF(lwp) THEN 
     148      IF(lwp) THEN                    ! Control print 
    173149         WRITE(numout,*) 
    174150         WRITE(numout,*) 'dyn:hpg_ctl : hydrostatic pressure gradient control' 
     
    185161      ENDIF 
    186162 
    187       ! set nhpg from ln_hpg_... flags 
     163      !                               ! Set nhpg from ln_hpg_... flags 
    188164      IF( ln_hpg_zco )   nhpg = 0 
    189165      IF( ln_hpg_zps )   nhpg = 1 
     
    194170      IF( ln_hpg_rot )   nhpg = 6 
    195171 
    196       ! Consitency check 
     172      !                               ! Consitency check 
    197173      ioptio = 0  
    198174      IF( ln_hpg_zco )   ioptio = ioptio + 1 
     
    203179      IF( ln_hpg_djc )   ioptio = ioptio + 1 
    204180      IF( ln_hpg_rot )   ioptio = ioptio + 1 
    205       IF ( ioptio > 1 )   & 
    206            &   CALL ctl_stop( ' several hydrostatic pressure gradient options used' ) 
     181      IF ( ioptio /= 1 )   CALL ctl_stop( ' NO or several hydrostatic pressure gradient options used' ) 
    207182 
    208183      IF( lk_dynhpg_jki ) THEN 
     
    211186         IF(lwp) WRITE(numout,*) '          Autotasking or OPENMP: use j-k-i loops (i.e. _jki routines)' 
    212187      ENDIF 
    213  
     188      ! 
    214189   END SUBROUTINE hpg_ctl 
    215190 
     
    230205      !!  
    231206      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    232       !! 
    233       !! History : 
    234       !!   1.0  !  87-09  (P. Andrich, M.-A. Foujols)  Original code 
    235       !!   5.0  !  91-11  (G. Madec) 
    236       !!   7.0  !  96-01  (G. Madec) 
    237       !!   8.0  !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
    238       !!   8.5  !  02-07  (G. Madec)  F90: Free form and module 
    239       !!---------------------------------------------------------------------- 
    240       !! * modules used 
    241       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    242          &              zhpj => sa      ! use sa as 3D workspace 
    243        
    244       !! * Arguments 
    245       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    246        
    247       !! * local declarations 
    248       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    249       REAL(wp) ::   &    
    250          zcoef0, zcoef1                 ! temporary scalars 
     207      !!---------------------------------------------------------------------- 
     208      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     209      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     210      !! 
     211      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     212      !! 
     213      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
     214      REAL(wp) ::   zcoef0, zcoef1   ! temporary scalars 
    251215      !!---------------------------------------------------------------------- 
    252216       
     
    257221      ENDIF 
    258222       
    259        
    260223      ! Local constant initialization  
    261       ! ----------------------------- 
    262224      zcoef0 = - grav * 0.5 
    263225 
    264226      ! Surface value 
    265       ! ------------- 
    266227      DO jj = 2, jpjm1 
    267228         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    275236         END DO 
    276237      END DO 
    277  
     238      ! 
    278239      ! interior value (2=<jk=<jpkm1) 
    279       ! -------------- 
    280240      DO jk = 2, jpkm1 
    281241         DO jj = 2, jpjm1 
     
    296256         END DO 
    297257      END DO 
    298  
     258      ! 
    299259   END SUBROUTINE hpg_zco 
    300260 
     
    307267      !!  
    308268      !! ** Action  : - Update (ua,va) with the now hydrastatic pressure trend 
    309       !!     
    310       !! History : 
    311       !!   8.5  !  02-08  (A. Bozec)  Original code 
    312       !!   9.0  !  04-08  (G. Madec)  F90 
    313269      !!----------------------------------------------------------------------  
    314       !! * modules used                                  
    315       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    316          &              zhpj => sa      ! use sa as 3D workspace 
    317                 
    318       !! * Arguments 
    319       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    320  
    321       !! * local declarations 
    322       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    323       INTEGER ::   iku, ikv             ! temporary integers 
    324       REAL(wp) ::   & 
    325          zcoef0, zcoef1,             &  ! temporary scalars 
    326          zcoef2, zcoef3                 !    "         " 
     270      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     271      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     272      !! 
     273      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     274      !! 
     275      INTEGER  ::   ji, jj, jk                       ! dummy loop indices 
     276      INTEGER  ::   iku, ikv                         ! temporary integers 
     277      REAL(wp) ::   zcoef0, zcoef1, zcoef2, zcoef3   ! temporary scalars 
    327278      !!---------------------------------------------------------------------- 
    328279 
     
    330281         IF(lwp) WRITE(numout,*) 
    331282         IF(lwp) WRITE(numout,*) 'dyn:hpg_zps : hydrostatic pressure gradient trend' 
    332          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   z-coordinate with partial steps' 
    333          IF(lwp) WRITE(numout,*) '              vector optimization' 
     283         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   z-coordinate with partial steps - vector optimization' 
    334284      ENDIF 
    335285 
    336  
    337       ! 0. Local constant initialization 
    338       ! -------------------------------- 
     286      ! Local constant initialization 
    339287      zcoef0 = - grav * 0.5 
    340288 
    341       ! 1. Surface value 
    342       ! ---------------- 
     289      !  Surface value 
    343290      DO jj = 2, jpjm1 
    344291         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    353300      END DO 
    354301 
    355       ! 2. interior value (2=<jk=<jpkm1) 
    356       ! ----------------- 
     302      ! interior value (2=<jk=<jpkm1) 
    357303      DO jk = 2, jpkm1 
    358304         DO jj = 2, jpjm1 
     
    410356# endif 
    411357      END DO 
    412  
     358      ! 
    413359   END SUBROUTINE hpg_zps 
    414360 
     
    431377      !! 
    432378      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    433       !! 
    434       !! History : 
    435       !!   7.0  !  96-01  (G. Madec)  s-coordinates 
    436       !!        !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
    437       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module, vector opt. 
    438       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    439       !!   9.0  !  05-10  (A. Beckmann) various s-coordinate options 
    440       !!---------------------------------------------------------------------- 
    441       !! * modules used 
    442       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    443          &              zhpj => sa      ! use sa as 3D workspace 
    444  
    445       !! * Arguments 
    446       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    447  
    448       !! * Local declarations 
    449       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    450       REAL(wp) ::   & 
    451          zcoef0, zuap, zvap             ! temporary scalars 
     379      !!---------------------------------------------------------------------- 
     380      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     381      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     382      !! 
     383      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     384      !! 
     385      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     386      REAL(wp) ::   zcoef0, zuap, zvap   ! temporary scalars 
    452387      !!---------------------------------------------------------------------- 
    453388 
     
    458393      ENDIF 
    459394 
    460  
    461       ! 0. Local constant initialization 
    462       ! -------------------------------- 
     395      ! Local constant initialization 
    463396      zcoef0 = - grav * 0.5 
    464397 
    465  
    466       ! 1. Surface value 
    467       ! ----------------                           
     398      ! Surface value 
    468399      DO jj = 2, jpjm1 
    469400         DO ji = fs_2, fs_jpim1   ! vector opt.    
     
    484415      END DO    
    485416             
    486                 
    487       ! 2. interior value (2=<jk=<jpkm1) 
    488       ! -----------------      
     417      ! interior value (2=<jk=<jpkm1) 
    489418      DO jk = 2, jpkm1                                   
    490419         DO jj = 2, jpjm1      
     
    508437         END DO 
    509438      END DO 
    510  
     439      ! 
    511440   END SUBROUTINE hpg_sco 
    512441 
     
    530459      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    531460      !!             - Save the trend (l_trddyn=T) 
    532       !! 
    533       !! History : 
    534       !!   9.0  !  05-10  (A. Beckmann)  Original code 
    535       !!---------------------------------------------------------------------- 
    536       !! * modules used 
    537       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    538          &              zhpj => sa      ! use sa as 3D workspace 
    539  
    540       !! * Arguments 
    541       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    542        
    543       !! * Local declarations 
    544       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    545       REAL(wp) ::   & 
    546          zcoef0, zuap, zvap             ! temporary scalars 
     461      !!---------------------------------------------------------------------- 
     462      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     463      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     464      !! 
     465      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     466      !! 
     467      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     468      REAL(wp) ::   zcoef0, zuap, zvap   ! temporary scalars 
    547469      !!---------------------------------------------------------------------- 
    548470 
     
    553475      ENDIF 
    554476 
    555  
    556       ! 0. Local constant initialization 
    557       ! -------------------------------- 
     477      ! Local constant initialization 
    558478      zcoef0 = - grav * 0.5 
    559  
    560479  
    561       ! 1. Surface value 
    562       ! ---------------- 
     480      ! Surface value 
    563481      DO jj = 2, jpjm1 
    564482         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    578496         END DO 
    579497      END DO 
    580  
    581       ! 2. interior value (2=<jk=<jpkm1) 
    582       ! ----------------- 
     498      ! 
     499      ! interior value (2=<jk=<jpkm1) 
    583500      DO jk = 2, jpkm1 
    584501         DO jj = 2, jpjm1 
     
    606523         END DO 
    607524      END DO 
    608  
     525      ! 
    609526   END SUBROUTINE hpg_hel 
    610527 
     
    619536      !! 
    620537      !! Reference : Song, Mon. Wea. Rev., 126, 3213-3230, 1998. 
    621       !! 
    622       !! History : 
    623       !!   9.0  !  05-05  (B.W. An)  Original code 
    624       !!        !  05-10  (G. Madec) style & small optimisation 
    625       !!---------------------------------------------------------------------- 
    626       !! * modules used 
    627       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    628          &              zhpj => sa      ! use sa as 3D workspace 
    629  
    630       !! * Arguments 
    631       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    632  
    633       !! * Local declarations 
    634       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    635       REAL(wp) ::   & 
    636          zcoef0, zuap, zvap,         &  ! temporary scalars 
    637          zalph , zbeta                  !    "         " 
     538      !!---------------------------------------------------------------------- 
     539      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     540      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     541      !! 
     542      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     543      !! 
     544      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     545      REAL(wp) ::   zcoef0, zuap, zvap   ! temporary scalars 
     546      REAL(wp) ::   zalph , zbeta        !    "         " 
    638547      !!---------------------------------------------------------------------- 
    639548 
     
    644553      ENDIF 
    645554 
    646  
    647555      ! Local constant initialization 
    648       ! ----------------------------- 
    649556      zcoef0 = - grav * 0.5 
    650557      zalph  = 0.5 - gamm        ! weighting coefficients (alpha=0.5-gamm) 
     
    652559 
    653560      ! Surface value (no ponderation) 
    654       ! ------------- 
    655561      DO jj = 2, jpjm1 
    656562         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    672578 
    673579      ! Interior value (2=<jk=<jpkm1) (weighted with zalph & zbeta) 
    674       ! -------------- 
    675580      DO jk = 2, jpkm1 
    676581         DO jj = 2, jpjm1 
     
    700605         END DO 
    701606      END DO 
    702  
     607      ! 
    703608   END SUBROUTINE hpg_wdj 
    704609 
     
    710615      !! ** Method  :   Density Jacobian with Cubic polynomial scheme 
    711616      !!  
    712       !! Reference: Shchepetkin, A.F. & J.C. McWilliams, J. Geophys. Res., 
    713       !!            108(C3), 3090, 2003 
    714       !! History : 
    715       !!   9.0  !  05-05  (B.W. An)  Original code 
    716       !!---------------------------------------------------------------------- 
    717       !! * modules used 
    718       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    719          &              zhpj => sa      ! use sa as 3D workspace 
    720  
    721       !! * Arguments 
    722       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    723        
    724       !! * Local declarations 
    725       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    726       REAL(wp) ::   & 
    727          zcoef0, z1_10, cffu, cffx,  &  ! temporary scalars 
    728                  z1_12, cffv, cffy,  &  !    "         " 
    729          zep   , cffw                   !    "         " 
    730       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &  ! 3D workspace 
    731          drhox, dzx, drhou, dzu, rho_i,     & 
    732          drhoy, dzy, drhov, dzv, rho_j,     & 
    733          drhoz, dzz, drhow, dzw, rho_k 
     617      !! Reference: Shchepetkin and McWilliams, J. Geophys. Res., 108(C3), 3090, 2003 
     618      !!---------------------------------------------------------------------- 
     619      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     620      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     621      !! 
     622      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     623      !! 
     624      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
     625      REAL(wp) ::   zcoef0, zep, cffw   ! temporary scalars 
     626      REAL(wp) ::   z1_10, cffu, cffx   !    "         " 
     627      REAL(wp) ::   z1_12, cffv, cffy   !    "         " 
     628      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   drhox, dzx, drhou, dzu, rho_i   ! 3D workspace 
     629      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   drhoy, dzy, drhov, dzv, rho_j   !  "      " 
     630      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   drhoz, dzz, drhow, dzw, rho_k   !  "      " 
    734631      !!---------------------------------------------------------------------- 
    735632 
     
    741638 
    742639 
    743       ! 0. Local constant initialization 
    744       ! -------------------------------- 
     640      ! Local constant initialization 
    745641      zcoef0 = - grav * 0.5 
    746642      z1_10  = 1.0 / 10.0 
     
    771667      zep = 1.e-15 
    772668 
    773       !!bug  gm  drhoz not defined at level 1 and used (jk-1 with jk=2) 
    774       !!bug  gm  idem for drhox, drhoy et ji=jpi and jj=jpj 
     669!!bug  gm  drhoz not defined at level 1 and used (jk-1 with jk=2) 
     670!!bug  gm  idem for drhox, drhoy et ji=jpi and jj=jpj 
    775671 
    776672      DO jk = 2, jpkm1 
     
    930826         END DO 
    931827      END DO 
    932  
     828      ! 
    933829   END SUBROUTINE hpg_djc 
    934830 
     
    941837      !! 
    942838      !! Reference: Thiem & Berntsen, Ocean Modelling, In press, 2005. 
    943       !! History : 
    944       !!   9.0  !  05-07 (B.W. An) 
    945       !!   9.0  !  05-10 (A. Beckmann) adapted to non-equidistant and masked grids 
    946       !!---------------------------------------------------------------------- 
    947       !! * modules used 
    948       USE oce, ONLY :   zhpi => ta,         &  ! use ta as 3D workspace 
    949          &              zhpj => sa             ! use sa as 3D workspace 
    950  
    951       !! * Arguments 
    952       INTEGER, INTENT( in ) ::   kt            ! ocean time-step index 
    953        
    954       !! * Local declarations 
    955       INTEGER ::   ji, jj, jk                  ! dummy loop indices 
    956       REAL(wp) ::   & 
    957          zforg, zcoef0, zuap, zmskd1, zmskd1m,                             & 
    958          zfrot        , zvap, zmskd2, zmskd2m 
    959       REAL(wp), DIMENSION(jpi,jpj) ::       &  ! 2D temporary workspace 
    960          zdistr, zsina, zcosa              
    961       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &  ! 3D temporary workspace 
    962          zhpiorg, zhpirot, zhpitra, zhpine, &  
    963          zhpjorg, zhpjrot, zhpjtra, zhpjne 
     839      !!---------------------------------------------------------------------- 
     840      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     841      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     842      !! 
     843      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     844      !! 
     845      INTEGER  ::   ji, jj, jk          ! dummy loop indices 
     846      REAL(wp) ::   zforg, zcoef0, zuap, zmskd1, zmskd1m   ! temporary scalar 
     847      REAL(wp) ::   zfrot        , zvap, zmskd2, zmskd2m   !    "         " 
     848      REAL(wp), DIMENSION(jpi,jpj)     ::   zdistr, zsina, zcosa                ! 2D workspace 
     849      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhpiorg, zhpirot, zhpitra, zhpine   ! 3D workspace 
     850      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhpjorg, zhpjrot, zhpjtra, zhpjne   !  "      " 
    964851      !!---------------------------------------------------------------------- 
    965852 
     
    11181005         END DO 
    11191006      END DO 
    1120  
     1007      ! 
    11211008   END SUBROUTINE hpg_rot 
    11221009 
  • trunk/NEMO/OPA_SRC/DYN/dynhpg_jki.F90

    r456 r503  
    44   !! Ocean dynamics:  hydrostatic pressure gradient trend 
    55   !!====================================================================== 
    6  
    7    !!---------------------------------------------------------------------- 
    8    !!   hpg...o_jki : update the momentum trend with the horizontal 
    9    !!                  gradient of the hydrostatic pressure 
    10    !!---------------------------------------------------------------------- 
    11    !! * Modules used 
     6   !! History :  9.0  !  06-09  (G. Madec) From dynhpg module 
     7   !!---------------------------------------------------------------------- 
     8 
     9   !!---------------------------------------------------------------------- 
     10   !!   hpg_sco_jki : update the momentum trend with the horizontal 
     11   !!                 gradient of the hydrostatic pressure (s-coordinate) 
     12   !!   hpg_zps_jki : update the momentum trend with the horizontal 
     13   !!                 gradient of the hydrostatic pressure (partial step) 
     14   !!   hpg_zco_jki : update the momentum trend with the horizontal 
     15   !!                 gradient of the hydrostatic pressure (z-coordinate) 
     16   !!---------------------------------------------------------------------- 
    1217   USE oce             ! ocean dynamics and tracers 
    1318   USE dom_oce         ! ocean space and time domain 
    1419   USE phycst          ! physical constants 
    1520   USE in_out_manager  ! I/O manager 
    16    USE trdmod          ! ocean dynamics trends 
    17    USE trdmod_oce      ! ocean variables trends 
    18    USE prtctl          ! Print control 
    1921   USE lbclnk          ! lateral boundary condition 
    2022 
     
    2224   PRIVATE 
    2325 
    24    !! * Accessibility 
    25    PUBLIC hpg_sco_jki ! routine called by step.F90 
    26    PUBLIC hpg_zps_jki ! routine called by step.F90 
    27    PUBLIC hpg_zco_jki ! routine called by step.F90 
     26   PUBLIC   hpg_sco_jki   ! routine called by step.F90 
     27   PUBLIC   hpg_zps_jki   ! routine called by step.F90 
     28   PUBLIC   hpg_zco_jki   ! routine called by step.F90 
    2829 
    2930   !! * Substitutions 
     
    3233   !!---------------------------------------------------------------------- 
    3334   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     35   !! $Header$ 
     36   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    3437   !!---------------------------------------------------------------------- 
    3538 
     
    5760      !! 
    5861      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    59       !!             - Save the trend in (utrd,vtrd) ('key_trddyn') 
    60       !! 
    61       !! History : 
    62       !!   7.0  !  96-01  (G. Madec)  s-coordinates 
    63       !!        !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
    64       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    65       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    66       !!---------------------------------------------------------------------- 
    67       !! * modules used 
    68       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    69          &              zhpj => sa      ! use sa as 3D workspace 
    70  
    71       !! * Arguments 
    72       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    73        
    74       !! * Local declarations 
    75       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    76       REAL(wp) ::   & 
    77          zcoef0, zuap, zvap     ! temporary scalars 
    78       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    79          ztdua, ztdva                   ! temporary scalars 
     62      !!             - Save the trend in (ztrdu,ztrdv) ('key_trddyn') 
     63      !!---------------------------------------------------------------------- 
     64      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     65      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     66      !! 
     67      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     68      !! 
     69      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     70      REAL(wp) ::   zcoef0, zuap, zvap   ! temporary scalars 
    8071      !!---------------------------------------------------------------------- 
    8172 
     
    8677      ENDIF 
    8778 
    88       ! Save ua and va trends 
    89       IF( l_trddyn )   THEN 
    90          ztdua(:,:,:) = ua(:,:,:)  
    91          ztdva(:,:,:) = va(:,:,:)  
    92       ENDIF 
    93  
    94       ! 0. Local constant initialization 
    95       ! -------------------------------- 
     79      ! Local constant initialization 
    9680      zcoef0 = - grav * 0.5 
    9781      zuap   = 0.e0 
     
    10185      DO jj = 2, jpjm1                                 !  Vertical slab 
    10286         !                                             ! =============== 
    103          ! 1. Surface value 
    104          ! ---------------- 
    105          DO ji = 2, jpim1 
     87         DO ji = 2, jpim1         !  Surface value 
    10688            ! hydrostatic pressure gradient along s-surfaces 
    10789            zhpi(ji,jj,1) = zcoef0 / e1u(ji,jj)   & 
     
    118100            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) + zvap 
    119101         END DO   
    120  
    121          ! 2. interior value (2=<jk=<jpkm1) 
    122          ! ----------------- 
    123          DO jk = 2, jpkm1 
     102         ! 
     103         DO jk = 2, jpkm1         ! interior value (2=<jk=<jpkm1) 
    124104            DO ji = 2, jpim1 
    125105               ! hydrostatic pressure gradient along s-surfaces 
     
    143123      END DO                                           !   End of slab 
    144124      !                                                ! =============== 
    145  
    146       ! save the hydrostatic pressure gradient trends for diagnostic 
    147       ! momentum trends 
    148       IF( l_trddyn )   THEN 
    149          zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    150          zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    151          CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
    152       ENDIF 
    153  
    154       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    155          CALL prt_ctl(tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask, & 
    156             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    157       ENDIF 
    158  
    159125   END SUBROUTINE hpg_sco_jki 
    160126 
     
    178144      !! 
    179145      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    180       !!             - Save the trend in (utrd,vtrd) ('key_trddyn') 
    181       !! 
    182       !! History : 
    183       !!   8.5  !  02-08  (A. Bozec)  Original code 
    184       !!---------------------------------------------------------------------- 
    185       !! * modules used 
    186       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    187          &              zhpj => sa      ! use sa as 3D workspace 
    188  
    189       !! * Arguments 
    190       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    191  
    192       !! * local declarations 
    193       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    194       INTEGER ::   iku, ikv             ! temporary integers 
    195       REAL(wp) ::   & 
    196          zcoef0, zcoef1, zuap,       &  ! temporary scalars 
    197          zcoef2, zcoef3, zvap           !    "         " 
    198       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    199          ztdua, ztdva                   ! temporary scalars 
     146      !!             - Save the trend in (ztrdu,ztrdv) ('key_trddyn') 
     147      !!---------------------------------------------------------------------- 
     148      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     149      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     150      !! 
     151      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     152      !! 
     153      INTEGER  ::   ji, jj, jk             ! dummy loop indices 
     154      INTEGER  ::   iku, ikv               ! temporary integers 
     155      REAL(wp) ::   zcoef0, zcoef1, zuap   ! temporary scalars 
     156      REAL(wp) ::   zcoef2, zcoef3, zvap   !    "         " 
    200157      !!---------------------------------------------------------------------- 
    201158 
     
    206163      ENDIF 
    207164 
    208       ! Save ua and va trends 
    209       IF( l_trddyn )   THEN 
    210          ztdua(:,:,:) = ua(:,:,:)  
    211          ztdva(:,:,:) = va(:,:,:)  
    212       ENDIF 
    213  
    214       ! 0. Local constant initialization 
    215       ! -------------------------------- 
     165      ! Local constant initialization 
    216166      zcoef0 = - grav * 0.5 
    217167      zuap   = 0.e0 
     
    220170      DO jj = 2, jpjm1                                 !  Vertical slab 
    221171         !                                             ! =============== 
    222          ! 1. Surface value 
    223          ! ---------------- 
    224          DO ji = 2, jpim1 
     172         DO ji = 2, jpim1         ! Surface value 
    225173            zcoef1 = zcoef0 * fse3w(ji,jj,1) 
    226174            ! hydrostatic pressure gradient 
     
    231179            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 
    232180         END DO 
    233  
    234          ! 2. interior value (2=<jk=<jpkm1) 
    235          ! ----------------- 
    236          DO jk = 2, jpkm1 
     181         ! 
     182         DO jk = 2, jpkm1         ! interior value (2=<jk=<jpkm1) 
    237183            DO ji = 2, jpim1 
    238184               zcoef1 = zcoef0 * fse3w(ji,jj,jk) 
     
    250196            END DO  
    251197         END DO 
    252  
     198         ! 
    253199         ! partial steps correction at the last level  (new gradient with  intgrd.F) 
    254200         DO ji = 2, jpim1 
     
    281227      END DO                                           !   End of slab 
    282228      !                                                ! =============== 
    283  
    284       ! save the hydrostatic pressure gradient trends for diagnostic 
    285       ! momentum trends 
    286       IF( l_trddyn )   THEN 
    287          zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    288          zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    289          CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
    290       ENDIF 
    291  
    292       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    293          CALL prt_ctl(tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask, & 
    294             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    295       ENDIF    
    296  
    297229   END SUBROUTINE hpg_zps_jki 
    298230 
     
    317249      !! 
    318250      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
    319       !!             - Save the trend in (utrd,vtrd) ('key_trddyn') 
    320       !! 
    321       !! History : 
    322       !!   1.0  !  87-09  (P. Andrich, m.-a. Foujols)  Original code 
    323       !!        !  91-11  (G. Madec) 
    324       !!        !  96-01  (G. Madec)  s-coordinates 
    325       !!        !  97-05  (G. Madec)  split dynber into dynkeg and dynhpg 
    326       !!   8.5  !  02-07  (G. Madec)  F90: Free form and module 
    327       !!---------------------------------------------------------------------- 
    328       !! * modules used 
    329       USE oce, ONLY :   zhpi => ta,  &  ! use ta as 3D workspace 
    330          &              zhpj => sa      ! use sa as 3D workspace 
    331  
    332       !! * Arguments 
    333       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    334  
    335       !! * local declarations 
    336       INTEGER ::   ji, jj, jk           ! dummy loop indices 
    337       REAL(wp) ::   & 
    338          zcoef0, zcoef1, zuap, zvap     ! temporary scalars 
    339       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    340          ztdua, ztdva                   ! temporary scalars 
     251      !!             - Save the trend in (ztrdu,ztrdv) ('key_trddyn') 
     252      !!---------------------------------------------------------------------- 
     253      USE oce, ONLY :   zhpi => ta   ! use ta as 3D workspace 
     254      USE oce, ONLY :   zhpj => sa   ! use sa as 3D workspace 
     255      !! 
     256      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     257      !! 
     258      INTEGER  ::   ji, jj, jk                   ! dummy loop indices 
     259      REAL(wp) ::   zcoef0, zcoef1, zuap, zvap   ! temporary scalars 
    341260      !!---------------------------------------------------------------------- 
    342261 
     
    347266      ENDIF 
    348267 
    349       ! Save ua and va trends 
    350       IF( l_trddyn )   THEN 
    351          ztdua(:,:,:) = ua(:,:,:)  
    352          ztdva(:,:,:) = va(:,:,:)  
    353       ENDIF 
    354  
    355       ! 0. Local constant initialization 
    356       ! -------------------------------- 
     268      ! Local constant initialization 
    357269      zcoef0 = - grav * 0.5 
    358270      zuap   = 0.e0 
     
    362274      DO jj = 2, jpjm1                                 !  Vertical slab 
    363275         !                                             ! =============== 
    364          ! 1. Surface value 
    365          ! ---------------- 
    366           
    367  
    368          DO ji = 2, jpim1 
     276         DO ji = 2, jpim1         ! Surface value 
    369277            zcoef1 = zcoef0 * fse3w(ji,jj,1) 
    370278            ! hydrostatic pressure gradient 
     
    375283            va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) 
    376284         END DO 
    377  
    378          ! 2. interior value (2=<jk=<jpkm1) 
    379          ! ----------------- 
    380          DO jk = 2, jpkm1 
     285         ! 
     286         DO jk = 2, jpkm1         ! interior value (2=<jk=<jpkm1) 
    381287            DO ji = 2, jpim1 
    382288               zcoef1 = zcoef0 * fse3w(ji,jj,jk) 
     
    397303      END DO                                           !   End of slab 
    398304      !                                                ! =============== 
    399  
    400       ! save the hydrostatic pressure gradient trends for diagnostic 
    401       ! momentum trends 
    402       IF( l_trddyn )   THEN 
    403          zhpi(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    404          zhpj(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    405  
    406          CALL trd_mod(zhpi, zhpj, jpdtdhpg, 'DYN', kt) 
    407       ENDIF 
    408  
    409       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    410          CALL prt_ctl(tab3d_1=ua, clinfo1=' hpg  - Ua: ', mask1=umask, & 
    411             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    412       ENDIF 
    413  
    414305   END SUBROUTINE hpg_zco_jki 
    415306 
  • trunk/NEMO/OPA_SRC/DYN/dynkeg.F90

    r258 r503  
    44   !! Ocean dynamics:  kinetic energy gradient trend 
    55   !!====================================================================== 
     6   !! History :  1.0  !  87-09  (P. Andrich, m.-a. Foujols)  Original code 
     7   !!            7.0  !  97-05  (G. Madec)  Split dynber into dynkeg and dynhpg 
     8   !!            9.0  !  02-07  (G. Madec)  F90: Free form and module 
     9   !!---------------------------------------------------------------------- 
    610    
    711   !!---------------------------------------------------------------------- 
    812   !!   dyn_keg      : update the momentum trend with the horizontal tke 
    913   !!---------------------------------------------------------------------- 
    10    !! * Modules used 
    1114   USE oce             ! ocean dynamics and tracers 
    1215   USE dom_oce         ! ocean space and time domain 
     
    1922   PRIVATE 
    2023 
    21    !! * Accessibility 
    22    PUBLIC dyn_keg                ! routine called by step.F90 
     24   PUBLIC   dyn_keg    ! routine called by step module 
    2325    
    2426   !! * Substitutions 
    2527#  include "vectopt_loop_substitute.h90" 
    26    !!--------------------------------------------------------------------------------- 
     28   !!---------------------------------------------------------------------- 
    2729   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    2830   !! $Header$  
    29    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    30    !!--------------------------------------------------------------------------------- 
     31   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     32   !!---------------------------------------------------------------------- 
    3133 
    3234CONTAINS 
     
    4042      !!      general momentum trend. 
    4143      !! 
    42       !! ** Method  :   Compute the now horizontal kinetic energy: 
     44      !! ** Method  :   Compute the now horizontal kinetic energy  
    4345      !!         zhke = 1/2 [ mi-1( un^2 ) + mj-1( vn^2 ) ] 
    4446      !!      Take its horizontal gradient and add it to the general momentum 
     
    4850      !! 
    4951      !! ** Action : - Update the (ua, va) with the hor. ke gradient trend 
    50       !!             - Save the trends in (utrd,vtrd) ('key_trddyn') 
     52      !!             - save this trends (l_trddyn=T) for post-processing 
     53      !!---------------------------------------------------------------------- 
     54      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace    
     55      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace    
    5156      !! 
    52       !! History : 
    53       !!   1.0  !  87-09  (P. Andrich, m.-a. Foujols)  Original code 
    54       !!   7.0  !  97-05  (G. Madec)  Split dynber into dynkeg and dynhpg 
    55       !!   9.0  !  02-07  (G. Madec)  F90: Free form and module 
    56       !!    "   !  04-08  (C. Talandier) New trends organization 
    57       !!---------------------------------------------------------------------- 
    58       !! * Modules used      
    59       USE oce, ONLY :    ztdua => ta,   & ! use ta as 3D workspace    
    60                          ztdva => sa      ! use sa as 3D workspace    
    61  
    62       !! * Arguments 
    63       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    64  
    65       !! * Local declarations 
    66       INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    67       REAL(wp) ::   zua, zva, zu, zv    ! temporary scalars 
    68       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    69          zhke                           ! temporary workspace 
     57      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     58      !! 
     59      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     60      REAL(wp) ::   zu, zv       ! temporary scalars 
     61      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhke   ! temporary 3D workspace 
    7062      !!---------------------------------------------------------------------- 
    7163 
     
    7668      ENDIF 
    7769 
    78       ! Save ua and va trends 
    79       IF( l_trddyn )   THEN 
    80          ztdua(:,:,:) = ua(:,:,:)  
    81          ztdva(:,:,:) = va(:,:,:)  
     70      IF( l_trddyn ) THEN           ! Save ua and va trends 
     71         ztrdu(:,:,:) = ua(:,:,:)  
     72         ztrdv(:,:,:) = va(:,:,:)  
    8273      ENDIF 
    8374       
     
    8576      DO jk = 1, jpkm1                                 ! Horizontal slab 
    8677         !                                             ! =============== 
    87          ! Horizontal kinetic energy at T-point 
    88          DO jj = 2, jpj 
     78         DO jj = 2, jpj         ! Horizontal kinetic energy at T-point 
    8979            DO ji = fs_2, jpi   ! vector opt. 
     80               zu = 0.25 * (  un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
     81                  &         + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)  ) 
    9082               zv = 0.25 * (  vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   & 
    91                             + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)  ) 
    92                zu = 0.25 * (  un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
    93                             + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)  ) 
     83                  &         + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)  ) 
    9484               zhke(ji,jj,jk) = zv + zu 
    9585            END DO   
    9686         END DO   
    97           
    98          ! Horizontal gradient of Horizontal kinetic energy 
    99          DO jj = 2, jpjm1 
     87         DO jj = 2, jpjm1       ! add the gradient of kinetic energy to the general momentum trends 
    10088            DO ji = fs_2, fs_jpim1   ! vector opt. 
    101                ! gradient of kinetic energy 
    102                zua = -( zhke(ji+1,jj  ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 
    103                zva = -( zhke(ji  ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 
    104                ! add to the general momentum trends 
    105                ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    106                va(ji,jj,jk) = va(ji,jj,jk) + zva 
     89               ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj  ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 
     90               va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji  ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 
    10791            END DO  
    10892         END DO 
     
    11195      !                                                ! =============== 
    11296 
    113       ! save the Kinetic Energy trends for diagnostic 
    114       ! momentum trends 
    115       IF( l_trddyn )   THEN 
    116          ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    117          ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    118  
    119          CALL trd_mod(ztdua, ztdva, jpdtdkeg, 'DYN', kt) 
     97      IF( l_trddyn ) THEN      ! save the Kinetic Energy trends for diagnostic 
     98         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
     99         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     100         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_keg, 'DYN', kt ) 
    120101      ENDIF 
    121  
    122       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    123          CALL prt_ctl(tab3d_1=ua, clinfo1=' keg  - Ua: ', mask1=umask, & 
    124             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    125       ENDIF 
    126  
     102      ! 
     103      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' keg  - Ua: ', mask1=umask,   & 
     104         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     105      ! 
    127106   END SUBROUTINE dyn_keg 
    128107 
  • trunk/NEMO/OPA_SRC/DYN/dynldf.F90

    r474 r503  
    44   !! Ocean physics:  lateral diffusivity trends  
    55   !!===================================================================== 
     6   !! History :  9.0  !  05-11  (G. Madec)  Original code (new step architecture) 
     7   !!---------------------------------------------------------------------- 
    68 
    79   !!---------------------------------------------------------------------- 
     
    911   !!   dyn_ldf_ctl : initialization, namelist read, and parameters control 
    1012   !!---------------------------------------------------------------------- 
    11    !! * Modules used 
    12    USE oce             ! ocean dynamics and tracers 
    13    USE dom_oce         ! ocean space and time domain 
    14    USE phycst          ! physical constants 
    15    USE ldfdyn_oce      ! ocean dynamics lateral physics 
    16    USE ldfslp          ! ??? 
    17    USE dynldf_bilapg   ! lateral mixing            (dyn_ldf_bilapg routine) 
    18    USE dynldf_bilap    ! lateral mixing             (dyn_ldf_bilap routine) 
    19    USE dynldf_iso      ! lateral mixing               (dyn_ldf_iso routine) 
    20    USE dynldf_lap      ! lateral mixing               (dyn_ldf_lap routine) 
    21    USE trdmod          ! ocean dynamics and tracer trends 
    22    USE trdmod_oce      ! ocean variables trends 
    23    USE prtctl          ! Print control 
    24    USE in_out_manager  ! I/O manager 
    25    USE lib_mpp         ! distribued memory computing library 
    26    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     13   USE oce            ! ocean dynamics and tracers 
     14   USE dom_oce        ! ocean space and time domain 
     15   USE phycst         ! physical constants 
     16   USE ldfdyn_oce     ! ocean dynamics lateral physics 
     17   USE ldfslp         ! lateral mixing: slopes of mixing orientation 
     18   USE dynldf_bilapg  ! lateral mixing            (dyn_ldf_bilapg routine) 
     19   USE dynldf_bilap   ! lateral mixing            (dyn_ldf_bilap  routine) 
     20   USE dynldf_iso     ! lateral mixing            (dyn_ldf_iso    routine) 
     21   USE dynldf_lap     ! lateral mixing            (dyn_ldf_lap    routine) 
     22   USE trdmod         ! ocean dynamics and tracer trends 
     23   USE trdmod_oce     ! ocean variables trends 
     24   USE prtctl         ! Print control 
     25   USE in_out_manager ! I/O manager 
     26   USE lib_mpp        ! distribued memory computing library 
     27   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    2728 
    2829   IMPLICIT NONE 
    2930   PRIVATE 
    3031 
    31    !! *  Routine accessibility 
    32    PUBLIC dyn_ldf      ! called by step.F90  
     32   PUBLIC   dyn_ldf   ! called by step module  
    3333 
    34    !! * module variables 
    35    INTEGER ::                        &  
    36       nldf = 0                         ! type of lateral diffusion used 
    37       !                                ! defined from ln_dynldf_... namlist logicals) 
     34   INTEGER ::   nldf = 0   ! type of lateral diffusion used defined from ln_dynldf_... namlist logicals) 
    3835 
    3936   !! * Substitutions 
     
    4239   !!--------------------------------------------------------------------------------- 
    4340   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    44    !!--------------------------------------------------------------------------------- 
     41   !! $Header$ 
     42   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     43   !!---------------------------------------------------------------------- 
    4544 
    4645CONTAINS 
     
    5150      !!  
    5251      !! ** Purpose :   compute the lateral ocean dynamics physics. 
     52      !!---------------------------------------------------------------------- 
     53      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    5354      !! 
    54       !!---------------------------------------------------------------------- 
    55       !! * Arguments 
    56       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    57  
    58       !! * local declarations 
    59       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    60          ztrdu, ztrdv                         ! 3D temporary workspace 
     55      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    6156      !!---------------------------------------------------------------------- 
    6257 
     
    6964 
    7065      SELECT CASE ( nldf )                       ! compute lateral mixing trend and add it to the general trend 
     66      ! 
     67      CASE ( 0 )    ;   CALL dyn_ldf_lap    ( kt )      ! iso-level laplacian 
     68      CASE ( 1 )    ;   CALL dyn_ldf_iso    ( kt )      ! rotated laplacian (except dk[ dk[.] ] part) 
     69      CASE ( 2 )    ;   CALL dyn_ldf_bilap  ( kt )      ! iso-level bilaplacian 
     70      CASE ( 3 )    ;   CALL dyn_ldf_bilapg ( kt )      ! s-coord. horizontal bilaplacian 
     71      ! 
    7172      CASE ( -1 )                                       ! esopa: test all possibility with control print 
    72          CALL dyn_ldf_lap    ( kt ) 
    73          IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    74             CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf0 - Ua: ', mask1=umask, & 
    75                &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    76          ENDIF 
    77          CALL dyn_ldf_iso    ( kt ) 
    78          IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    79             CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf1 - Ua: ', mask1=umask, & 
    80                &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    81          ENDIF 
    82          CALL dyn_ldf_bilap  ( kt ) 
    83          IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    84             CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf2 - Ua: ', mask1=umask, & 
    85                &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    86          ENDIF 
    87          CALL dyn_ldf_bilapg ( kt ) 
    88          IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    89             CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask, & 
    90                &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    91          ENDIF 
    92  
    93       CASE ( 0 )                                       ! iso-level laplacian 
    94          CALL dyn_ldf_lap    ( kt ) 
    95       CASE ( 1 )                                       ! rotated laplacian (except dk[ dk[.] ] part) 
    96          CALL dyn_ldf_iso    ( kt ) 
    97       CASE ( 2 )                                       ! iso-level bilaplacian 
    98          CALL dyn_ldf_bilap  ( kt ) 
    99       CASE ( 3 )                                       ! s-coord. horizontal bilaplacian 
    100          CALL dyn_ldf_bilapg ( kt ) 
     73         ;              CALL dyn_ldf_lap    ( kt ) 
     74         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf0 - Ua: ', mask1=umask,   & 
     75            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     76         ;              CALL dyn_ldf_iso    ( kt ) 
     77         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf1 - Ua: ', mask1=umask,   & 
     78            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     79         ;              CALL dyn_ldf_bilap  ( kt ) 
     80         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf2 - Ua: ', mask1=umask,   & 
     81            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     82         ;              CALL dyn_ldf_bilapg ( kt ) 
     83         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask,   & 
     84            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    10185      END SELECT 
    10286 
    103       !                                          ! save the horizontal diffusive trends for further diagnostics 
    104       IF( l_trddyn )   THEN 
     87      IF( l_trddyn ) THEN                        ! save the horizontal diffusive trends for further diagnostics 
    10588         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    10689         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    107          CALL trd_mod( ztrdu, ztrdv, jpdtdldf, 'DYN', kt ) 
     90         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_ldf, 'DYN', kt ) 
    10891      ENDIF 
    109  
    110       IF(ln_ctl) THEN                            ! print mean trends (used for debugging) 
    111          CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf  - Ua: ', mask1=umask, & 
    112             &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    113       ENDIF 
    114  
     92      !                                          ! print sum trends (used for debugging) 
     93      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf  - Ua: ', mask1=umask,   & 
     94         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     95      ! 
    11596   END SUBROUTINE dyn_ldf 
    11697 
     
    121102      !!  
    122103      !! ** Purpose :   initializations of the horizontal ocean dynamics physics 
    123       !! 
    124       !! ** Method : 
    125       !! 
    126       !! History : 
    127       !!   9.0  !  05-11  (G. Madec)  Original code 
    128104      !!---------------------------------------------------------------------- 
    129       !! * Local declarations 
    130105      INTEGER ::   ioptio, ierr         ! temporary integers  
    131106      !!---------------------------------------------------------------------- 
     107     
     108      !                                   ! Namelist nam_dynldf: already read in ldfdyn module 
    132109 
    133       !  Define the lateral dynamics physics parameters 
    134       ! ============================================= 
    135      
    136       ! Namelist nam_dynldf already read in ldfdyn module 
    137  
    138       IF(lwp) THEN 
     110      IF(lwp) THEN                        ! Namelist print 
    139111         WRITE(numout,*) 
    140          WRITE(numout,*) 'dyn:ldf_ctl : Choice of the lateral diffusive operator on dynamics' 
     112         WRITE(numout,*) 'dyn_ldf_ctl : Choice of the lateral diffusive operator on dynamics' 
    141113         WRITE(numout,*) '~~~~~~~~~~~' 
    142          WRITE(numout,*) '          Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 
    143          WRITE(numout,*) '             laplacian operator          ln_dynldf_lap   = ', ln_dynldf_lap 
    144          WRITE(numout,*) '             bilaplacian operator        ln_dynldf_bilap = ', ln_dynldf_bilap 
    145          WRITE(numout,*) '             iso-level                   ln_dynldf_level = ', ln_dynldf_level 
    146          WRITE(numout,*) '             horizontal (geopotential)   ln_dynldf_hor   = ', ln_dynldf_hor 
    147          WRITE(numout,*) '             iso-neutral                 ln_dynldf_iso   = ', ln_dynldf_iso 
     114         WRITE(numout,*) '       Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 
     115         WRITE(numout,*) '          laplacian operator          ln_dynldf_lap   = ', ln_dynldf_lap 
     116         WRITE(numout,*) '          bilaplacian operator        ln_dynldf_bilap = ', ln_dynldf_bilap 
     117         WRITE(numout,*) '          iso-level                   ln_dynldf_level = ', ln_dynldf_level 
     118         WRITE(numout,*) '          horizontal (geopotential)   ln_dynldf_hor   = ', ln_dynldf_hor 
     119         WRITE(numout,*) '          iso-neutral                 ln_dynldf_iso   = ', ln_dynldf_iso 
    148120      ENDIF 
    149121 
    150       ! control the consistency 
     122      !                                   ! control the consistency 
    151123      ioptio = 0 
    152124      IF( ln_dynldf_lap   )   ioptio = ioptio + 1 
     
    159131      IF( ioptio /= 1 ) CALL ctl_stop( '          use only ONE direction (level/hor/iso)' ) 
    160132 
    161       ! defined the type of lateral diffusion from ln_dynldf_... logicals 
     133      !                                   ! Set nldf, the type of lateral diffusion, from ln_dynldf_... logicals 
    162134      ierr = 0 
    163135      IF ( ln_dynldf_lap ) THEN      ! laplacian operator 
     
    196168         ENDIF 
    197169      ENDIF 
     170       
     171      IF( lk_esopa )                 nldf = -1     ! esopa test 
    198172 
    199       IF( ierr == 1 )   & 
    200            &   CALL ctl_stop( ' iso-level in z-coordinate - partial step, not allowed' ) 
    201       IF( ierr == 2 )   & 
    202            &   CALL ctl_stop( ' isoneutral bilaplacian operator does not exist' ) 
     173      IF( ierr == 1 )   CALL ctl_stop( 'iso-level in z-coordinate - partial step, not allowed' ) 
     174      IF( ierr == 2 )   CALL ctl_stop( 'isoneutral bilaplacian operator does not exist' ) 
    203175      IF( nldf == 1 .OR. nldf == 3 ) THEN      ! rotation 
    204          IF( .NOT.lk_ldfslp )   & 
    205            &   CALL ctl_stop(  '          the rotation of the diffusive tensor require key_ldfslp' ) 
    206       ENDIF 
    207  
    208       IF( lk_esopa ) THEN 
    209          IF(lwp ) WRITE(numout,*) '          esopa test: use all lateral physics options' 
    210          nldf = -1 
     176         IF( .NOT.lk_ldfslp )   CALL ctl_stop( 'the rotation of the diffusive tensor require key_ldfslp' ) 
    211177      ENDIF 
    212178 
     
    219185         IF( nldf ==  3 )   WRITE(numout,*) '              Rotated bilaplacian' 
    220186      ENDIF 
    221  
     187      ! 
    222188   END SUBROUTINE dyn_ldf_ctl 
    223189 
  • trunk/NEMO/OPA_SRC/DYN/dynspg.F90

    r474 r503  
    44   !! Ocean dynamics:  surface pressure gradient control 
    55   !!====================================================================== 
     6   !! History :  9.0  !  05-12  (C. Talandier, G. Madec)  Original code 
     7   !!            9.0  !  05-12  (V. Garnier)  dyn_spg_ctl: Original code 
     8   !!---------------------------------------------------------------------- 
    69 
    710   !!---------------------------------------------------------------------- 
     
    912   !!   dyn_spg_ctl : initialization, namelist read, and parameters control 
    1013   !!---------------------------------------------------------------------- 
    11    !! * Modules used 
    1214   USE oce            ! ocean dynamics and tracers variables 
    1315   USE dom_oce        ! ocean space and time domain variables 
     
    2931   PRIVATE 
    3032 
    31    !! * Accessibility 
    3233   PUBLIC dyn_spg         ! routine called by step module 
    3334 
    3435   !! * module variables 
    35    INTEGER ::                        & 
    36       nspg = 0                         ! type of surface pressure gradient scheme 
    37       !                                ! defined from lk_dynspg_...  
     36   INTEGER ::   nspg = 0   ! type of surface pressure gradient scheme defined from lk_dynspg_...  
    3837 
    3938   !! * Substitutions 
     
    4342   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    4443   !! $Header$  
    45    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     44   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4645   !!---------------------------------------------------------------------- 
    4746 
     
    5352      !! 
    5453      !! ** Purpose :   compute the lateral ocean dynamics physics. 
    55       !! 
    56       !! History : 
    57       !!   9.0  !  05-12  (C. Talandier, G. Madec)  Original code 
    58       !!---------------------------------------------------------------------- 
    59       !! * Arguments 
     54      !!---------------------------------------------------------------------- 
    6055      INTEGER, INTENT( in  ) ::   kt     ! ocean time-step index 
    6156      INTEGER, INTENT( out ) ::   kindic ! solver flag 
    62  
    63       !! * local declarations 
     57      !! 
    6458      REAL(wp) ::   z2dt                      ! temporary scalar 
    65       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    66          ztrdu, ztrdv                         ! 3D temporary workspace 
     59      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    6760      !!---------------------------------------------------------------------- 
    6861 
     
    7568 
    7669      SELECT CASE ( nspg )                       ! compute surf. pressure gradient trend and add it to the general trend 
     70      !                                                      ! k-j-i loops 
     71      CASE (  0 )   ;   CALL dyn_spg_exp    ( kt )              ! explicit 
     72      CASE (  1 )   ;   CALL dyn_spg_ts     ( kt )              ! time-splitting 
     73      CASE (  2 )   ;   CALL dyn_spg_flt    ( kt, kindic )      ! filtered 
     74      CASE (  3 )   ;   CALL dyn_spg_rl     ( kt, kindic )      ! rigid lid 
     75      !                                                      ! j-k-i loops 
     76      CASE ( 10 )   ;   CALL dyn_spg_exp_jki( kt )              ! explicit with j-k-i loop 
     77      CASE ( 11 )   ;   CALL dyn_spg_ts_jki ( kt )              ! time-splitting with j-k-i loop 
     78      CASE ( 12 )   ;   CALL dyn_spg_flt_jki( kt, kindic )      ! filtered with j-k-i loop 
     79      ! 
    7780      CASE ( -1 )                                       ! esopa: test all possibility with control print 
    78          CALL dyn_spg_exp    ( kt ) 
    79          IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg0 - Ua: ', mask1=umask, & 
    80                &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    81          CALL dyn_spg_ts     ( kt ) 
    82          IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg1 - Ua: ', mask1=umask, & 
    83                &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    84          CALL dyn_spg_flt  ( kt, kindic ) 
    85          IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg2 - Ua: ', mask1=umask, & 
    86                &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    87          CALL dyn_spg_exp_jki( kt ) 
    88          IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg10- Ua: ', mask1=umask, & 
    89                &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    90          CALL dyn_spg_ts_jki ( kt ) 
    91          IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg12- Ua: ', mask1=umask, & 
    92                &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    93          CALL dyn_spg_flt_jki( kt, kindic ) 
    94          IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg13- Ua: ', mask1=umask, & 
    95                &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    96       CASE (  0 )                                       ! explicit 
    97          CALL dyn_spg_exp    ( kt ) 
    98       CASE (  1 )                                       ! time-splitting 
    99          CALL dyn_spg_ts     ( kt ) 
    100       CASE (  2 )                                       ! filtered 
    101          CALL dyn_spg_flt    ( kt, kindic ) 
    102       CASE (  3 )                                       ! rigid lid 
    103          CALL dyn_spg_rl     ( kt, kindic ) 
    104  
    105       CASE ( 10 )                                       ! explicit with j-k-i loop 
    106          CALL dyn_spg_exp_jki( kt ) 
    107       CASE ( 11 )                                       ! time-splitting with j-k-i loop 
    108          CALL dyn_spg_ts_jki ( kt ) 
    109       CASE ( 12 )                                       ! filtered with j-k-i loop 
    110          CALL dyn_spg_flt_jki( kt, kindic ) 
     81         ;              CALL dyn_spg_exp    ( kt ) 
     82         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg0 - Ua: ', mask1=umask, & 
     83            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     84         ;              CALL dyn_spg_ts     ( kt ) 
     85         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg1 - Ua: ', mask1=umask, & 
     86            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     87         ;              CALL dyn_spg_flt  ( kt, kindic ) 
     88         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg2 - Ua: ', mask1=umask, & 
     89            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     90         ;              CALL dyn_spg_exp_jki( kt ) 
     91         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg10- Ua: ', mask1=umask, & 
     92            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     93         ;              CALL dyn_spg_ts_jki ( kt ) 
     94         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg12- Ua: ', mask1=umask, & 
     95            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     96         ;              CALL dyn_spg_flt_jki( kt, kindic ) 
     97         ;              CALL prt_ctl( tab3d_1=ua, clinfo1=' spg13- Ua: ', mask1=umask, & 
     98            &                         tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    11199      END SELECT 
    112  
    113       !                                          ! save the horizontal diffusive trends for further diagnostics 
    114       IF( l_trddyn )   THEN 
     100      !                     
     101      IF( l_trddyn )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    115102         SELECT CASE ( nspg ) 
    116103         CASE ( 0, 1, 3, 10, 11 ) 
     
    123110            ztrdv(:,:,:) = ( va(:,:,:) - vb(:,:,:) ) / z2dt - ztrdv(:,:,:) 
    124111         END SELECT 
    125          CALL trd_mod( ztrdu, ztrdv, jpdtdspg, 'DYN', kt ) 
    126       ENDIF 
    127  
     112         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_spg, 'DYN', kt ) 
     113      ENDIF 
    128114      !                                          ! print mean trends (used for debugging) 
    129115      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' spg  - Ua: ', mask1=umask, & 
    130116         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    131  
     117      ! 
    132118   END SUBROUTINE dyn_spg 
    133119 
     
    139125      !! ** Purpose :   Control the consistency between cpp options for  
    140126      !!      surface pressure gradient schemes 
    141       !! 
    142       !! History : 
    143       !!   9.0  !  05-10  (V. Garnier)  Original code : spg re-organization 
    144127      !!---------------------------------------------------------------------- 
    145128      !! * Local declarations 
  • trunk/NEMO/OPA_SRC/DYN/dynspg_flt_jki.F90

    r474 r503  
    99   !!   'key_mpp_omp'                              j-k-i loop (vector opt.) 
    1010   !!---------------------------------------------------------------------- 
     11   !!---------------------------------------------------------------------- 
    1112   !!   dyn_spg_flt_jki : Update the momentum trend with the surface pressure 
    1213   !!                     gradient for the free surf. constant volume case 
    1314   !!                     with auto-tasking (j-slab) (no vectior opt.) 
    1415   !!---------------------------------------------------------------------- 
    15    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    16    !! $Header$  
    17    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    18    !!---------------------------------------------------------------------- 
    19    !! * Modules used 
    2016   USE oce             ! ocean dynamics and tracers  
    2117   USE dom_oce         ! ocean space and time domain 
     
    5147   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    5248   !! $Header$  
    53    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     49   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    5450   !!---------------------------------------------------------------------- 
    5551 
     
    10096      !! ** Action : - Update (ua,va) with the surf. pressure gradient trend 
    10197      !! 
    102       !! References : 
    103       !!      Roullet and Madec 1999, JGR. 
    104       !! 
    105       !! History : 
    106       !!        !  98-05 (G. Roullet)  Original code 
    107       !!        !  98-10 (G. Madec, M. Imbard)  release 8.2 
    108       !!   8.5  !  02-08 (G. Madec)  F90: Free form and module 
    109       !!        !  02-11 (C. Talandier, A-M Treguier) Open boundaries 
    110       !!   9.0  !  04-08 (C. Talandier) New trends organization 
    111       !!    "   !  05-11  (V. Garnier) Surface pressure gradient organization 
     98      !! References : Roullet and Madec 1999, JGR. 
    11299      !!--------------------------------------------------------------------- 
    113       !! * Arguments 
    114100      INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
    115       INTEGER, INTENT( out ) ::   kindic     ! solver convergence flag 
    116                                              ! if the solver doesn t converge 
    117                                              ! the flag is < 0 
    118       !! * Local declarations 
     101      INTEGER, INTENT( out ) ::   kindic     ! solver convergence flag, <0 if the solver doesn t converge 
     102      !! 
    119103      INTEGER  ::   ji, jj, jk               ! dummy loop indices 
    120104      REAL(wp) ::   &              ! temporary scalars 
     
    154138            spgv(ji,jj) = - grav * ( sshn(ji  ,jj+1) - sshn(ji,jj) ) / e2v(ji,jj) 
    155139         END DO  
    156  
    157140         !  Add the surface pressure trend to the general trend 
    158141         DO jk = 1, jpkm1 
     
    162145            END DO 
    163146         END DO 
    164  
    165147         ! Evaluate the masked next velocity (effect of the additional force not included) 
    166148         DO jk = 1, jpkm1 
     
    170152            END DO 
    171153         END DO 
    172  
    173154         !                                             ! =============== 
    174155      END DO                                           !   End of slab 
     
    202183            spgv(ji,jj) = 0.e0 
    203184         END DO 
    204  
    205185         ! vertical sum 
    206186         DO jk = 1, jpk 
     
    210190            END DO 
    211191         END DO 
    212  
    213192         ! transport: multiplied by the horizontal scale factor 
    214193         DO ji = 2, jpim1 
     
    216195            spgv(ji,jj) = spgv(ji,jj) * e1v(ji,jj) 
    217196         END DO 
    218  
    219197         !                                             ! =============== 
    220198      END DO                                           !   End of slab 
     
    302280            WRITE(ctmp1,*) ' ~~~~~~~~~~~~~~~~                not = ', nsolv 
    303281            CALL ctl_stop( ' dyn_spg_flt_jki : e r r o r, nsolv = 1, 2, 3 or 4', ctmp1 ) 
    304       ENDIF 
    305  
    306       !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,synchro,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    307  
    308 !CDIR PARALLEL DO 
    309 !$OMP PARALLEL DO 
     282         ENDIF 
     283      ENDIF 
     284 
     285      !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,synchro,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     286 
    310287      !                                                ! =============== 
    311288      DO jj = 2, jpjm1                                 !  Vertical slab 
     
    353330         ! 8. Sea surface elevation time stepping 
    354331         ! -------------------------------------- 
    355          ! Euler (forward) time stepping, no time filter 
    356          IF( neuler == 0 .AND. kt == nit000 ) THEN 
     332         IF( neuler == 0 .AND. kt == nit000 ) THEN         ! Euler (forward) time stepping, no time filter 
    357333            DO ji = 1, jpi 
    358334               ! after free surface elevation 
     
    362338               sshn(ji,jj) = zssha 
    363339            END DO 
    364          ELSE 
    365             ! Leap-frog time stepping and time filter 
     340         ELSE                                              ! Leap-frog time stepping and time filter 
    366341            DO ji = 1, jpi 
    367342               ! after free surface elevation 
     
    384359         CALL prt_ctl( tab2d_1=sshn, clinfo1=' spg  - ssh: ', mask1=tmask) 
    385360      ENDIF 
    386  
    387  
     361      ! 
    388362   END SUBROUTINE dyn_spg_flt_jki 
    389363 
  • trunk/NEMO/OPA_SRC/DYN/dynvor.F90

    r474 r503  
    55   !!                 planetary vorticity trends 
    66   !!====================================================================== 
     7   !! History :  1.0  !  89-12  (P. Andrich)  vor_ens: Original code 
     8   !!            5.0  !  91-11  (G. Madec) vor_ene, vor_mix: Original code 
     9   !!            6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
     10   !!            8.5  !  02-08  (G. Madec)  F90: Free form and module 
     11   !!            8.5  !  04-02  (G. Madec)  vor_een: Original code 
     12   !!            9.0  !  03-08  (G. Madec)  vor_ctl: Original code 
     13   !!            9.0  !  05-11  (G. Madec)  dyn_vor: Original code (new step architecture) 
     14   !!---------------------------------------------------------------------- 
    715 
    816   !!---------------------------------------------------------------------- 
     
    1422   !!       vor_ctl : control of the different vorticity option 
    1523   !!---------------------------------------------------------------------- 
    16    !! * Modules used 
    17    USE oce             ! ocean dynamics and tracers 
    18    USE dom_oce         ! ocean space and time domain 
    19    USE in_out_manager  ! I/O manager 
    20    USE trdmod          ! ocean dynamics trends  
    21    USE trdmod_oce      ! ocean variables trends 
    22    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    23    USE prtctl          ! Print control 
     24   USE oce            ! ocean dynamics and tracers 
     25   USE dom_oce        ! ocean space and time domain 
     26   USE trdmod         ! ocean dynamics trends  
     27   USE trdmod_oce     ! ocean variables trends 
     28   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     29   USE prtctl         ! Print control 
     30   USE in_out_manager ! I/O manager 
    2431 
    2532   IMPLICIT NONE 
    2633   PRIVATE 
    2734 
    28    !! * Routine accessibility 
    29    PUBLIC dyn_vor      ! routine called by step.F90 
    30  
    31    !! * Shared module variables 
     35   PUBLIC   dyn_vor   ! routine called by step.F90 
     36 
     37   !!* Namelist nam_dynvor: vorticity term 
    3238   LOGICAL, PUBLIC ::   ln_dynvor_ene = .FALSE.   !: energy conserving scheme 
    3339   LOGICAL, PUBLIC ::   ln_dynvor_ens = .TRUE.    !: enstrophy conserving scheme 
    3440   LOGICAL, PUBLIC ::   ln_dynvor_mix = .FALSE.   !: mixed scheme 
    35    LOGICAL, PUBLIC ::   ln_dynvor_een = .FALSE.    !: energy and enstrophy conserving scheme 
    36  
    37    !! * module variables 
    38    INTEGER ::                        & 
    39       nvor = 0                         ! type of vorticity trend used 
     41   LOGICAL, PUBLIC ::   ln_dynvor_een = .FALSE.   !: energy and enstrophy conserving scheme 
     42   NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 
     43 
     44   INTEGER ::   nvor = 0   ! type of vorticity trend used 
    4045 
    4146   !! * Substitutions 
     
    4348#  include "vectopt_loop_substitute.h90" 
    4449   !!---------------------------------------------------------------------- 
    45    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     50   !!   OPA 9.0 , LOCEAN-IPSL (2006)  
     51   !! $Header$ 
     52   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4653   !!---------------------------------------------------------------------- 
    4754 
     
    5461      !! 
    5562      !! ** Action : - Update (ua,va) with the now vorticity term trend 
    56       !!             - save the trends in (utrd,vtrd) in 2 parts (relative 
     63      !!             - save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    5764      !!               and planetary vorticity trends) ('key_trddyn') 
    58       !! 
    59       !! History : 
    60       !!   9.0  !  05-11  (G. Madec)  Original code 
    61       !!---------------------------------------------------------------------- 
    62       USE oce, ONLY :    ztrdu => ta,     & ! use ta as 3D workspace 
    63                          ztrdv => sa        ! use sa as 3D workspace 
    64  
    65       !! * Arguments 
    66       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
     65      !!---------------------------------------------------------------------- 
     66      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace 
     67      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace 
     68      !! 
     69      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    6770      !!---------------------------------------------------------------------- 
    6871 
     
    7477      CASE ( -1 )                                      ! esopa: test all possibility with control print 
    7578         CALL vor_ene( kt, 'TOT', ua, va ) 
    76          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 
    77             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     79         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 
     80            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    7881         CALL vor_ens( kt, 'TOT', ua, va ) 
    79          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 
    80             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     82         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 
     83            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    8184         CALL vor_mix( kt ) 
    82          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 
    83             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     85         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 
     86            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    8487         CALL vor_een( kt, 'TOT', ua, va ) 
    85          IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 
    86             &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     88         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 
     89            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    8790 
    8891      CASE ( 0 )                                       ! energy conserving scheme 
     
    9396            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    9497            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    95             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     98            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    9699            ztrdu(:,:,:) = ua(:,:,:) 
    97100            ztrdv(:,:,:) = va(:,:,:) 
     
    99102            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    100103            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    101             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    102             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     104            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     105            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    103106         ELSE 
    104107            CALL vor_ene( kt, 'TOT', ua, va )                ! total vorticity 
     
    112115            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    113116            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    114             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     117            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    115118            ztrdu(:,:,:) = ua(:,:,:) 
    116119            ztrdv(:,:,:) = va(:,:,:) 
     
    118121            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    119122            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    120             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    121             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     123            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     124            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    122125         ELSE 
    123126            CALL vor_ens( kt, 'TOT', ua, va )                ! total vorticity 
     
    131134            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    132135            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    133             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     136            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    134137            ztrdu(:,:,:) = ua(:,:,:) 
    135138            ztrdv(:,:,:) = va(:,:,:) 
     
    137140            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    138141            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    139             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    140             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     142            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     143            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    141144         ELSE 
    142145            CALL vor_mix( kt )                               ! total vorticity (mix=ens-ene) 
     
    150153            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    151154            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    152             CALL trd_mod( ztrdu, ztrdv, jpdtdrvo, 'DYN', kt ) 
     155            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_rvo, 'DYN', kt ) 
    153156            ztrdu(:,:,:) = ua(:,:,:) 
    154157            ztrdv(:,:,:) = va(:,:,:) 
     
    156159            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    157160            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    158             CALL trd_mod( ztrdu, ztrdu, jpdtdpvo, 'DYN', kt ) 
    159             CALL trd_mod( ztrdu, ztrdv, jpdtddat, 'DYN', kt ) 
     161            CALL trd_mod( ztrdu, ztrdu, jpdyn_trd_pvo, 'DYN', kt ) 
     162            CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_dat, 'DYN', kt ) 
    160163         ELSE 
    161164            CALL vor_een( kt, 'TOT', ua, va )                ! total vorticity 
     
    192195      !! 
    193196      !! ** Action : - Update (ua,va) with the now vorticity term trend 
    194       !!             - save the trends in (utrd,vtrd) in 2 parts (relative 
     197      !!             - save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    195198      !!               and planetary vorticity trends) ('key_trddyn') 
    196199      !! 
    197       !! References : 
    198       !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    199       !! History : 
    200       !!   5.0  !  91-11  (G. Madec)  Original code 
    201       !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    202       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    203       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    204       !!---------------------------------------------------------------------- 
    205       !! * Arguments 
    206       INTEGER, INTENT( in ) ::   kt         ! ocean time-step index 
    207       CHARACTER(len=3) , INTENT( in ) ::   & 
    208          cd_vor        ! define the vorticity considered 
    209          !             ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 
    210       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::   & 
    211          pua, pva                      ! ???? 
    212  
    213       !! * Local declarations 
    214       INTEGER ::   ji, jj, jk               ! dummy loop indices 
    215       REAL(wp) ::   & 
    216          zfact2,                         &  ! temporary scalars 
    217          zx1, zx2, zy1, zy2                 !    "         " 
    218       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    219          zwx, zwy, zwz                      ! temporary workspace 
     200      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
     201      !!---------------------------------------------------------------------- 
     202      INTEGER          , INTENT(in   )                         ::   kt       ! ocean time-step index 
     203      CHARACTER(len=3) , INTENT(in   )                         ::   cd_vor   ! ='COR' (planetary) ; ='VOR' (relative) 
     204         !                                                                   ! ='TOT' (total) 
     205      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua      ! total u-trend 
     206      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva      ! total v-trend 
     207      !! 
     208      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
     209      REAL(wp) ::   zx1, zy1, zfact2   ! temporary scalars 
     210      REAL(wp) ::   zx2, zy2           !    "         " 
     211      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 2D workspace 
    220212      !!---------------------------------------------------------------------- 
    221213 
     
    234226      DO jk = 1, jpkm1                                 ! Horizontal slab 
    235227         !                                             ! =============== 
    236           
    237228         ! Potential vorticity and horizontal fluxes 
    238229         ! ----------------------------------------- 
    239230         SELECT CASE( cd_vor )      ! vorticity considered 
    240          CASE ( 'COR' )                   ! planetary vorticcity (Coriolis) 
    241             zwz(:,:) = ff(:,:) 
    242          CASE ( 'VOR' )                   ! relative  vorticity 
    243             zwz(:,:) = rotn(:,:,jk) 
    244          CASE ( 'TOT' )                   ! total     vorticity (planetary + relative) 
    245             zwz(:,:) = rotn(:,:,jk) + ff(:,:) 
     231         CASE ( 'COR' )   ;   zwz(:,:) =                  ff(:,:)      ! planetary vorticity (Coriolis) 
     232         CASE ( 'VOR' )   ;   zwz(:,:) =   rotn(:,:,jk)                ! relative  vorticity 
     233         CASE ( 'TOT' )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) )    ! total     vorticity  
    246234         END SELECT 
    247235 
     
    270258      END DO                                           !   End of slab 
    271259      !                                                ! =============== 
    272  
    273260   END SUBROUTINE vor_ene 
    274261 
     
    300287      !! 
    301288      !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 
    302       !!             - Save the trends in (utrd,vtrd) in 2 parts (relative 
     289      !!             - Save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    303290      !!               and planetary vorticity trends) ('key_trddyn') 
    304291      !! 
    305       !! References : 
    306       !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    307       !! History : 
    308       !!   5.0  !  91-11  (G. Madec) Original code, enstrophy-energy-combined schemes 
    309       !!   6.0  !  96-01  (G. Madec) s-coord, suppress work arrays 
    310       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    311       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    312       !!---------------------------------------------------------------------- 
    313       !! * Arguments 
    314       INTEGER, INTENT( in ) ::   kt         ! ocean timestep index 
    315  
    316       !! * Local declarations 
    317       INTEGER ::   ji, jj, jk               ! dummy loop indices 
    318       REAL(wp) ::   & 
    319          zfact1, zfact2, zua, zva,       &  ! temporary scalars 
    320          zcua, zcva, zx1, zx2, zy1, zy2 
    321       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    322          zwx, zwy, zwz, zww                 ! temporary workspace 
     292      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
     293      !!---------------------------------------------------------------------- 
     294      INTEGER, INTENT(in) ::   kt   ! ocean timestep index 
     295      !! 
     296      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     297      REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! temporary scalars 
     298      REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !    "         " 
     299      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz, zww   ! temporary 3D workspace 
    323300      !!---------------------------------------------------------------------- 
    324301 
     
    367344               zcua = zfact2 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 
    368345               zcva =-zfact2 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 ) 
    369  
     346               ! mixed vorticity trend added to the momentum trends 
    370347               ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua 
    371348               va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva 
     
    375352      END DO                                           !   End of slab 
    376353      !                                                ! =============== 
    377  
    378354   END SUBROUTINE vor_mix 
    379355 
     
    400376      !! 
    401377      !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 
    402       !!             - Save the trends in (utrd,vtrd) in 2 parts (relative  
     378      !!             - Save the trends in (ztrdu,ztrdv) in 2 parts (relative  
    403379      !!               and planetary vorticity trends) ('key_trddyn') 
    404380      !! 
    405       !! References : 
    406       !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    407       !! History : 
    408       !!   5.0  !  91-11  (G. Madec)  Original code 
    409       !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays 
    410       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    411       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    412       !!---------------------------------------------------------------------- 
    413       !! * Arguments 
    414       INTEGER, INTENT( in ) ::   kt    ! ocean timestep 
    415       CHARACTER(len=3) , INTENT( in ) ::   & 
    416          cd_vor        ! define the vorticity considered 
    417          !             ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 
    418       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::   & 
    419          pua, pva                      ! ???? 
    420  
    421       !! * Local declarations 
    422       INTEGER ::   ji, jj, jk          ! dummy loop indices 
    423       REAL(wp) ::   & 
    424          zfact1, zuav, zvau            ! temporary scalars 
    425       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    426          zwx, zwy, zwz                 ! temporary workspace 
     381      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
     382      !!---------------------------------------------------------------------- 
     383      INTEGER          , INTENT(in   )                         ::   kt       ! ocean time-step index 
     384      CHARACTER(len=3) , INTENT(in   )                         ::   cd_vor   ! ='COR' (planetary) ; ='VOR' (relative) 
     385         !                                                                   ! ='TOT' (total) 
     386      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua      ! total u-trend 
     387      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva      ! total v-trend 
     388      !! 
     389      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     390      REAL(wp) ::   zfact1, zuav, zvau   ! temporary scalars 
     391      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 3D workspace 
    427392      !!---------------------------------------------------------------------- 
    428393       
     
    441406      DO jk = 1, jpkm1                                 ! Horizontal slab 
    442407         !                                             ! =============== 
    443  
    444408         ! Potential vorticity and horizontal fluxes 
    445409         ! ----------------------------------------- 
    446410         SELECT CASE( cd_vor )      ! vorticity considered 
    447          CASE ( 'COR' )                   ! planetary vorticcity (Coriolis) 
    448             zwz(:,:) = ff(:,:) 
    449          CASE ( 'VOR' )                   ! relative  vorticity 
    450             zwz(:,:) = rotn(:,:,jk) 
    451          CASE ( 'TOT' )                   ! total     vorticity (planetary + relative) 
    452             zwz(:,:) = rotn(:,:,jk) + ff(:,:) 
     411         CASE ( 'COR' )   ;   zwz(:,:) =                  ff(:,:)      ! planetary vorticity (Coriolis) 
     412         CASE ( 'VOR' )   ;   zwz(:,:) =   rotn(:,:,jk)                ! relative  vorticity 
     413         CASE ( 'TOT' )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) )    ! total     vorticity  
    453414         END SELECT 
    454415 
     
    470431         ENDIF 
    471432 
    472  
    473433         ! Compute and add the vorticity term trend 
    474434         ! ---------------------------------------- 
     
    476436            DO ji = fs_2, fs_jpim1   ! vector opt. 
    477437               zuav = zfact1 / e1u(ji,jj) * ( zwy(ji  ,jj-1) + zwy(ji+1,jj-1)   & 
    478                                             + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) 
     438                  &                         + zwy(ji  ,jj  ) + zwy(ji+1,jj  ) ) 
    479439               zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj  ) + zwx(ji-1,jj+1)   & 
    480                                             + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) 
    481  
     440                  &                         + zwx(ji  ,jj  ) + zwx(ji  ,jj+1) ) 
    482441               pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji  ,jj-1) + zwz(ji,jj) ) 
    483442               pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj  ) + zwz(ji,jj) ) 
     
    487446      END DO                                           !   End of slab 
    488447      !                                                ! =============== 
    489  
    490448   END SUBROUTINE vor_ens 
    491449 
     
    509467      !! 
    510468      !! ** Action : - Update (ua,va) with the now vorticity term trend 
    511       !!             - save the trends in (utrd,vtrd) in 2 parts (relative 
     469      !!             - save the trends in (ztrdu,ztrdv) in 2 parts (relative 
    512470      !!               and planetary vorticity trends) ('key_trddyn') 
    513471      !! 
    514       !! References : 
    515       !!      Arakawa and Lamb 1980, A potential enstrophy and energy conserving 
    516       !!                             scheme for the Shallow water equations,  
    517       !!                             Monthly Weather Review, vol. 109, p 18-36 
    518       !! 
    519       !! History : 
    520       !!   8.5  !  04-02  (G. Madec)  Original code 
    521       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    522       !!---------------------------------------------------------------------- 
    523       !! * Arguments 
    524       INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
    525       CHARACTER(len=3) , INTENT( in ) ::   & 
    526          cd_vor        ! define the vorticity considered 
    527          !             ! ='COR' (planetary) ; ='VOR' (relative) ; ='TOT' (total) 
    528       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) ::   & 
    529          pua, pva                      ! ???? 
    530  
    531       !! * Local declarations 
    532       INTEGER ::   ji, jj, jk              ! dummy loop indices 
    533       REAL(wp) ::   & 
    534          zfac12, zua, zva                  ! temporary scalars 
    535       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    536          zwx, zwy, zwz,                 &  ! temporary workspace 
    537          ztnw, ztne, ztsw, ztse            !    "           " 
    538       REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   & 
    539          ze3f 
     472      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
     473      !!---------------------------------------------------------------------- 
     474      INTEGER          , INTENT(in   )                         ::   kt       ! ocean time-step index 
     475      CHARACTER(len=3) , INTENT(in   )                         ::   cd_vor   ! ='COR' (planetary) ; ='VOR' (relative) 
     476         !                                                                   ! ='TOT' (total) 
     477      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua      ! total u-trend 
     478      REAL(wp)         , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva      ! total v-trend 
     479      !! 
     480      INTEGER ::   ji, jj, jk          ! dummy loop indices 
     481      REAL(wp) ::   zfac12, zua, zva   ! temporary scalars 
     482      REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz            ! temporary 2D workspace 
     483      REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse   ! temporary 3D workspace 
     484      REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
    540485      !!---------------------------------------------------------------------- 
    541486 
     
    570515         ! ----------------------------------------- 
    571516         SELECT CASE( cd_vor )      ! vorticity considered 
    572          CASE ( 'COR' )                   ! planetary vorticcity (Coriolis) 
    573             zwz(:,:) = ff(:,:) * ze3f(:,:,jk) 
    574          CASE ( 'VOR' )                   ! relative  vorticity 
    575             zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 
    576          CASE ( 'TOT' )                   ! total     vorticity (planetary + relative) 
    577             zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 
     517         CASE ( 'COR' )   ;   zwz(:,:) =                  ff(:,:)   * ze3f(:,:,jk)   ! planetary vorticity (Coriolis) 
     518         CASE ( 'VOR' )   ;   zwz(:,:) =   rotn(:,:,jk)             * ze3f(:,:,jk)   ! relative  vorticity 
     519         CASE ( 'TOT' )   ;   zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk)   ! total     vorticity  
    578520         END SELECT 
    579521 
     
    599541            END DO 
    600542         END DO 
    601           
    602543         DO jj = 2, jpjm1 
    603544            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    613554      END DO                                           !   End of slab 
    614555      !                                                ! =============== 
    615  
    616556   END SUBROUTINE vor_een 
    617557 
     
    623563      !! ** Purpose :   Control the consistency between cpp options for 
    624564      !!      tracer advection schemes 
    625       !! 
    626       !! History : 
    627       !!   9.0  !  03-08  (G. Madec)  Original code 
    628       !!---------------------------------------------------------------------- 
    629       !! * Local declarations 
     565      !!---------------------------------------------------------------------- 
    630566      INTEGER ::   ioptio          ! temporary integer 
    631  
    632       NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 
    633       !!---------------------------------------------------------------------- 
    634  
    635       ! Read Namelist nam_dynvor : Vorticity scheme options 
    636       ! ------------------------ 
    637       REWIND ( numnam ) 
     567      !!---------------------------------------------------------------------- 
     568 
     569      REWIND ( numnam )               ! Read Namelist nam_dynvor : Vorticity scheme options 
    638570      READ   ( numnam, nam_dynvor ) 
    639571 
    640       ! Control of vorticity scheme options 
    641       ! ----------------------------------- 
    642       ! Control print 
    643       IF(lwp) THEN 
     572      IF(lwp) THEN                    ! Namelist print 
    644573         WRITE(numout,*) 
    645574         WRITE(numout,*) 'dyn:vor_ctl : vorticity term : read namelist and control the consistency' 
    646575         WRITE(numout,*) '~~~~~~~~~~~' 
    647          WRITE(numout,*) '              Namelist nam_dynvor : oice of the vorticity term scheme' 
    648          WRITE(numout,*) '                 energy    conserving scheme                ln_dynvor_ene = ', ln_dynvor_ene 
    649          WRITE(numout,*) '                 enstrophy conserving scheme                ln_dynvor_ens = ', ln_dynvor_ens 
    650          WRITE(numout,*) '                 mixed enstrophy/energy conserving scheme   ln_dynvor_mix = ', ln_dynvor_mix 
    651          WRITE(numout,*) '                 enstrophy and energy conserving scheme     ln_dynvor_een = ', ln_dynvor_een 
     576         WRITE(numout,*) '        Namelist nam_dynvor : oice of the vorticity term scheme' 
     577         WRITE(numout,*) '           energy    conserving scheme                ln_dynvor_ene = ', ln_dynvor_ene 
     578         WRITE(numout,*) '           enstrophy conserving scheme                ln_dynvor_ens = ', ln_dynvor_ens 
     579         WRITE(numout,*) '           mixed enstrophy/energy conserving scheme   ln_dynvor_mix = ', ln_dynvor_mix 
     580         WRITE(numout,*) '           enstrophy and energy conserving scheme     ln_dynvor_een = ', ln_dynvor_een 
    652581      ENDIF 
    653582 
    654       ioptio = 0 
    655       IF( ln_dynvor_ene ) THEN 
    656          nvor = 0 
    657          IF(lwp) WRITE(numout,*) 
    658          IF(lwp) WRITE(numout,*) '              vorticity term : energy conserving scheme' 
    659          ioptio = ioptio + 1 
     583      ioptio = 0                     ! Control of vorticity scheme options 
     584      IF( ln_dynvor_ene )   ioptio = ioptio + 1 
     585      IF( ln_dynvor_ens )   ioptio = ioptio + 1 
     586      IF( ln_dynvor_mix )   ioptio = ioptio + 1 
     587      IF( ln_dynvor_een )   ioptio = ioptio + 1 
     588      IF( lk_esopa      )   ioptio =          1 
     589 
     590      IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 
     591 
     592      !                              ! Set nvor 
     593      IF( ln_dynvor_ene )   nvor =  0 
     594      IF( ln_dynvor_ens )   nvor =  1 
     595      IF( ln_dynvor_mix )   nvor =  2 
     596      IF( ln_dynvor_een )   nvor =  3 
     597      IF( lk_esopa      )   nvor = -1 
     598       
     599      IF(lwp) THEN                   ! Print the choice 
     600         WRITE(numout,*) 
     601         IF( nvor ==  0 )   WRITE(numout,*) '         vorticity term used : energy conserving scheme' 
     602         IF( nvor ==  1 )   WRITE(numout,*) '         vorticity term used : enstrophy conserving scheme' 
     603         IF( nvor ==  2 )   WRITE(numout,*) '         vorticity term used : mixed enstrophy/energy conserving scheme' 
     604         IF( nvor ==  3 )   WRITE(numout,*) '         vorticity term used : energy and enstrophy conserving scheme' 
     605         IF( nvor == -1 )   WRITE(numout,*) '         esopa test: use all lateral physics options' 
    660606      ENDIF 
    661       IF( ln_dynvor_ens ) THEN 
    662          nvor = 1 
    663          IF(lwp) WRITE(numout,*) 
    664          IF(lwp) WRITE(numout,*) '              vorticity term : enstrophy conserving scheme' 
    665          ioptio = ioptio + 1 
    666       ENDIF 
    667       IF( ln_dynvor_mix ) THEN 
    668          nvor = 2 
    669          IF(lwp) WRITE(numout,*) 
    670          IF(lwp) WRITE(numout,*) '              vorticity term : mixed enstrophy/energy conserving scheme' 
    671          ioptio = ioptio + 1 
    672       ENDIF 
    673       IF( ln_dynvor_een ) THEN 
    674          nvor = 3 
    675          IF(lwp) WRITE(numout,*) 
    676          IF(lwp) WRITE(numout,*) '              vorticity term : energy and enstrophy conserving scheme' 
    677          ioptio = ioptio + 1 
    678       ENDIF 
    679       IF( ioptio /= 1 .AND. .NOT. lk_esopa ) CALL ctl_stop( ' use ONE and ONLY one vorticity scheme' ) 
    680       IF( lk_esopa ) THEN 
    681          nvor = -1 
    682          IF(lwp ) WRITE(numout,*) '          esopa test: use all lateral physics options' 
    683       ENDIF 
    684       IF(lwp) WRITE(numout,*) '             choice of vor_...                nvor   = ', nvor 
    685  
     607      ! 
    686608   END SUBROUTINE vor_ctl 
    687609 
    688 !!============================================================================== 
     610   !!============================================================================== 
    689611END MODULE dynvor 
  • trunk/NEMO/OPA_SRC/DYN/dynzad.F90

    r455 r503  
    44   !! Ocean dynamics : vertical advection trend 
    55   !!====================================================================== 
     6   !! History :  6.0  !  91-01  (G. Madec) Original code 
     7   !!            7.0  !  91-11  (G. Madec) 
     8   !!            7.5  !  96-01  (G. Madec) statement function for e3 
     9   !!            8.5  !  02-07  (G. Madec) j-k-i case: Original code 
     10   !!            8.5  !  02-07  (G. Madec) Free form, F90 
     11   !!---------------------------------------------------------------------- 
    612    
    713   !!---------------------------------------------------------------------- 
    8    !!   dyn_zad      : vertical advection momentum trend 
    9    !!---------------------------------------------------------------------- 
    10    !! * Modules used 
    11    USE oce             ! ocean dynamics and tracers 
    12    USE dom_oce         ! ocean space and time domain 
    13    USE in_out_manager  ! I/O manager 
    14    USE trdmod          ! ocean dynamics trends  
    15    USE trdmod_oce      ! ocean variables trends 
    16    USE flxrnf          ! ocean runoffs 
    17    USE prtctl          ! Print control 
     14   !!   dyn_zad       : vertical advection momentum trend 
     15   !!---------------------------------------------------------------------- 
     16   USE oce            ! ocean dynamics and tracers 
     17   USE dom_oce        ! ocean space and time domain 
     18   USE in_out_manager ! I/O manager 
     19   USE trdmod         ! ocean dynamics trends  
     20   USE trdmod_oce     ! ocean variables trends 
     21   USE flxrnf         ! ocean runoffs 
     22   USE prtctl         ! Print control 
    1823 
    1924   IMPLICIT NONE 
    2025   PRIVATE 
    2126    
    22    !! * Accessibility 
    23    PUBLIC dyn_zad                ! routine called by step.F90 
     27   PUBLIC   dyn_zad   ! routine called by step.F90 
    2428 
    2529   !! * Substitutions 
     
    2933   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    3034   !! $Header$  
    31    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     35   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    3236   !!---------------------------------------------------------------------- 
    3337 
     
    5458      !! 
    5559      !! ** Action  : - Update (ua,va) with the vert. momentum advection trends 
    56       !!              - Save the trends in (utrd,vtrd) ('key_trddyn') 
    57       !! 
    58       !! History : 
    59       !!   6.0  !  91-01  (G. Madec) Original code 
    60       !!   7.0  !  91-11  (G. Madec) 
    61       !!   7.5  !  96-01  (G. Madec) statement function for e3 
    62       !!   8.5  !  02-07  (G. Madec) Free form, F90 
    63       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    64       !!---------------------------------------------------------------------- 
    65       !! * modules used 
    66       USE oce, ONLY:   zwuw => ta,   & ! use ta as 3D workspace 
    67                        zwvw => sa      ! use sa as 3D workspace 
    68  
    69       !! * Arguments 
    70       INTEGER, INTENT( in ) ::   kt    ! ocean time-step inedx 
    71        
    72       !! * Local declarations 
    73       INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    74       REAL(wp) ::   zvn, zua, zva      ! temporary scalars 
    75       REAL(wp), DIMENSION(jpi) ::   & 
    76          zww                           ! temporary workspace 
    77       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    78          ztdua, ztdva                  ! temporary workspace 
     60      !!              - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 
     61      !!---------------------------------------------------------------------- 
     62      USE oce, ONLY:   zwuw => ta   ! use ta as 3D workspace 
     63      USE oce, ONLY:   zwvw => sa   ! use sa as 3D workspace 
     64      !! 
     65      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
     66      !! 
     67      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
     68      REAL(wp) ::   zvn, zua, zva   ! temporary scalars 
     69      REAL(wp), DIMENSION(jpi)         ::   zww            ! 1D workspace 
     70      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    7971      !!---------------------------------------------------------------------- 
    8072       
     
    8577      ENDIF 
    8678 
    87       ! Save ua and va trends 
    88       IF( l_trddyn )   THEN 
    89          ztdua(:,:,:) = ua(:,:,:)  
    90          ztdva(:,:,:) = va(:,:,:)  
     79      IF( l_trddyn )   THEN         ! Save ua and va trends 
     80         ztrdu(:,:,:) = ua(:,:,:)  
     81         ztrdv(:,:,:) = va(:,:,:)  
    9182      ENDIF 
    9283 
     
    9485      DO jj = 2, jpjm1                                 !  Vertical slab 
    9586         !                                             ! =============== 
    96  
    97          ! Vertical momentum advection at level w and u- and v- vertical 
    98          ! ---------------------------------------------------------------- 
    99          DO jk = 2, jpkm1 
    100             ! vertical fluxes  
    101             DO ji = 2, jpi 
     87         DO jk = 2, jpkm1         ! Vertical momentum advection at uw and vw-pts 
     88            DO ji = 2, jpi              ! vertical fluxes  
    10289               zww(ji) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 
    10390            END DO 
    104             ! vertical momentum advection at w-point 
    105             DO ji = 2, jpim1 
     91            DO ji = 2, jpim1            ! vertical momentum advection at w-point 
    10692               zvn = 0.25 * e1t(ji,jj+1) * e2t(ji,jj+1) * wn(ji,jj+1,jk) 
    10793               zwuw(ji,jj,jk) = ( zww(ji+1) + zww(ji) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 
     
    10995            END DO   
    11096         END DO    
    111  
    112          ! Surface and bottom values set to zero 
    113          DO ji = 2, jpim1 
     97         DO ji = 2, jpim1               ! Surface and bottom values set to zero 
    11498            zwuw(ji,jj, 1 ) = 0.e0 
    11599            zwvw(ji,jj, 1 ) = 0.e0 
     
    117101            zwvw(ji,jj,jpk) = 0.e0 
    118102         END DO   
    119  
    120          ! Vertical momentum advection at u- and v-points 
    121          ! ---------------------------------------------- 
    122          DO jk = 1, jpkm1 
     103         ! 
     104         DO jk = 1, jpkm1         ! Vertical momentum advection at u- and v-points 
    123105            DO ji = 2, jpim1 
    124                ! vertical momentum advective trends 
     106               !                        ! vertical momentum advective trends 
    125107               zua = - ( zwuw(ji,jj,jk) + zwuw(ji,jj,jk+1) ) / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 
    126108               zva = - ( zwvw(ji,jj,jk) + zwvw(ji,jj,jk+1) ) / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 
    127                ! add the trends to the general momentum trends 
     109               !                        ! add the trends to the general momentum trends 
    128110               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    129111               va(ji,jj,jk) = va(ji,jj,jk) + zva 
     
    133115      END DO                                           !   End of slab 
    134116      !                                                ! =============== 
    135  
    136       ! save the vertical advection trends for diagnostic 
    137       ! momentum trends 
    138       IF( l_trddyn )   THEN 
    139          ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    140          ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    141  
    142          CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 
    143       ENDIF 
    144  
    145       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    146          CALL prt_ctl(tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask, & 
    147             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    148       ENDIF 
    149  
     117      ! 
     118      IF( l_trddyn ) THEN         ! save the vertical advection trends for diagnostic 
     119         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
     120         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     121         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_zad, 'DYN', kt ) 
     122      ENDIF 
     123      !                           ! Control print 
     124      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask,   & 
     125         &                       tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn' ) 
     126      ! 
    150127   END SUBROUTINE dyn_zad 
    151128 
     
    169146      !! 
    170147      !! ** Action  : - Update (ua,va) with the vert. momentum adv. trends 
    171       !!              - Save the trends in (utrd,vtrd) ('key_trddyn') 
    172       !! 
    173       !! History : 
    174       !!   8.5  !  02-07  (G. Madec)  Original code 
    175       !!---------------------------------------------------------------------- 
    176       !! * modules used 
    177       USE oce, ONLY:   zwuw => ta,   & ! use ta as 3D workspace 
    178                        zwvw => sa      ! use sa as 3D workspace 
    179       !! * Arguments 
    180       INTEGER, INTENT( in ) ::   kt    ! ocean time-step inedx 
    181        
    182       !! * Local declarations 
    183       INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    184       REAL(wp) ::   zua, zva           ! temporary scalars 
    185       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    186          zww                           ! temporary  workspace 
    187       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    188          ztdua, ztdva                  ! temporary workspace 
     148      !!              - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 
     149     !!---------------------------------------------------------------------- 
     150      USE oce, ONLY:   zwuw => ta   ! use ta as 3D workspace 
     151      USE oce, ONLY:   zwvw => sa   ! use sa as 3D workspace 
     152      !! 
     153      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
     154      !! 
     155      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
     156      REAL(wp) ::   zua, zva        ! temporary scalars 
     157      REAL(wp), DIMENSION(jpi,jpj)     ::   zww            ! 2D  workspace 
     158      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    189159      !!---------------------------------------------------------------------- 
    190160       
     
    195165      ENDIF 
    196166 
    197       ! Save ua and va trends 
    198       IF( l_trddyn )   THEN 
    199          ztdua(:,:,:) = ua(:,:,:)  
    200          ztdva(:,:,:) = va(:,:,:)  
     167      IF( l_trddyn )   THEN         ! Save ua and va trends 
     168         ztrdu(:,:,:) = ua(:,:,:)  
     169         ztrdv(:,:,:) = va(:,:,:)  
    201170      ENDIF 
    202171       
    203       ! Vertical momentum advection at level w and u- and v- vertical 
    204       ! ------------------------------------------------------------- 
    205       DO jk = 2, jpkm1 
    206          ! vertical fluxes  
    207          DO jj = 2, jpj 
    208             DO ji = fs_2, jpi   ! vector opt. 
     172      DO jk = 2, jpkm1              ! Vertical momentum advection at level w and u- and v- vertical 
     173         DO jj = 2, jpj                   ! vertical fluxes  
     174            DO ji = fs_2, jpi             ! vector opt. 
    209175               zww(ji,jj) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 
    210176            END DO 
    211177         END DO 
    212          ! vertical momentum advection at w-point 
    213          DO jj = 2, jpjm1 
    214             DO ji = fs_2, fs_jpim1   ! vector opt. 
     178         DO jj = 2, jpjm1                 ! vertical momentum advection at w-point 
     179            DO ji = fs_2, fs_jpim1        ! vector opt. 
    215180               zwuw(ji,jj,jk) = ( zww(ji+1,jj  ) + zww(ji,jj) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 
    216181               zwvw(ji,jj,jk) = ( zww(ji  ,jj+1) + zww(ji,jj) ) * ( vn(ji,jj,jk-1)-vn(ji,jj,jk) ) 
     
    218183         END DO    
    219184      END DO 
    220  
    221       ! Surface and bottom values set to zero 
    222       DO jj = 2, jpjm1 
    223          DO ji = fs_2, fs_jpim1   ! vector opt. 
     185      DO jj = 2, jpjm1              ! Surface and bottom values set to zero 
     186         DO ji = fs_2, fs_jpim1           ! vector opt. 
    224187            zwuw(ji,jj, 1 ) = 0.e0 
    225188            zwvw(ji,jj, 1 ) = 0.e0 
     
    229192      END DO 
    230193 
    231  
    232       ! Vertical momentum advection at u- and v-points 
    233       ! ---------------------------------------------- 
    234       DO jk = 1, jpkm1 
     194      DO jk = 1, jpkm1              ! Vertical momentum advection at u- and v-points 
    235195         DO jj = 2, jpjm1 
    236             DO ji = fs_2, fs_jpim1   ! vector opt. 
    237                ! vertical momentum advective trends 
     196            DO ji = fs_2, fs_jpim1       ! vector opt. 
     197               !                         ! vertical momentum advective trends 
    238198               zua = - ( zwuw(ji,jj,jk) + zwuw(ji,jj,jk+1) ) / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 
    239199               zva = - ( zwvw(ji,jj,jk) + zwvw(ji,jj,jk+1) ) / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 
    240                ! add the trends to the general momentum trends 
     200               !                         ! add the trends to the general momentum trends 
    241201               ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    242202               va(ji,jj,jk) = va(ji,jj,jk) + zva 
     
    245205      END DO 
    246206 
    247       ! save the vertical advection trends for diagnostic 
    248       ! momentum trends 
    249       IF( l_trddyn )   THEN 
    250          ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    251          ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    252  
    253          CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 
    254       ENDIF 
    255  
    256       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    257          CALL prt_ctl(tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask, & 
    258             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    259       ENDIF 
    260  
     207      IF( l_trddyn ) THEN           ! save the vertical advection trends for diagnostic 
     208         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
     209         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     210         CALL trd_mod(ztrdu, ztrdv, jpdyn_trd_zad, 'DYN', kt) 
     211      ENDIF 
     212      !                             ! Control print 
     213      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' zad  - Ua: ', mask1=umask,   & 
     214         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     215      ! 
    261216   END SUBROUTINE dyn_zad 
    262217#endif 
    263218 
    264 !!====================================================================== 
     219   !!====================================================================== 
    265220END MODULE dynzad 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf.F90

    r456 r503  
    44   !! Ocean dynamics :  vertical component of the momentum mixing trend 
    55   !!============================================================================== 
     6   !! History :  9.0  !  05-11  (G. Madec)  Original code 
     7   !!---------------------------------------------------------------------- 
     8 
    69   !!---------------------------------------------------------------------- 
    710   !!   dyn_zdf      : Update the momentum trend with the vertical diffusion 
    8    !!       zdf_ctl  : ??? 
     11   !!       zdf_ctl  : initializations of the vertical diffusion scheme 
    912   !!---------------------------------------------------------------------- 
    10    !! * Modules used 
    1113   USE oce             ! ocean dynamics and tracers variables 
    1214   USE dom_oce         ! ocean space and time domain variables  
     
    2628   PRIVATE 
    2729 
    28    !! * Routine accessibility 
    29    PUBLIC dyn_zdf   !  routine called by step.F90 
     30   PUBLIC   dyn_zdf    !  routine called by step.F90 
    3031 
    31    !! * module variables 
    32    INTEGER ::                        & 
    33       nzdf = 0                         ! type vertical diffusion algorithm used 
     32   INTEGER  ::   nzdf = 0              ! type vertical diffusion algorithm used  
    3433      !                                ! defined from ln_zdf...  namlist logicals) 
    3534 
    36    !! * Module variables 
    37    REAL(wp) ::   & 
    38       r2dt                          ! time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=0 
     35   REAL(wp) ::   r2dt                  ! time-step, = 2 rdttra 
     36      !                                ! except at nit000 (=rdttra) if neuler=0 
    3937 
    4038   !! * Substitutions 
     
    4442   !!---------------------------------------------------------------------- 
    4543   !!  OPA 9.0 , LOCEAN-IPSL (2005)  
     44   !! $Header$ 
     45   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4646   !!---------------------------------------------------------------------- 
    4747 
     
    5353      !! 
    5454      !! ** Purpose :   compute the vertical ocean dynamics physics. 
    55       !! ** Method  : 
    56       !! ** Action  : 
     55      !!--------------------------------------------------------------------- 
     56      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    5757      !! 
    58       !! History : 
    59       !!   9.0  !  05-11  (G. Madec)  Original code 
    60       !!--------------------------------------------------------------------- 
    61       !! * Arguments 
    62       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    63  
    64       !! * local declarations 
    65       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    66          ztrdu, ztrdv                    ! 3D temporary workspace 
     58      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztrdu, ztrdv   ! 3D workspace 
    6759      !!--------------------------------------------------------------------- 
    6860 
     
    7062 
    7163      !                                          ! set time step 
    72       IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000 
    73          r2dt =  rdt                                    ! = rdtra (restarting with Euler time stepping) 
    74       ELSEIF( kt <= nit000 + 1) THEN                ! at nit000 or nit000+1 
    75          r2dt = 2. * rdt                                ! = 2 rdttra (leapfrog) 
     64      IF( neuler == 0 .AND. kt == nit000    ) THEN   ;   r2dt =      rdt      ! = rdtra (restarting with Euler time stepping) 
     65      ELSEIF(               kt <= nit000 + 1) THEN   ;   r2dt = 2. * rdt      ! = 2 rdttra (leapfrog) 
    7666      ENDIF 
    77  
    7867 
    7968      IF( l_trddyn )   THEN                      ! temporary save of ta and sa trends 
     
    8372 
    8473      SELECT CASE ( nzdf )                       ! compute lateral mixing trend and add it to the general trend 
    85       CASE ( -1 )                                       ! esopa: test all possibility with control print 
    86          CALL dyn_zdf_exp    ( kt ) 
    87          CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf0 - Ua: ', mask1=umask,               & 
    88             &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    89          CALL dyn_zdf_imp    ( kt ) 
    90          CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf1 - Ua: ', mask1=umask,               & 
    91             &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    92          CALL dyn_zdf_imp_jki( kt ) 
    93          CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf2 - Ua: ', mask1=umask,               & 
    94             &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    95  
    96       CASE ( 0 )                                       ! explicit scheme 
    97          CALL dyn_zdf_exp    ( kt ) 
    98  
    99       CASE ( 1 )                                       ! implicit scheme (k-j-i loop) 
    100          CALL dyn_zdf_imp    ( kt ) 
    101  
    102       CASE ( 2 )                                       ! implicit scheme (j-k-i loop) 
    103          CALL dyn_zdf_imp_jki( kt ) 
    104  
     74      ! 
     75      CASE ( 0 )   ;   CALL dyn_zdf_exp    ( kt, r2dt )      ! explicit scheme 
     76      CASE ( 1 )   ;   CALL dyn_zdf_imp    ( kt, r2dt )      ! implicit scheme (k-j-i loop) 
     77      CASE ( 2 )   ;   CALL dyn_zdf_imp_jki( kt, r2dt )      ! implicit scheme (j-k-i loop) 
     78      ! 
     79      CASE ( -1 )                                      ! esopa: test all possibility with control print 
     80         ;             CALL dyn_zdf_exp    ( kt, r2dt ) 
     81         ;             CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf0 - Ua: ', mask1=umask,               & 
     82            &                        tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     83         ;             CALL dyn_zdf_imp    ( kt, r2dt ) 
     84         ;             CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf1 - Ua: ', mask1=umask,               & 
     85            &                        tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     86         ;             CALL dyn_zdf_imp_jki( kt, r2dt ) 
     87         ;             CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf2 - Ua: ', mask1=umask,               & 
     88            &                        tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    10589      END SELECT 
    10690 
    107       IF( l_trddyn )   THEN                         ! save the vertical diffusive trends for further diagnostics 
     91      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    10892         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    10993         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    110          CALL trd_mod( ztrdu, ztrdv, jpttdzdf, 'DYN', kt ) 
     94         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_zdf, 'DYN', kt ) 
    11195      ENDIF 
    112  
    11396      !                                          ! print mean trends (used for debugging) 
    11497      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' zdf  - Ua: ', mask1=umask,               & 
    11598            &                    tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    116  
     99      ! 
    117100   END SUBROUTINE dyn_zdf 
    118101 
     
    122105      !!                 ***  ROUTINE zdf_ctl  *** 
    123106      !! 
    124       !! ** Purpose :   initializations of the vertical ocean dynamics physics 
     107      !! ** Purpose :   initializations of the vertical diffusion scheme 
    125108      !! 
    126109      !! ** Method  :   implicit (euler backward) scheme (default) 
    127110      !!                explicit (time-splitting) scheme if ln_zdfexp=T 
    128111      !!                OpenMP / NEC autotasking: use j-k-i loops 
    129       !! 
    130       !! History : 
    131       !!   9.0  !  05-11  (G. Madec)  Original code 
    132112      !!---------------------------------------------------------------------- 
    133       !! * Module used 
    134113      USE zdftke 
    135114      USE zdfkpp 
    136115      !!---------------------------------------------------------------------- 
    137116 
    138       !  Define the vertical dynamics physics scheme 
    139       ! ========================================== 
    140  
    141117      ! Choice from ln_zdfexp read in namelist in zdfini 
    142       IF( ln_zdfexp ) THEN               ! use explicit scheme 
    143          nzdf = 0 
    144       ELSE                               ! use implicit scheme 
    145          nzdf = 1 
     118      IF( ln_zdfexp ) THEN   ;   nzdf = 0           ! use explicit scheme 
     119      ELSE                   ;   nzdf = 1           ! use implicit scheme 
    146120      ENDIF 
    147121 
    148122      ! Force implicit schemes 
    149       IF( lk_zdftke .OR. lk_zdfkpp   )   nzdf = 1      ! TKE or KPP physics 
    150       IF( ln_dynldf_iso              )   nzdf = 1      ! iso-neutral lateral physics 
    151       IF( ln_dynldf_hor .AND. ln_sco )   nzdf = 1      ! horizontal lateral physics in s-coordinate 
     123      IF( lk_zdftke .OR. lk_zdfkpp   )   nzdf = 1   ! TKE or KPP physics 
     124      IF( ln_dynldf_iso              )   nzdf = 1   ! iso-neutral lateral physics 
     125      IF( ln_dynldf_hor .AND. ln_sco )   nzdf = 1   ! horizontal lateral physics in s-coordinate 
    152126 
    153127      ! OpenMP / NEC autotasking 
    154128#if defined key_mpp_omp 
    155       IF( nzdf == 1 )   nzdf = 2                       ! j-k-i loop 
     129      IF( nzdf == 1 )   nzdf = 2                    ! j-k-i loop 
    156130#endif 
    157131 
    158 !!bug 
    159 !     IF( ln_dynldf_iso              )   nzdf = 3      ! iso-neutral lateral physics 
    160 !     IF( ln_dynldf_hor .AND. ln_sco )   nzdf = 3      ! horizontal lateral physics in s-coordinate 
    161 !!bug 
    162       ! Test: esopa 
    163       IF( lk_esopa )    nzdf = -1                      ! All schemes used 
     132      IF( lk_esopa )    nzdf = -1                   ! Esopa key: All schemes used 
    164133 
    165       IF(lwp) THEN 
     134      IF(lwp) THEN                                  ! Print the choice 
    166135         WRITE(numout,*) 
    167136         WRITE(numout,*) 'dyn:zdf_ctl : vertical dynamics physics scheme' 
     
    172141         IF( nzdf ==  2 )   WRITE(numout,*) '              Implicit (euler backward) scheme with j-k-i loops' 
    173142      ENDIF 
    174  
     143      ! 
    175144   END SUBROUTINE zdf_ctl 
    176145 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_exp.F90

    r455 r503  
    44   !! Ocean dynamics:  vertical component(s) of the momentum mixing trend 
    55   !!============================================================================== 
     6   !! History :      !  90-10  (B. Blanke)  Original code 
     7   !!                !  97-05  (G. Madec)  vertical component of isopycnal 
     8   !!           8.5  !  02-08  (G. Madec)  F90: Free form and module 
     9   !!---------------------------------------------------------------------- 
    610 
    711   !!---------------------------------------------------------------------- 
     
    1620   USE in_out_manager  ! I/O manager 
    1721   USE taumod          ! surface ocean stress 
    18    USE prtctl          ! Print control 
    1922 
    2023   IMPLICIT NONE 
     
    3033   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    3134   !! $Header$  
    32    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     35   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    3336   !!---------------------------------------------------------------------- 
    3437 
    3538CONTAINS 
    3639 
    37    SUBROUTINE dyn_zdf_exp( kt ) 
     40   SUBROUTINE dyn_zdf_exp( kt, p2dt ) 
    3841      !!---------------------------------------------------------------------- 
    3942      !!                  ***  ROUTINE dyn_zdf_exp  *** 
     
    5053      !! 
    5154      !! ** Action : - Update (ua,va) with the vertical diffusive trend 
    52       !!             - Save the trends in (ztdua,ztdva) ('key_trddyn') 
    53       !! 
    54       !! History : 
    55       !!        !  90-10  (B. Blanke)  Original code 
    56       !!        !  97-05  (G. Madec)  vertical component of isopycnal 
    57       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    58       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    5955      !!--------------------------------------------------------------------- 
    60       !! * Modules used      
    61       USE oce, ONLY :    ztdua => ta,    & ! use ta as 3D workspace    
    62                          ztdva => sa       ! use sa as 3D workspace    
    6356      !! * Arguments 
    64       INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
     57      INTEGER , INTENT( in ) ::   kt                           ! ocean time-step index 
     58      REAL(wp), INTENT( in ) ::   p2dt                         ! time-step  
    6559 
    6660      !! * Local declarations 
    67       INTEGER ::   & 
    68          ji, jj, jk, jl                    ! dummy loop indices 
    69       REAL(wp) ::   & 
    70          zrau0r, zlavmr, z2dt, zua, zva    ! temporary scalars 
    71       REAL(wp), DIMENSION(jpi,jpk) ::    & 
    72          zwx, zwy, zwz, zww                ! temporary workspace arrays 
     61      INTEGER ::   ji, jj, jk, jl                              ! dummy loop indices 
     62      REAL(wp) ::   zrau0r, zlavmr, zua, zva                   ! temporary scalars 
     63      REAL(wp), DIMENSION(jpi,jpk) ::   zwx, zwy, zwz, zww     ! temporary workspace arrays 
    7364      !!---------------------------------------------------------------------- 
    7465 
     
    8374      zrau0r = 1. / rau0                                   ! inverse of the reference density 
    8475      zlavmr = 1. / float( n_zdfexp )                      ! inverse of the number of sub time step 
    85       z2dt = 2. * rdt                                      ! Leap-frog environnement 
    86  
    87       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt    ! Euler time stepping when starting from rest 
    8876 
    8977      !                                                ! =============== 
     
    124112                  va(ji,jj,jk) = va(ji,jj,jk) + zva 
    125113 
    126                   zwx(ji,jk) = zwx(ji,jk) + z2dt*zua*umask(ji,jj,jk) 
    127                   zwz(ji,jk) = zwz(ji,jk) + z2dt*zva*vmask(ji,jj,jk) 
     114                  zwx(ji,jk) = zwx(ji,jk) + p2dt*zua*umask(ji,jj,jk) 
     115                  zwz(ji,jk) = zwz(ji,jk) + p2dt*zva*vmask(ji,jj,jk) 
    128116               END DO   
    129117            END DO   
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r455 r503  
    44   !! Ocean dynamics:  vertical component(s) of the momentum mixing trend 
    55   !!============================================================================== 
     6   !! History :      !  90-10  (B. Blanke)  Original code 
     7   !!                !  97-05  (G. Madec)  vertical component of isopycnal 
     8   !!           8.5  !  02-08  (G. Madec)  F90: Free form and module 
     9   !!---------------------------------------------------------------------- 
    610 
    711   !!---------------------------------------------------------------------- 
     
    1115   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    1216   !! $Header$  
    13    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     17   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    1418   !!---------------------------------------------------------------------- 
    1519   !! * Modules used 
     
    2024   USE in_out_manager  ! I/O manager 
    2125   USE taumod          ! surface ocean stress 
    22    USE prtctl          ! Print control 
    2326 
    2427   IMPLICIT NONE 
     
    4043 
    4144 
    42    SUBROUTINE dyn_zdf_imp( kt ) 
     45   SUBROUTINE dyn_zdf_imp( kt, p2dt ) 
    4346      !!---------------------------------------------------------------------- 
    4447      !!                  ***  ROUTINE dyn_zdf_imp  *** 
     
    5861      !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 
    5962      !!               mixing trend. 
    60       !! 
    61       !! History : 
    62       !!        !  90-10  (B. Blanke)  Original code 
    63       !!        !  97-05  (G. Madec)  vertical component of isopycnal 
    64       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    65       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    6663      !!--------------------------------------------------------------------- 
    6764      !! * Modules used 
    68       USE oce, ONLY :  zwd   => ta,   &  ! use ta as workspace 
    69                        zws   => sa       ! use sa as workspace 
     65      USE oce, ONLY :  zwd   => ta,   &                ! use ta as workspace 
     66                       zws   => sa                     ! use sa as workspace 
    7067 
    7168      !! * Arguments 
    72       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     69      INTEGER , INTENT( in ) ::   kt                   ! ocean time-step index 
     70      REAL(wp), INTENT( in ) ::  p2dt                  ! vertical profile of tracer time-step 
    7371 
    7472      !! * Local declarations 
    75       INTEGER ::   ji, jj, jk            ! dummy loop indices 
    76       REAL(wp) ::   & 
    77          zrau0r, z2dt,                &  ! temporary scalars 
    78          z2dtf, zcoef, zzws, zrhs        !    "         " 
    79       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    80          zwi                             ! temporary workspace arrays 
     73      INTEGER ::   ji, jj, jk                          ! dummy loop indices 
     74      REAL(wp) ::   zrau0r, z2dtf, zcoef, zzws, zrhs   ! temporary scalars 
     75      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwi        ! temporary workspace arrays 
    8176      !!---------------------------------------------------------------------- 
    8277 
     
    9085      ! -------------------------------- 
    9186      zrau0r = 1. / rau0      ! inverse of the reference density 
    92       z2dt   = 2. * rdt       ! Leap-frog environnement 
    93  
    94       ! Euler time stepping when starting from rest 
    95       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    9687 
    9788      ! 1. Vertical diffusion on u 
     
    10495         DO jj = 2, jpjm1  
    10596            DO ji = fs_2, fs_jpim1   ! vector opt. 
    106                zcoef = - z2dt / fse3u(ji,jj,jk) 
     97               zcoef = - p2dt / fse3u(ji,jj,jk) 
    10798               zwi(ji,jj,jk) = zcoef * avmu(ji,jj,jk  ) / fse3uw(ji,jj,jk  ) 
    10899               zzws          = zcoef * avmu(ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 
     
    150141!!! change les resultats (derniers digit, pas significativement + rapide 1* de moins) 
    151142!!!         ua(ji,jj,1) = ub(ji,jj,1)  & 
    152 !!!                      + z2dt * ( ua(ji,jj,1) + taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) ) 
    153             z2dtf = z2dt / ( fse3u(ji,jj,1)*rau0 ) 
     143!!!                      + p2dt * ( ua(ji,jj,1) + taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) ) 
     144            z2dtf = p2dt / ( fse3u(ji,jj,1)*rau0 ) 
    154145            ua(ji,jj,1) = ub(ji,jj,1)  & 
    155                          + z2dt *  ua(ji,jj,1) + z2dtf * taux(ji,jj) 
    156          END DO 
    157       END DO 
    158       DO jk = 2, jpkm1 
    159          DO jj = 2, jpjm1    
    160             DO ji = fs_2, fs_jpim1   ! vector opt. 
    161                zrhs = ub(ji,jj,jk) + z2dt * ua(ji,jj,jk)   ! zrhs=right hand side 
     146                         + p2dt *  ua(ji,jj,1) + z2dtf * taux(ji,jj) 
     147         END DO 
     148      END DO 
     149      DO jk = 2, jpkm1 
     150         DO jj = 2, jpjm1    
     151            DO ji = fs_2, fs_jpim1   ! vector opt. 
     152               zrhs = ub(ji,jj,jk) + p2dt * ua(ji,jj,jk)   ! zrhs=right hand side 
    162153               ua(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * ua(ji,jj,jk-1) 
    163154            END DO 
     
    183174         DO jj = 2, jpjm1    
    184175            DO ji = fs_2, fs_jpim1   ! vector opt. 
    185                ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt 
     176               ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / p2dt 
    186177            END DO 
    187178         END DO 
     
    198189         DO jj = 2, jpjm1    
    199190            DO ji = fs_2, fs_jpim1   ! vector opt. 
    200                zcoef = -z2dt / fse3v(ji,jj,jk) 
     191               zcoef = -p2dt / fse3v(ji,jj,jk) 
    201192               zwi(ji,jj,jk) = zcoef * avmv(ji,jj,jk  ) / fse3vw(ji,jj,jk  ) 
    202193               zzws       = zcoef * avmv(ji,jj,jk+1) / fse3vw(ji,jj,jk+1) 
     
    245236!!! change les resultats (derniers digit, pas significativement + rapide 1* de moins) 
    246237!!!         va(ji,jj,1) = vb(ji,jj,1)  & 
    247 !!!                      + z2dt * ( va(ji,jj,1) + tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) ) 
    248             z2dtf = z2dt / ( fse3v(ji,jj,1)*rau0 ) 
     238!!!                      + p2dt * ( va(ji,jj,1) + tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) ) 
     239            z2dtf = p2dt / ( fse3v(ji,jj,1)*rau0 ) 
    249240            va(ji,jj,1) = vb(ji,jj,1)  & 
    250                          + z2dt * va(ji,jj,1) + z2dtf * tauy(ji,jj) 
     241                         + p2dt * va(ji,jj,1) + z2dtf * tauy(ji,jj) 
    251242         END DO 
    252243      END DO 
     
    254245         DO jj = 2, jpjm1 
    255246            DO ji = fs_2, fs_jpim1   ! vector opt. 
    256                zrhs = vb(ji,jj,jk) + z2dt * va(ji,jj,jk)   ! zrhs=right hand side 
     247               zrhs = vb(ji,jj,jk) + p2dt * va(ji,jj,jk)   ! zrhs=right hand side 
    257248               va(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * va(ji,jj,jk-1) 
    258249            END DO 
     
    274265      END DO 
    275266 
    276 ! flux de surface doit etre calcule dans trdmod et boootom stress 
    277 ! deduit par integration verticale dans trmod pour jpdtdzdf 
    278 !RB      IF( l_trddyn )  THEN  
    279 !         ! diagnose surface and bottom momentum fluxes 
    280 !         DO jj = 2, jpjm1    
    281 !            DO ji = fs_2, fs_jpim1   ! vector opt. 
    282 !               ! save the surface forcing momentum fluxes 
    283 !               ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
    284 !               ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
    285 !               ! save bottom friction momentum fluxes 
    286 !               ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    287 !               ikbvm1 = MAX( ikbv-1, 1 ) 
    288 !               ztby(ji,jj) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1)   & 
    289 !                  / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 
    290 !               ! subtract surface forcing and bottom friction trend from vertical 
    291 !               ! diffusive momentum trend 
    292 !               ztdva(ji,jj,1     ) = ztdva(ji,jj,1     ) - ztsy(ji,jj) 
    293 !               ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 
    294 !            END DO 
    295 !         END DO 
    296 !      ENDIF 
    297  
    298267      ! Normalization to obtain the general momentum trend va 
    299268      DO jk = 1, jpkm1 
    300269         DO jj = 2, jpjm1    
    301270            DO ji = fs_2, fs_jpim1   ! vector opt. 
    302                va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt 
     271               va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / p2dt 
    303272            END DO 
    304273         END DO 
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_imp_jki.F90

    r456 r503  
    44   !! Ocean dynamics:  vertical component(s) of the momentum mixing trend 
    55   !!============================================================================== 
     6   !! History : 8.5  !  02-08  (G. Madec)  auto-tasking option 
     7   !!---------------------------------------------------------------------- 
    68 
    79   !!---------------------------------------------------------------------- 
     
    1719   USE in_out_manager  ! I/O manager 
    1820   USE taumod          ! surface ocean stress 
    19    USE prtctl          ! Print control 
    2021 
    2122   IMPLICIT NONE 
     
    3031   !!---------------------------------------------------------------------- 
    3132   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     33   !! $Header$  
     34   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    3235   !!---------------------------------------------------------------------- 
    3336 
    3437CONTAINS 
    3538 
    36    SUBROUTINE dyn_zdf_imp_jki( kt ) 
     39   SUBROUTINE dyn_zdf_imp_jki( kt, p2dt ) 
    3740      !!---------------------------------------------------------------------- 
    3841      !!                  ***  ROUTINE dyn_zdf_imp_jki  *** 
     
    5255      !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 
    5356      !!               mixing trend. 
    54       !! 
    55       !! History : 
    56       !!   8.5  !  02-08  (G. Madec)  auto-tasking option 
    57       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    5857      !!--------------------------------------------------------------------- 
    59       !! * Modules used      
    60       USE oce, ONLY :    ztdua => ta,  & ! use ta as 3D workspace    
    61                          ztdva => sa     ! use sa as 3D workspace    
    62  
    6358      !! * Arguments 
    64       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     59      INTEGER , INTENT( in ) ::   kt                          ! ocean time-step index 
     60      REAL(wp), INTENT( in ) ::   p2dt                        ! ocean time-step index 
    6561 
    6662      !! * Local declarations 
    67       INTEGER ::   ji, jj, jk            ! dummy loop indices 
    68       INTEGER ::   ikst, ikenm2, ikstp1  ! temporary integers 
    69       REAL(wp) ::  zrau0r, z2dt,       & !temporary scalars 
    70          &         z2dtf, zcoef, zzws 
    71       REAL(wp), DIMENSION(jpi,jpk) ::  & 
    72          zwx, zwy, zwz,                & ! workspace 
    73          zwd, zws, zwi, zwt 
     63      INTEGER ::   ji, jj, jk                                 ! dummy loop indices 
     64      INTEGER ::   ikst, ikenm2, ikstp1                       ! temporary integers 
     65      REAL(wp) ::  zrau0r, z2dtf, zcoef, zzws                 ! temporary scalars 
     66      REAL(wp), DIMENSION(jpi,jpk) ::  zwx, zwy, zwz,       & ! workspace 
     67         &                             zwd, zws, zwi, zwt 
    7468      !!---------------------------------------------------------------------- 
    7569 
     
    8478      ! -------------------------------- 
    8579      zrau0r = 1. / rau0      ! inverse of the reference density 
    86       z2dt   = 2. * rdt       ! Leap-frog environnement 
    87  
    88       ! Euler time stepping when starting from rest 
    89       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    9080 
    9181      !                                                ! =============== 
     
    10191         DO jk = 1, jpkm1 
    10292            DO ji = 2, jpim1 
    103                zcoef = - z2dt / fse3u(ji,jj,jk) 
     93               zcoef = - p2dt / fse3u(ji,jj,jk) 
    10494               zwi(ji,jk) = zcoef * avmu(ji,jj,jk  ) / fse3uw(ji,jj,jk  ) 
    10595               zzws       = zcoef * avmu(ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 
    10696               zws(ji,jk) = zzws * umask(ji,jj,jk+1) 
    10797               zwd(ji,jk) = 1. - zwi(ji,jk) - zzws 
    108                zwy(ji,jk) = ub(ji,jj,jk) + z2dt * ua(ji,jj,jk) 
     98               zwy(ji,jk) = ub(ji,jj,jk) + p2dt * ua(ji,jj,jk) 
    10999            END DO 
    110100         END DO 
     
    112102         ! Surface boudary conditions 
    113103         DO ji = 2, jpim1 
    114             z2dtf = z2dt / ( fse3u(ji,jj,1)*rau0 ) 
     104            z2dtf = p2dt / ( fse3u(ji,jj,1)*rau0 ) 
    115105            zwi(ji,1) = 0. 
    116106            zwd(ji,1) = 1. - zws(ji,1) 
     
    175165         DO jk = 1, jpkm1 
    176166            DO ji = 2, jpim1 
    177                ua(ji,jj,jk) = ( zwx(ji,jk) - ub(ji,jj,jk) ) / z2dt 
     167               ua(ji,jj,jk) = ( zwx(ji,jk) - ub(ji,jj,jk) ) / p2dt 
    178168            END DO 
    179169         END DO 
     
    188178         DO jk = 1, jpkm1 
    189179            DO ji = 2, jpim1 
    190                zcoef = -z2dt/fse3v(ji,jj,jk) 
     180               zcoef = -p2dt/fse3v(ji,jj,jk) 
    191181               zwi(ji,jk) = zcoef * avmv(ji,jj,jk  ) / fse3vw(ji,jj,jk  ) 
    192182               zzws       = zcoef * avmv(ji,jj,jk+1) / fse3vw(ji,jj,jk+1) 
    193183               zws(ji,jk) =  zzws * vmask(ji,jj,jk+1) 
    194184               zwd(ji,jk) = 1. - zwi(ji,jk) - zzws 
    195                zwy(ji,jk) = vb(ji,jj,jk) + z2dt * va(ji,jj,jk) 
     185               zwy(ji,jk) = vb(ji,jj,jk) + p2dt * va(ji,jj,jk) 
    196186            END DO 
    197187         END DO 
     
    199189         ! Surface boudary conditions 
    200190         DO ji = 2, jpim1 
    201             z2dtf = z2dt / ( fse3v(ji,jj,1)*rau0 ) 
     191            z2dtf = p2dt / ( fse3v(ji,jj,1)*rau0 ) 
    202192            zwi(ji,1) = 0.e0 
    203193            zwd(ji,1) = 1. - zws(ji,1) 
     
    262252         DO jk = 1, jpkm1 
    263253            DO ji = 2, jpim1 
    264                va(ji,jj,jk) = ( zwx(ji,jk) - vb(ji,jj,jk) ) / z2dt 
     254               va(ji,jj,jk) = ( zwx(ji,jk) - vb(ji,jj,jk) ) / p2dt 
    265255            END DO 
    266256         END DO 
Note: See TracChangeset for help on using the changeset viewer.