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

Last change on this file since 1997 was 1971, checked in by idelkadi, 11 years ago

Corrections pour les sorties XIOS :

  1. Dans phys_output_mod.F90 : Calcul de l'heure de départ sorti en dehors de la boucle sur les fichiers Definition des axes verticaux pour XIOS mis sous la cles de controle des sorties Definition de l'axe vertical pour les fichiers NMC
  1. Corrections divers pour les sorties NMC (unite, description, ...) phys_output_ctrlout_mod.F90 et phys_output_write_mod.F90
  • 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: 22.9 KB
RevLine 
[1279]1! $Id: phys_output_mod.F90 1971 2014-02-13 14:45:29Z acaubel $
2!
[1813]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
[1920]9  REAL, DIMENSION(nfiles),SAVE :: ecrit_files
[1813]10
[907]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
[1562]20CONTAINS
[907]21
22!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
23!!!!!!!!! Ouverture des fichier et definition des variable de sortie !!!!!!!!
[1562]24  !! histbeg, histvert et histdef
[907]25!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[1562]26
[1539]27  SUBROUTINE phys_output_open(rlon,rlat,pim,tabij,ipt,jpt,plon,plat, &
[1828]28       jjmp1,nlevSTD,clevSTD,rlevSTD,nbteta, &
[1539]29       ctetaSTD, dtime, ok_veget, &
[1279]30       type_ocean, iflag_pbl,ok_mensuel,ok_journe, &
31       ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, read_climoz, &
[1539]32       phys_out_filestations, &
[1807]33       new_aod, aerosol_couple, flag_aerosol_strat, &
34       pdtphys, paprs, pphis, pplay, lmax_th, ptconv, ptconvth, ivap, &
35       d_t, qx, d_qx, zmasse, ok_sync)   
[907]36
[1562]37    USE iophy
38    USE dimphy
39    USE infotrac
40    USE ioipsl
[1742]41    USE phys_cal_mod, only : hour
[1562]42    USE mod_phys_lmdz_para
43    USE aero_mod, only : naero_spc,name_aero
[1865]44        !Martin
45    USE surface_data, ONLY : ok_snow
[1807]46    USE phys_output_ctrlout_mod
[1912]47    USE mod_grid_phy_lmdz, only: klon_glo
[907]48
[1825]49#ifdef CPP_XIOS
50    ! ug Pour les sorties XIOS
51    USE wxios
52#endif
53
[1562]54    IMPLICIT NONE
55    include "dimensions.h"
56    include "temps.h"
57    include "clesphys.h"
58    include "thermcell.h"
59    include "comvert.h"
[1575]60    include "iniprint.h"
[907]61
[1807]62    ! ug Nouveaux arguments nécessaires au histwrite_mod:
63    INTEGER, INTENT(IN)                         :: ivap
64    INTEGER, DIMENSION(klon), INTENT(IN)        :: lmax_th
65    LOGICAL, INTENT(IN)                         :: ok_sync
66    LOGICAL, DIMENSION(klon, klev), INTENT(IN)  :: ptconv, ptconvth
67    REAL, INTENT(IN)                            :: pdtphys
68    REAL, DIMENSION(klon), INTENT(IN)           :: pphis
69    REAL, DIMENSION(klon, klev), INTENT(IN)     :: pplay, d_t
70    REAL, DIMENSION(klon, klev+1), INTENT(IN)   :: paprs
71    REAL, DIMENSION(klon,klev,nqtot), INTENT(IN):: qx, d_qx
72    REAL, DIMENSION(klon, llm), INTENT(IN)      :: zmasse
73
74
75    REAL,DIMENSION(klon),INTENT(IN) :: rlon
76    REAL,DIMENSION(klon),INTENT(IN) :: rlat
77    INTEGER, INTENT(IN)             :: pim
[1539]78    INTEGER, DIMENSION(pim)            :: tabij
[1807]79    INTEGER,DIMENSION(pim), INTENT(IN) :: ipt, jpt
80    REAL,DIMENSION(pim), INTENT(IN) :: plat, plon
81    REAL,DIMENSION(pim,2) :: plat_bounds, plon_bounds
[1539]82
[1791]83    INTEGER                               :: jjmp1
84    INTEGER                               :: nbteta, nlevSTD, radpas
85    LOGICAL                               :: ok_mensuel, ok_journe, ok_hf, ok_instan
86    LOGICAL                               :: ok_LES,ok_ade,ok_aie,flag_aerosol_strat
87    LOGICAL                               :: new_aod, aerosol_couple
[1807]88    INTEGER, INTENT(IN)::  read_climoz ! read ozone climatology
[1562]89    !     Allowed values are 0, 1 and 2
90    !     0: do not read an ozone climatology
91    !     1: read a single ozone climatology that will be used day and night
92    !     2: read two ozone climatologies, the average day and night
93    !     climatology and the daylight climatology
[1279]94
[1791]95    REAL                                  :: dtime
96    INTEGER                               :: idayref
97    REAL                                  :: zjulian
98    REAL, DIMENSION(klev)                 :: Ahyb, Bhyb, Alt
99    CHARACTER(LEN=4), DIMENSION(nlevSTD)  :: clevSTD
[1828]100    REAL, DIMENSION(nlevSTD)              :: rlevSTD
[1791]101    INTEGER                               :: nsrf, k, iq, iiq, iff, i, j, ilev
102    INTEGER                               :: naero
103    LOGICAL                               :: ok_veget
104    INTEGER                               :: iflag_pbl
105    CHARACTER(LEN=4)                      :: bb2
106    CHARACTER(LEN=2)                      :: bb3
107    CHARACTER(LEN=6)                      :: type_ocean
108    CHARACTER(LEN=3)                      :: ctetaSTD(nbteta)
109    INTEGER, DIMENSION(iim*jjmp1)         ::  ndex2d
110    INTEGER, DIMENSION(iim*jjmp1*klev)    :: ndex3d
111    INTEGER                               :: imin_ins, imax_ins
112    INTEGER                               :: jmin_ins, jmax_ins
113    INTEGER, DIMENSION(nfiles)            :: phys_out_levmin, phys_out_levmax
114    INTEGER, DIMENSION(nfiles)            :: phys_out_filelevels
[1884]115    CHARACTER(LEN=20), DIMENSION(nfiles)  :: chtimestep = (/ 'Default', 'Default', 'Default', 'Default', 'Default', &
116                                                             'Default', 'Default', 'Default', 'Default' /)
[1791]117    LOGICAL, DIMENSION(nfiles)            :: phys_out_filekeys
118    LOGICAL, DIMENSION(nfiles)            :: phys_out_filestations
[907]119
[1065]120!!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[1562]121    !                 entre [phys_out_lonmin,phys_out_lonmax] et [phys_out_latmin,phys_out_latmax]
[1054]122
[1828]123    LOGICAL, DIMENSION(nfiles), SAVE  :: phys_out_regfkey       = (/ .FALSE., .FALSE., .FALSE.,  .FALSE., &
124                                                                    .FALSE., .FALSE., .FALSE., .FALSE.,  .FALSE. /)
125    REAL, DIMENSION(nfiles), SAVE     :: phys_out_lonmin        = (/   -180.,   -180.,   -180.,    -180., &
126                                                                     -180.,   -180., -180.,   -180.,    -180. /)
127    REAL, DIMENSION(nfiles), SAVE     :: phys_out_lonmax        = (/    180.,    180.,    180.,     180., &
128                                                                      180.,    180., 180.,    180.,     180. /)
129    REAL, DIMENSION(nfiles), SAVE     :: phys_out_latmin        = (/    -90.,    -90.,    -90.,     -90., &
130                                                                    -90., -90., -90.,    -90.,     -90. /)
131    REAL, DIMENSION(nfiles), SAVE     :: phys_out_latmax        = (/  90.,     90.,     90.,     90., &
132                                                                    90., 90., 90., 90., 90. /)                       
[1825]133#ifdef CPP_XIOS
134    ! ug Variables utilisées pour récupérer le calendrier pour xios
135    INTEGER :: x_an, x_mois, x_jour
136    REAL :: x_heure
137#endif
138
[1791]139    WRITE(lunout,*) 'Debut phys_output_mod.F90'
[1562]140    ! Initialisations (Valeurs par defaut
[1403]141
[1791]142    IF (.NOT. ALLOCATED(o_trac)) ALLOCATE(o_trac(nqtot))
143    IF (.NOT. ALLOCATED(o_trac_cum)) ALLOCATE(o_trac_cum(nqtot))
[1813]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))
[1403]149
[1813]150
[1828]151    levmax = (/ klev, klev, klev, klev, klev, klev, nlevSTD, nlevSTD, nlevSTD /)
[1065]152
[1562]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'
[1828]159    phys_out_filenames(7) = 'histmthNMC'
160    phys_out_filenames(8) = 'histdayNMC'
161    phys_out_filenames(9) = 'histhfNMC.nc'
[907]162
[1562]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)'
[1828]169    type_ecri(7) = 'inst(X)'
170    type_ecri(8) = 'inst(X)'
171    type_ecri(9) = 'inst(X)'
[907]172
[1562]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
[1828]179    clef_files(7) = ok_histNMC(1)
180    clef_files(8) = ok_histNMC(2)
181    clef_files(9) = ok_histNMC(3)
[907]182
[1562]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.
[1828]190    clef_stations(7) = .FALSE.
191    clef_stations(8) = .FALSE.
192    clef_stations(9) = .FALSE.
[1539]193
[1562]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
[1828]200    lev_files(7) = levout_histNMC(1)
201    lev_files(8) = levout_histNMC(2)
202    lev_files(9) = levout_histNMC(3)
[907]203
[1562]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
[1912]210    ecrit_files(7) = freq_outNMC(1)
211    ecrit_files(8) = freq_outNMC(2)
212    ecrit_files(9) = freq_outNMC(3)
[1279]213
[1562]214    !! Lectures des parametres de sorties dans physiq.def
[1279]215
[1791]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)
[1562]221    phys_out_levmin(:)=levmin(:)
[1791]222    CALL getin('phys_out_levmin',levmin)
[1562]223    phys_out_levmax(:)=levmax(:)
[1791]224    CALL getin('phys_out_levmax',levmax)
225    CALL getin('phys_out_filenames',phys_out_filenames)
[1562]226    phys_out_filekeys(:)=clef_files(:)
[1791]227    CALL getin('phys_out_filekeys',clef_files)
[1562]228    phys_out_filestations(:)=clef_stations(:)
[1791]229    CALL getin('phys_out_filestations',clef_stations)
[1562]230    phys_out_filelevels(:)=lev_files(:)
[1791]231    CALL getin('phys_out_filelevels',lev_files)
232    CALL getin('phys_out_filetimesteps',chtimestep)
[1562]233    phys_out_filetypes(:)=type_ecri(:)
[1791]234    CALL getin('phys_out_filetypes',type_ecri)
[1279]235
[1562]236    type_ecri_files(:)=type_ecri(:)
[1279]237
[1791]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
[1562]247
[1971]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     END IF
260
[1825]261#ifdef CPP_XIOS
262    ! ug Réglage du calendrier xios
263    !Temps julian => an, mois, jour, heure
264    CALL ju2ymds(zjulian, x_an, x_mois, x_jour, x_heure)
265    CALL wxios_set_cal(dtime, calend, x_an, x_mois, x_jour, x_heure)
266#endif
267
[907]268!!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[1562]269    ! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !!
270    ! Appel des histbeg pour definir les variables (nom, moy ou inst, freq de sortie ..
[907]271!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
272
[1807]273    zdtime_moy = dtime         ! Frequence ou l on moyenne
[1279]274
[1562]275    ! Calcul des Ahyb, Bhyb et Alt
[1791]276    DO k=1,klev
[1562]277       Ahyb(k)=(ap(k)+ap(k+1))/2.
278       Bhyb(k)=(bp(k)+bp(k+1))/2.
279       Alt(k)=log(preff/presnivs(k))*8.
[1791]280    ENDDO
[1562]281    !          if(prt_level.ge.1) then
[1791]282    WRITE(lunout,*)'Ap Hybrid = ',Ahyb(1:klev)
283    WRITE(lunout,*)'Bp Hybrid = ',Bhyb(1:klev)
284    WRITE(lunout,*)'Alt approx des couches pour une haut d echelle de 8km = ',Alt(1:klev)
[1562]285    !          endif
[1971]286  DO iff=1,nfiles
[929]287
[1641]288       ! Calculate ecrit_files for all files
[1884]289      IF ( chtimestep(iff).eq.'Default' ) then
290          ! Par defaut ecrit_files = (ecrit_mensuel ecrit_jour ecrit_hf
291          ! ...)*86400.
[1641]292          ecrit_files(iff)=ecrit_files(iff)*86400.
[1912]293      ELSE IF (chtimestep(iff).eq.'-1') then
294          PRINT*,'ecrit_files(',iff,') < 0 so IOIPSL work on different'
295          PRINT*,'months length'
296          ecrit_files(iff)=-1.
[1884]297      else
298       CALL convers_timesteps(chtimestep(iff),dtime,ecrit_files(iff))
299      ENDIF
300
[1791]301       WRITE(lunout,*)'ecrit_files(',iff,')= ',ecrit_files(iff)
[1641]302       zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit en seconde
[1279]303
[1971]304    IF (clef_files(iff)) THEN
305
[1852]306#ifdef CPP_XIOS
[1971]307!!! Ouverture de chaque fichier XIOS !!!!!!!!!!!
308    CALL wxios_add_file(phys_out_filenames(iff),chtimestep(iff),lev_files(iff)) 
309    print*,'wxios_add_file phys_out_filenames(iff)',phys_out_filenames(iff)                                                                       
310
311!!! Declaration des axes verticaux de chaque fichier:
312    print*,'Declaration des axes verticaux de chaque fichier '
313   if (iff.le.6) then
[1852]314    CALL wxios_add_vaxis("presnivs", phys_out_filenames(iff), &
315            levmax(iff) - levmin(iff) + 1, presnivs(levmin(iff):levmax(iff)))
316    CALL wxios_add_vaxis("Ahyb", phys_out_filenames(iff), &
317            levmax(iff) - levmin(iff) + 1, Ahyb)
318    CALL wxios_add_vaxis("Bhyb", phys_out_filenames(iff), &
319            levmax(iff) - levmin(iff) + 1, Bhyb)
320    CALL wxios_add_vaxis("Ahyb", phys_out_filenames(iff), &
321            levmax(iff) - levmin(iff) + 1, Alt)
[1971]322   else
323    CALL wxios_add_vaxis("plev", phys_out_filenames(iff), &
324            levmax(iff) - levmin(iff) + 1, rlevSTD(levmin(iff):levmax(iff)))
325   endif
[1852]326#endif
327
[907]328!!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !!
329!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[1791]330          IF (phys_out_regfkey(iff)) then
[1562]331             imin_ins=1
332             imax_ins=iim
333             jmin_ins=1
334             jmax_ins=jjmp1
[907]335
[1562]336             ! correction abderr       
337             do i=1,iim
[1791]338                WRITE(lunout,*)'io_lon(i)=',io_lon(i)
339                IF (io_lon(i).le.phys_out_lonmin(iff)) imin_ins=i
340                IF (io_lon(i).le.phys_out_lonmax(iff)) imax_ins=i+1
[1562]341             enddo
[907]342
[1562]343             do j=1,jjmp1
[1791]344                WRITE(lunout,*)'io_lat(j)=',io_lat(j)
345                IF (io_lat(j).ge.phys_out_latmin(iff)) jmax_ins=j+1
346                IF (io_lat(j).ge.phys_out_latmax(iff)) jmin_ins=j
[1562]347             enddo
[907]348
[1791]349             WRITE(lunout,*)'On stoke le fichier histoire numero ',iff,' sur ', &
[1562]350                  imin_ins,imax_ins,jmin_ins,jmax_ins
[1791]351             WRITE(lunout,*)'longitudes : ', &
[1562]352                  io_lon(imin_ins),io_lon(imax_ins), &
353                  'latitudes : ', &
354                  io_lat(jmax_ins),io_lat(jmin_ins)
[907]355
[1562]356             CALL histbeg(phys_out_filenames(iff),iim,io_lon,jjmp1,io_lat, &
357                  imin_ins,imax_ins-imin_ins+1, &
358                  jmin_ins,jmax_ins-jmin_ins+1, &
359                  itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
[907]360!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[1562]361             !IM fichiers stations
[1791]362          else IF (clef_stations(iff)) THEN
[1539]363
[1791]364             WRITE(lunout,*)'phys_output_mod phys_out_filenames=',phys_out_filenames(iff)
[1539]365
[1791]366             CALL histbeg_phy_all(rlon,rlat,pim,tabij,ipt,jpt,plon,plat,plon_bounds,plat_bounds, &
[1562]367                  phys_out_filenames(iff), &
368                  itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))
369          else
[1825]370             CALL histbeg_phy_all(phys_out_filenames(iff),itau_phy,zjulian,&
[1852]371                 dtime,nhorim(iff),nid_files(iff))
[1562]372          endif
[907]373
[1852]374#ifndef CPP_NO_IOIPSL
[1828]375          if (iff.le.6) then
376             CALL histvert(nid_files(iff), "presnivs", "Vertical levels", "Pa", & 
[1562]377               levmax(iff) - levmin(iff) + 1, &
378               presnivs(levmin(iff):levmax(iff)), nvertm(iff),"down")
[1807]379!!!! Composantes de la coordonnee sigma-hybride
[1562]380          CALL histvert(nid_files(iff), "Ahyb","Ahyb comp of Hyb Cord ", "Pa", &
381               levmax(iff) - levmin(iff) + 1,Ahyb,nvertap(iff))
[907]382
[1562]383          CALL histvert(nid_files(iff), "Bhyb","Bhyb comp of Hyb Cord", " ", &
384               levmax(iff) - levmin(iff) + 1,Bhyb,nvertbp(iff))
[1279]385
[1828]386          CALL histvert(nid_files(iff), "Alt","Height approx for scale heigh of 8km at levels", "Km", &                       
[1562]387               levmax(iff) - levmin(iff) + 1,Alt,nvertAlt(iff))
[1279]388
[1828]389          else
390             CALL histvert(nid_files(iff), "plev", "pressure", "Pa", &
391               levmax(iff) - levmin(iff) + 1, &
392              rlevSTD(levmin(iff):levmax(iff)), nvertm(iff), "down")
393          endif
394#endif
[907]395
[1791]396      IF (nqtot>=3) THEN
397            DO iq=3,nqtot 
398            iiq=niadv(iq)
[1828]399            o_trac(iq-2) = ctrl_out((/ 4, 5, 1, 1, 1, 10, 11, 11, 11 /), &
400                           tname(iiq),'Tracer '//ttext(iiq), "-",  &
401                           (/ '', '', '', '', '', '', '', '', '' /))
[1813]402
[1828]403            o_dtr_vdf(iq-2) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11 /), &
404                              'd'//trim(tname(iq))//'_vdf',  &
405                              'Tendance tracer '//ttext(iiq), "-" , &
406                              (/ '', '', '', '', '', '', '', '', '' /))
[1813]407
[1828]408            o_dtr_the(iq-2) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11 /), &
409                              'd'//trim(tname(iq))//'_the', &
410                              'Tendance tracer '//ttext(iiq), "-", &
411                              (/ '', '', '', '', '', '', '', '', '' /))
[1813]412
[1828]413            o_dtr_con(iq-2) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11 /), &
414                              'd'//trim(tname(iq))//'_con', &
415                              'Tendance tracer '//ttext(iiq), "-", &
416                              (/ '', '', '', '', '', '', '', '', '' /))
[1813]417
[1828]418            o_dtr_lessi_impa(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
419                                     'd'//trim(tname(iq))//'_lessi_impa', &
420                                     'Tendance tracer '//ttext(iiq), "-", &
421                                     (/ '', '', '', '', '', '', '', '', '' /))
[1813]422
[1828]423            o_dtr_lessi_nucl(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
424                                     'd'//trim(tname(iq))//'_lessi_nucl', &
425                                     'Tendance tracer '//ttext(iiq), "-", &
426                                     (/ '', '', '', '', '', '', '', '', '' /))
[1813]427
[1828]428            o_dtr_insc(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
429                               'd'//trim(tname(iq))//'_insc', &
430                               'Tendance tracer '//ttext(iiq), "-", &
431                               (/ '', '', '', '', '', '', '', '', '' /))
[1813]432
[1828]433            o_dtr_bcscav(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
434                                 'd'//trim(tname(iq))//'_bcscav', &
435                                 'Tendance tracer '//ttext(iiq), "-", &
436                                 (/ '', '', '', '', '', '', '', '', '' /))
[1813]437
[1828]438            o_dtr_evapls(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
439                                 'd'//trim(tname(iq))//'_evapls', &
440                                 'Tendance tracer '//ttext(iiq), "-", &
441                                 (/ '', '', '', '', '', '', '', '', '' /))
[1813]442
[1828]443            o_dtr_ls(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
444                             'd'//trim(tname(iq))//'_ls', &
445                             'Tendance tracer '//ttext(iiq), "-", &
446                             (/ '', '', '', '', '', '', '', '', '' /))
[1813]447
[1828]448            o_dtr_trsp(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
449                               'd'//trim(tname(iq))//'_trsp', &
450                               'Tendance tracer '//ttext(iiq), "-", &
451                               (/ '', '', '', '', '', '', '', '', '' /))
[1813]452
[1828]453            o_dtr_sscav(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
454                                'd'//trim(tname(iq))//'_sscav', &
455                                'Tendance tracer '//ttext(iiq), "-", &
456                                (/ '', '', '', '', '', '', '', '', '' /))
[1813]457
[1828]458            o_dtr_sat(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
459                               'd'//trim(tname(iq))//'_sat', &
460                               'Tendance tracer '//ttext(iiq), "-", &
461                               (/ '', '', '', '', '', '', '', '', '' /))
[1813]462
[1828]463            o_dtr_uscav(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
464                                'd'//trim(tname(iq))//'_uscav', &
465                                'Tendance tracer '//ttext(iiq), "-", &
466                                 (/ '', '', '', '', '', '', '', '', '' /))
[1813]467
[1828]468            o_dtr_dry(iq-2) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11 /), &
469                              'cum'//'d'//trim(tname(iq))//'_dry', &
470                              'tracer tendency dry deposition'//ttext(iiq), "-", &
471                              (/ '', '', '', '', '', '', '', '', '' /))
[1813]472
[1828]473            o_trac_cum(iq-2) = ctrl_out((/ 3, 4, 10, 10, 10, 10, 11, 11, 11 /), &
474                               'cum'//tname(iiq),&
475                               'Cumulated tracer '//ttext(iiq), "-", &
476                               (/ '', '', '', '', '', '', '', '', '' /))
[1791]477            ENDDO
478      ENDIF
[1539]479
[1971]480     ENDIF ! clef_files
[1539]481
[1971]482   ENDDO !  iff
[1539]483
[1641]484    ! Updated write frequencies due to phys_out_filetimesteps.
485    ! Write frequencies are now in seconds. 
486    ecrit_mth = ecrit_files(1)
487    ecrit_day = ecrit_files(2)
488    ecrit_hf  = ecrit_files(3)
489    ecrit_ins = ecrit_files(4)
490    ecrit_LES = ecrit_files(5)
491    ecrit_ins = ecrit_files(6)
492
[1791]493    WRITE(lunout,*)'swaero_diag=',swaero_diag
494    WRITE(lunout,*)'Fin phys_output_mod.F90'
[1920]495
[1791]496  end SUBROUTINE phys_output_open
[907]497
498
499
[1562]500  SUBROUTINE convers_timesteps(str,dtime,timestep)
[1279]501
[1562]502    use ioipsl
503    USE phys_cal_mod
[1279]504
[1562]505    IMPLICIT NONE
[1279]506
[1791]507    CHARACTER(LEN=20)   :: str
508    CHARACTER(LEN=10)   :: type
509    INTEGER             :: ipos,il
[1562]510    real                :: ttt,xxx,timestep,dayseconde,dtime
511    parameter (dayseconde=86400.)
512    include "temps.h"
513    include "comconst.h"
[1575]514    include "iniprint.h"
[1279]515
[1791]516    ipos=scan(str,'0123456789.',.TRUE.)
[1562]517    ! 
518    il=len_trim(str)
[1937]519    WRITE(lunout,*) "ipos = ", ipos
520    WRITE(lunout,*) "il = ", il
521    if (ipos == 0) call abort_gcm("convers_timesteps", "bad str", 1)
[1562]522    read(str(1:ipos),*) ttt
[1791]523    WRITE(lunout,*)ttt
[1562]524    type=str(ipos+1:il)
[1279]525
526
[1791]527    IF ( il == ipos ) then
[1562]528       type='day'
529    endif
[1279]530
[1791]531    IF ( type == 'day'.or.type == 'days'.or.type == 'jours'.or.type == 'jour' ) timestep = ttt * dayseconde
532    IF ( type == 'mounths'.or.type == 'mth'.or.type == 'mois' ) then
533       WRITE(lunout,*)'annee_ref,day_ref mon_len',annee_ref,day_ref,mth_len
[1562]534       timestep = ttt * dayseconde * mth_len
535    endif
[1791]536    IF ( type == 'hours'.or.type == 'hr'.or.type == 'heurs') timestep = ttt * dayseconde / 24.
537    IF ( type == 'mn'.or.type == 'minutes'  ) timestep = ttt * 60.
538    IF ( type == 's'.or.type == 'sec'.or.type == 'secondes'   ) timestep = ttt
539    IF ( type == 'TS' ) timestep = ttt * dtime
[1279]540
[1791]541    WRITE(lunout,*)'type =      ',type
542    WRITE(lunout,*)'nb j/h/m =  ',ttt
543    WRITE(lunout,*)'timestep(s)=',timestep
[1279]544
[1562]545  END SUBROUTINE convers_timesteps
[1279]546
[907]547END MODULE phys_output_mod
548
Note: See TracBrowser for help on using the repository browser.