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 2926 for branches/2011/dev_r2802_NOCL_Smagorinsky – NEMO

Ignore:
Timestamp:
2011-10-14T17:18:45+02:00 (13 years ago)
Author:
hliu
Message:

Undoing change wrongly committed in r2887. for Maria Luneva

Location:
branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM
Files:
2 deleted
14 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/CONFIG/GYRE/cpp_GYRE.fcm

    r2887 r2926  
    1  bld::tool::fppkeys key_gyre key_dynspg_flt key_ldfslp key_zdftke   key_traldf_c3d key_traldf_smag key_dynldf_c3d key_dynldf_smag key_mpp_mpi 
     1 bld::tool::fppkeys key_gyre key_dynspg_flt key_ldfslp key_zdftke key_vectopt_loop key_iomput 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90

    r2887 r2926  
    44   !! Ocean dynamics:  lateral viscosity trend 
    55   !!====================================================================== 
     6   !! History :  OPA  ! 1990-09  (G. Madec)  Original code 
     7   !!            4.0  ! 1993-03  (M. Guyon)  symetrical conditions (M. Guyon) 
     8   !!            6.0  ! 1996-01  (G. Madec)  statement function for e3 
     9   !!            8.0  ! 1997-07  (G. Madec)  lbc calls 
     10   !!   NEMO     1.0  ! 2002-08  (G. Madec)  F90: Free form and module 
     11   !!            2.0  ! 2004-08  (C. Talandier) New trends organization 
     12   !!---------------------------------------------------------------------- 
    613 
    714   !!---------------------------------------------------------------------- 
     
    916   !!                   using an iso-level bilaplacian operator 
    1017   !!---------------------------------------------------------------------- 
    11    !! * Modules used 
    1218   USE oce             ! ocean dynamics and tracers 
    1319   USE dom_oce         ! ocean space and time domain 
     
    2127   PRIVATE 
    2228 
    23    !! * Routine accessibility 
    24    PUBLIC dyn_ldf_bilap  ! called by step.F90 
     29   PUBLIC   dyn_ldf_bilap   ! called by step.F90 
    2530 
    2631   !! * Substitutions 
     
    3136   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3237   !! $Id$  
    33    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    34    !!---------------------------------------------------------------------- 
    35  
     38   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     39   !!---------------------------------------------------------------------- 
    3640CONTAINS 
    3741 
     
    6973      !! ** Action : - Update (ua,va) with the before iso-level biharmonic 
    7074      !!               mixing trend. 
    71       !! 
    72       !! History : 
    73       !!        !  90-09  (G. Madec)  Original code 
    74       !!        !  91-11  (G. Madec) 
    75       !!        !  93-03  (M. Guyon)  symetrical conditions (M. Guyon) 
    76       !!        !  96-01  (G. Madec)  statement function for e3 
    77       !!        !  97-07  (G. Madec)  lbc calls 
    78       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    79       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    8075      !!---------------------------------------------------------------------- 
    81       !! * Arguments 
    82       INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
    83  
    84       !! * Local declarations 
    85       INTEGER  ::   ji, jj, jk                ! dummy loop indices 
    86       REAL(wp) ::   zua, zva, zbt, ze2u, ze2v ! temporary scalar 
    87       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    88          zcu, zcv                             ! temporary workspace 
    89       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    90          zuf, zut, zlu, zlv                   ! temporary workspace 
     76      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     77      USE wrk_nemo, ONLY:   zcu => wrk_2d_1 , zcv => wrk_2d_2   ! 3D workspace 
     78      USE wrk_nemo, ONLY:   zuf => wrk_3d_3 , zut => wrk_3d_4   ! 3D workspace 
     79      USE wrk_nemo, ONLY:   zlu => wrk_3d_5 , zlv => wrk_3d_6 
     80      ! 
     81      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     82      ! 
     83      INTEGER  ::   ji, jj, jk                  ! dummy loop indices 
     84      REAL(wp) ::   zua, zva, zbt, ze2u, ze2v   ! temporary scalar 
    9185      !!---------------------------------------------------------------------- 
    92       !!  OPA 8.5, LODYC-IPSL (2002) 
    93       !!---------------------------------------------------------------------- 
    94  
    95       IF( kt == nit000 ) THEN 
    96          IF(lwp) WRITE(numout,*) 
    97          IF(lwp) WRITE(numout,*) 'dyn_ldf_bilap : iso-level bilaplacian operator' 
    98          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~' 
     86 
     87      IF( wrk_in_use(2, 1,2) .OR. wrk_in_use(3, 3,4,5,6) ) THEN 
     88         CALL ctl_stop('dyn_ldf_bilap : requested workspace arrays unavailable')   ;   RETURN 
     89      ENDIF 
     90 
     91      IF( kt == nit000 .AND. lwp ) THEN 
     92         WRITE(numout,*) 
     93         WRITE(numout,*) 'dyn_ldf_bilap : iso-level bilaplacian operator' 
     94         WRITE(numout,*) '~~~~~~~~~~~~~' 
    9995      ENDIF 
    10096 
     
    104100!!$      zlu(:,:,jpk) = 0.e0 
    105101!!$      zlv(:,:,jpk) = 0.e0 
    106       zuf(:,:,:) = 0.e0 
    107       zut(:,:,:) = 0.e0 
    108       zlu(:,:,:) = 0.e0 
    109       zlv(:,:,:) = 0.e0 
     102      zuf(:,:,:) = 0._wp 
     103      zut(:,:,:) = 0._wp 
     104      zlu(:,:,:) = 0._wp 
     105      zlv(:,:,:) = 0._wp 
    110106 
    111107      !                                                ! =============== 
     
    137133            END DO   
    138134         ENDIF 
    139       ENDDO 
    140  
    141       ! Boundary conditions on the laplacian  (zlu,zlv) 
    142       CALL lbc_lnk( zlu, 'U', -1. ) 
    143       CALL lbc_lnk( zlv, 'V', -1. ) 
    144           
     135      END DO 
     136      CALL lbc_lnk( zlu, 'U', -1. )   ;   CALL lbc_lnk( zlv, 'V', -1. )   ! Boundary conditions 
     137 
    145138          
    146139      DO jk = 1, jpkm1 
     
    150143          
    151144         ! Multiply by the eddy viscosity coef. (at u- and v-points) 
    152 #if ! defined key_dynldf_smag 
    153145         zlu(:,:,jk) = zlu(:,:,jk) * fsahmu(:,:,jk) 
    154146         zlv(:,:,jk) = zlv(:,:,jk) * fsahmv(:,:,jk) 
    155 #endif          
     147          
    156148         ! Contravariant "laplacian" 
    157149         zcu(:,:) = e1u(:,:) * zlu(:,:,jk) 
     
    195187         ! Bilaplacian 
    196188         ! ----------- 
    197 #if !defined key_dynldf_smag 
     189 
    198190         DO jj = 2, jpjm1 
    199191            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    211203            END DO 
    212204         END DO 
    213 #else 
    214  
    215          DO jj = 2, jpjm1 
    216             DO ji = fs_2, fs_jpim1   ! vector opt. 
    217                ze2u = e2u(ji,jj) * fse3u(ji,jj,jk) 
    218                ze2v = e1v(ji,jj) * fse3v(ji,jj,jk) 
    219                ! horizontal biharmonic diffusive trends 
    220                zua = - ( zuf(ji  ,jj,jk) - zuf(ji,jj-1,jk) ) / ze2u   & 
    221                   &  + ( zut(ji+1,jj,jk) - zut(ji,jj  ,jk) ) / e1u(ji,jj) 
    222  
    223                zva = + ( zuf(ji,jj  ,jk) - zuf(ji-1,jj,jk) ) / ze2v   & 
    224                   &  + ( zut(ji,jj+1,jk) - zut(ji  ,jj,jk) ) / e2v(ji,jj) 
    225                ! add it to the general momentum trends 
    226                ua(ji,jj,jk) = ua(ji,jj,jk) + zua*fsahmu(ji,jj,jk) 
    227                va(ji,jj,jk) = va(ji,jj,jk) + zva*fsahmv(ji,jj,jk) 
    228             END DO 
    229          END DO 
    230  
    231 #endif 
     205 
    232206         !                                             ! =============== 
    233207      END DO                                           !   End of slab 
    234208      !                                                ! =============== 
    235  
     209      IF( wrk_not_released(2, 1,2)     .OR.   & 
     210          wrk_not_released(3, 3,4,5,6) )   CALL ctl_stop('dyn_ldf_bilap: failed to release workspace arrays') 
     211      ! 
    236212   END SUBROUTINE dyn_ldf_bilap 
    237213 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilapg.F90

    r2887 r2926  
    44   !! Ocean dynamics:  lateral viscosity trend 
    55   !!====================================================================== 
     6   !! History :  OPA  !  1997-07  (G. Madec)  Original code 
     7   !!  NEMO      1.0  !  2002-08  (G. Madec)  F90: Free form and module 
     8   !!            2.0  !  2004-08  (C. Talandier) New trends organization 
     9   !!---------------------------------------------------------------------- 
    610#if defined key_ldfslp   ||   defined key_esopa 
    711   !!---------------------------------------------------------------------- 
     
    1216   !!   ldfguv         :  
    1317   !!---------------------------------------------------------------------- 
    14    !! * Modules used 
    1518   USE oce             ! ocean dynamics and tracers 
    1619   USE dom_oce         ! ocean space and time domain 
    1720   USE ldfdyn_oce      ! ocean dynamics lateral physics 
    1821   USE zdf_oce         ! ocean vertical physics 
    19    USE in_out_manager  ! I/O manager 
    2022   USE trdmod          ! ocean dynamics trends  
    2123   USE trdmod_oce      ! ocean variables trends 
    2224   USE ldfslp          ! iso-neutral slopes available 
     25   USE in_out_manager  ! I/O manager 
     26   USE lib_mpp         ! MPP library 
    2327   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2428   USE prtctl          ! Print control 
     
    2731   PRIVATE 
    2832 
    29    !! * Routine accessibility 
    30    PUBLIC dyn_ldf_bilapg ! called by step.F90 
     33   PUBLIC   dyn_ldf_bilapg       ! called by step.F90 
     34 
     35   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zfuw, zfvw , zdiu, zdiv   ! 2D workspace (ldfguv) 
     36   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  zdju, zdj1u, zdjv, zdj1v  ! 2D workspace (ldfguv) 
    3137 
    3238   !! * Substitutions 
     
    3642   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3743   !! $Id$  
    38    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    39    !!---------------------------------------------------------------------- 
    40  
     44   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     45   !!---------------------------------------------------------------------- 
    4146CONTAINS 
     47 
     48   INTEGER FUNCTION dyn_ldf_bilapg_alloc() 
     49      !!---------------------------------------------------------------------- 
     50      !!               ***  ROUTINE dyn_ldf_bilapg_alloc  *** 
     51      !!---------------------------------------------------------------------- 
     52      ALLOCATE( zfuw(jpi,jpk) , zfvw (jpi,jpk) , zdiu(jpi,jpk) , zdiv (jpi,jpk) ,     & 
     53         &      zdju(jpi,jpk) , zdj1u(jpi,jpk) , zdjv(jpi,jpk) , zdj1v(jpi,jpk) , STAT=dyn_ldf_bilapg_alloc ) 
     54         ! 
     55      IF( dyn_ldf_bilapg_alloc /= 0 )   CALL ctl_warn('dyn_ldf_bilapg_alloc: failed to allocate arrays') 
     56   END FUNCTION dyn_ldf_bilapg_alloc 
     57 
    4258 
    4359   SUBROUTINE dyn_ldf_bilapg( kt ) 
     
    6783      !!                biharmonic mixing trend. 
    6884      !!              - save the trend in (zwk3,zwk4) ('key_trddyn') 
    69       !! 
    70       !! History : 
    71       !!   8.0  !  97-07  (G. Madec)  Original code 
    72       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    73       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    74       !!---------------------------------------------------------------------- 
    75       !! * Modules used      
    76       USE oce, ONLY :    zwk3 => ta,   & ! use ta as 3D workspace    
    77                          zwk4 => sa      ! use sa as 3D workspace    
    78  
    79       !! * Arguments 
     85      !!---------------------------------------------------------------------- 
     86      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     87      USE wrk_nemo, ONLY:   zwk1 => wrk_3d_3 , zwk2 => wrk_3d_4   ! 3D workspace 
     88      USE oce     , ONLY:   zwk3 => ta       , zwk4 => sa         ! ta, sa used as 3D workspace    
     89      ! 
    8090      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
    81  
    82       !! * Local declarations 
     91      ! 
    8392      INTEGER ::   ji, jj, jk                 ! dummy loop indices 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    85          zwk1, zwk2                ! work array used for rotated biharmonic 
    86          !                         ! operator on tracers and/or momentum 
    87       !!---------------------------------------------------------------------- 
     93      !!---------------------------------------------------------------------- 
     94 
     95      IF( wrk_in_use(3, 3,4) ) THEN 
     96         CALL ctl_stop('dyn_ldf_bilapg: requested workspace arrays unavailable')   ;   RETURN 
     97      ENDIF 
    8898 
    8999      IF( kt == nit000 ) THEN 
     
    93103         zwk1(:,:,:) = 0.e0   ;   zwk3(:,:,:) = 0.e0 
    94104         zwk2(:,:,:) = 0.e0   ;   zwk4(:,:,:) = 0.e0 
     105         !                                      ! allocate dyn_ldf_bilapg arrays 
     106         IF( dyn_ldf_bilapg_alloc() /= 0 )   CALL ctl_stop('STOP', 'dyn_ldf_bilapg: failed to allocate arrays') 
    95107      ENDIF 
    96108 
    97109      ! Laplacian of (ub,vb) multiplied by ahm 
    98110      ! --------------------------------------   
    99       ! rotated harmonic operator applied to (ub,vb) 
    100       !     and multiply by ahmu, ahmv (output in (zwk1,zwk2) ) 
    101  
    102       CALL ldfguv ( ub, vb, zwk1, zwk2, 1 ) 
    103  
    104  
    105       ! Lateral boundary conditions on (zwk1,zwk2) 
    106       CALL lbc_lnk( zwk1, 'U', -1. ) 
    107       CALL lbc_lnk( zwk2, 'V', -1. ) 
    108  
     111      CALL ldfguv( ub, vb, zwk1, zwk2, 1 )      ! rotated harmonic operator applied to (ub,vb) 
     112      !                                         ! and multiply by ahmu, ahmv (output in (zwk1,zwk2) ) 
     113      CALL lbc_lnk( zwk1, 'U', -1. )   ;   CALL lbc_lnk( zwk2, 'V', -1. )     ! Lateral boundary conditions 
    109114 
    110115      ! Bilaplacian of (ub,vb) 
    111116      ! ----------------------  
    112       ! rotated harmonic operator applied to (zwk1,zwk2) (output in (zwk3,zwk4) ) 
    113  
    114       CALL ldfguv ( zwk1, zwk2, zwk3, zwk4, 2 ) 
    115  
    116  
    117       ! Update the momentum trends           (j-slab :   2, jpj-1) 
     117      CALL ldfguv( zwk1, zwk2, zwk3, zwk4, 2 )  ! rotated harmonic operator applied to (zwk1,zwk2)  
     118      !                                         ! (output in (zwk3,zwk4) ) 
     119 
     120      ! Update the momentum trends 
    118121      ! -------------------------- 
    119       !                                                ! =============== 
    120       DO jj = 2, jpjm1                                 !  Vertical slab 
    121          !                                             ! =============== 
     122      DO jj = 2, jpjm1               ! add the diffusive trend to the general momentum trends 
    122123         DO jk = 1, jpkm1 
    123124            DO ji = 2, jpim1 
    124                ! add the diffusive trend to the general momentum trends 
    125125               ua(ji,jj,jk) = ua(ji,jj,jk) + zwk3(ji,jj,jk) 
    126126               va(ji,jj,jk) = va(ji,jj,jk) + zwk4(ji,jj,jk) 
    127127            END DO 
    128128         END DO 
    129          !                                             ! =============== 
    130       END DO                                           !   End of slab 
    131       !                                                ! =============== 
    132  
     129      END DO 
     130      ! 
     131      IF( wrk_not_released(3, 3,4) )   CALL ctl_stop('dyn_ldf_bilapg: failed to release workspace arrays') 
     132      ! 
    133133   END SUBROUTINE dyn_ldf_bilapg 
    134134 
     
    174174      !!                          second order vertical derivative term) 
    175175      !!      'key_trddyn' defined: the trend is saved for diagnostics. 
    176       !! 
    177       !! History : 
    178       !!   8.0  !  97-07  (G. Madec)  Original code 
    179       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    180       !!---------------------------------------------------------------------- 
    181       !! * Arguments 
    182       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in ) ::   & 
    183          pu, pv     ! momentum fields (before u and v for the 1st call, and 
    184       !             ! laplacian of these fields multiplied by ahm for the 2nd 
    185       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out ) ::   & 
    186          plu, plv   ! partial harmonic operator applied to 
    187       !             ! pu and pv (all the components except 
    188       !             ! second order vertical derivative term) 
    189       INTEGER, INTENT( in ) ::   & 
    190          kahm       ! =1 the laplacian is multiplied by the eddy diffusivity coef. 
    191       !             ! =2 no multiplication 
    192  
    193       !! * Local declarations 
    194       INTEGER  ::   ji, jj, jk       ! dummy loop indices 
    195       REAL(wp) ::   & 
    196          zabe1, zabe2, zcof1, zcof2,    &  ! temporary scalars 
    197          zcoef0, zcoef3, zcoef4 
    198       REAL(wp) ::   & 
    199          zbur, zbvr, zmkt, zmkf, zuav, zvav,    & 
    200          zuwslpi, zuwslpj, zvwslpi, zvwslpj 
    201       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    202          ziut, zjuf , zjvt, zivf,       &  ! workspace 
    203          zdku, zdk1u, zdkv, zdk1v 
    204       REAL(wp), DIMENSION(jpi,jpk) ::   & 
    205          zfuw, zfvw, zdiu, zdiv,        &  ! workspace 
    206          zdju, zdj1u, zdjv, zdj1v  
    207       !!---------------------------------------------------------------------- 
    208  
     176      !!---------------------------------------------------------------------- 
     177      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     178      USE wrk_nemo, ONLY:   ziut => wrk_2d_1 , zjuf  => wrk_2d_2 , zjvt  => wrk_2d_3 
     179      USE wrk_nemo, ONLY:   zivf => wrk_2d_4 , zdku  => wrk_2d_5 , zdk1u => wrk_2d_6 
     180      USE wrk_nemo, ONLY:   zdkv => wrk_2d_7 , zdk1v => wrk_2d_8 
     181      !! 
     182      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pu , pv    ! 1st call: before horizontal velocity  
     183      !                                                               ! 2nd call: ahm x these fields 
     184      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(  out) ::   plu, plv   ! partial harmonic operator applied to 
     185      !                                                               ! pu and pv (all the components except 
     186      !                                                               ! second order vertical derivative term) 
     187      INTEGER                         , INTENT(in   ) ::   kahm       ! =1 1st call ; =2 2nd call 
     188      ! 
     189      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     190      REAL(wp) ::   zabe1 , zabe2 , zcof1 , zcof2        ! local scalar 
     191      REAL(wp) ::   zcoef0, zcoef3, zcoef4               !   -      - 
     192      REAL(wp) ::   zbur, zbvr, zmkt, zmkf, zuav, zvav   !   -      - 
     193      REAL(wp) ::   zuwslpi, zuwslpj, zvwslpi, zvwslpj   !   -      - 
     194      !!---------------------------------------------------------------------- 
     195 
     196      IF( wrk_in_use(2, 1,2,3,4,5,6,7,8) ) THEN 
     197         CALL ctl_stop('dyn:ldfguv: requested workspace arrays unavailable')   ;   RETURN 
     198      END IF 
    209199      !                               ! ********** !   ! =============== 
    210200      DO jk = 1, jpkm1                ! First step !   ! Horizontal slab 
     
    422412         ! II.3 Divergence of vertical fluxes added to the horizontal divergence 
    423413         ! --------------------------------------------------------------------- 
    424 #if defined key_dynldf_smag  
     414 
    425415         IF( kahm == 1 ) THEN 
    426416            ! multiply the laplacian by the eddy viscosity coefficient 
     
    458448            STOP 'ldfguv' 
    459449         ENDIF 
    460 #else 
    461          IF( kahm == 2 ) THEN 
    462             ! multiply the laplacian by the eddy viscosity coefficient 
    463             DO jk = 1, jpkm1 
    464                DO ji = 2, jpim1 
    465                   ! eddy coef. divided by the volume element 
    466                   zbur = fsahmu(ji,jj,jk) / ( e1u(ji,jj)*e2u(ji,jj)*fse3u(ji,jj,jk) ) 
    467                   zbvr = fsahmv(ji,jj,jk) / ( e1v(ji,jj)*e2v(ji,jj)*fse3v(ji,jj,jk) ) 
    468                   ! vertical divergence 
    469                   zuav = zfuw(ji,jk) - zfuw(ji,jk+1) 
    470                   zvav = zfvw(ji,jk) - zfvw(ji,jk+1) 
    471                   ! harmonic operator applied to (pu,pv) and multiply by ahm 
    472                   plu(ji,jj,jk) = ( plu(ji,jj,jk) + zuav ) * zbur 
    473                   plv(ji,jj,jk) = ( plv(ji,jj,jk) + zvav ) * zbvr 
    474                END DO 
    475             END DO 
    476          ELSEIF( kahm == 1 ) THEN 
    477             ! second call, no multiplication 
    478             DO jk = 1, jpkm1 
    479                DO ji = 2, jpim1 
    480                   ! inverse of the volume element 
    481                   zbur = 1. / ( e1u(ji,jj)*e2u(ji,jj)*fse3u(ji,jj,jk) ) 
    482                   zbvr = 1. / ( e1v(ji,jj)*e2v(ji,jj)*fse3v(ji,jj,jk) ) 
    483                   ! vertical divergence 
    484                   zuav = zfuw(ji,jk) - zfuw(ji,jk+1) 
    485                   zvav = zfvw(ji,jk) - zfvw(ji,jk+1) 
    486                   ! harmonic operator applied to (pu,pv)  
    487                   plu(ji,jj,jk) = ( plu(ji,jj,jk) + zuav ) * zbur 
    488                   plv(ji,jj,jk) = ( plv(ji,jj,jk) + zvav ) * zbvr 
    489                END DO 
    490             END DO 
    491          ELSE 
    492             IF(lwp)WRITE(numout,*) ' ldfguv: kahm= 1 or 2, here =', kahm 
    493             IF(lwp)WRITE(numout,*) '         We stop' 
    494             STOP 'ldfguv' 
    495          ENDIF 
    496  
    497 #endif 
    498450         !                                             ! =============== 
    499451      END DO                                           !   End of slab 
    500452      !                                                ! =============== 
     453 
     454      IF( wrk_not_released(2, 1,2,3,4,5,6,7,8) )   CALL ctl_stop('dyn:ldfguv: failed to release workspace arrays') 
     455      ! 
    501456   END SUBROUTINE ldfguv 
    502457 
     
    507462CONTAINS 
    508463   SUBROUTINE dyn_ldf_bilapg( kt )               ! Dummy routine 
     464      INTEGER, INTENT(in) :: kt 
    509465      WRITE(*,*) 'dyn_ldf_bilapg: You should not have seen this print! error?', kt 
    510466   END SUBROUTINE dyn_ldf_bilapg 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r2887 r2926  
    3838   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3939   !! $Id$  
    40    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    41    !!---------------------------------------------------------------------- 
    42  
     40   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     41   !!---------------------------------------------------------------------- 
    4342CONTAINS 
    4443 
     
    6362      !!---------------------------------------------------------------------- 
    6463      INTEGER ::   ioptio         ! ??? 
    65       LOGICAL :: ll_print = .FALSE.    ! Logical flag for printing viscosity coef. 
     64      LOGICAL ::   ll_print = .FALSE.    ! Logical flag for printing viscosity coef. 
    6665      !!  
    6766      NAMELIST/namdyn_ldf/ ln_dynldf_lap  , ln_dynldf_bilap,                  & 
    6867         &                 ln_dynldf_level, ln_dynldf_hor  , ln_dynldf_iso,   & 
    69          &                 rn_ahm_0_lap   , rn_ahmb_0      , rn_ahm_0_blp ,cmsmag1,cmsmag2 
     68         &                 rn_ahm_0_lap   , rn_ahmb_0      , rn_ahm_0_blp 
    7069      !!---------------------------------------------------------------------- 
    7170 
     
    8685         WRITE(numout,*) '      background viscosity                    rn_ahmb_0       = ', rn_ahmb_0 
    8786         WRITE(numout,*) '      horizontal bilaplacian eddy viscosity   rn_ahm_0_blp    = ', rn_ahm_0_blp 
    88          WRITE(numout,*) '      smagorinsky coefficient for laplacian       cmsmag1    = ' , cmsmag1 
    89          WRITE(numout,*) '      smagorinsky coefficient for bilaplacian     cmsmag2    = ' , cmsmag2 
    9087      ENDIF 
    9188 
     
    131128      ! Lateral eddy viscosity 
    132129      ! ====================== 
    133 #if defined key_dynldf_smag && ! defined key_dynldf_c3d 
    134       IF(lwp) WRITE(numout,*) '   key_dynldf_smag can not be used without key_dynldf_c3d' 
    135 #endif 
    136  
    137130#if defined key_dynldf_c3d 
    138131      CALL ldf_dyn_c3d( ll_print )   ! ahm = 3D coef. = F( longitude, latitude, depth ) 
     
    213206      REAL(wp), INTENT(in   )                         ::   pwam       ! width of inflection 
    214207      REAL(wp), INTENT(in   )                         ::   pbot       ! bottom value (0<pbot<= 1) 
    215       REAL(wp), INTENT(in   ), DIMENSION        (jpk) ::   pdep       ! depth of the gridpoint (T, U, V, F) 
    216       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pah        ! adimensional vertical profile 
     208      REAL(wp), INTENT(in   ), DIMENSION          (:) ::   pdep       ! depth of the gridpoint (T, U, V, F) 
     209      REAL(wp), INTENT(inout), DIMENSION      (:,:,:) ::   pah        ! adimensional vertical profile 
    217210      !! 
    218211      INTEGER  ::   jk           ! dummy loop indices 
     
    255248      REAL(wp), INTENT(in   )                         ::   pwam       ! width of inflection 
    256249      REAL(wp), INTENT(in   )                         ::   pbot       ! bottom value (0<pbot<= 1) 
    257       REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk) ::   pdep       ! dep of the gridpoint (T, U, V, F) 
    258       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pah        ! adimensional vertical profile 
     250      REAL(wp), INTENT(in   ), DIMENSION      (:,:,:) ::   pdep       ! dep of the gridpoint (T, U, V, F) 
     251      REAL(wp), INTENT(inout), DIMENSION      (:,:,:) ::   pah        ! adimensional vertical profile 
    259252      !! 
    260253      INTEGER  ::   jk           ! dummy loop indices 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90

    r2887 r2926  
    2323   REAL(wp), PUBLIC ::   rn_ahm_0_blp    =     0._wp   !: lateral bilaplacian eddy viscosity (m4/s) 
    2424   REAL(wp), PUBLIC ::   ahm0, ahmb0, ahm0_blp         !: OLD namelist names 
    25    REAL(wp), PUBLIC ::   cmsmag1          = 3._wp       !: constant in laplacian Smagorinsky viscosity 
    26    REAL(wp), PUBLIC ::   cmsmag2          = 3._wp       !: constant in bilaplacian Smagorinsky viscosity 
     25 
    2726   !                                                                                  !!! eddy coeff. at U-,V-,W-pts [m2/s] 
    2827#if defined key_dynldf_c3d 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r2887 r2926  
    3131   USE in_out_manager  ! I/O manager 
    3232   USE prtctl          ! Print control 
    33    USE lib_mpp 
    3433 
    3534   IMPLICIT NONE 
     
    692691            !                          !- bound the slopes: abs(zw.)<= 1/100 and zb..<0 
    693692            !                                kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) 
    694             zbu = MIN(  zbu , -100._wp* ABS( zau ) , -7.e+3_wp/fse3u(ji,jj,ik)* ABS( zau )  ) 
    695             zbv = MIN(  zbv , -100._wp* ABS( zav ) , -7.e+3_wp/fse3v(ji,jj,ik)* ABS( zav )  ) 
     693            zbu = MIN(  zbu , -100._wp* ABS( zau ) , -7.e+3_wp/fse3u(ji,jj,iku)* ABS( zau )  ) 
     694            zbv = MIN(  zbv , -100._wp* ABS( zav ) , -7.e+3_wp/fse3v(ji,jj,ikv)* ABS( zav )  ) 
    696695            !                          !- Slope at u- & v-points (uslpml, vslpml) 
    697             uslpml(ji,jj) = zau / ( zbu - zeps ) * umask(ji,jj,ik) 
    698             vslpml(ji,jj) = zav / ( zbv - zeps ) * vmask(ji,jj,ik) 
     696            uslpml(ji,jj) = zau / ( zbu - zeps ) * umask(ji,jj,iku) 
     697            vslpml(ji,jj) = zav / ( zbv - zeps ) * vmask(ji,jj,ikv) 
    699698            ! 
    700699            !                    !==   i- & j-slopes at w-points just below the Mixed Layer   ==! 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra.F90

    r2887 r2926  
    6868         &                 ln_traldf_grif , ln_traldf_gdia,                   & 
    6969         &                 rn_aht_0       , rn_ahtb_0      , rn_aeiv_0,       & 
    70          &                 rn_slpmax , chsmag 
     70         &                 rn_slpmax 
    7171      !!---------------------------------------------------------------------- 
    7272 
     
    157157      ENDIF 
    158158#endif 
    159 #if defined key_traldf_smag && ! defined key_traldf_c3d 
    160        CALL ctl_stop( 'key_traldf_smag can only be used with key_traldf_c3d' ) 
    161 #endif 
    162  
    163159      ! 
    164160   END SUBROUTINE ldf_tra_init 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_c3d.h90

    r2887 r2926  
    8989      ENDIF 
    9090 
    91 # if defined key_traldf_eiv  
     91# if defined key_traldf_eiv 
    9292      aeiu(:,:,:) = aeiv0            ! set aeiu = aeiv at u- and v-points, 
    9393      aeiv(:,:,:) = aeiv0            ! and aeiw at w-point 
     
    108108      CALL lbc_lnk( aeiv, 'V', 1. ) 
    109109      CALL lbc_lnk( aeiw, 'W', 1. ) 
     110# endif 
    110111 
    111112      IF(lwp .AND. ld_print ) THEN 
     
    120121         CALL prihre(aeiw(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    121122      ENDIF 
    122 # endif 
    123123      ! 
    124124   END SUBROUTINE ldf_tra_c3d 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90

    r2887 r2926  
    3030   REAL(wp), PUBLIC ::   rn_aeiv_0       = 2000._wp  !: eddy induced velocity coefficient (m2/s) 
    3131   REAL(wp), PUBLIC ::   rn_slpmax       = 0.01_wp   !: slope limit 
    32    REAL(wp), PUBLIC ::   chsmag          = 1._wp     !: constant in Smagorinsky diffusivity 
     32 
    3333   REAL(wp), PUBLIC ::   aht0, ahtb0, aeiv0         !!: OLD namelist names 
    3434   LOGICAL , PUBLIC ::   l_triad_iso     = .FALSE.   !: calculate triads twice 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90

    r2887 r2926  
    2828   USE diaptr          ! poleward transport diagnostics 
    2929   USE trc_oce         ! share passive tracers/Ocean variables 
     30   USE lib_mpp         ! MPP library 
    3031 
    3132   IMPLICIT NONE 
     
    7374      !!               biharmonic mixing trend. 
    7475      !!---------------------------------------------------------------------- 
    75       USE oce         , ztu => ua   ! use ua as workspace 
    76       USE oce         , ztv => va   ! use va as workspace 
     76      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     77      USE oce     , ONLY:   ztu  => ua       , ztv  => va                           ! (ua,va) used as workspace 
     78      USE wrk_nemo, ONLY:   zeeu => wrk_2d_1 , zeev => wrk_2d_2 , zlt => wrk_2d_3   ! 2D workspace 
    7779      !! 
    7880      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
     
    8587      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
    8688      REAL(wp) ::  zbtr, ztra       ! local scalars 
    87       REAL(wp), DIMENSION(jpi,jpj) ::   zeeu, zeev, zlt   ! 2D workspace 
    8889      !!---------------------------------------------------------------------- 
     90 
     91      IF( wrk_in_use(2, 1,2,3) ) THEN 
     92         CALL ctl_stop('tra_ldf_bilap: requested workspace arrays unavailable')   ;   RETURN 
     93      ENDIF 
    8994 
    9095      IF( kt == nit000 )  THEN 
     
    123128               END DO 
    124129            ENDIF 
    125 #if ! defined key_traldf_smag 
    126130            DO jj = 2, jpjm1                 ! Second derivative (divergence) time the eddy diffusivity coefficient 
    127131               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    131135               END DO 
    132136            END DO 
    133 #else 
    134             DO jj = 2, jpjm1                 ! Second derivative (divergence) time the eddy diffusivity coefficient 
    135                DO ji = fs_2, fs_jpim1   ! vector opt. 
    136                   zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    137                   zlt(ji,jj) = zbtr * (   ztu(ji,jj,jk) - ztu(ji-1,jj,jk)   & 
    138                      &                                     + ztv(ji,jj,jk) - ztv(ji,jj-1,jk)   ) 
    139                END DO 
    140             END DO 
    141 #endif 
    142137            CALL lbc_lnk( zlt, 'T', 1. )     ! Lateral boundary conditions (unchanged sgn) 
    143138 
     
    150145               END DO 
    151146            END DO 
    152 #if ! defined key_traldf_smag 
    153147            DO jj = 2, jpjm1                 ! fourth derivative (divergence) and add to the general tracer trend 
    154148               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    160154               END DO 
    161155            END DO 
    162 #else 
    163             DO jj = 2, jpjm1                 ! fourth derivative (divergence) and add to the general tracer trend 
    164                DO ji = fs_2, fs_jpim1   ! vector opt. 
    165                   ! horizontal diffusive trends 
    166                   zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    167                   ztra = zbtr * fsahtt(ji,jj,jk)* (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk) + ztv(ji,jj,jk) - ztv(ji,jj-1,jk)  ) 
    168                   ! add it to the general tracer trends 
    169                   pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 
    170                END DO 
    171             END DO 
    172  
    173 #endif 
    174156            !                                              
    175157         END DO                                           ! Horizontal slab 
     
    183165      END DO                                              ! tracer loop 
    184166      !                                                   ! =========== 
     167      IF( wrk_not_released(2, 1,2,3) )   CALL ctl_stop('tra_ldf_bilap: failed to release workspace arrays') 
     168      ! 
    185169   END SUBROUTINE tra_ldf_bilap 
    186170 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90

    r2887 r2926  
    2424   USE diaptr          ! poleward transport diagnostics  
    2525   USE trc_oce         ! share passive tracers/Ocean variables 
     26   USE lib_mpp         ! MPP library 
    2627 
    2728   IMPLICIT NONE 
     
    6566      !!               biharmonic mixing trend. 
    6667      !!---------------------------------------------------------------------- 
     68      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     69      USE wrk_nemo, ONLY:   wk1 => wrk_4d_1 , wk2 => wrk_4d_2     ! 4D workspace 
     70      ! 
    6771      INTEGER         , INTENT(in   )                      ::   kt       ! ocean time-step index 
    6872      CHARACTER(len=3), INTENT(in   )                      ::   cdtype   ! =TRA or TRC (tracer indicator) 
     
    7074      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb      ! before and now tracer fields 
    7175      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta      ! tracer trend  
    72       !! 
    73       INTEGER ::   ji, jj, jk, jn                 ! dummy loop indices 
    74       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt) ::   wk1, wk2   ! 4D workspace 
    75       !!---------------------------------------------------------------------- 
     76      ! 
     77      INTEGER ::   ji, jj, jk, jn   ! dummy loop indices 
     78      !!---------------------------------------------------------------------- 
     79 
     80      IF( wrk_in_use(4, 1,2) ) THEN 
     81         CALL ctl_stop('tra_ldf_bilapg: requested workspace arrays unavailable')   ;   RETURN 
     82      ENDIF 
    7683 
    7784      IF( kt == nit000 )  THEN 
     
    107114         END DO 
    108115      END DO 
     116      ! 
     117      IF( wrk_not_released(4, 1,2) )   CALL ctl_stop('tra_ldf_bilapg : failed to release workspace arrays.') 
    109118      ! 
    110119   END SUBROUTINE tra_ldf_bilapg 
     
    149158      !! 
    150159      !!---------------------------------------------------------------------- 
    151       USE oce         , zftv => ua     ! use ua as workspace 
    152       !! 
     160      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released, wrk_in_use_xz, wrk_not_released_xz 
     161      USE oce     , ONLY:   zftv => ua       ! ua used as workspace 
     162      USE wrk_nemo, ONLY:   zftu => wrk_2d_1 , zdkt  => wrk_2d_2 , zdk1t => wrk_2d_3 
     163      USE wrk_nemo, ONLY:   zftw => wrk_xz_1 , zdit  => wrk_xz_2  
     164      USE wrk_nemo, ONLY:   zdjt => wrk_xz_3 , zdj1t => wrk_xz_4 
     165      ! 
    153166      INTEGER         , INTENT(in )                              ::  kt      ! ocean time-step index 
    154167      CHARACTER(len=3), INTENT(in )                              ::  cdtype  ! =TRA or TRC (tracer indicator)  
     
    166179      REAL(wp) ::  zbtr, ztah, ztav 
    167180      REAL(wp) ::  zcof0, zcof1, zcof2, zcof3, zcof4 
    168       REAL(wp), DIMENSION(jpi,jpj) ::  zftu,  zdkt, zdk1t       ! workspace 
    169       REAL(wp), DIMENSION(jpi,jpk) ::  zftw, zdit, zdjt, zdj1t  !  
    170       !!---------------------------------------------------------------------- 
    171  
     181      !!---------------------------------------------------------------------- 
     182 
     183      IF( wrk_in_use(2, 1,2,3) .OR. wrk_in_use_xz(1,2,3,4) )THEN 
     184         CALL ctl_stop('ldfght : requested workspace arrays unavailable')   ;   RETURN 
     185      ENDIF 
    172186      ! 
    173187      DO jn = 1, kjpt 
     
    285299 
    286300            ! II.3 Divergence of vertical fluxes added to the horizontal divergence 
    287             ! -------------------------------------------------------------------- 
    288 #if ! defined key_traldf_smag             
     301            ! --------------------------------------------------------------------- 
     302             
    289303            IF( kaht == 1 ) THEN 
    290304               ! multiply the laplacian by the eddy diffusivity coefficient 
     
    320334         !                                                ! =============== 
    321335      END DO 
    322 #else 
    323             IF( kaht == 2 ) THEN 
    324                ! multiply the laplacian by the eddy diffusivity coefficient 
    325                DO jk = 1, jpkm1 
    326                   DO ji = 2, jpim1   
    327                      ! eddy coef. divided by the volume element 
    328                      zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    329                      ! vertical divergence 
    330                      ztav = fsahtt(ji,jj,jk) * ( zftw(ji,jk) - zftw(ji,jk+1) ) 
    331                      ! harmonic operator applied to (pt,ps) and multiply by aht 
    332                      plt(ji,jj,jk,jn) = ( plt(ji,jj,jk,jn) + ztav ) * zbtr 
    333                   END DO 
    334                END DO 
    335             ELSEIF( kaht == 1 ) THEN 
    336                ! second call, no multiplication 
    337                DO jk = 1, jpkm1 
    338                   DO ji = 2, jpim1 
    339                      ! inverse of the volume element 
    340                      zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    341                      ! vertical divergence 
    342                      ztav = zftw(ji,jk) - zftw(ji,jk+1) 
    343                      ! harmonic operator applied to (pt,ps)  
    344                      plt(ji,jj,jk,jn) = ( plt(ji,jj,jk,jn) + ztav ) * zbtr 
    345                   END DO 
    346                END DO 
    347             ELSE 
    348                IF(lwp) WRITE(numout,*) ' ldfght: kaht= 1 or 2, here =', kaht 
    349                IF(lwp) WRITE(numout,*) '         We stop' 
    350                STOP 'ldfght' 
    351             ENDIF 
    352             !                                             ! =============== 
    353          END DO                                           !   End of slab 
    354          !                                                ! =============== 
    355       END DO 
    356  
    357  
    358 #endif       
     336      ! 
     337      IF( wrk_not_released(2, 1,2,3)   .OR.   & 
     338          wrk_not_released_xz(1,2,3,4) )   CALL ctl_stop('ldfght : failed to release workspace arrays.') 
     339      ! 
    359340   END SUBROUTINE ldfght 
    360341 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/step.F90

    r2887 r2926  
    156156      IF( lk_traldf_eiv )   CALL ldf_eiv( kstp )      ! eddy induced velocity coefficient 
    157157#endif 
    158 #if defined key_traldf_c3d && key_traldf_smag 
    159        CALL ldf_tra_smag( kstp )      ! Smagorinsky diffusivity 
    160 #  endif 
    161 #if defined key_dynldf_c3d && key_dynldf_smag 
    162        CALL ldf_dyn_smag( kstp )      ! Smagorinsky viscosity 
    163 #  endif 
    164  
    165158 
    166159      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r2887 r2926  
    6060   USE ldfslp           ! iso-neutral slopes               (ldf_slp routine) 
    6161   USE ldfeiv           ! eddy induced velocity coef.      (ldf_eiv routine) 
    62    USE ldftra_smag      ! smagorinsky diffusivity   .      (ldf_tra_smag routine) 
    63    USE ldfdyn_smag      ! smagorinsky viscosity            (ldf_dyn_smag routine) 
    6462 
    6563   USE zdftmx           ! tide-induced vertical mixing     (zdf_tmx routine) 
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/TOOLS/COMPILE/cfg.txt

    r2887 r2926  
     1GYRE OPA_SRC 
    12ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    23GYRE_LOBSTER OPA_SRC TOP_SRC 
     
    56ORCA2_LIM3 OPA_SRC LIM_SRC_3 
    67ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
    7 GYRE OPA_SRC 
    8 GYRE_5 OPA_SRC 
Note: See TracChangeset for help on using the changeset viewer.