source: NEMO/trunk/src/TOP/TRP/trdtrc.F90 @ 10376

Last change on this file since 10376 was 10096, checked in by cetlod, 2 years ago

v4.0 : bugfix on tracer trends diagnostics, see ticket #1933

  • Property svn:keywords set to Id
File size: 7.2 KB
Line 
1MODULE trdtrc
2   !!======================================================================
3   !!                       ***  MODULE  trdtrc  ***
4   !! Ocean diagnostics:  mixed layer passive tracer trends
5   !!======================================================================
6   !! History :  3.0  !  2010-07  (C. Ethe)  Original code (from trdtrc.F90)
7   !!----------------------------------------------------------------------
8#if   defined key_top && ( defined key_trdmxl_trc   ||   defined key_trdtrc )
9   !!----------------------------------------------------------------------
10   !!   'key_trdmxl_trc'                  mixed layer trend diagnostics
11   !!   'key_trdtrc'                      3D trend diagnostics
12   !!----------------------------------------------------------------------
13   !!   trdtrc      : passive tracer trends
14   !!----------------------------------------------------------------------
15   USE trc               ! tracer definitions (trn, trb, tra, etc.)
16   USE trd_oce
17   USE trdtrc_oce       ! definition of main arrays used for trends computations
18   USE trdmxl_trc        ! Mixed layer trends diag.
19   USE iom               ! I/O library
20
21   IMPLICIT NONE
22   PRIVATE
23
24   PUBLIC trd_trc
25
26   !!----------------------------------------------------------------------
27   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
28   !! $Id$
29   !! Software governed by the CeCILL license (see ./LICENSE)
30   !!----------------------------------------------------------------------
31
32CONTAINS
33
34   SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt )
35      !!----------------------------------------------------------------------
36      !!                  ***  ROUTINE trd_trc  ***
37      !!----------------------------------------------------------------------
38      INTEGER, INTENT( in )  ::   kt                                  ! time step
39      INTEGER, INTENT( in )  ::   kjn                                 ! tracer index
40      INTEGER, INTENT( in )  ::   ktrd                                ! tracer trend index
41      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout )  ::   ptrtrd  ! Temperature or U trend
42      CHARACTER (len=20) :: cltra
43      !!----------------------------------------------------------------------
44
45      IF( kt == nittrc000 ) THEN
46!         IF(lwp)WRITE(numout,*)
47!         IF(lwp)WRITE(numout,*) 'trd_trc:'
48!         IF(lwp)WRITE(numout,*) '~~~~~~~~~~~~'
49      ENDIF
50
51      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
52      ! Mixed layer trends for passive tracers
53      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
54#if defined key_trdmxl_trc 
55      IF( lk_trdmxl_trc .AND. ln_trdtrc( kjn ) ) THEN
56         !
57         SELECT CASE ( ktrd )
58         CASE ( jptra_xad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_xad, '3D', kjn )
59         CASE ( jptra_yad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_yad, '3D', kjn )
60         CASE ( jptra_zad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zad, '3D', kjn )
61         CASE ( jptra_ldf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn )
62         CASE ( jptra_bbl     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_bbl, '3D', kjn )
63         CASE ( jptra_zdf     )
64            IF( ln_trcldf_iso ) THEN
65               CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn )
66            ELSE
67               CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zdf, '3D', kjn )
68            ENDIF
69         CASE ( jptra_dmp     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_dmp , '3D', kjn )
70         CASE ( jptra_nsr     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sbc , '2D', kjn )
71         CASE ( jptra_sms     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sms , '3D', kjn )
72         CASE ( jptra_radb    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radb, '3D', kjn )
73         CASE ( jptra_radn    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radn, '3D', kjn )
74         CASE ( jptra_atf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_atf , '3D', kjn )
75         END SELECT
76         !
77      END IF
78#endif
79
80      IF( lk_trdtrc .AND. ln_trdtrc( kjn ) ) THEN
81         !
82         SELECT CASE( ktrd )
83         CASE( jptra_xad  )  ;  WRITE (cltra,'("XAD_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
84         CASE( jptra_yad  )  ;  WRITE (cltra,'("YAD_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
85         CASE( jptra_zad  )  ;  WRITE (cltra,'("ZAD_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
86         CASE( jptra_ldf  )  ;  WRITE (cltra,'("LDF_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
87         CASE( jptra_bbl  )  ;  WRITE (cltra,'("BBL_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
88         CASE( jptra_nsr  )  ;  WRITE (cltra,'("FOR_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
89         CASE( jptra_zdf  )  ;  WRITE (cltra,'("ZDF_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
90         CASE( jptra_zdfp )  ;  WRITE (cltra,'("ZDP_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
91         CASE( jptra_dmp  )  ;  WRITE (cltra,'("DMP_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
92         CASE( jptra_sms  )  ;  WRITE (cltra,'("SMS_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
93         CASE( jptra_tot  )  ;  WRITE (cltra,'("TOT_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
94         CASE( jptra_atf  )  ;  WRITE (cltra,'("ATF_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
95         CASE( jptra_radb )  ;  WRITE (cltra,'("RDB_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
96         CASE( jptra_radn )  ;  WRITE (cltra,'("RDN_",4a)')  ; cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) ; CALL iom_put( cltra,  ptrtrd(:,:,:) )
97         END SELECT
98         !
99      END IF
100
101   END SUBROUTINE trd_trc
102
103#else
104   !!----------------------------------------------------------------------
105   !!   Default option :                                       Empty module
106   !!----------------------------------------------------------------------
107
108   PUBLIC trd_trc
109
110CONTAINS
111
112   SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt )
113      INTEGER               , INTENT( in )     ::   kt      ! time step
114      INTEGER               , INTENT( in )     ::   kjn     ! tracer index
115      INTEGER               , INTENT( in )     ::   ktrd    ! tracer trend index
116      REAL, DIMENSION(:,:,:), INTENT( inout )  ::   ptrtrd  ! Temperature or U trend
117      WRITE(*,*) 'trd_trc : You should not have seen this print! error?', ptrtrd(1,1,1)
118      WRITE(*,*) '  "      "      : You should not have seen this print! error?', kjn
119      WRITE(*,*) '  "      "      : You should not have seen this print! error?', ktrd
120      WRITE(*,*) '  "      "      : You should not have seen this print! error?', kt
121   END SUBROUTINE trd_trc
122
123#endif
124   !!======================================================================
125END MODULE trdtrc
Note: See TracBrowser for help on using the repository browser.