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 2887 for branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90 – NEMO

Ignore:
Timestamp:
2011-10-05T11:16:29+02:00 (13 years ago)
Author:
hliu
Message:

addition and modification of files for Smagorinsky method. for Maria Luneva

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2802_NOCL_Smagorinsky/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90

    r2715 r2887  
    2424   USE diaptr          ! poleward transport diagnostics  
    2525   USE trc_oce         ! share passive tracers/Ocean variables 
    26    USE lib_mpp         ! MPP library 
    2726 
    2827   IMPLICIT NONE 
     
    6665      !!               biharmonic mixing trend. 
    6766      !!---------------------------------------------------------------------- 
    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       ! 
    7167      INTEGER         , INTENT(in   )                      ::   kt       ! ocean time-step index 
    7268      CHARACTER(len=3), INTENT(in   )                      ::   cdtype   ! =TRA or TRC (tracer indicator) 
     
    7470      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb      ! before and now tracer fields 
    7571      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta      ! tracer trend  
    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 
     72      !! 
     73      INTEGER ::   ji, jj, jk, jn                 ! dummy loop indices 
     74      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt) ::   wk1, wk2   ! 4D workspace 
     75      !!---------------------------------------------------------------------- 
    8376 
    8477      IF( kt == nit000 )  THEN 
     
    114107         END DO 
    115108      END DO 
    116       ! 
    117       IF( wrk_not_released(4, 1,2) )   CALL ctl_stop('tra_ldf_bilapg : failed to release workspace arrays.') 
    118109      ! 
    119110   END SUBROUTINE tra_ldf_bilapg 
     
    158149      !! 
    159150      !!---------------------------------------------------------------------- 
    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       ! 
     151      USE oce         , zftv => ua     ! use ua as workspace 
     152      !! 
    166153      INTEGER         , INTENT(in )                              ::  kt      ! ocean time-step index 
    167154      CHARACTER(len=3), INTENT(in )                              ::  cdtype  ! =TRA or TRC (tracer indicator)  
     
    179166      REAL(wp) ::  zbtr, ztah, ztav 
    180167      REAL(wp) ::  zcof0, zcof1, zcof2, zcof3, zcof4 
    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 
     168      REAL(wp), DIMENSION(jpi,jpj) ::  zftu,  zdkt, zdk1t       ! workspace 
     169      REAL(wp), DIMENSION(jpi,jpk) ::  zftw, zdit, zdjt, zdj1t  !  
     170      !!---------------------------------------------------------------------- 
     171 
    186172      ! 
    187173      DO jn = 1, kjpt 
     
    299285 
    300286            ! II.3 Divergence of vertical fluxes added to the horizontal divergence 
    301             ! --------------------------------------------------------------------- 
    302              
     287            ! -------------------------------------------------------------------- 
     288#if ! defined key_traldf_smag             
    303289            IF( kaht == 1 ) THEN 
    304290               ! multiply the laplacian by the eddy diffusivity coefficient 
     
    334320         !                                                ! =============== 
    335321      END DO 
    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       ! 
     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       
    340359   END SUBROUTINE ldfght 
    341360 
Note: See TracChangeset for help on using the changeset viewer.