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.
trcrad.F90 in tags/nemo_v1_08/NEMO/TOP_SRC/TRP – NEMO

source: tags/nemo_v1_08/NEMO/TOP_SRC/TRP/trcrad.F90 @ 9353

Last change on this file since 9353 was 349, checked in by opalod, 19 years ago

nemo_v1_update_031 : CT : change header names

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1MODULE trcrad
2   !!======================================================================
3   !!                       ***  MODULE  trcrad  ***
4   !! Ocean passive tracers:  correction of negative concentrations
5   !!======================================================================
6#if defined key_passivetrc
7   !!----------------------------------------------------------------------
8   !!   trc_rad    : correction of negative concentrations
9   !!----------------------------------------------------------------------
10   !! * Modules used
11   USE oce_trc             ! ocean dynamics and tracers variables
12   USE trc                 ! ocean passive tracers variables
13   USE lib_mpp
14   USE prtctl_trc          ! Print control for debbuging
15
16   IMPLICIT NONE
17   PRIVATE
18
19   !! * Routine accessibility
20   PUBLIC trc_rad        ! routine called by trcstp.F90
21   !! * Substitutions
22#  include "passivetrc_substitute.h90"
23   !!----------------------------------------------------------------------
24   !!   TOP 1.0 , LOCEAN-IPSL (2005)
25   !! $Header$
26   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
27   !!----------------------------------------------------------------------
28CONTAINS
29
30   SUBROUTINE trc_rad( kt )
31      !!----------------------------------------------------------------------
32      !!                  ***  ROUTINE trc_rad  ***
33      !!
34      !! ** Purpose : "crappy" routine to correct artificial negative
35      !!      concentrations due to isopycnal scheme
36      !!
37      !! ** Method  : Set negative concentrations to zero
38      !!              compute the corresponding mass added to the tracers
39      !!              and remove it when possible
40      !!
41      !! History :
42      !!   8.2  !  01-01  (O. Aumont & E. Kestenare)  Original code
43      !!   9.0  !  04-03  (C. Ethe)  free form F90
44      !!----------------------------------------------------------------------
45      !! * Arguments
46      INTEGER, INTENT( in ) ::   kt       ! ocean time-step index
47     
48      !! * Local declarations
49      INTEGER ::  ji, jj, jk, jn             ! dummy loop indices
50#if defined key_trc_pisces
51      REAL(wp) :: zvolk, trcorb, trmasb ,trcorn, trmasn 
52#endif
53      CHARACTER (len=22) :: charout
54      !!----------------------------------------------------------------------
55
56      IF( kt == nittrc000 ) THEN
57         IF(lwp) WRITE(numout,*)
58         IF(lwp) WRITE(numout,*) 'trc_rad : Correct artificial negative concentrations '
59         IF(lwp) WRITE(numout,*) '~~~~~~~ '
60      ENDIF
61
62
63#if defined key_trc_lobster1 || defined key_cfc
64      DO jn = 1, jptra
65         DO jk = 1, jpkm1
66            DO jj = 1, jpj
67               DO ji = 1, jpi
68                  trn(ji,jj,jk,jn) = MAX( 0. , trn(ji,jj,jk,jn) )
69                  trb(ji,jj,jk,jn) = MAX( 0. , trb(ji,jj,jk,jn) )
70               END DO
71            END DO
72         END DO
73      END DO
74     
75#elif defined key_trc_pisces
76      DO jn = 1, jptra
77         trcorb = 0.
78         trmasb = 0.
79         trcorn = 0.
80         trmasn = 0.
81         DO jk = 1, jpkm1
82            DO jj = 1, jpj
83               DO ji = 1, jpi
84                  zvolk = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) &
85#if defined key_off_degrad
86                  &  * facvol(ji,jj,jk) &
87#endif
88                  &  * tmask(ji,jj,jk) 
89
90                  trcorb = trcorb + MIN( 0., trb(ji,jj,jk,jn) )  * zvolk
91                  trcorn = trcorn + MIN( 0., trn(ji,jj,jk,jn) )  * zvolk
92
93                  trb(ji,jj,jk,jn) = MAX( 0. , trb(ji,jj,jk,jn) )
94                  trn(ji,jj,jk,jn) = MAX( 0. , trn(ji,jj,jk,jn) )
95
96                  trmasb = trmasb + trb(ji,jj,jk,jn) * zvolk
97                  trmasn = trmasn + trn(ji,jj,jk,jn) * zvolk
98               END DO
99            END DO
100         END DO
101
102         IF( lk_mpp ) THEN
103           CALL mpp_sum( trcorb )   ! sum over the global domain
104           CALL mpp_sum( trcorn )   ! sum over the global domain
105           CALL mpp_sum( trmasb )   ! sum over the global domain
106           CALL mpp_sum( trmasn )   ! sum over the global domain
107         ENDIF
108
109         IF( trcorb /= 0 ) THEN
110            DO jk = 1, jpkm1
111               DO jj = 1, jpj
112                  DO ji = 1, jpi
113                     trb(ji,jj,jk,jn) = MAX( 0. , trb(ji,jj,jk,jn) )
114                     trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn) * ( 1. + trcorb/trmasb ) * tmask(ji,jj,jk)
115                  END DO
116               END DO
117            END DO
118         ENDIF
119
120         IF( trcorn /= 0) THEN
121            DO jk = 1, jpkm1
122               DO jj = 1, jpj
123                  DO ji = 1, jpi
124                     trn(ji,jj,jk,jn) = MAX( 0. , trn(ji,jj,jk,jn) )
125                     trn(ji,jj,jk,jn) = trn(ji,jj,jk,jn) * ( 1. + trcorn/trmasn ) * tmask(ji,jj,jk)
126                  END DO
127               END DO
128            END DO
129         ENDIF
130
131      END DO
132     
133#endif
134
135      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
136         WRITE(charout, FMT="('rad')")
137         CALL prt_ctl_trc_info(charout)
138         CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm)
139      ENDIF
140
141     
142   END SUBROUTINE trc_rad
143
144#else
145   !!----------------------------------------------------------------------
146   !!   Dummy module :                      NO passive tracer
147   !!----------------------------------------------------------------------
148CONTAINS
149   SUBROUTINE trc_rad (kt )              ! Empty routine
150      INTEGER, INTENT(in) :: kt
151      WRITE(*,*) 'trc_rad: You should not have seen this print! error?', kt
152   END SUBROUTINE trc_rad
153#endif
154   
155   !!======================================================================
156END MODULE trcrad
Note: See TracBrowser for help on using the repository browser.