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 9987 for branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90 – NEMO

Ignore:
Timestamp:
2018-07-23T11:33:03+02:00 (6 years ago)
Author:
emmafiedler
Message:

Merge with GO6 FOAMv14 package branch r9288

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_obs_oper_update_icethick/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r7960 r9987  
    2626   USE ldfslp          ! iso-neutral slopes 
    2727   USE diaptr          ! poleward transport diagnostics 
     28   USE trd_oce         ! trends: ocean variables 
     29   USE trdtra          ! trends manager: tracers  
    2830   USE in_out_manager  ! I/O manager 
    2931   USE iom             ! I/O library 
    3032   USE phycst          ! physical constants 
    3133   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    32    USE wrk_nemo        ! Memory Allocation 
    3334   USE timing          ! Timing 
    3435 
     
    105106      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
    106107      INTEGER  ::  ikt 
    107       REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3   ! local scalars 
    108       REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4   !   -      - 
    109       REAL(wp) ::  zcoef0, zbtr, ztra            !   -      - 
    110       REAL(wp), POINTER, DIMENSION(:,:  ) ::  z2d 
    111       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zdkt, zdk1t, zdit, zdjt, ztfw  
     108      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3       ! local scalars 
     109      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4       !   -      - 
     110      REAL(wp) ::  zcoef0, zbtr                      !   -      - 
     111      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) ::  z2d 
     112      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  zdkt, zdk1t, zdit, zdjt, ztfw  
     113      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  ztrax, ztray, ztraz  
     114      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), TARGET ::  ztrax_T, ztray_T, ztraz_T 
    112115      !!---------------------------------------------------------------------- 
    113116      ! 
    114117      IF( nn_timing == 1 )  CALL timing_start('tra_ldf_iso') 
    115118      ! 
    116       CALL wrk_alloc( jpi, jpj,      z2d )  
    117       CALL wrk_alloc( jpi, jpj, jpk, zdit, zdjt, ztfw, zdkt, zdk1t )  
     119      ALLOCATE( z2d(1:jpi, 1:jpj))  
     120      ALLOCATE( zdit(1:jpi, 1:jpj, 1:jpk)) 
     121      ALLOCATE( zdjt(1:jpi, 1:jpj, 1:jpk))  
     122      ALLOCATE( ztfw(1:jpi, 1:jpj, 1:jpk))  
     123      ALLOCATE( zdkt(1:jpi, 1:jpj, 1:jpk))  
     124      ALLOCATE( zdk1t(1:jpi, 1:jpj, 1:jpk))  
     125      ALLOCATE( ztrax(1:jpi,1:jpj,1:jpk))  
     126      ALLOCATE( ztray(1:jpi,1:jpj,1:jpk)) 
     127      ALLOCATE( ztraz(1:jpi,1:jpj,1:jpk) )  
     128      IF( l_trdtra .and. cdtype == 'TRA' ) THEN 
     129         ALLOCATE( ztrax_T(1:jpi,1:jpj,1:jpk))  
     130         ALLOCATE( ztray_T(1:jpi,1:jpj,1:jpk))  
     131         ALLOCATE( ztraz_T(1:jpi,1:jpj,1:jpk))  
     132      ENDIF 
    118133      ! 
    119134 
     
    127142      DO jn = 1, kjpt                                            ! tracer loop 
    128143         !                                                       ! =========== 
     144         ztrax(:,:,:) = 0._wp ; ztray(:,:,:) = 0._wp ; ztraz(:,:,:) = 0._wp ;  
    129145         !                                                
    130146         !!---------------------------------------------------------------------- 
     
    226242               DO ji = fs_2, fs_jpim1   ! vector opt. 
    227243                  zbtr = 1.0 / ( e12t(ji,jj) * fse3t_n(ji,jj,jk) ) 
    228                   ztra = zbtr * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) 
    229                   pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 
     244                  ztrax(ji,jj,jk) = zbtr * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) ) 
     245                  ztray(ji,jj,jk) = zbtr * ( zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) 
    230246               END DO 
    231247            END DO 
     
    234250         !                                             ! =============== 
    235251         ! 
     252         pta(:,:,:,jn) = pta(:,:,:,jn) + ztrax(:,:,:) + ztray(:,:,:) 
     253         ! 
    236254         ! "Poleward" diffusive heat or salt transports (T-S case only) 
    237          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 
    238255            ! note sign is reversed to give down-gradient diffusive transports (#1043) 
    239             IF( jn == jp_tem)   htr_ldf(:) = ptr_sj( -zftv(:,:,:) ) 
    240             IF( jn == jp_sal)   str_ldf(:) = ptr_sj( -zftv(:,:,:) ) 
    241          ENDIF 
     256         IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'ldf', -zftv(:,:,:)  ) 
    242257  
    243258         IF( iom_use("udiff_heattr") .OR. iom_use("vdiff_heattr") ) THEN 
     
    314329               DO ji = fs_2, fs_jpim1   ! vector opt. 
    315330                  zbtr = 1.0 / ( e12t(ji,jj) * fse3t_n(ji,jj,jk) ) 
    316                   ztra = (  ztfw(ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * zbtr 
    317                   pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 
     331                  ztraz(ji,jj,jk) = (  ztfw(ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * zbtr 
    318332               END DO 
    319333            END DO 
    320334         END DO 
     335         pta(:,:,:,jn) = pta(:,:,:,jn) + ztraz(:,:,:) 
    321336         ! 
     337         IF( l_trdtra .AND. cdtype == "TRA" .AND. jn .eq. 1 )  THEN      ! save the temperature trends 
     338            ztrax_T(:,:,:) = ztrax(:,:,:) 
     339            ztray_T(:,:,:) = ztray(:,:,:) 
     340            ztraz_T(:,:,:) = ztraz(:,:,:) 
     341         ENDIF 
     342         IF( l_trdtrc .AND. cdtype == "TRC" )   THEN      ! save the horizontal component of diffusive trends for further diagnostics 
     343            CALL trd_tra( kt, cdtype, jn, jptra_iso_x, ztrax ) 
     344            CALL trd_tra( kt, cdtype, jn, jptra_iso_y, ztray )  
     345            CALL trd_tra( kt, cdtype, jn, jptra_iso_z1, ztraz )  ! This is the first part of the vertical component. 
     346         ENDIF 
    322347      END DO 
    323348      ! 
    324       CALL wrk_dealloc( jpi, jpj, z2d )  
    325       CALL wrk_dealloc( jpi, jpj, jpk, zdit, zdjt, ztfw, zdkt, zdk1t )  
     349      IF( l_trdtra .AND. cdtype == "TRA" )   THEN      ! save the horizontal component of diffusive trends for further diagnostics 
     350         CALL trd_tra( kt, cdtype, jp_tem, jptra_iso_x, ztrax_T ) 
     351         CALL trd_tra( kt, cdtype, jp_sal, jptra_iso_x, ztrax ) 
     352         CALL trd_tra( kt, cdtype, jp_tem, jptra_iso_y, ztray_T ) 
     353         CALL trd_tra( kt, cdtype, jp_sal, jptra_iso_y, ztray ) 
     354         CALL trd_tra( kt, cdtype, jp_tem, jptra_iso_z1, ztraz_T )  ! This is the first part of the vertical component 
     355         CALL trd_tra( kt, cdtype, jp_sal, jptra_iso_z1, ztraz )    ! 
     356      ENDIF 
     357      ! 
     358      DEALLOCATE( z2d )  
     359      DEALLOCATE( zdit)  
     360      DEALLOCATE( zdjt) 
     361      DEALLOCATE( ztfw)  
     362      DEALLOCATE( zdkt ) 
     363      DEALLOCATE( zdk1t )  
     364      DEALLOCATE( ztrax, ztray, ztraz )  
     365      IF( l_trdtra  .and. cdtype == 'TRA' ) DEALLOCATE( ztrax_T, ztray_T, ztraz_T )  
    326366      ! 
    327367      IF( nn_timing == 1 )  CALL timing_stop('tra_ldf_iso') 
Note: See TracChangeset for help on using the changeset viewer.