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

Last change on this file since 2452 was 2380, checked in by musat, 10 years ago

Bug fix for 1D cases concerning outputs on NMC levels when running with
instal1D.sh
IM

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