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 8453 for branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO – NEMO

Ignore:
Timestamp:
2017-08-22T18:54:47+02:00 (7 years ago)
Author:
jpalmier
Message:

JPALM --22-08-2017-- repair trends for passive tracers

Location:
branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90

    r7179 r8453  
    5757   ! 
    5858   !                                                  !!!* Passive tracers trends indices (use if "key_top" defined) 
    59    INTEGER, PUBLIC, PARAMETER ::   jptra_sms  = 19     !: sources m. sinks 
    60    INTEGER, PUBLIC, PARAMETER ::   jptra_radn = 20     !: corr. trn<0 in trcrad 
    61    INTEGER, PUBLIC, PARAMETER ::   jptra_radb = 21     !: corr. trb<0 in trcrad (like atf) 
     59   INTEGER, PUBLIC, PARAMETER ::   jptra_sms  = 21     !: sources m. sinks 
     60   INTEGER, PUBLIC, PARAMETER ::   jptra_radn = 22     !: corr. trn<0 in trcrad 
     61   INTEGER, PUBLIC, PARAMETER ::   jptra_radb = 23     !: corr. trb<0 in trcrad (like atf) 
    6262   ! 
    6363   !                                                  !!!* Momentum trends indices 
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90

    r8104 r8453  
    2020   USE trd_oce        ! trends: ocean variables 
    2121   USE trdtrc         ! ocean passive mixed layer tracers trends  
     22   USE trc,           ONLY: tra    ! tracer definitions (trn, trb, tra, etc.)  
    2223   USE trdglo         ! trends: global domain averaged 
    2324   USE trdpen         ! trends: Potential ENergy 
     
    170171         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds )  
    171172         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds )  
     173         CASE( jptra_zdfp )           ! diagnose the "PURE" Kz trend (here: just before the swap) 
     174            !                         ! iso-neutral diffusion case otherwise 
     175            !                         jptra_zdf is "PURE" 
     176            CALL wrk_alloc( jpi, jpj, jpk, zws ) 
     177            ! 
     178            zws(:,:, 1 ) = 0._wp                        ! vertical diffusive fluxes 
     179            zws(:,:,jpk) = 0._wp   
     180            DO jk = 2, jpk 
     181               zws(:,:,jk) = avt(:,:,jk) * (tra(:,:,jk-1,ktra) - tra(:,:,jk,ktra) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     182            END DO 
     183            ! 
     184            ztrds(:,:,jpk) = 0._wp    
     185            DO jk = 1, jpkm1 
     186               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 
     187            END DO 
     188            CALL wrk_dealloc( jpi, jpj, jpk, zws ) 
     189            ! 
    172190         CASE DEFAULT                 ! other trends: just masked  
    173191                                 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_update.F90

    r8442 r8453  
    9191                                   xxi 
    9292      USE trc,               ONLY: med_diag, tra 
     93      USE trd_oce,           ONLY: jptra_sms  
     94      USE trdtrc 
    9395 
    9496   !!* Substitution 
     
    119121      !! temporary variables 
    120122      REAL(wp) :: fq0 
     123 
     124      !! trend temporary array: 
     125      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrmed 
    121126 
    122127      !!========================================================== 
     
    734739      ENDDO 
    735740 
     741      !! MEDUSA SMS trends: 
     742      IF( l_trdtrc ) THEN 
     743          CALL wrk_alloc( jpi, jpj, jpk, ztrmed ) 
     744          DO jn = jp_msa0, jp_msa1 
     745            ztrmed(:,:,:) = tra(:,:,:,jn) 
     746            CALL trd_trc( ztrmed, jn, jptra_sms, kt )   ! save trends 
     747          END DO 
     748          CALL wrk_dealloc( jpi, jpj, jpk, ztrmed ) 
     749      END IF 
     750 
    736751      DO jj = 2,jpjm1 
    737752         DO ji = 2,jpim1 
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r6487 r8453  
    2727   !!---------------------------------------------------------------------- 
    2828   USE oce_trc         ! ocean dynamics and tracers variables 
     29   USE domvvl          ! variable volume   
    2930   USE trc             ! ocean passive tracers variables 
    3031   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3132   USE prtctl_trc      ! Print control for debbuging 
     33   USE trcnam_trp      ! passive tracers transport namelist variables 
    3234   USE trd_oce 
    3335   USE trdtra 
     
    4547   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   r2dt 
    4648 
     49   !! * Substitutions 
     50#  include "domzgr_substitute.h90" 
    4751   !!---------------------------------------------------------------------- 
    4852   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    124128      IF( l_trdtrc )  THEN 
    125129         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrdt )  !* store now fields before applying the Asselin filter 
    126          ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     130         ztrdt(:,:,jpk,:) = 0._wp 
     131         IF( ln_trcldf_iso ) THEN                       ! diagnose the "pure" Kz diffusive trend  
     132            CALL trd_tra( kt, 'TRC', jn, jptra_zdfp, ztrdt ) 
     133         ENDIF 
     134         ! total trend for the non-time-filtered variables. 
     135         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn 
     136         ! cancel from tsn terms 
     137         IF( lk_vvl ) THEN 
     138            DO jn = 1, jptra 
     139               DO jk = 1, jpkm1 
     140                  zfact = 1.0 / rdttrc(jk) 
     141                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - & 
     142                                       trn(:,:,jk,jn) ) * zfact 
     143               END DO 
     144            END DO 
     145         ELSE 
     146            DO jn = 1, jptra 
     147               DO jk = 1, jpkm1 
     148                  zfact = 1.0 / rdttrc(jk) 
     149                  ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 
     150               END DO 
     151            END DO 
     152         END IF 
     153         CALL trd_tra( kt, 'TRC', jn, jptra_tot, ztrdt ) 
     154         IF( .NOT.lk_vvl )  THEN 
     155            ! Store now fields before applying the Asselin filter  
     156            ! in order to calculate Asselin filter trend later. 
     157            ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     158         ENDIF 
    127159      ENDIF 
    128160      ! Leap-Frog + Asselin filter time stepping 
     
    134166            END DO 
    135167         END DO 
     168         IF (l_trdtrc.AND.lk_vvl) THEN      ! Zero Asselin filter contribution 
     169                                            ! must be explicitly written out since for vvl 
     170                                            ! Asselin filter is output by 
     171                                            ! tra_nxt_vvl that is not called on 
     172                                            ! this time step 
     173            ztrdt(:,:,:,:) = 0._wp 
     174            CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
     175         END IF 
     176 
    136177         !                                               
    137178      ELSE 
     
    144185 
    145186      ! trends computation 
    146       IF( l_trdtrc ) THEN                                      ! trends 
     187      IF( l_trdtrc.AND..NOT.lk_vvl) THEN                                      ! trends 
    147188         DO jn = 1, jptra 
    148189            DO jk = 1, jpkm1 
    149190               zfact = 1.e0 / r2dt(jk)   
    150191               ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
    151                CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    152             END DO 
     192            END DO 
     193            CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) 
    153194         END DO 
    154          CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )  
    155195      END IF 
     196      ! 
     197      IF( l_trdtrc)  CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )  
    156198      ! 
    157199      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90

    r6486 r8453  
    1515   !!---------------------------------------------------------------------- 
    1616   USE oce_trc         ! ocean dynamics and active tracers 
     17   USE domvvl          ! variable volume        
    1718   USE trc             ! ocean passive tracers variables 
    1819   USE trcnam_trp      ! passive tracers transport namelist variables 
     
    9899 
    99100      IF( l_trdtrc )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    100          DO jn = 1, jptra 
    101             DO jk = 1, jpkm1 
    102                ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dt(jk) ) - ztrtrd(:,:,jk,jn) 
     101         !! JPALM -- 18-08-2017 -- vvl case, do as done by G Nurser in trazdf  
     102         IF( lk_vvl ) THEN 
     103            DO jn = 1, jptra 
     104               DO jk = 1, jpkm1 
     105                  ztrtrd(:,:,jk) = ( ( tra(:,:,jk,jn)*fse3t_a(:,:,jk) - & 
     106                                        trn(:,:,jk,jn)*fse3t_b(:,:,jk) ) & 
     107                                      / (fse3t_n(:,:,jk)*r2dtra(jk)) ) - ztrtrd(:,:,jk) 
     108               END DO 
    103109            END DO 
    104             CALL trd_tra( kt, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) ) 
    105          END DO 
     110         ELSE 
     111            DO jn = 1, jptra 
     112               DO jk = 1, jpkm1 
     113                  ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dt(jk) ) - ztrtrd(:,:,jk,jn) 
     114               END DO 
     115               CALL trd_tra( kt, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) ) 
     116            END DO 
     117         ENDIF  
    106118         CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrtrd ) 
    107119      ENDIF 
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc.F90

    r6486 r8453  
    8686 
    8787      IF( lk_trdtrc .AND. ln_trdtrc( kjn ) ) THEN 
    88          ! 
     88      !! JPALM -- 17-08-2017 -- modif following trd_tra_iom as suggested by Georges 
     89      !!                     -- add jptra_tot; jptra_totad; jptra_zdfp 
     90      !!                     -- shange to output trends every 2 time-step, except tot. 
     91      !!                     -- move cltra and iomput inside the select case 
     92      !!                     So if an non-wanted case arrives here it will not go 
     93      !!                     through cltra (without value) and break iomput. 
     94      !!                     -- Add iom_use in prevision of not using All trends 
     95      !!                     for All passive tracers (will create a HUGE 3D file otherwise -- 
     96      !!                     might be interested in very few of them : SMS and TOT probably) 
     97         ! 
     98         SELECT CASE( ktrd ) 
     99         !! tot - output every time-step: 
     100         CASE( jptra_tot  )       ;    WRITE (cltra,'("TOT_",4a)') 
     101                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     102                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     103         END SELECT 
     104         ! 
     105       IF( MOD( kt, 2 ) == 0 ) THEN 
    89106         SELECT CASE( ktrd ) 
    90107         CASE( jptra_xad  )       ;    WRITE (cltra,'("XAD_",4a)') 
     108                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     109                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    91110         CASE( jptra_yad  )       ;    WRITE (cltra,'("YAD_",4a)') 
    92          CASE( jptra_zad  )       ;    WRITE (cltra,'("ZAD_",4a)') 
     111                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     112                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     113         CASE( jptra_zad  )       ;    WRITE (cltra,'("ZAD_",4a)')      !! care vvl case 
     114                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     115                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     116         CASE( jptra_totad  )     ;    WRITE (cltra,'("TAD_",4a)')      !! total adv 
     117                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     118                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    93119         CASE( jptra_ldf  )       ;    WRITE (cltra,'("LDF_",4a)') 
     120                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     121                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    94122         CASE( jptra_bbl  )       ;    WRITE (cltra,'("BBL_",4a)') 
     123                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     124                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    95125         CASE( jptra_nsr  )       ;    WRITE (cltra,'("FOR_",4a)') 
     126                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     127                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    96128         CASE( jptra_zdf  )       ;    WRITE (cltra,'("ZDF_",4a)') 
     129                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     130                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     131         CASE( jptra_zdfp )       ;    WRITE (cltra,'("ZDP_",4a)') 
     132                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     133                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    97134         CASE( jptra_dmp  )       ;    WRITE (cltra,'("DMP_",4a)') 
     135                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     136                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
    98137         CASE( jptra_sms  )       ;    WRITE (cltra,'("SMS_",4a)') 
     138                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     139                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     140         CASE( jptra_radb )       ;    WRITE (cltra,'("RDB_",4a)') 
     141                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     142                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     143         CASE( jptra_radn )       ;    WRITE (cltra,'("RDN_",4a)') 
     144                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     145                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     146         END SELECT 
     147       ELSE IF( MOD( kt, 2 ) == 1 ) THEN 
     148         SELECT CASE( ktrd ) 
    99149         CASE( jptra_atf  )       ;    WRITE (cltra,'("ATF_",4a)') 
    100          CASE( jptra_radb )       ;    WRITE (cltra,'("RDB_",4a)') 
    101          CASE( jptra_radn )       ;    WRITE (cltra,'("RDN_",4a)') 
    102          END SELECT 
    103                                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
    104                                           CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     150                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 
     151                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) ) 
     152         END SELECT 
     153       END IF 
    105154         ! 
    106155      END IF 
  • branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/trcnam.F90

    r8442 r8453  
    6060      !!                ( (PISCES, CFC, MY_TRC, MEDUSA, IDTRA, Age ) 
    6161      !!--------------------------------------------------------------------- 
    62       INTEGER  ::   jn, jk                     ! dummy loop indice 
     62      INTEGER ::  ierr 
     63#if defined key_trdmxl_trc  || defined key_trdtrc 
     64      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
     65         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 
     66         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 
     67#endif 
     68 
     69      INTEGER  ::   jn, jk              ! dummy loop indice 
     70      INTEGER  ::   ios                 ! Local integer output status for namelist read 
     71      !!--------------------------------------------------------------------- 
     72 
     73 
    6374      !                                        !   Parameters of the run  
    6475      IF( .NOT. lk_offline ) CALL trc_nam_run 
     
    6879       
    6980      !                                        !   Parameters of additional diagnostics 
    70       CALL trc_nam_dia 
     81      IF( .NOT. lk_offline ) CALL trc_nam_dia 
    7182 
    7283      !                                        !   namelist of transport 
     
    171182      ENDIF 
    172183 
    173       IF( lk_c14b     ) THEN   ;   CALL trc_nam_c14b         ! C14 bomb     tracers 
    174       ELSE                    ;   IF(lwp) WRITE(numout,*) '          C14 not used' 
     184      IF( lk_c14b    ) THEN  ;   CALL trc_nam_c14b         ! C14 bomb     tracers 
     185      ELSE                   ;   IF(lwp) WRITE(numout,*) '          C14 not used' 
    175186      ENDIF 
    176187 
Note: See TracChangeset for help on using the changeset viewer.