Ignore:
Timestamp:
Nov 20, 2016, 2:15:32 PM (8 years ago)
Author:
oboucher
Message:

This revision concerns the StratAer? module and should not impact the rest of LMDz
Bug correction in interp_sulf_input.F90
Update of miecalc_aer.F90 and traccoag_mod.F90
Phytrac tracers are now dealt with in XIOS through the Fortran interface with minimal input in the xml
Making tracer groups in DefLists? for StratAer?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90

    r2690 r2704  
    66  USE phytrac_mod, ONLY : d_tr_cl, d_tr_th, d_tr_cv, d_tr_lessi_impa, &
    77       d_tr_lessi_nucl, d_tr_insc, d_tr_bcscav, d_tr_evapls, d_tr_ls,  &
    8        d_tr_trsp, d_tr_sscav, d_tr_sat, d_tr_uscav
     8       d_tr_trsp, d_tr_sscav, d_tr_sat, d_tr_uscav, flux_tr_dry
    99
    1010  ! Author: Abderrahmane IDELKADI (original include file)
     
    2424    ! defined and initialised in phys_output_mod.F90
    2525
    26     USE dimphy, only: klon, klev, klevp1
     26    USE dimphy, ONLY: klon, klev, klevp1
     27    USE infotrac, ONLY: nbtr
    2728    USE mod_phys_lmdz_para, ONLY: is_north_pole_phy,is_south_pole_phy
    2829    USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat
    29     USE time_phylmdz_mod, only: day_step_phy, start_time, itau_phy
    30     USE phys_output_ctrlout_mod, only: o_phis, o_aire, is_ter, is_lic, is_oce, &
     30    USE time_phylmdz_mod, ONLY: day_step_phy, start_time, itau_phy
     31    USE phys_output_ctrlout_mod, ONLY: o_phis, o_aire, is_ter, is_lic, is_oce, &
    3132         is_ave, is_sic, o_contfracATM, o_contfracOR, &
    3233         o_aireTER, o_flat, o_slp, o_ptstar, o_pt0, o_tsol, &
     
    163164         o_dtr_lessi_impa, o_dtr_lessi_nucl, &
    164165         o_dtr_insc, o_dtr_bcscav, o_dtr_evapls, &
    165          o_dtr_ls, o_dtr_trsp, o_dtr_sscav, &
     166         o_dtr_ls, o_dtr_trsp, o_dtr_sscav, o_dtr_dry, &
    166167         o_dtr_sat, o_dtr_uscav, o_trac_cum, o_du_gwd_rando, o_dv_gwd_rando, &
    167168         o_ustr_gwd_hines,o_vstr_gwd_hines,o_ustr_gwd_rando,o_vstr_gwd_rando, &
     
    183184
    184185#ifdef CPP_StratAer
    185     USE phys_output_ctrlout_mod, only:  &
     186    USE phys_output_ctrlout_mod, ONLY:  &
    186187         o_sulf_convert, o_sulf_nucl, o_sulf_cond_evap, o_ocs_convert, &
    187188         o_sfluxaer, o_R2SO4, o_OCS_lifetime, o_SO2_lifetime, &
     
    191192#endif
    192193
    193     USE phys_state_var_mod, only: pctsrf, paire_ter, rain_fall, snow_fall, &
     194    USE phys_state_var_mod, ONLY: pctsrf, paire_ter, rain_fall, snow_fall, &
    194195         qsol, z0m, z0h, fevap, agesno, &
    195196         nday_rain, rain_con, snow_con, &
     
    218219         vphiSTD, wTSTD, u2STD, v2STD, T2STD, missing_val_nf90
    219220
    220     USE phys_local_var_mod, only: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
     221    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
    221222         t2m_min_mon, t2m_max_mon, evap, &
    222223         l_mixmin,l_mix, &
     
    282283
    283284#ifdef CPP_StratAer
    284     USE phys_local_var_mod, only:  &
     285    USE phys_local_var_mod, ONLY:  &
    285286         sulf_convert, sulf_nucl, sulf_cond_evap, ocs_convert, &
    286287         sfluxaer, R2SO4, OCS_lifetime, SO2_lifetime, &
     
    290291#endif
    291292
    292     USE phys_output_var_mod, only: vars_defined, snow_o, zfra_o, bils_diss, &
     293    USE phys_output_var_mod, ONLY: vars_defined, snow_o, zfra_o, bils_diss, &
    293294         bils_ec,bils_ech, bils_tke, bils_kinetic, bils_latent, bils_enthalp, &
    294295         itau_con, nfiles, clef_files, nid_files, &
     
    309310         alt_tropo
    310311
    311     USE ocean_slab_mod, only: nslay, tslab, slab_bils, slab_bilg, tice, &
     312    USE ocean_slab_mod, ONLY: nslay, tslab, slab_bils, slab_bilg, tice, &
    312313        seaice, slab_ekman,slab_hdiff, dt_ekman, dt_hdiff
    313     USE pbl_surface_mod, only: snow
    314     USE indice_sol_mod, only: nbsrf
    315     USE infotrac_phy, only: nqtot, nqo, type_trac
    316     USE geometry_mod, only: cell_area
    317     USE surface_data, only: type_ocean, version_ocean, ok_veget, ok_snow
    318 !    USE aero_mod, only: naero_spc
    319     USE aero_mod, only: naero_tot, id_STRAT_phy
    320     USE ioipsl, only: histend, histsync
    321     USE iophy, only: set_itau_iophy, histwrite_phy
    322     USE netcdf, only: nf90_fill_real
     314    USE pbl_surface_mod, ONLY: snow
     315    USE indice_sol_mod, ONLY: nbsrf
     316    USE infotrac_phy, ONLY: nqtot, nqo, type_trac, tname, niadv
     317    USE geometry_mod, ONLY: cell_area
     318    USE surface_data, ONLY: type_ocean, version_ocean, ok_veget, ok_snow
     319!    USE aero_mod, ONLY: naero_spc
     320    USE aero_mod, ONLY: naero_tot, id_STRAT_phy
     321    USE ioipsl, ONLY: histend, histsync
     322    USE iophy, ONLY: set_itau_iophy, histwrite_phy
     323    USE netcdf, ONLY: nf90_fill_real
    323324    USE print_control_mod, ONLY: prt_level,lunout
    324325
     
    326327#ifdef CPP_XIOS
    327328    ! ug Pour les sorties XIOS
    328     USE xios, ONLY: xios_update_calendar
    329     USE wxios, only: wxios_closedef, missing_val
    330 #endif
    331     USE phys_cal_mod, only : mth_len
     329    USE xios
     330    USE wxios, ONLY: wxios_closedef, missing_val
     331#endif
     332    USE phys_cal_mod, ONLY : mth_len
    332333
    333334#ifdef CPP_RRTM
     
    336337
    337338    IMPLICIT NONE
    338 
    339339
    340340    INCLUDE "clesphys.h"
     
    364364    ! Local
    365365    INTEGER :: itau_w
    366     INTEGER :: i, iinit, iinitend=1, iff, iq, nsrf, k, ll, naero
     366    INTEGER :: i, iinit, iinitend=1, iff, iq, iiq, nsrf, k, ll, naero
    367367    REAL, DIMENSION (klon) :: zx_tmp_fi2d
    368368    REAL, DIMENSION (klon,klev) :: zx_tmp_fi3d, zpt_conv
     
    379379    INTEGER ISW
    380380    CHARACTER*1 ch1
     381    CHARACTER*20 varname
     382
     383#ifdef CPP_XIOS
     384    TYPE(xios_fieldgroup) :: group_handle
     385    TYPE(xios_field) :: child
     386#endif
    381387
    382388    ! On calcul le nouveau tau:
     
    390396       iinitend = 1
    391397    ENDIF
     398
     399#ifdef CPP_XIOS
     400#ifdef CPP_StratAer
     401    IF (.NOT.vars_defined) THEN
     402          !On ajoute les variables 3D traceurs par l interface fortran
     403          CALL xios_get_handle("fields_strataer_trac_3D", group_handle)
     404          ! On boucle sur les traceurs pour les ajouter au groupe puis fixer les attributs
     405          DO iq=nqo+1, nqtot
     406            iiq=niadv(iq)
     407            varname=trim(tname(iiq))
     408            WRITE (lunout,*) 'XIOS var=', nqo, iq, varname
     409            CALL xios_add_child(group_handle, child, varname)
     410            CALL xios_set_attr(child, name=varname, unit="kg kg-1")
     411            varname='d'//trim(tname(iiq))//'_vdf'
     412            CALL xios_add_child(group_handle, child, varname)
     413            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     414            varname='d'//trim(tname(iiq))//'_the'
     415            CALL xios_add_child(group_handle, child, varname)
     416            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     417            varname='d'//trim(tname(iiq))//'_con'
     418            CALL xios_add_child(group_handle, child, varname)
     419            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     420            varname='d'//trim(tname(iiq))//'_lessi_impa'
     421            CALL xios_add_child(group_handle, child, varname)
     422            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     423            varname='d'//trim(tname(iiq))//'_lessi_nucl'
     424            CALL xios_add_child(group_handle, child, varname)
     425            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     426            varname='d'//trim(tname(iiq))//'_insc'
     427            CALL xios_add_child(group_handle, child, varname)
     428            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     429            varname='d'//trim(tname(iiq))//'_bcscav'
     430            CALL xios_add_child(group_handle, child, varname)
     431            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     432            varname='d'//trim(tname(iiq))//'_evapls'
     433            CALL xios_add_child(group_handle, child, varname)
     434            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     435            varname='d'//trim(tname(iiq))//'_ls'
     436            CALL xios_add_child(group_handle, child, varname)
     437            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     438            varname='d'//trim(tname(iiq))//'_trsp'
     439            CALL xios_add_child(group_handle, child, varname)
     440            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     441            varname='d'//trim(tname(iiq))//'_sscav'
     442            CALL xios_add_child(group_handle, child, varname)
     443            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     444            varname='d'//trim(tname(iiq))//'_sat'
     445            CALL xios_add_child(group_handle, child, varname)
     446            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     447            varname='d'//trim(tname(iiq))//'_uscav'
     448            CALL xios_add_child(group_handle, child, varname)
     449            CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     450          ENDDO
     451          !On ajoute les variables 2D traceurs par l interface fortran
     452          CALL xios_get_handle("fields_strataer_trac_2D", group_handle)
     453          ! On boucle sur les traceurs pour les ajouter au groupe puis fixer les attributs
     454          DO iq=nqo+1, nqtot
     455            iiq=niadv(iq)
     456            varname='cum'//trim(tname(iiq))
     457            WRITE (lunout,*) 'XIOS var=', iq, varname
     458            CALL xios_add_child(group_handle, child, varname)
     459            CALL xios_set_attr(child, name=varname, unit="kg m-2")
     460            varname='cumd'//trim(tname(iiq))//'_dry'
     461            CALL xios_add_child(group_handle, child, varname)
     462            CALL xios_set_attr(child, name=varname, unit="kg m-2 s-1")
     463          ENDDO
     464    ENDIF
     465#endif
     466#endif
    392467
    393468    ! ug la boucle qui suit ne sert qu'une fois, pour l'initialisation, sinon il n'y a toujours qu'un seul passage:
     
    17851860#endif
    17861861!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    1787         IF (nqtot.GE.nqo+1) THEN
    1788           DO iq=nqo+1,nqtot
     1862       IF (nqtot.GE.nqo+1) THEN
     1863          DO iq=nqo+1, nqtot
    17891864            IF (type_trac == 'lmdz' .OR. type_trac == 'repr' .OR. type_trac == 'coag') THEN
     1865             !--3D fields
    17901866             CALL histwrite_phy(o_trac(iq-nqo), tr_seri(:,:,iq-nqo))
    17911867             CALL histwrite_phy(o_dtr_vdf(iq-nqo),d_tr_cl(:,:,iq-nqo))
     
    18021878             CALL histwrite_phy(o_dtr_sat(iq-nqo),d_tr_sat(:,:,iq-nqo))
    18031879             CALL histwrite_phy(o_dtr_uscav(iq-nqo),d_tr_uscav(:,:,iq-nqo))
     1880             !--2D fields
     1881             CALL histwrite_phy(o_dtr_dry(iq-nqo), flux_tr_dry(:,iq-nqo))
    18041882             zx_tmp_fi2d=0.
    18051883             IF (vars_defined) THEN
     
    18211899                ndex2d = 0
    18221900                ndex3d = 0
    1823 
    18241901             ENDIF ! clef_files
    18251902          ENDDO !  iff
     
    18321909          !$OMP BARRIER
    18331910          vars_defined = .TRUE.
    1834        ENDIF
     1911
     1912       ENDIF !--.NOT.vars_defined
    18351913
    18361914    ENDDO
Note: See TracChangeset for help on using the changeset viewer.