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.
flx_bulk_daily.h90 in tags/nemo_dev_x3/NEMO/OPA_SRC/SBC – NEMO

source: tags/nemo_dev_x3/NEMO/OPA_SRC/SBC/flx_bulk_daily.h90 @ 105

Last change on this file since 105 was 105, checked in by cvs2svn, 20 years ago

This commit was manufactured by cvs2svn to create tag 'nemo_dev_x3'.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 10.6 KB
Line 
1   !!----------------------------------------------------------------------
2   !!                    ***  flx_bulk_daily  ***
3   !!----------------------------------------------------------------------
4
5   !!----------------------------------------------------------------------
6   !!   bulk          : reading
7   !!----------------------------------------------------------------------
8   !! * Modules used     C A U T I O N  already defined in flxmod.F90
9
10   !! * Module variables
11   
12   INTEGER ::          &
13      numfl1, numfl2,  &  ! logical units for surface fluxes data
14      numfl3,          &  !
15      nflx1, nflx2,    &  !  first and second record used
16      nflx11, nflx12 , &  ! ???
17      ndayflx
18
19   REAL(wp), DIMENSION(jpi,jpj,2,7) ::   &
20      flxdta              ! 2 consecutive set of CLIO/CMAP monthly fluxes
21   !!----------------------------------------------------------------------
22   !!   OPA 9.0 , LODYC-IPSL  (2003)
23   !!----------------------------------------------------------------------
24
25CONTAINS
26
27   SUBROUTINE flx( kt )
28      !!---------------------------------------------------------------------
29      !!                    ***  ROUTINE flx  ***
30      !!       
31      !! ** Purpose :   provide the thermohaline fluxes (heat and freshwater)
32      !!      to the ocean at each time step.
33      !!
34      !! ** Method :
35      !!       ORCA FORCED VERSION WITH :
36      !!       Daily climatological NCEP temperature
37      !!       monthly climatological CLIO winds, humidity and clouds
38      !!       monthly climatological CMAP precipitation
39      !!       Read several AGCM daily and monthly fluxes file
40      !!             temperature at 2m   tatm   (K)
41      !!             relative humidite   hatm   (%)
42      !!             wind speed          vatm   (m/s)
43      !!             monthly precip      watm   (kg/m2/day)  from Xie/Arkin
44      !!             clouds              catm   (%)
45      !!
46      !! caution : now, in the opa global model, the net upward water flux is
47      !! -------   with mm/day unit.
48      !!
49      !! History :
50      !!        !  91-03  (O. Marti and Ph Dandin)  Original code
51      !!        !  92-07  (M. Imbard)
52      !!        !  96-11  (E. Guilyardi)  Daily AGCM input files
53      !!        !  99-11  (M. Imbard)  NetCDF FORMAT with ioipsl
54      !!        !  00-05  (K. Rodgers) Daily Netcdf
55      !!   8.5  !  02-09  (C. Ethe and G. Madec)  F90: Free form and MODULE
56      !!----------------------------------------------------------------------
57      !! * modules used
58      USE ioipsl          ! NetCDF IPSL library
59      USE blk_oce         ! bulk variable
60      USE bulk            ! bulk module
61
62      !! * arguments
63      INTEGER, INTENT( in  ) ::   kt ! ocean time step
64
65      !! * Local declarations     
66      INTEGER , PARAMETER :: jpday  = 365, jpmois = 12
67      INTEGER  ::   i15,iday, idy
68      INTEGER  ::   ipi,ipj,ipk
69      INTEGER  ::   iman,imois,imois2
70      INTEGER, DIMENSION(jpday) :: istep_n
71      INTEGER, DIMENSION(jpmois):: istep_c, istep_x
72      INTEGER  ::   itime
73      REAL(wp) ::   zdate0, zxy
74      REAL(wp), DIMENSION(jpi,jpj) ::   zlon, zlat   ! ???
75      REAL(wp), DIMENSION(jpk) ::   zlev           ! ???
76      CHARACTER(len=45)  ::  &
77         clname_n = 'NCEP_1d_0101_0112_tair.nc',   &
78         clname_c = 'CLIO_1m_0101_0112_flx.nc' ,   &
79         clname_x = 'CMAP_1m_0101_0112_rain.nc'
80      !!---------------------------------------------------------------------
81
82
83      ! Initialization
84      ! --------------
85
86      i15 = INT(2*FLOAT(nday)/(FLOAT(nobis(nmonth))+0.5))
87      itime = jpday
88      ipi = jpiglo
89      ipj = jpjglo
90      ipk = jpk
91      idy = 365
92      IF(nleapy == 1) idy = 366
93
94      iman = 12
95      imois = nmonth + i15 - 1
96      IF (imois == 0) imois = iman
97      imois2 = nmonth
98
99
100      ! 1. first call kt = nit000
101      ! -----------------------
102     
103      IF( kt == nit000 ) THEN
104         
105         nflx1 = 0
106         nflx11 = 0
107         
108         IF(lwp) THEN
109            WRITE(numout,*) ' '
110            WRITE(numout,*) ' **** Routine flx.forced.ncep_clio_xie.h90'
111            WRITE(numout,*) ' **** global NCEP flx  daily fields '
112            WRITE(numout,*) ' **** global CLIO flx  monthly fields '
113            WRITE(numout,*) ' **** global XIE  flx  monthly fields '
114            WRITE(numout,*) ' --------------------------------'
115            WRITE(numout,*) ' NetCDF FORMAT'
116            WRITE(numout,*) ' '
117         ENDIF
118         
119         ! open NCEP file
120          CALL flinopen(clname_n,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj &
121             ,ipk,zlon,zlat,zlev,itime,istep_n,zdate0,rdt,numfl1)
122
123          IF( itime /= jpday .AND. itime /= jpday+1 ) THEN
124             IF(lwp) THEN
125                WRITE(numout,*) ' '
126                WRITE(numout,*) 'problem with time coordinates '
127                WRITE(numout,*) ' itime ',itime,' jpday ',jpday
128                WRITE(numout,*) ' Check in file', clname_n
129             ENDIF
130             STOP 'flx.forced.ncep_clio_xie.h'
131          ENDIF
132          IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN
133          IF(lwp) THEN
134             WRITE(numout,*) ' '
135             WRITE(numout,*) 'problem with dimensions'
136             WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta
137             WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta
138             WRITE(numout,*) ' ipk ',ipk,' =? 1'
139             WRITE(numout,*) ' Check in file', clname_n
140          ENDIF
141          STOP 'flx.forced.ncep_clio_xie.h'
142       ENDIF
143
144       ! open CLIO file
145       CALL flinopen(clname_c,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj &
146          ,ipk,zlon,zlat,zlev,itime,istep_c,zdate0,rdt,numfl2)
147       
148       IF( itime /= jpmois ) THEN
149          IF(lwp) THEN
150             WRITE(numout,*) ' '
151             WRITE(numout,*) 'problem with time coordinates '
152             WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois
153             WRITE(numout,*) ' Check in file', clname_c
154          ENDIF
155          STOP 'flx.forced.ncep_clio_xie.h'
156       ENDIF
157       IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN
158          IF(lwp) THEN
159             WRITE(numout,*) ' '
160             WRITE(numout,*) 'problem with dimensions'
161             WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta
162             WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta
163             WRITE(numout,*) ' ipk ',ipk,' =? 1'
164             WRITE(numout,*) ' Check in file', clname_c
165          ENDIF
166          STOP 'flx.forced.ncep_clio_xie.h'
167       ENDIF
168       
169       ! open CMAP FILE
170       CALL flinopen(clname_x,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj &
171          ,ipk,zlon,zlat,zlev,itime,istep_x,zdate0,rdt,numfl3)
172
173       IF( itime /= jpmois ) THEN
174          IF(lwp) THEN
175             WRITE(numout,*) ' '
176             WRITE(numout,*) 'problem with time coordinates '
177             WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois
178             WRITE(numout,*) ' Check in file', clname_x
179          ENDIF
180          STOP 'flx.forced.ncep_clio_xie.h'
181       ENDIF
182       IF( ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1 ) THEN
183          IF(lwp) THEN
184             WRITE(numout,*) ' '
185             WRITE(numout,*) 'problem with dimensions'
186             WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta
187             WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta
188             WRITE(numout,*) ' ipk ',ipk,' =? 1'
189             WRITE(numout,*) ' Check in file', clname_x
190          ENDIF
191          STOP 'flx.forced.ncep_clio_xie.h'
192       ENDIF
193
194    ENDIF
195
196
197    ! 2. Read daily DATA Temperature from NCEP
198    ! ---------------------------------------
199
200    IF( ndayflx /= nday ) THEN
201
202       ndayflx = nday
203       iday    = nday_year
204
205       ! read T 2m (Caution in K)
206       CALL flinget(numfl1,'air',jpidta,jpjdta,1,jpday,iday, &
207          iday,mig(1),nlci,mjg(1),nlcj,tatm(1:nlci,1:nlcj))
208
209       IF(lwp) WRITE (numout,*)' Lecture daily flx record OK :',iday
210       IF(lwp) WRITE (numout,*)' '
211
212       ! conversion of temperature Kelvin --> Celsius  [rt0=273.15]
213       tatm(:,:) = ( tatm(:,:) - rt0 )
214         
215    ENDIF
216
217
218    !  3. Read monthly data from CLIO and From Xie
219    !  -------------------------------------------
220
221      IF( kt == nit000 .OR. imois /= nflx1 ) THEN
222
223         ! calendar computation
224
225         ! nflx1 number of the first file record used in the simulation
226         ! flx2 number of the last  file record
227
228         nflx1 = imois
229         nflx2 = nflx1+1
230         nflx1 = MOD(nflx1,iman)
231         IF ( nflx1 == 0 ) nflx1 = iman
232         nflx2 = MOD(nflx2,iman)
233         IF ( nflx2 == 0 ) nflx2 = iman
234         IF(lwp)WRITE(numout,*) 'first record file used nflx1 ',nflx1
235         IF(lwp)WRITE(numout,*) 'last  record file used nflx2 ',nflx2
236
237         ! Read monthly fluxes data Esbensen Kushnir
238
239         ! humidity
240         CALL flinget(numfl2,'socliohu',jpidta,jpjdta,jpk,jpmois,nflx1, &
241            nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,1))
242         CALL flinget(numfl2,'socliohu',jpidta,jpjdta,jpk,jpmois,nflx2, &
243            nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,1))
244         ! wind
245         CALL flinget(numfl2,'socliowi',jpidta,jpjdta,jpk,jpmois,nflx1, &
246            nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,2))
247         CALL flinget(numfl2,'socliowi',jpidta,jpjdta,jpk,jpmois,nflx2, &
248            nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,2))
249         ! clouds
250         CALL flinget(numfl2,'socliocl',jpidta,jpjdta,jpk,jpmois,nflx1, &
251            nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,3))
252         CALL flinget(numfl2,'socliocl',jpidta,jpjdta,jpk,jpmois,nflx2, &
253            nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,3))
254
255         ! Read monthly precipitations ds flxdta(:,:,1 ou 2,4)
256
257         CALL flinget(numfl3,'rain',jpidta,jpjdta,jpk,jpmois,nflx1, &
258            nflx1,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,1,4))
259         CALL flinget(numfl3,'rain',jpidta,jpjdta,jpk,jpmois,nflx2, &
260            nflx2,mig(1),nlci,mjg(1),nlcj,flxdta(1:nlci,1:nlcj,2,4))
261                 
262      ENDIF
263
264
265      ! 3. at every time step linear interpolation of precipitation fluxes
266      ! -----------------------------------------------------------
267     
268      zxy = FLOAT(nday) / FLOAT(nobis(nflx1)) + 0.5 - i15
269
270      hatm(:,:) = ( (1.-zxy) * flxdta(:,:,1,1) + zxy  * flxdta(:,:,2,1) )
271      vatm(:,:) = ( (1.-zxy) * flxdta(:,:,1,2) + zxy  * flxdta(:,:,2,2) ) 
272      catm(:,:) = ( (1.-zxy )* flxdta(:,:,1,3) + zxy  * flxdta(:,:,2,3) ) 
273      watm(:,:) = ( (1.-zxy) * flxdta(:,:,1,4) + zxy  * flxdta(:,:,2,4) )
274
275
276      ! 4. Closing all files
277      ! --------------------
278
279      IF( kt == nitend ) THEN
280         CALL flinclo(numfl1)
281         CALL flinclo(numfl2)
282         CALL flinclo(numfl3)
283      ENDIF
284
285      CALL blk(kt)
286     
287      CALL FLUSH(numout)
288     
289   END SUBROUTINE flx
290   
Note: See TracBrowser for help on using the repository browser.