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 trunk/NEMO/OPA_SRC/SBC – NEMO

source: trunk/NEMO/OPA_SRC/SBC/flx_bulk_daily.h90 @ 229

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

CT : BUGFIX162 : add an initialization of extra-hallo in MPP

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