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 3327 for branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90 – NEMO

Ignore:
Timestamp:
2012-03-14T16:09:33+01:00 (12 years ago)
Author:
gm
Message:

Ediag branche: #927 correct a few problems and clean trdtra

File:
1 edited

Legend:

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

    r3326 r3327  
    2020   USE trd_oce        ! trends: ocean variables 
    2121   USE trdmod_trc     ! ocean passive mixed layer tracers trends  
    22    USE trdglo         ! trends:global domain averaged 
     22   USE trdglo         ! trends: global domain averaged 
     23   USE trdpen         ! trends: Potential ENergy 
    2324   USE trdmld         ! ocean active mixed layer tracers trends  
    2425   USE ldftra_oce     ! ocean active tracers lateral physics 
     
    9495      IF( ctype == 'TRA' .AND. ktra == jp_tem ) THEN   !==  Temperature trend  ==! 
    9596         ! 
    96          IF( PRESENT( ptra ) ) THEN                       ! advection: transform flux into trend 
    97             SELECT CASE( ktrd )      
    98             CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx )  
    99             CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty )  
    100             CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt  )  
    101             END SELECT 
    102          ELSE                                             ! other trends: 
     97         SELECT CASE( ktrd ) 
     98         !                            ! advection: transform the advective flux into a trend 
     99         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx )  
     100         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty )  
     101         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt  )  
     102         CASE( jptra_bbc,    &        ! qsr, bbc: on temperature only, send to trd_tra_mng 
     103            &  jptra_qsr )   ;   ztrds(:,:,:) = 0._wp 
     104                                 CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 
     105         CASE DEFAULT                 ! other trends: masked trends 
    103106            trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)              ! mask & store 
    104             IF( ktrd == jptra_bbc .OR. ktrd == jptra_qsr ) THEN   ! qsr, bbc: on temperature only 
    105                ztrds(:,:,:) = 0._wp 
    106                CALL trd_tra_mng( trdt, ztrds, ktrd, kt )               ! send to trd_tra_mng 
    107             ENDIF 
    108          ENDIF 
     107         END SELECT 
    109108         ! 
    110109      ENDIF 
     
    112111      IF( ctype == 'TRA' .AND. ktra == jp_sal ) THEN      !==  Salinity trends  ==! 
    113112         ! 
    114          IF( PRESENT( ptra ) ) THEN      ! advection: transform the advective flux into a trend 
    115             SELECT CASE( ktrd )          !            and send T & S trends to trd_tra_mng 
    116             CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'X'  , ztrds )  
    117                                     CALL trd_tra_mng( trdtx, ztrds, ktrd, kt   ) 
    118             CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Y'  , ztrds )  
    119                                 ;   CALL trd_tra_mng( trdty, ztrds, ktrd, kt   ) 
    120             CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Z'  , ztrds )  
    121                                     CALL trd_tra_mng( trdt , ztrds, ktrd, kt   ) 
    122             END SELECT 
    123          ELSE                            ! other trends: mask and send T & S trends to trd_tra_mng 
     113         SELECT CASE( ktrd ) 
     114         !                            ! advection: transform the advective flux into a trend 
     115         !                            !            and send T & S trends to trd_tra_mng 
     116         CASE( jptra_xad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'X'  , ztrds )  
     117                                  CALL trd_tra_mng( trdtx, ztrds, ktrd, kt   ) 
     118         CASE( jptra_yad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Y'  , ztrds )  
     119                              ;   CALL trd_tra_mng( trdty, ztrds, ktrd, kt   ) 
     120         CASE( jptra_zad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Z'  , ztrds )  
     121                                  CALL trd_tra_mng( trdt , ztrds, ktrd, kt   ) 
     122         CASE( jptra_zdfp )           ! diagnose the "PURE" Kz trend (here: just before the swap) 
     123            !                         ! iso-neutral diffusion case otherwise jptra_zdf is "PURE" 
     124            CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 
    124125            ! 
    125             IF( ktrd == jptra_zdfp ) THEN     ! diagnose the "PURE" Kz trend (here: just before the swap) 
    126                ! 
    127                IF( ln_traldf_iso ) THEN       ! iso-neutral diffusion only otherwise jptra_zdf is "PURE" 
    128                   ! 
    129                   CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 
    130                   ! 
    131                   zwt(:,:, 1 ) = 0._wp   ;   zws(:,:, 1 ) = 0._wp            ! vertical diffusive fluxes 
    132                   zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp 
    133                   DO jk = 2, jpk 
    134                      zwt(:,:,jk) =   avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
    135                      zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
    136                   END DO 
    137                   ! 
    138                   ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
    139                   DO jk = 1, jpkm1 
    140                      ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk) 
    141                      ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk)  
    142                   END DO 
    143                   CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt )   
    144                   ! 
    145                   CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 
    146                   ! 
    147                ENDIF 
    148                ! 
    149             ELSE                              !  
    150                ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
    151                CALL trd_tra_mng( trdt, ztrds, ktrd, kt )   
    152             ENDIF 
     126            zwt(:,:, 1 ) = 0._wp   ;   zws(:,:, 1 ) = 0._wp            ! vertical diffusive fluxes 
     127            zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp 
     128            DO jk = 2, jpk 
     129               zwt(:,:,jk) =   avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     130               zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     131            END DO 
     132            ! 
     133            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
     134            DO jk = 1, jpkm1 
     135               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk) 
     136               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk)  
     137            END DO 
     138            CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt )   
     139            ! 
     140            CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 
     141            ! 
     142         CASE DEFAULT                 ! other trends: mask and send T & S trends to trd_tra_mng 
     143            ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
     144            CALL trd_tra_mng( trdt, ztrds, ktrd, kt )   
     145         END SELECT 
    153146      ENDIF 
    154147 
    155148      IF( ctype == 'TRC' ) THEN                           !==  passive tracer trend  ==! 
    156149         ! 
    157          IF( PRESENT( ptra ) ) THEN                          ! advection: transform flux into a masked trend 
    158             SELECT CASE( ktrd ) 
    159             CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds )  
    160             CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds )  
    161             CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds )  
    162             END SELECT 
    163          ELSE                                                ! other trends: masked trend 
    164             ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
    165          END IF 
    166          !                                  
    167          CALL trd_mod_trc( ztrds, ktra, ktrd, kt )           ! send trend to trd_mod_trc 
     150         SELECT CASE( ktrd ) 
     151         !                            ! advection: transform the advective flux into a masked trend 
     152         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds )  
     153         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds )  
     154         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds )  
     155         CASE DEFAULT                 ! other trends: just masked  
     156                                 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
     157         END SELECT 
     158         !                            ! send trend to trd_mod_trc 
     159         CALL trd_mod_trc( ztrds, ktra, ktrd, kt )  
    168160         ! 
    169161      ENDIF 
     
    243235      !                   ! Integral Constraints Properties for tracers trends                                       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    244236      IF( ln_glo_trd )   CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt ) 
     237 
     238      !                   ! Potential ENergy trends 
     239      IF( ln_glo_trd )   CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt ) 
    245240 
    246241      !                   ! Mixed layer trends for active tracers 
Note: See TracChangeset for help on using the changeset viewer.