Ignore:
Timestamp:
2012-02-21T17:00:02+01:00 (9 years ago)
Author:
gm
Message:

Ediag branche: #927 add 3D output for dyn & tracer trends

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD/trdicp.F90

    r3294 r3316  
    55   !!===================================================================== 
    66   !! History :  1.0  !  2004-08 (C. Talandier) New trends organization 
     7   !!            3.5  !  2012-02 (G. Madec)  add 3D tracer zdf trend output using iom 
    78   !!---------------------------------------------------------------------- 
    89#if  defined key_trdtra   ||   defined key_trddyn   ||   defined key_esopa 
     
    2223   USE ldfdyn_oce      ! ocean dynamics: lateral physics 
    2324   USE zdf_oce         ! ocean vertical physics 
    24    USE in_out_manager  ! I/O manager 
    25    USE lib_mpp         ! distibuted memory computing library 
     25   USE zdfddm          ! ocean vertical physics: double diffusion 
    2626   USE eosbn2          ! equation of state 
    2727   USE phycst          ! physical constants 
     28   USE lib_mpp         ! distibuted memory computing library 
     29   USE in_out_manager  ! I/O manager 
     30   USE iom             ! I/O manager library 
    2831   USE wrk_nemo        ! Memory allocation 
    29  
    3032 
    3133   IMPLICIT NONE 
     
    4446#  include "domzgr_substitute.h90" 
    4547#  include "vectopt_loop_substitute.h90" 
     48#  include "zdfddm_substitute.h90" 
    4649   !!---------------------------------------------------------------------- 
    4750   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    5558      !!                  ***  ROUTINE trd_2d  *** 
    5659      !!  
    57       !! ** Purpose : verify the basin averaged properties of tracers and/or 
    58       !!              momentum equations at every time step frequency nn_trd. 
    59       !!---------------------------------------------------------------------- 
    60       REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   ptrd2dx   ! Temperature or U trend  
    61       REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   ptrd2dy   ! Salinity    or V trend 
    62       INTEGER                     , INTENT(in   ) ::   ktrd      ! tracer trend index 
    63       CHARACTER(len=3)            , INTENT(in   ) ::   ctype     ! momentum ('DYN') or tracers ('TRA') trends 
     60      !! ** Purpose :   compute and print the domain averaged properties of tracers  
     61      !!              and/or momentum equations at each nn_trd time step. 
     62      !!---------------------------------------------------------------------- 
     63      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   ptrd2dx   ! Temperature or U trend  
     64      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   ptrd2dy   ! Salinity    or V trend 
     65      INTEGER                 , INTENT(in   ) ::   ktrd      ! tracer trend index 
     66      CHARACTER(len=3)        , INTENT(in   ) ::   ctype     ! momentum ('DYN') or tracers ('TRA') trends 
    6467      !! 
    6568      INTEGER ::   ji, jj   ! loop indices 
     
    123126      !!              momentum equations at every time step frequency nn_trd. 
    124127      !!---------------------------------------------------------------------- 
    125       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   ptrd3dx   ! Temperature or U trend  
    126       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   ptrd3dy   ! Salinity    or V trend 
    127       INTEGER,                          INTENT(in   ) ::   ktrd      ! momentum or tracer trend index 
    128       CHARACTER(len=3),                 INTENT(in   ) ::   ctype     ! momentum ('DYN') or tracers ('TRA') trends 
     128      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrd3dx   ! Temperature or U trend  
     129      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrd3dy   ! Salinity    or V trend 
     130      INTEGER,                    INTENT(in   ) ::   ktrd      ! momentum or tracer trend index 
     131      CHARACTER(len=3),           INTENT(in   ) ::   ctype     ! momentum ('DYN') or tracers ('TRA') trends 
    129132      !! 
    130133      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    253256      !! ** Purpose :  write dynamic trends in ocean.output  
    254257      !!---------------------------------------------------------------------- 
    255       ! 
    256258      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    257259      ! 
     
    261263      !!---------------------------------------------------------------------- 
    262264 
     265      IF( ln_3D_trd_t .AND. ln_3D_trd_d )   RETURN            ! do nothing if 3D output with IOM 
     266 
    263267      CALL wrk_alloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 
    264268 
     
    266270      ! ------------------- 
    267271 
    268       IF( MOD(kt,nn_trd) == 0 .OR. kt == nit000 .OR. kt == nitend ) THEN 
     272      IF( MOD( kt, nn_trd ) == 0 .OR. kt == nit000 .OR. kt == nitend ) THEN 
    269273 
    270274         ! I.1 Conversion potential energy - kinetic energy 
     
    449453      !!---------------------------------------------------------------------- 
    450454      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    451       !!---------------------------------------------------------------------- 
     455      ! 
     456      INTEGER  ::   jk   ! loop indices 
     457      REAL(wp), POINTER, DIMENSION(:,:,:)  ::   zwt, zws, ztrdt, ztrds   ! 3D workspace 
     458      !!---------------------------------------------------------------------- 
     459 
     460 
     461      IF( ln_3D_trd_t ) THEN      ! 3D output: treat the vertical diffusion trends (if iso) 
     462         ! 
     463         CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt, ztrds ) 
     464         ! 
     465         IF( ln_traldf_iso ) THEN      ! iso-neutral diffusion : re-compute the PURE vertical diffusive trend 
     466            !                                 !  zdf trends using now field (called after the swap) 
     467            zwt(:,:, 1 ) = 0._wp   ;   zws(:,:, 1 ) = 0._wp            ! vertical diffusive fluxes 
     468            zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp 
     469            DO jk = 2, jpk 
     470               zwt(:,:,jk) =   avt(:,:,jk) * ( tsn(:,:,jk-1,jp_tem) - tsn(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     471               zws(:,:,jk) = fsavs(:,:,jk) * ( tsn(:,:,jk-1,jp_sal) - tsn(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     472            END DO 
     473            ! 
     474            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
     475            DO jk = 1, jpkm1 
     476               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk) 
     477               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 
     478            END DO 
     479            CALL iom_put( "ttrd_zdfp", ztrdt )        ! PURE vertical diffusion (no isoneutral contribution) 
     480            CALL iom_put( "strd_zdfp", ztrds ) 
     481         ENDIF 
     482         ! 
     483         CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt, ztrds ) 
     484         ! 
     485         RETURN                     ! do nothing else if 3D output with IOM 
     486         ! 
     487      ENDIF 
     488 
    452489 
    453490      ! I. Tracers trends 
Note: See TracChangeset for help on using the changeset viewer.