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.
trcdta.F in trunk/NEMO/TOP_SRC – NEMO

source: trunk/NEMO/TOP_SRC/trcdta.F @ 247

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

CL : Add CVS Header and CeCILL licence information

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.1 KB
Line 
1       SUBROUTINE trcdta( kt )
2!!----------------------------------------------------------------------
3!!                   ***  ROUTINE trcdta  ***
4!!
5!! ** Purpose :   Reads passive tracer data (Levitus monthly data)
6!!
7!! ** Method  :   Read on unit numtr the interpolated tracer concentra-
8!!      tion onto the global grid. Data begin at january.
9!!      The value is centered at the middle of month.
10!!      In the opa model, kt=1 agree with january 1.
11!!      At each time step, a linear interpolation is applied between
12!!      two monthly values.
13!!
14!! History :
15!!   8.2  !  02-04  (O. Aumont)  Original code
16!!   9.0  !  04-03  (C. Ethe)   
17!!----------------------------------------------------------------------
18   !!----------------------------------------------------------------------
19   !!  TOP 1.0 , LOCEAN-IPSL (2005)
20   !! $Header$
21   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
22   !!----------------------------------------------------------------------
23!! * Modules used
24      USE ioipsl
25      USE oce_trc
26      USE trc 
27      USE par_sms
28      USE lib_print
29!! * Arguments
30      INTEGER  kt 
31#if  defined key_passivetrc && defined key_trc_dta 
32!! * Local declarations
33      INTEGER  jn, jl 
34 
35      INTEGER jpmois, jpf
36      PARAMETER (jpmois = 12, jpf = 1 )
37
38      INTEGER imois, iman 
39      INTEGER iyy, imm, idd, i15, itime
40      CHARACTER*38 clname(jptra)
41      INTEGER istep(jpmois)
42      REAL  zlon(jpi, jpj), zlat(jpi, jpj)
43      REAL  zlev(jpk)
44      INTEGER ipi,ipj,ipk
45      REAL zdate0, zxy
46!!----------------------------------------------------------------------
47
48      DO jn = 1, jptra
49
50         IF( lutini(jn) ) THEN
51
52            IF ( kt == nit000 ) THEN
53!! 3D tracer data
54               IF(lwp)WRITE(numout,*)
55               IF(lwp)WRITE(numout,*) ' trcdta: reading tracer' 
56               IF(lwp)WRITE(numout,*) ' data file ', jn
57               IF(lwp)WRITE(numout,*)
58               nlectr(jn) = 0
59            ENDIF
60! Initialization
61            iman = jpmois
62            iyy  = ndastp/10000
63            imm  = (ndastp - iyy*10000)/100
64            idd  = (ndastp - iyy*10000 - imm*100)
65            i15  = idd/16
66            imois = imm + i15 - 1
67            IF( imois == 0 ) imois = iman
68            itime = jpmois
69            ipi = jpi
70            ipj = jpj
71            ipk = jpk
72
73! First call kt=nit000
74            IF ( kt == nit000 .AND. nlectr(jn) == 0 ) THEN
75               ntrc1(jn) = 0
76               IF(lwp) THEN
77                  WRITE(numout,*)
78                  WRITE(numout,*) ' Tracer monthly fields' 
79                  WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~'
80                  WRITE(numout,*) ' NetCDF FORMAT'
81                  WRITE(numout,*)
82               ENDIF
83
84! open file
85               clname(jn) = 'LEVITUS_'//ctrcnm(jn)
86               CALL flinopen(TRIM(clname(jn)),mig(1),nlci,mjg(1),nlcj,
87     &                       .FALSE.,ipi,ipj,ipk,zlon,zlat,zlev,itime,
88     &                        istep,zdate0,rdt,numtr(jn))
89
90! title, dimensions and tests
91               IF( itime /= jpmois ) THEN
92                  IF(lwp) THEN
93                     WRITE(numout,*) ' '
94                     WRITE(numout,*) 'problem with time coordinates'
95                     WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois
96                  ENDIF
97                  STOP 'trc_dta'
98               ENDIF
99               IF( ipi /= jpidta .AND.  ipj /= jpjdta 
100     &                           .AND. ipk /= jpk ) THEN
101                  IF(lwp) THEN
102                     WRITE(numout,*) ' '
103                     WRITE(numout,*) 'problem with dimensions'
104                     WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta
105                     WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta
106                     WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk
107                  ENDIF
108                  STOP 'trc_dta'
109               ENDIF
110               IF(lwp)WRITE(numout,*) itime,istep,zdate0,rdt,numtr(jn)
111               trdta(:,:,:,jn) = 0.
112
113            ENDIF
114
115
116! Read montly file
117            IF( ( kt == nit000 .AND. nlectr(jn) == 0) 
118     &           .OR. imois /= ntrc1(jn) ) THEN
119               nlectr(jn) = 1
120! Calendar computation
121
122! ntrc1 number of the first file record used in the simulation
123! ntrc2 number of the last  file record
124               ntrc1(jn) = imois
125               ntrc2(jn) = ntrc1(jn) + 1
126               ntrc1(jn) = MOD( ntrc1(jn), iman )
127               IF ( ntrc1(jn) == 0 ) ntrc1(jn) = iman
128               ntrc2(jn) = MOD( ntrc2(jn), iman )
129               IF ( ntrc2(jn) == 0 ) ntrc2(jn) = iman
130               IF(lwp) WRITE(numout,*) 'first record file used ntrc1 ', 
131     &                                 ntrc1(jn)
132               IF(lwp) WRITE(numout,*) 'last  record file used ntrc2 ', 
133     &                                 ntrc2(jn)
134
135! Read montly passive tracer data Levitus
136
137               CALL flinget( numtr(jn),ctrcnm(jn),jpidta,jpjdta,jpk,
138     &              jpmois,ntrc1(jn),ntrc1(jn),mig(1),nlci,mjg(1),nlcj,
139     &              tracdta(1:nlci,1:nlcj,1:jpk,jn,1) )
140
141               CALL flinget( numtr(jn),ctrcnm(jn),jpidta,jpjdta,jpk,
142     &              jpmois,ntrc2(jn),ntrc2(jn),mig(1),nlci,mjg(1),nlcj,
143     &              tracdta(1:nlci,1:nlcj,1:jpk,jn,2) )
144
145               IF(lwp) THEN
146                  WRITE(numout,*)
147                  WRITE(numout,*) ' read tracer data ', ctrcnm(jn),' ok'
148                  WRITE(numout,*)
149               ENDIF
150! Apply Mask
151               DO jl = 1, 2
152                  tracdta(:,:,:  ,jn,jl) = tracdta(:,:,:,jn,jl) 
153     &                                   * tmask(:,:,:)
154                  tracdta(:,:,jpk,jn,jl) = 0.
155               END DO
156
157            ENDIF
158
159            IF(lwp) THEN
160               WRITE(numout,*) ctrcnm(jn), 'Levitus month ', ntrc1(jn),
161     $             ntrc2(jn)
162               WRITE(numout,*)
163               WRITE(numout,*) ' Levitus month = ', ntrc1(jn),
164     $             '  level = 1'
165               CALL prihre( tracdta(1,1,1,jn,1), jpi, jpj, 1, jpi, 20, 1
166     $             ,jpj, 20, 1., numout )
167               WRITE(numout,*) ' Levitus month = ', ntrc1(jn),
168     $             '  level = ',jpk/2
169               CALL prihre( tracdta(1,1,jpk/2,jn,1), jpi, jpj, 1, jpi,
170     $             20, 1, jpj, 20, 1., numout )
171               WRITE(numout,*) ' Levitus month = ',ntrc1(jn)
172     $             ,'  level = ',jpkm1
173               CALL prihre( tracdta(1,1,jpkm1,jn,1), jpi, jpj, 1, jpi,
174     $             20, 1, jpj, 20, 1., numout )
175            ENDIF 
176
177! At every time step compute temperature data
178
179            zxy = FLOAT( idd + 15 - 30 * i15 ) / 30.
180            trdta(:,:,:,jn)= ( ( 1. - zxy ) * tracdta(:,:,:,jn,1) 
181     &                        +       zxy   * tracdta(:,:,:,jn,2) )
182   
183            IF( jn == jpno3) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 7.6E-6
184            IF( jn == jpdic) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6
185            IF( jn == jptal) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6
186            IF( jn == jpoxy) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 44.6E-6
187            IF( jn == jpsil) trdta(:,:,:,jn) = trdta(:,:,:,jn) * 1.E-6
188
189
190         ENDIF
191
192      END DO
193#else
194!      No passive tracer data read
195#endif
196       RETURN
197
198       END SUBROUTINE trcdta
199
Note: See TracBrowser for help on using the repository browser.