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 9019 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90 – NEMO

Ignore:
Timestamp:
2017-12-13T15:58:53+01:00 (6 years ago)
Author:
timgraham
Message:

Merge of dev_CNRS_2017 into branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90

    r7753 r9019  
    2727   USE lib_mpp        ! distribued memory computing library 
    2828   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    29    USE wrk_nemo       ! Memory Allocation 
    3029   USE timing         ! Timing 
    3130 
     
    3736 
    3837   !                      ! Parameter to control the type of lateral viscous operator 
    39    INTEGER, PARAMETER, PUBLIC ::   np_ERROR  =-10   ! error in setting the operator 
    40    INTEGER, PARAMETER, PUBLIC ::   np_no_ldf = 00   ! without operator (i.e. no lateral viscous trend) 
     38   INTEGER, PARAMETER, PUBLIC ::   np_ERROR  =-10   !: error in setting the operator 
     39   INTEGER, PARAMETER, PUBLIC ::   np_no_ldf = 00   !: without operator (i.e. no lateral viscous trend) 
    4140   !                          !!      laplacian     !    bilaplacian    ! 
    42    INTEGER, PARAMETER, PUBLIC ::   np_lap    = 10   ,   np_blp    = 20  ! iso-level operator 
    43    INTEGER, PARAMETER, PUBLIC ::   np_lap_i  = 11                       ! iso-neutral or geopotential operator 
     41   INTEGER, PARAMETER, PUBLIC ::   np_lap    = 10   ,   np_blp    = 20  !: iso-level operator 
     42   INTEGER, PARAMETER, PUBLIC ::   np_lap_i  = 11                       !: iso-neutral or geopotential operator 
    4443 
    45    INTEGER ::   nldf   ! type of lateral diffusion used defined from ln_dynldf_... (namlist logicals) 
     44   INTEGER, PUBLIC ::   nldf   !: type of lateral diffusion used defined from ln_dynldf_... (namlist logicals) 
    4645 
    4746   !! * Substitutions 
    4847#  include "vectopt_loop_substitute.h90" 
    4948   !!---------------------------------------------------------------------- 
    50    !! NEMO/OPA 3.7 , NEMO Consortium (2015) 
     49   !! NEMO/OPA 4.0 , NEMO Consortium (2017) 
    5150   !! $Id$ 
    5251   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    6261      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    6362      ! 
    64       REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdu, ztrdv 
     63      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdu, ztrdv 
    6564      !!---------------------------------------------------------------------- 
    6665      ! 
    67       IF( nn_timing == 1 )  CALL timing_start('dyn_ldf') 
     66      IF( ln_timing )   CALL timing_start('dyn_ldf') 
    6867      ! 
    6968      IF( l_trddyn )   THEN                      ! temporary save of momentum trends 
    70          CALL wrk_alloc( jpi,jpj,jpk,   ztrdu, ztrdv ) 
     69         ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 
    7170         ztrdu(:,:,:) = ua(:,:,:)  
    7271         ztrdv(:,:,:) = va(:,:,:)  
     
    8584         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    8685         CALL trd_dyn( ztrdu, ztrdv, jpdyn_ldf, kt ) 
    87          CALL wrk_dealloc( jpi,jpj,jpk,   ztrdu, ztrdv ) 
     86         DEALLOCATE ( ztrdu , ztrdv ) 
    8887      ENDIF 
    8988      !                                          ! print sum trends (used for debugging) 
     
    9190         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    9291      ! 
    93       IF( nn_timing == 1 )  CALL timing_stop('dyn_ldf') 
     92      IF( ln_timing )   CALL timing_stop('dyn_ldf') 
    9493      ! 
    9594   END SUBROUTINE dyn_ldf 
     
    102101      !! ** Purpose :   initializations of the horizontal ocean dynamics physics 
    103102      !!---------------------------------------------------------------------- 
    104       INTEGER ::   ioptio, ierr         ! temporary integers  
     103      INTEGER ::   ioptio, ierr   ! temporary integers  
    105104      !!---------------------------------------------------------------------- 
    106105      ! 
    107       !                                   ! Namelist nam_dynldf: already read in ldfdyn module 
     106      !                                !==  Namelist nam_dynldf  ==!  already read in ldfdyn module 
    108107      ! 
    109       IF(lwp) THEN                        ! Namelist print 
     108      IF(lwp) THEN                     !== Namelist print  ==! 
    110109         WRITE(numout,*) 
    111110         WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 
    112111         WRITE(numout,*) '~~~~~~~~~~~~' 
    113112         WRITE(numout,*) '   Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 
    114          WRITE(numout,*) '      laplacian operator          ln_dynldf_lap = ', ln_dynldf_lap 
    115          WRITE(numout,*) '      bilaplacian operator        ln_dynldf_blp = ', ln_dynldf_blp 
    116          WRITE(numout,*) '      iso-level                   ln_dynldf_lev = ', ln_dynldf_lev 
    117          WRITE(numout,*) '      horizontal (geopotential)   ln_dynldf_hor = ', ln_dynldf_hor 
    118          WRITE(numout,*) '      iso-neutral                 ln_dynldf_iso = ', ln_dynldf_iso 
     113         WRITE(numout,*) '      Type of operator' 
     114         WRITE(numout,*) '         no explicit diffusion       ln_dynldf_NONE = ', ln_dynldf_NONE 
     115         WRITE(numout,*) '         laplacian operator          ln_dynldf_lap  = ', ln_dynldf_lap 
     116         WRITE(numout,*) '         bilaplacian operator        ln_dynldf_blp  = ', ln_dynldf_blp 
     117         WRITE(numout,*) '      Direction of action' 
     118         WRITE(numout,*) '         iso-level                   ln_dynldf_lev  = ', ln_dynldf_lev 
     119         WRITE(numout,*) '         horizontal (geopotential)   ln_dynldf_hor  = ', ln_dynldf_hor 
     120         WRITE(numout,*) '         iso-neutral                 ln_dynldf_iso  = ', ln_dynldf_iso 
    119121      ENDIF 
    120       !                                   ! use of lateral operator or not 
     122      !                                !==  use of lateral operator or not  ==! 
    121123      nldf = np_ERROR 
    122124      ioptio = 0 
    123       IF( ln_dynldf_lap )   ioptio = ioptio + 1 
    124       IF( ln_dynldf_blp )   ioptio = ioptio + 1 
    125       IF( ioptio >  1   )   CALL ctl_stop( 'dyn_ldf_init: use ONE or NONE of the 2 lap/bilap operator type on momentum' ) 
    126       IF( ioptio == 0   )   nldf = np_no_ldf     ! No lateral mixing operator 
     125      IF( ln_dynldf_NONE ) THEN   ;   nldf = np_no_ldf   ;   ioptio = ioptio + 1   ;   ENDIF 
     126      IF( ln_dynldf_lap  ) THEN   ;                          ioptio = ioptio + 1   ;   ENDIF 
     127      IF( ln_dynldf_blp  ) THEN   ;                          ioptio = ioptio + 1   ;   ENDIF 
     128      IF( ioptio /= 1    )   CALL ctl_stop( 'dyn_ldf_init: use ONE of the 3 operator options (NONE/lap/blp)' ) 
    127129      ! 
    128       IF( nldf /= np_no_ldf ) THEN        ! direction ==>> type of operator   
     130      IF(.NOT.ln_dynldf_NONE ) THEN    !==  direction ==>> type of operator  ==! 
    129131         ioptio = 0 
    130132         IF( ln_dynldf_lev )   ioptio = ioptio + 1 
    131133         IF( ln_dynldf_hor )   ioptio = ioptio + 1 
    132134         IF( ln_dynldf_iso )   ioptio = ioptio + 1 
    133          IF( ioptio >  1   )   CALL ctl_stop( '          use only ONE direction (level/hor/iso)' ) 
    134          IF( ioptio == 0   )   CALL ctl_stop( '          use at least ONE direction (level/hor/iso)' ) 
     135         IF( ioptio /= 1   )   CALL ctl_stop( 'dyn_ldf_init: use ONE of the 3 direction options (level/hor/iso)' ) 
    135136         ! 
    136          !                                   ! Set nldf, the type of lateral diffusion, from ln_dynldf_... logicals 
     137         !                             ! Set nldf, the type of lateral diffusion, from ln_dynldf_... logicals 
    137138         ierr = 0 
    138          IF ( ln_dynldf_lap ) THEN      ! laplacian operator 
    139             IF ( ln_zco ) THEN                ! z-coordinate 
     139         IF( ln_dynldf_lap ) THEN         ! laplacian operator 
     140            IF( ln_zco ) THEN                ! z-coordinate 
    140141               IF ( ln_dynldf_lev )   nldf = np_lap     ! iso-level = horizontal (no rotation) 
    141142               IF ( ln_dynldf_hor )   nldf = np_lap     ! iso-level = horizontal (no rotation) 
    142143               IF ( ln_dynldf_iso )   nldf = np_lap_i   ! iso-neutral            (   rotation) 
    143144            ENDIF 
    144             IF ( ln_zps ) THEN             ! z-coordinate with partial step 
     145            IF( ln_zps ) THEN                ! z-coordinate with partial step 
    145146               IF ( ln_dynldf_lev )   nldf = np_lap     ! iso-level              (no rotation) 
    146147               IF ( ln_dynldf_hor )   nldf = np_lap     ! iso-level              (no rotation) 
    147148               IF ( ln_dynldf_iso )   nldf = np_lap_i   ! iso-neutral            (   rotation) 
    148149            ENDIF 
    149             IF ( ln_sco ) THEN             ! s-coordinate 
     150            IF( ln_sco ) THEN                ! s-coordinate 
    150151               IF ( ln_dynldf_lev )   nldf = np_lap     ! iso-level = horizontal (no rotation) 
    151152               IF ( ln_dynldf_hor )   nldf = np_lap_i   ! horizontal             (   rotation) 
     
    154155         ENDIF 
    155156         ! 
    156          IF( ln_dynldf_blp ) THEN          ! bilaplacian operator 
    157             IF ( ln_zco ) THEN                ! z-coordinate 
    158                IF ( ln_dynldf_lev )   nldf = np_blp     ! iso-level = horizontal (no rotation) 
    159                IF ( ln_dynldf_hor )   nldf = np_blp     ! iso-level = horizontal (no rotation) 
    160                IF ( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
     157         IF( ln_dynldf_blp ) THEN         ! bilaplacian operator 
     158            IF( ln_zco ) THEN                ! z-coordinate 
     159               IF( ln_dynldf_lev )   nldf = np_blp     ! iso-level = horizontal (no rotation) 
     160               IF( ln_dynldf_hor )   nldf = np_blp     ! iso-level = horizontal (no rotation) 
     161               IF( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
    161162            ENDIF 
    162             IF ( ln_zps ) THEN             ! z-coordinate with partial step 
    163                IF ( ln_dynldf_lev )   nldf = np_blp     ! iso-level              (no rotation) 
    164                IF ( ln_dynldf_hor )   nldf = np_blp     ! iso-level              (no rotation) 
    165                IF ( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
     163            IF( ln_zps ) THEN                ! z-coordinate with partial step 
     164               IF( ln_dynldf_lev )   nldf = np_blp     ! iso-level              (no rotation) 
     165               IF( ln_dynldf_hor )   nldf = np_blp     ! iso-level              (no rotation) 
     166               IF( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
    166167            ENDIF 
    167             IF ( ln_sco ) THEN             ! s-coordinate 
    168                IF ( ln_dynldf_lev )   nldf = np_blp     ! iso-level              (no rotation) 
    169                IF ( ln_dynldf_hor )   ierr = 2          ! horizontal             (   rotation) 
    170                IF ( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
     168            IF( ln_sco ) THEN                ! s-coordinate 
     169               IF( ln_dynldf_lev )   nldf = np_blp     ! iso-level              (no rotation) 
     170               IF( ln_dynldf_hor )   ierr = 2          ! horizontal             (   rotation) 
     171               IF( ln_dynldf_iso )   ierr = 2          ! iso-neutral            (   rotation) 
    171172            ENDIF 
    172173         ENDIF 
Note: See TracChangeset for help on using the changeset viewer.