source: branches/NERC/dev_r5518_GO6_package_trdtrc/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc.F90 @ 8453

Last change on this file since 8453 was 8453, checked in by jpalmier, 4 years ago

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

File size: 11.0 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 trcnam_trp
17   USE trd_oce
18   USE trdtrc_oce       ! definition of main arrays used for trends computations
19   USE trdmxl_trc        ! Mixed layer trends diag.
20   USE iom               ! I/O library
21
22   IMPLICIT NONE
23   PRIVATE
24
25   INTERFACE trd_trc
26      MODULE PROCEDURE trd_trc_trp, trd_trc_bio
27   END INTERFACE
28
29   PUBLIC trd_trc
30
31   !! * Substitutions
32#  include "top_substitute.h90"
33   !!----------------------------------------------------------------------
34   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
35   !! $Id$
36   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
37   !!----------------------------------------------------------------------
38
39CONTAINS
40
41   SUBROUTINE trd_trc_trp( ptrtrd, kjn, ktrd, kt )
42      !!----------------------------------------------------------------------
43      !!                  ***  ROUTINE trd_trc  ***
44      !!----------------------------------------------------------------------
45      INTEGER, INTENT( in )  ::   kt                                  ! time step
46      INTEGER, INTENT( in )  ::   kjn                                 ! tracer index
47      INTEGER, INTENT( in )  ::   ktrd                                ! tracer trend index
48      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout )  ::   ptrtrd  ! Temperature or U trend
49      CHARACTER (len=20) :: cltra
50      !!----------------------------------------------------------------------
51
52      IF( kt == nittrc000 ) THEN
53!         IF(lwp)WRITE(numout,*)
54!         IF(lwp)WRITE(numout,*) 'trd_trc:'
55!         IF(lwp)WRITE(numout,*) '~~~~~~~~~~~~'
56      ENDIF
57
58      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
59      ! Mixed layer trends for passive tracers
60      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
61#if defined key_trdmxl_trc 
62      IF( lk_trdmxl_trc .AND. ln_trdtrc( kjn ) ) THEN
63         !
64         SELECT CASE ( ktrd )
65         CASE ( jptra_xad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_xad, '3D', kjn )
66         CASE ( jptra_yad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_yad, '3D', kjn )
67         CASE ( jptra_zad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zad, '3D', kjn )
68         CASE ( jptra_ldf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn )
69         CASE ( jptra_bbl     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_bbl, '3D', kjn )
70         CASE ( jptra_zdf     )
71            IF( ln_trcldf_iso ) THEN
72               CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn )
73            ELSE
74               CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zdf, '3D', kjn )
75            ENDIF
76         CASE ( jptra_dmp     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_dmp , '3D', kjn )
77         CASE ( jptra_nsr     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sbc , '2D', kjn )
78         CASE ( jptra_sms     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sms , '3D', kjn )
79         CASE ( jptra_radb    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radb, '3D', kjn )
80         CASE ( jptra_radn    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radn, '3D', kjn )
81         CASE ( jptra_atf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_atf , '3D', kjn )
82         END SELECT
83         !
84      END IF
85#endif
86
87      IF( lk_trdtrc .AND. ln_trdtrc( kjn ) ) THEN
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
106         SELECT CASE( ktrd )
107         CASE( jptra_xad  )       ;    WRITE (cltra,'("XAD_",4a)')
108                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn))
109                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) )
110         CASE( jptra_yad  )       ;    WRITE (cltra,'("YAD_",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(:,:,:) )
119         CASE( jptra_ldf  )       ;    WRITE (cltra,'("LDF_",4a)')
120                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn))
121                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) )
122         CASE( jptra_bbl  )       ;    WRITE (cltra,'("BBL_",4a)')
123                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn))
124                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) )
125         CASE( jptra_nsr  )       ;    WRITE (cltra,'("FOR_",4a)')
126                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn))
127                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) )
128         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(:,:,:) )
134         CASE( jptra_dmp  )       ;    WRITE (cltra,'("DMP_",4a)')
135                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn))
136                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) )
137         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 )
149         CASE( jptra_atf  )       ;    WRITE (cltra,'("ATF_",4a)')
150                           cltra = TRIM(cltra)//TRIM(ctrcnm(kjn))
151                           IF  (iom_use(cltra))  CALL iom_put( cltra,  ptrtrd(:,:,:) )
152         END SELECT
153       END IF
154         !
155      END IF
156
157   END SUBROUTINE trd_trc_trp
158
159   SUBROUTINE trd_trc_bio( ptrbio, ktrd, kt )
160      !!----------------------------------------------------------------------
161      !!                  ***  ROUTINE trd_bio  ***
162      !!----------------------------------------------------------------------
163
164      INTEGER, INTENT( in )  ::   kt                                  ! time step
165      INTEGER, INTENT( in )  ::   ktrd                                ! bio trend index
166      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout )  ::   ptrbio  ! Bio trend
167      !!----------------------------------------------------------------------
168
169#if defined key_trdmxl_trc 
170      CALL trd_mxl_bio_zint( ptrbio, ktrd ) ! Verticaly integrated biological trends
171#endif
172
173   END SUBROUTINE trd_trc_bio
174#else
175   !!----------------------------------------------------------------------
176   !!   Default option :                                       Empty module
177   !!----------------------------------------------------------------------
178
179   INTERFACE trd_trc
180      MODULE PROCEDURE trd_trc_trp, trd_trc_bio
181   END INTERFACE
182
183CONTAINS
184
185   SUBROUTINE trd_trc_trp( ptrtrd, kjn, ktrd, kt )
186      INTEGER               , INTENT( in )     ::   kt      ! time step
187      INTEGER               , INTENT( in )     ::   kjn     ! tracer index
188      INTEGER               , INTENT( in )     ::   ktrd    ! tracer trend index
189      REAL, DIMENSION(:,:,:), INTENT( inout )  ::   ptrtrd  ! Temperature or U trend
190      WRITE(*,*) 'trd_trc_trp : You should not have seen this print! error?', ptrtrd(1,1,1)
191      WRITE(*,*) '  "      "      : You should not have seen this print! error?', kjn
192      WRITE(*,*) '  "      "      : You should not have seen this print! error?', ktrd
193      WRITE(*,*) '  "      "      : You should not have seen this print! error?', kt
194   END SUBROUTINE trd_trc_trp
195
196   SUBROUTINE trd_trc_bio( ptrbio, ktrd, kt )
197      INTEGER               , INTENT( in )     ::   kt      ! time step
198      INTEGER               , INTENT( in )     ::   ktrd    ! tracer trend index
199      REAL, DIMENSION(:,:,:), INTENT( inout )  ::   ptrbio  ! Temperature or U trend
200      WRITE(*,*) 'trd_trc_trp : You should not have seen this print! error?', ptrbio(1,1,1)
201      WRITE(*,*) '  "      "      : You should not have seen this print! error?', ktrd
202      WRITE(*,*) '  "      "      : You should not have seen this print! error?', kt
203   END SUBROUTINE trd_trc_bio
204
205#endif
206   !!======================================================================
207END MODULE trdtrc
Note: See TracBrowser for help on using the repository browser.