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 @ 642

Last change on this file since 642 was 473, checked in by opalod, 18 years ago

nemo_v1_update_060: SM: IOM + 301 levels + CORE + begining of ctl_stop

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 6.9 KB
RevLine 
[3]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 ::          &
[229]13      ji, jj,          &  ! loop indices
[3]14      numfl1, numfl2,  &  ! logical units for surface fluxes data
[229]15      numfl3, numfl4,  &  !
[473]16      nflx1 , nflx2 ,  &  !  first and second record used
[3]17      ndayflx
18
[229]19   REAL(wp), DIMENSION(jpi,jpj,2,3) ::   &
[3]20      flxdta              ! 2 consecutive set of CLIO/CMAP monthly fluxes
21   !!----------------------------------------------------------------------
[247]22   !!   OPA 9.0 , LOCEAN-IPSL (2005)
23   !! $Header$
24   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
[3]25   !!----------------------------------------------------------------------
26
27CONTAINS
28
29   SUBROUTINE flx( kt )
30      !!---------------------------------------------------------------------
31      !!                    ***  ROUTINE flx  ***
32      !!       
33      !! ** Purpose :   provide the thermohaline fluxes (heat and freshwater)
34      !!      to the ocean at each time step.
35      !!
36      !! ** Method :
37      !!       ORCA FORCED VERSION WITH :
38      !!       Daily climatological NCEP temperature
[229]39      !!       Daily climatological ERS-NCEP winds
40      !!       monthly climatological humidity and clouds
[3]41      !!       monthly climatological CMAP precipitation
42      !!       Read several AGCM daily and monthly fluxes file
43      !!             temperature at 2m   tatm   (K)
44      !!             relative humidite   hatm   (%)
45      !!             wind speed          vatm   (m/s)
46      !!             monthly precip      watm   (kg/m2/day)  from Xie/Arkin
47      !!             clouds              catm   (%)
48      !!
49      !! caution : now, in the opa global model, the net upward water flux is
50      !! -------   with mm/day unit.
51      !!
52      !! History :
53      !!        !  91-03  (O. Marti and Ph Dandin)  Original code
54      !!        !  92-07  (M. Imbard)
55      !!        !  96-11  (E. Guilyardi)  Daily AGCM input files
[473]56      !!        !  99-11  (M. Imbard)  NetCDF FORMAT with io-ipsl
[3]57      !!        !  00-05  (K. Rodgers) Daily Netcdf
58      !!   8.5  !  02-09  (C. Ethe and G. Madec)  F90: Free form and MODULE
59      !!----------------------------------------------------------------------
60      !! * modules used
[473]61      USE iom             ! I/O library
[3]62      USE blk_oce         ! bulk variable
63      USE bulk            ! bulk module
[18]64
[3]65      !! * arguments
66      INTEGER, INTENT( in  ) ::   kt ! ocean time step
67
68      !! * Local declarations     
[473]69      INTEGER  ::   iman,imois,i15
70      REAL(wp) ::   zxy
[389]71      !!---------------------------------------------------------------------
[3]72
73
74      ! Initialization
75      ! --------------
76
77      i15 = INT(2*FLOAT(nday)/(FLOAT(nobis(nmonth))+0.5))
[473]78      iman  = INT( raamo )
[3]79      imois = nmonth + i15 - 1
80      IF (imois == 0) imois = iman
81
82
83      ! 1. first call kt = nit000
84      ! -----------------------
85     
86      IF( kt == nit000 ) THEN
[473]87         ! initializations
[3]88         nflx1 = 0
[473]89         ndayflx = 0
[3]90         IF(lwp) THEN
91            WRITE(numout,*) ' '
[473]92            WRITE(numout,*) ' **** Routine flx_bulk_daily.h90'
[3]93            WRITE(numout,*) ' '
[473]94         ENDIF         
95         ! open files
96         IF(lwp) WRITE(numout,*) ' **** global NCEP flx  daily fields '
97         CALL iom_open ( 'tair_1d.nc', numfl1 )
98         IF(lwp) WRITE(numout,*) ' **** global CLIO flx  monthly fields '
99         CALL iom_open ( 'hum_cloud_1m.nc', numfl2 )
100         IF(lwp) WRITE(numout,*) ' **** global XIE  flx  monthly fields '
101         CALL iom_open ( 'rain_1m.nc', numfl3 )
102         IF(lwp) WRITE(numout,*) ' **** global ERS-NCEP  wind daily  fields '
103         CALL iom_open ( 'wspd_1d.nc', numfl4 )
104      ENDIF
[444]105
[3]106
[473]107      ! 2. Read daily DATA Temperature from NCEP
108      ! ---------------------------------------
109     
110      IF( ndayflx /= nday ) THEN
[3]111         
[473]112         ndayflx = nday
113         
114         ! read T 2m (Caution in K)
115         CALL iom_get ( numfl1, jpdom_data, 'air', tatm, nday_year )
116         
117         IF(lwp) WRITE (numout,*)' Lecture daily flx record OK :',nday_year
118         IF(lwp) WRITE (numout,*)' '
119         
120         ! conversion of temperature Kelvin --> Celsius  [rt0=273.15]
121         tatm(:,:) = ( tatm(:,:) - rt0 )
122         
123         ! read wind speed
124         CALL iom_get ( numfl4, jpdom_data, 'wspd', vatm, nday_year )
125         
126         IF(lwp) WRITE (numout,*)' Lecture daily wind speed flx :',nday_year
127         IF(lwp) WRITE (numout,*)' '
128         
129      ENDIF
[3]130
[473]131     
132      !  3. Read monthly data from CLIO and From Xie
133      !  -------------------------------------------
134     
[3]135      IF( kt == nit000 .OR. imois /= nflx1 ) THEN
[473]136         
[3]137         ! calendar computation
[473]138         
[3]139         ! nflx1 number of the first file record used in the simulation
140         ! flx2 number of the last  file record
[473]141         
[3]142         nflx1 = imois
143         nflx2 = nflx1+1
144         nflx1 = MOD(nflx1,iman)
145         IF ( nflx1 == 0 ) nflx1 = iman
146         nflx2 = MOD(nflx2,iman)
147         IF ( nflx2 == 0 ) nflx2 = iman
148         IF(lwp)WRITE(numout,*) 'first record file used nflx1 ',nflx1
149         IF(lwp)WRITE(numout,*) 'last  record file used nflx2 ',nflx2
150
151         ! Read monthly fluxes data Esbensen Kushnir
152
153         ! humidity
[473]154         CALL iom_get ( numfl2, jpdom_data, 'socliohu', flxdta(:,:,1,1), nflx1 )
155         CALL iom_get ( numfl2, jpdom_data, 'socliohu', flxdta(:,:,2,1), nflx2 )
[229]156
[3]157         ! clouds
[473]158         CALL iom_get ( numfl2, jpdom_data, 'socliocl', flxdta(:,:,1,2), nflx1 )
159         CALL iom_get ( numfl2, jpdom_data, 'socliocl', flxdta(:,:,2,2), nflx2 )
[3]160
161         ! Read monthly precipitations ds flxdta(:,:,1 ou 2,4)
162
[473]163         CALL iom_get ( numfl3, jpdom_data, 'rain', flxdta(:,:,1,3), nflx1 )
164         CALL iom_get ( numfl3, jpdom_data, 'rain', flxdta(:,:,2,3), nflx2 )
[3]165                 
166      ENDIF
167
168
169      ! 3. at every time step linear interpolation of precipitation fluxes
170      ! -----------------------------------------------------------
171     
172      zxy = FLOAT(nday) / FLOAT(nobis(nflx1)) + 0.5 - i15
173
174      hatm(:,:) = ( (1.-zxy) * flxdta(:,:,1,1) + zxy  * flxdta(:,:,2,1) )
[229]175      catm(:,:) = ( (1.-zxy )* flxdta(:,:,1,2) + zxy  * flxdta(:,:,2,2) ) 
176      watm(:,:) = ( (1.-zxy) * flxdta(:,:,1,3) + zxy  * flxdta(:,:,2,3) )
[3]177
178      ! 4. Closing all files
179      ! --------------------
180
181      IF( kt == nitend ) THEN
[473]182         CALL iom_close (numfl1)
183         CALL iom_close (numfl2)
184         CALL iom_close (numfl3)
185         CALL iom_close (numfl4)
[3]186      ENDIF
187
188      CALL blk(kt)
189     
190      CALL FLUSH(numout)
191     
192   END SUBROUTINE flx
193   
Note: See TracBrowser for help on using the repository browser.