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

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