source: LMDZ5/trunk/libf/phylmd/phys_output_mod.F90 @ 2095

Last change on this file since 2095 was 2095, checked in by Laurent Fairhead, 10 years ago

Modifications nécessaires pour la bonne définition du temps dans les
fichier Xios


Necessary modifications for the definition of time in Xios files

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 23.4 KB
Line 
1! $Id: phys_output_mod.F90 2095 2014-07-17 11:12:30Z fairhead $
2!
3
4MODULE phys_output_mod
5  USE indice_sol_mod
6  USE phys_output_var_mod
7  USE aero_mod, only : naero_spc,name_aero
8  USE phys_output_write_mod, ONLY : phys_output_write
9  REAL, DIMENSION(nfiles),SAVE :: ecrit_files
10
11! Abderrahmane 12 2007
12!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13!!! Ecreture des Sorties du modele dans les fichiers Netcdf :
14! histmth.nc : moyennes mensuelles
15! histday.nc : moyennes journalieres
16! histhf.nc  : moyennes toutes les 3 heures
17! histins.nc : valeurs instantanees
18!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
19
20CONTAINS
21
22!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
23!!!!!!!!! Ouverture des fichier et definition des variable de sortie !!!!!!!!
24  !! histbeg, histvert et histdef
25!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
26
27  SUBROUTINE phys_output_open(rlon,rlat,pim,tabij,ipt,jpt,plon,plat, &
28       jjmp1,nlevSTD,clevSTD,rlevSTD, dtime, ok_veget, &
29       type_ocean, iflag_pbl,ok_mensuel,ok_journe, &
30       ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, read_climoz, &
31       phys_out_filestations, &
32       new_aod, aerosol_couple, flag_aerosol_strat, &
33       pdtphys, paprs, pphis, pplay, lmax_th, ptconv, ptconvth, ivap, &
34       d_t, qx, d_qx, zmasse, ok_sync)   
35
36    USE iophy
37    USE dimphy
38    USE infotrac
39    USE ioipsl
40    USE phys_cal_mod, only : hour
41    USE mod_phys_lmdz_para
42    USE aero_mod, only : naero_spc,name_aero
43        !Martin
44    USE surface_data, ONLY : ok_snow
45    USE phys_output_ctrlout_mod
46    USE mod_grid_phy_lmdz, only: klon_glo
47
48#ifdef CPP_XIOS
49    ! ug Pour les sorties XIOS
50    USE wxios
51#endif
52
53    IMPLICIT NONE
54    include "dimensions.h"
55    include "temps.h"
56    include "clesphys.h"
57    include "thermcell.h"
58    include "comvert.h"
59    include "iniprint.h"
60
61    ! ug Nouveaux arguments nécessaires au histwrite_mod:
62    INTEGER, INTENT(IN)                         :: ivap
63    INTEGER, DIMENSION(klon), INTENT(IN)        :: lmax_th
64    LOGICAL, INTENT(IN)                         :: ok_sync
65    LOGICAL, DIMENSION(klon, klev), INTENT(IN)  :: ptconv, ptconvth
66    REAL, INTENT(IN)                            :: pdtphys
67    REAL, DIMENSION(klon), INTENT(IN)           :: pphis
68    REAL, DIMENSION(klon, klev), INTENT(IN)     :: pplay, d_t
69    REAL, DIMENSION(klon, klev+1), INTENT(IN)   :: paprs
70    REAL, DIMENSION(klon,klev,nqtot), INTENT(IN):: qx, d_qx
71    REAL, DIMENSION(klon, llm), INTENT(IN)      :: zmasse
72
73
74    REAL,DIMENSION(klon),INTENT(IN) :: rlon
75    REAL,DIMENSION(klon),INTENT(IN) :: rlat
76    INTEGER, INTENT(IN)             :: pim
77    INTEGER, DIMENSION(pim)            :: tabij
78    INTEGER,DIMENSION(pim), INTENT(IN) :: ipt, jpt
79    REAL,DIMENSION(pim), INTENT(IN) :: plat, plon
80    REAL,DIMENSION(pim,2) :: plat_bounds, plon_bounds
81
82    INTEGER                               :: jjmp1
83    INTEGER                               :: nlevSTD, radpas
84    LOGICAL                               :: ok_mensuel, ok_journe, ok_hf, ok_instan
85    LOGICAL                               :: ok_LES,ok_ade,ok_aie,flag_aerosol_strat
86    LOGICAL                               :: new_aod, aerosol_couple
87    INTEGER, INTENT(IN)::  read_climoz ! read ozone climatology
88    !     Allowed values are 0, 1 and 2
89    !     0: do not read an ozone climatology
90    !     1: read a single ozone climatology that will be used day and night
91    !     2: read two ozone climatologies, the average day and night
92    !     climatology and the daylight climatology
93
94    REAL                                  :: dtime
95    INTEGER                               :: idayref
96    REAL                                  :: zjulian_start, zjulian
97    REAL, DIMENSION(klev)                 :: Ahyb, Bhyb, Alt
98    CHARACTER(LEN=4), DIMENSION(nlevSTD)  :: clevSTD
99    REAL, DIMENSION(nlevSTD)              :: rlevSTD
100    INTEGER                               :: nsrf, k, iq, iiq, iff, i, j, ilev
101    INTEGER                               :: naero
102    LOGICAL                               :: ok_veget
103    INTEGER                               :: iflag_pbl
104    CHARACTER(LEN=4)                      :: bb2
105    CHARACTER(LEN=2)                      :: bb3
106    CHARACTER(LEN=6)                      :: type_ocean
107    INTEGER, DIMENSION(iim*jjmp1)         ::  ndex2d
108    INTEGER, DIMENSION(iim*jjmp1*klev)    :: ndex3d
109    INTEGER                               :: imin_ins, imax_ins
110    INTEGER                               :: jmin_ins, jmax_ins
111    INTEGER, DIMENSION(nfiles)            :: phys_out_levmin, phys_out_levmax
112    INTEGER, DIMENSION(nfiles)            :: phys_out_filelevels
113    CHARACTER(LEN=20), DIMENSION(nfiles)  :: chtimestep = (/ 'Default', 'Default', 'Default', 'Default', 'Default', &
114                                                             'Default', 'Default', 'Default', 'Default' /)
115    LOGICAL, DIMENSION(nfiles)            :: phys_out_filekeys
116    LOGICAL, DIMENSION(nfiles)            :: phys_out_filestations
117
118!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
119    !                 entre [phys_out_lonmin,phys_out_lonmax] et [phys_out_latmin,phys_out_latmax]
120
121    LOGICAL, DIMENSION(nfiles), SAVE  :: phys_out_regfkey       = (/ .FALSE., .FALSE., .FALSE.,  .FALSE., &
122                                                                    .FALSE., .FALSE., .FALSE., .FALSE.,  .FALSE. /)
123    REAL, DIMENSION(nfiles), SAVE     :: phys_out_lonmin        = (/   -180.,   -180.,   -180.,    -180., &
124                                                                     -180.,   -180., -180.,   -180.,    -180. /)
125    REAL, DIMENSION(nfiles), SAVE     :: phys_out_lonmax        = (/    180.,    180.,    180.,     180., &
126                                                                      180.,    180., 180.,    180.,     180. /)
127    REAL, DIMENSION(nfiles), SAVE     :: phys_out_latmin        = (/    -90.,    -90.,    -90.,     -90., &
128                                                                    -90., -90., -90.,    -90.,     -90. /)
129    REAL, DIMENSION(nfiles), SAVE     :: phys_out_latmax        = (/  90.,     90.,     90.,     90., &
130                                                                    90., 90., 90., 90., 90. /)                       
131#ifdef CPP_XIOS
132    ! ug Variables utilisées pour récupérer le calendrier pour xios
133    INTEGER :: x_an, x_mois, x_jour
134    REAL :: x_heure
135    INTEGER :: ini_an, ini_mois, ini_jour
136    REAL :: ini_heure
137#endif
138
139    WRITE(lunout,*) 'Debut phys_output_mod.F90'
140    ! Initialisations (Valeurs par defaut
141
142    IF (.NOT. ALLOCATED(o_trac)) ALLOCATE(o_trac(nqtot))
143    IF (.NOT. ALLOCATED(o_trac_cum)) ALLOCATE(o_trac_cum(nqtot))
144    ALLOCATE(o_dtr_the(nqtot),o_dtr_con(nqtot),o_dtr_lessi_impa(nqtot))
145    ALLOCATE(o_dtr_lessi_nucl(nqtot),o_dtr_insc(nqtot),o_dtr_bcscav(nqtot))
146    ALLOCATE(o_dtr_evapls(nqtot),o_dtr_ls(nqtot),o_dtr_trsp(nqtot))
147    ALLOCATE(o_dtr_sscav(nqtot),o_dtr_sat(nqtot),o_dtr_uscav(nqtot))
148    ALLOCATE(o_dtr_dry(nqtot),o_dtr_vdf(nqtot))
149
150
151    levmax = (/ klev, klev, klev, klev, klev, klev, nlevSTD, nlevSTD, nlevSTD /)
152
153    phys_out_filenames(1) = 'histmth'
154    phys_out_filenames(2) = 'histday'
155    phys_out_filenames(3) = 'histhf'
156    phys_out_filenames(4) = 'histins'
157    phys_out_filenames(5) = 'histLES'
158    phys_out_filenames(6) = 'histstn'
159    phys_out_filenames(7) = 'histmthNMC'
160    phys_out_filenames(8) = 'histdayNMC'
161    phys_out_filenames(9) = 'histhfNMC.nc'
162
163    type_ecri(1) = 'ave(X)'
164    type_ecri(2) = 'ave(X)'
165    type_ecri(3) = 'ave(X)'
166    type_ecri(4) = 'inst(X)'
167    type_ecri(5) = 'ave(X)'
168    type_ecri(6) = 'inst(X)'
169    type_ecri(7) = 'inst(X)'
170    type_ecri(8) = 'inst(X)'
171    type_ecri(9) = 'inst(X)'
172
173    clef_files(1) = ok_mensuel
174    clef_files(2) = ok_journe
175    clef_files(3) = ok_hf
176    clef_files(4) = ok_instan
177    clef_files(5) = ok_LES
178    clef_files(6) = ok_instan
179    clef_files(7) = ok_histNMC(1)
180    clef_files(8) = ok_histNMC(2)
181    clef_files(9) = ok_histNMC(3)
182
183    !sortir des fichiers "stations" si clef_stations(:)=.TRUE.
184    clef_stations(1) = .FALSE.
185    clef_stations(2) = .FALSE.
186    clef_stations(3) = .FALSE.
187    clef_stations(4) = .FALSE.
188    clef_stations(5) = .FALSE.
189    clef_stations(6) = .FALSE.
190    clef_stations(7) = .FALSE.
191    clef_stations(8) = .FALSE.
192    clef_stations(9) = .FALSE.
193
194    lev_files(1) = lev_histmth
195    lev_files(2) = lev_histday
196    lev_files(3) = lev_histhf
197    lev_files(4) = lev_histins
198    lev_files(5) = lev_histLES
199    lev_files(6) = lev_histins
200    lev_files(7) = levout_histNMC(1)
201    lev_files(8) = levout_histNMC(2)
202    lev_files(9) = levout_histNMC(3)
203
204    ecrit_files(1) = ecrit_mth
205    ecrit_files(2) = ecrit_day
206    ecrit_files(3) = ecrit_hf
207    ecrit_files(4) = ecrit_ins
208    ecrit_files(5) = ecrit_LES
209    ecrit_files(6) = ecrit_ins
210    ecrit_files(7) = freq_outNMC(1)
211    ecrit_files(8) = freq_outNMC(2)
212    ecrit_files(9) = freq_outNMC(3)
213
214    !! Lectures des parametres de sorties dans physiq.def
215
216    CALL getin('phys_out_regfkey',phys_out_regfkey)
217    CALL getin('phys_out_lonmin',phys_out_lonmin)
218    CALL getin('phys_out_lonmax',phys_out_lonmax)
219    CALL getin('phys_out_latmin',phys_out_latmin)
220    CALL getin('phys_out_latmax',phys_out_latmax)
221    phys_out_levmin(:)=levmin(:)
222    CALL getin('phys_out_levmin',levmin)
223    phys_out_levmax(:)=levmax(:)
224    CALL getin('phys_out_levmax',levmax)
225    CALL getin('phys_out_filenames',phys_out_filenames)
226    phys_out_filekeys(:)=clef_files(:)
227    CALL getin('phys_out_filekeys',clef_files)
228    phys_out_filestations(:)=clef_stations(:)
229    CALL getin('phys_out_filestations',clef_stations)
230    phys_out_filelevels(:)=lev_files(:)
231    CALL getin('phys_out_filelevels',lev_files)
232    CALL getin('phys_out_filetimesteps',chtimestep)
233    phys_out_filetypes(:)=type_ecri(:)
234    CALL getin('phys_out_filetypes',type_ecri)
235
236    type_ecri_files(:)=type_ecri(:)
237
238    WRITE(lunout,*)'phys_out_lonmin=',phys_out_lonmin
239    WRITE(lunout,*)'phys_out_lonmax=',phys_out_lonmax
240    WRITE(lunout,*)'phys_out_latmin=',phys_out_latmin
241    WRITE(lunout,*)'phys_out_latmax=',phys_out_latmax
242    WRITE(lunout,*)'phys_out_filenames=',phys_out_filenames
243    WRITE(lunout,*)'phys_out_filetypes=',type_ecri
244    WRITE(lunout,*)'phys_out_filekeys=',clef_files
245    WRITE(lunout,*)'phys_out_filestations=',clef_stations
246    WRITE(lunout,*)'phys_out_filelevels=',lev_files
247
248! A noter pour
249! l heure initiale - dans les fichiers histoire hist* - on met comme 
250! heure de debut soit la vraie heure (pour le 1D) soit 0h (pour le 3D)
251! afin d avoir une seule sortie mensuelle par mois lorsque l on tourne
252! par annee (IM).
253!
254     idayref = day_ref
255     IF (klon_glo==1) THEN
256         CALL ymds2ju(annee_ref, 1, idayref, hour, zjulian)     !jyg
257     ELSE
258         CALL ymds2ju(annee_ref, 1, idayref, 0.0, zjulian)
259         CALL ymds2ju(annee_ref, 1, day_ini, start_time, zjulian_start)
260     END IF
261
262#ifdef CPP_XIOS
263    ! ug Réglage du calendrier xios
264    !Temps julian => an, mois, jour, heure
265    CALL ju2ymds(zjulian, x_an, x_mois, x_jour, x_heure)
266    CALL ju2ymds(zjulian_start, ini_an, ini_mois, ini_jour, ini_heure)
267    CALL wxios_set_cal(dtime, calend, x_an, x_mois, x_jour, x_heure, ini_an, &
268                       ini_mois, ini_jour, ini_heure )
269#endif
270
271!!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
272    ! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !!
273    ! Appel des histbeg pour definir les variables (nom, moy ou inst, freq de sortie ..
274!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
275
276    zdtime_moy = dtime         ! Frequence ou l on moyenne
277
278    ! Calcul des Ahyb, Bhyb et Alt
279    DO k=1,klev
280       Ahyb(k)=(ap(k)+ap(k+1))/2.
281       Bhyb(k)=(bp(k)+bp(k+1))/2.
282       Alt(k)=log(preff/presnivs(k))*8.
283    ENDDO
284    !          if(prt_level.ge.1) then
285    WRITE(lunout,*)'Ap Hybrid = ',Ahyb(1:klev)
286    WRITE(lunout,*)'Bp Hybrid = ',Bhyb(1:klev)
287    WRITE(lunout,*)'Alt approx des couches pour une haut d echelle de 8km = ',Alt(1:klev)
288    !          endif
289  DO iff=1,nfiles
290
291       ! Calculate ecrit_files for all files
292      IF ( chtimestep(iff).eq.'Default' ) then
293          ! Par defaut ecrit_files = (ecrit_mensuel ecrit_jour ecrit_hf
294          ! ...)*86400.
295          ecrit_files(iff)=ecrit_files(iff)*86400.
296      ELSE IF (chtimestep(iff).eq.'-1') then
297          PRINT*,'ecrit_files(',iff,') < 0 so IOIPSL work on different'
298          PRINT*,'months length'
299          ecrit_files(iff)=-1.
300      else
301       CALL convers_timesteps(chtimestep(iff),dtime,ecrit_files(iff))
302      ENDIF
303
304       WRITE(lunout,*)'ecrit_files(',iff,')= ',ecrit_files(iff)
305       zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit en seconde
306
307    IF (clef_files(iff)) THEN
308
309#ifdef CPP_XIOS
310!!! Ouverture de chaque fichier XIOS !!!!!!!!!!!
311    if (prt_level >= 10) then
312      print*,'phys_output_open: call wxios_add_file with phys_out_filenames(iff)=',trim(phys_out_filenames(iff))                                                                       
313    endif
314    CALL wxios_add_file(phys_out_filenames(iff),chtimestep(iff),lev_files(iff)) 
315
316!!! Declaration des axes verticaux de chaque fichier:
317    if (prt_level >= 10) then
318      print*,'phys_output_open: Declare vertical axes for each file'
319    endif
320   if (iff.le.6) then
321    CALL wxios_add_vaxis("presnivs", &
322            levmax(iff) - levmin(iff) + 1, presnivs(levmin(iff):levmax(iff)))
323    CALL wxios_add_vaxis("Ahyb", &
324            levmax(iff) - levmin(iff) + 1, Ahyb)
325    CALL wxios_add_vaxis("Bhyb", &
326            levmax(iff) - levmin(iff) + 1, Bhyb)
327    CALL wxios_add_vaxis("Alt", &
328            levmax(iff) - levmin(iff) + 1, Alt)
329   else
330    ! NMC files
331    CALL wxios_add_vaxis("plev", &
332            levmax(iff) - levmin(iff) + 1, rlevSTD(levmin(iff):levmax(iff)))
333   endif
334#endif
335
336!!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !!
337!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
338          IF (phys_out_regfkey(iff)) then
339             imin_ins=1
340             imax_ins=iim
341             jmin_ins=1
342             jmax_ins=jjmp1
343
344             ! correction abderr       
345             do i=1,iim
346                WRITE(lunout,*)'io_lon(i)=',io_lon(i)
347                IF (io_lon(i).le.phys_out_lonmin(iff)) imin_ins=i
348                IF (io_lon(i).le.phys_out_lonmax(iff)) imax_ins=i+1
349             enddo
350
351             do j=1,jjmp1
352                WRITE(lunout,*)'io_lat(j)=',io_lat(j)
353                IF (io_lat(j).ge.phys_out_latmin(iff)) jmax_ins=j+1
354                IF (io_lat(j).ge.phys_out_latmax(iff)) jmin_ins=j
355             enddo
356
357             WRITE(lunout,*)'On stoke le fichier histoire numero ',iff,' sur ', &
358                  imin_ins,imax_ins,jmin_ins,jmax_ins
359             WRITE(lunout,*)'longitudes : ', &
360                  io_lon(imin_ins),io_lon(imax_ins), &
361                  'latitudes : ', &
362                  io_lat(jmax_ins),io_lat(jmin_ins)
363
364             CALL histbeg(phys_out_filenames(iff),iim,io_lon,jjmp1,io_lat, &
365                  imin_ins,imax_ins-imin_ins+1, &
366                  jmin_ins,jmax_ins-jmin_ins+1, &
367                  itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
368!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
369             !IM fichiers stations
370          else IF (clef_stations(iff)) THEN
371
372             if (prt_level >= 10) then
373             WRITE(lunout,*)'phys_output_open: iff=',iff,'  phys_out_filenames(iff)=',phys_out_filenames(iff)
374             endif
375             
376             CALL histbeg_phy_all(rlon,rlat,pim,tabij,ipt,jpt,plon,plat,plon_bounds,plat_bounds, &
377                  phys_out_filenames(iff), &
378                  itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
379          else
380             CALL histbeg_phy_all(phys_out_filenames(iff),itau_phy,zjulian,&
381                 dtime,nhorim(iff),nid_files(iff))
382          endif
383
384#ifndef CPP_NO_IOIPSL
385          if (iff.le.6) then
386             CALL histvert(nid_files(iff), "presnivs", "Vertical levels", "Pa", & 
387               levmax(iff) - levmin(iff) + 1, &
388               presnivs(levmin(iff):levmax(iff)), nvertm(iff),"down")
389!!!! Composantes de la coordonnee sigma-hybride
390          CALL histvert(nid_files(iff), "Ahyb","Ahyb comp of Hyb Cord ", "Pa", &
391               levmax(iff) - levmin(iff) + 1,Ahyb,nvertap(iff))
392
393          CALL histvert(nid_files(iff), "Bhyb","Bhyb comp of Hyb Cord", " ", &
394               levmax(iff) - levmin(iff) + 1,Bhyb,nvertbp(iff))
395
396          CALL histvert(nid_files(iff), "Alt","Height approx for scale heigh of 8km at levels", "Km", &                       
397               levmax(iff) - levmin(iff) + 1,Alt,nvertAlt(iff))
398
399          else
400             CALL histvert(nid_files(iff), "plev", "pressure", "Pa", &
401               levmax(iff) - levmin(iff) + 1, &
402              rlevSTD(levmin(iff):levmax(iff)), nvertm(iff), "down")
403          endif
404#endif
405
406!CR: ajout d'une variable eau
407!      IF (nqtot>=3) THEN
408       IF (nqtot>=nqo+1) THEN
409!            DO iq=3,nqtot 
410            DO iq=nqo+1,nqtot
411            iiq=niadv(iq)
412            o_trac(iq-nqo) = ctrl_out((/ 4, 5, 1, 1, 1, 10, 11, 11, 11 /), &
413                           tname(iiq),'Tracer '//ttext(iiq), "-",  &
414                           (/ '', '', '', '', '', '', '', '', '' /))
415
416            o_dtr_vdf(iq-nqo) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11 /), &
417                              'd'//trim(tname(iq))//'_vdf',  &
418                              'Tendance tracer '//ttext(iiq), "-" , &
419                              (/ '', '', '', '', '', '', '', '', '' /))
420
421            o_dtr_the(iq-nqo) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11 /), &
422                              'd'//trim(tname(iq))//'_the', &
423                              'Tendance tracer '//ttext(iiq), "-", &
424                              (/ '', '', '', '', '', '', '', '', '' /))
425
426            o_dtr_con(iq-nqo) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11 /), &
427                              'd'//trim(tname(iq))//'_con', &
428                              'Tendance tracer '//ttext(iiq), "-", &
429                              (/ '', '', '', '', '', '', '', '', '' /))
430
431            o_dtr_lessi_impa(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
432                                     'd'//trim(tname(iq))//'_lessi_impa', &
433                                     'Tendance tracer '//ttext(iiq), "-", &
434                                     (/ '', '', '', '', '', '', '', '', '' /))
435
436            o_dtr_lessi_nucl(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
437                                     'd'//trim(tname(iq))//'_lessi_nucl', &
438                                     'Tendance tracer '//ttext(iiq), "-", &
439                                     (/ '', '', '', '', '', '', '', '', '' /))
440
441            o_dtr_insc(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
442                               'd'//trim(tname(iq))//'_insc', &
443                               'Tendance tracer '//ttext(iiq), "-", &
444                               (/ '', '', '', '', '', '', '', '', '' /))
445
446            o_dtr_bcscav(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
447                                 'd'//trim(tname(iq))//'_bcscav', &
448                                 'Tendance tracer '//ttext(iiq), "-", &
449                                 (/ '', '', '', '', '', '', '', '', '' /))
450
451            o_dtr_evapls(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
452                                 'd'//trim(tname(iq))//'_evapls', &
453                                 'Tendance tracer '//ttext(iiq), "-", &
454                                 (/ '', '', '', '', '', '', '', '', '' /))
455
456            o_dtr_ls(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
457                             'd'//trim(tname(iq))//'_ls', &
458                             'Tendance tracer '//ttext(iiq), "-", &
459                             (/ '', '', '', '', '', '', '', '', '' /))
460
461            o_dtr_trsp(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
462                               'd'//trim(tname(iq))//'_trsp', &
463                               'Tendance tracer '//ttext(iiq), "-", &
464                               (/ '', '', '', '', '', '', '', '', '' /))
465
466            o_dtr_sscav(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
467                                'd'//trim(tname(iq))//'_sscav', &
468                                'Tendance tracer '//ttext(iiq), "-", &
469                                (/ '', '', '', '', '', '', '', '', '' /))
470
471            o_dtr_sat(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
472                               'd'//trim(tname(iq))//'_sat', &
473                               'Tendance tracer '//ttext(iiq), "-", &
474                               (/ '', '', '', '', '', '', '', '', '' /))
475
476            o_dtr_uscav(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
477                                'd'//trim(tname(iq))//'_uscav', &
478                                'Tendance tracer '//ttext(iiq), "-", &
479                                 (/ '', '', '', '', '', '', '', '', '' /))
480
481            o_dtr_dry(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
482                              'cum'//'d'//trim(tname(iq))//'_dry', &
483                              'tracer tendency dry deposition'//ttext(iiq), "-", &
484                              (/ '', '', '', '', '', '', '', '', '' /))
485
486            o_trac_cum(iq-nqo) = ctrl_out((/ 3, 4, 10, 10, 10, 10, 11, 11, 11 /), &
487                               'cum'//tname(iiq),&
488                               'Cumulated tracer '//ttext(iiq), "-", &
489                               (/ '', '', '', '', '', '', '', '', '' /))
490            ENDDO
491      ENDIF
492
493     ENDIF ! clef_files
494
495   ENDDO !  iff
496
497    ! Updated write frequencies due to phys_out_filetimesteps.
498    ! Write frequencies are now in seconds. 
499    ecrit_mth = ecrit_files(1)
500    ecrit_day = ecrit_files(2)
501    ecrit_hf  = ecrit_files(3)
502    ecrit_ins = ecrit_files(4)
503    ecrit_LES = ecrit_files(5)
504    ecrit_ins = ecrit_files(6)
505
506    if (prt_level >= 10) then
507      WRITE(lunout,*)'swaero_diag=',swaero_diag
508      WRITE(lunout,*)'phys_output_open: ends here'
509    endif
510
511  end SUBROUTINE phys_output_open
512
513
514
515  SUBROUTINE convers_timesteps(str,dtime,timestep)
516
517    use ioipsl
518    USE phys_cal_mod
519
520    IMPLICIT NONE
521
522    CHARACTER(LEN=20)   :: str
523    CHARACTER(LEN=10)   :: type
524    INTEGER             :: ipos,il
525    real                :: ttt,xxx,timestep,dayseconde,dtime
526    parameter (dayseconde=86400.)
527    include "temps.h"
528    include "comconst.h"
529    include "iniprint.h"
530
531    ipos=scan(str,'0123456789.',.TRUE.)
532    ! 
533    il=len_trim(str)
534    WRITE(lunout,*) "ipos = ", ipos
535    WRITE(lunout,*) "il = ", il
536    if (ipos == 0) call abort_gcm("convers_timesteps", "bad str", 1)
537    read(str(1:ipos),*) ttt
538    WRITE(lunout,*)ttt
539    type=str(ipos+1:il)
540
541
542    IF ( il == ipos ) then
543       type='day'
544    endif
545
546    IF ( type == 'day'.or.type == 'days'.or.type == 'jours'.or.type == 'jour' ) timestep = ttt * dayseconde
547    IF ( type == 'mounths'.or.type == 'mth'.or.type == 'mois' ) then
548       WRITE(lunout,*)'annee_ref,day_ref mon_len',annee_ref,day_ref,mth_len
549       timestep = ttt * dayseconde * mth_len
550    endif
551    IF ( type == 'hours'.or.type == 'hr'.or.type == 'heurs') timestep = ttt * dayseconde / 24.
552    IF ( type == 'mn'.or.type == 'minutes'  ) timestep = ttt * 60.
553    IF ( type == 's'.or.type == 'sec'.or.type == 'secondes'   ) timestep = ttt
554    IF ( type == 'TS' ) timestep = ttt * dtime
555
556    WRITE(lunout,*)'type =      ',type
557    WRITE(lunout,*)'nb j/h/m =  ',ttt
558    WRITE(lunout,*)'timestep(s)=',timestep
559
560  END SUBROUTINE convers_timesteps
561
562END MODULE phys_output_mod
563
Note: See TracBrowser for help on using the repository browser.