Ignore:
Timestamp:
Dec 15, 2021, 11:18:49 PM (2 years ago)
Author:
dcugnet
Message:

First commit for new tracers.

  • parser routines readTracFiles, strings_mod and tracer_types added in misc using revision 4 of https://svn.lmd.jussieu.fr/tracers-parser
  • tested in sequential and parallel mode using ioipsl.
  • for now, only two fields of "tracers(:)" derived type vector are used: "name" and "longName".
File:
1 edited

Legend:

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

    r3956 r4046  
    2525
    2626    USE dimphy, ONLY: klon, klev, klevp1
    27     USE infotrac_phy, ONLY: nbtr
     27    USE infotrac_phy, ONLY: nbtr, nqtot, nqo, type_trac, tracers, niadv
     28    USE strings_mod,  ONLY: maxlen
    2829    USE mod_phys_lmdz_para, ONLY: is_north_pole_phy,is_south_pole_phy
    2930    USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat
     
    366367    USE pbl_surface_mod, ONLY: snow
    367368    USE indice_sol_mod, ONLY: nbsrf
    368     USE infotrac_phy, ONLY: nqtot, nqo, type_trac, tname, niadv
    369369    USE geometry_mod, ONLY: cell_area, latitude_deg, longitude_deg
    370370    USE surface_data, ONLY: type_ocean, version_ocean, ok_veget, landice_opt
     
    441441    INTEGER ISW
    442442    CHARACTER*1 ch1
    443     CHARACTER*20 varname
     443    CHARACTER(LEN=maxlen) :: varname, dn
    444444
    445445#ifdef CPP_XIOS
     
    454454
    455455    INTEGER :: nqup
     456
    456457
    457458    ! On calcul le nouveau tau:
     
    512513          DO iq=nqo+1, nqtot
    513514            iiq=niadv(iq)
    514             varname=trim(tname(iiq))
    515             WRITE (lunout,*) 'XIOS var=', nqo, iq, nqtot, varname
     515            dn = 'd'//TRIM(tracers(iiq)%name)//'_'
     516            WRITE (lunout,*) 'XIOS var=', nqo, iq, nqtot, tracers(iiq)%name
     517
     518            unt = "kg kg-1"
     519            varname=trim(tracers(iiq)%name)
    516520            CALL xios_add_child(group_handle, child, varname)
    517             CALL xios_set_attr(child, name=varname, unit="kg kg-1")
    518             varname='d'//trim(tname(iiq))//'_vdf'
     521            CALL xios_set_attr(child, name=varname, unit=unt)
     522
     523            unt = "kg kg-1 s-1"
     524            varname=TRIM(dn)//'vdf'
    519525            CALL xios_add_child(group_handle, child, varname)
    520             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    521             varname='d'//trim(tname(iiq))//'_the'
     526            CALL xios_set_attr(child, name=varname, unit=unt)
     527            varname=TRIM(dn)//'the'
    522528            CALL xios_add_child(group_handle, child, varname)
    523             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    524             varname='d'//trim(tname(iiq))//'_con'
     529            CALL xios_set_attr(child, name=varname, unit=unt)
     530            varname=TRIM(dn)//'con'
    525531            CALL xios_add_child(group_handle, child, varname)
    526             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    527             varname='d'//trim(tname(iiq))//'_lessi_impa'
     532            CALL xios_set_attr(child, name=varname, unit=unt)
     533            varname=TRIM(dn)//'lessi_impa'
    528534            CALL xios_add_child(group_handle, child, varname)
    529             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    530             varname='d'//trim(tname(iiq))//'_lessi_nucl'
     535            CALL xios_set_attr(child, name=varname, unit=unt)
     536            varname=TRIM(dn)//'lessi_nucl'
    531537            CALL xios_add_child(group_handle, child, varname)
    532             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    533             varname='d'//trim(tname(iiq))//'_insc'
     538            CALL xios_set_attr(child, name=varname, unit=unt)
     539            varname=TRIM(dn)//'insc'
    534540            CALL xios_add_child(group_handle, child, varname)
    535             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    536             varname='d'//trim(tname(iiq))//'_bcscav'
     541            CALL xios_set_attr(child, name=varname, unit=unt)
     542            varname=TRIM(dn)//'bcscav'
    537543            CALL xios_add_child(group_handle, child, varname)
    538             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    539             varname='d'//trim(tname(iiq))//'_evapls'
     544            CALL xios_set_attr(child, name=varname, unit=unt)
     545            varname=TRIM(dn)//'evapls'
    540546            CALL xios_add_child(group_handle, child, varname)
    541             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    542             varname='d'//trim(tname(iiq))//'_ls'
     547            CALL xios_set_attr(child, name=varname, unit=unt)
     548            varname=TRIM(dn)//'ls'
    543549            CALL xios_add_child(group_handle, child, varname)
    544             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    545             varname='d'//trim(tname(iiq))//'_trsp'
     550            CALL xios_set_attr(child, name=varname, unit=unt)
     551            varname=TRIM(dn)//'trsp'
    546552            CALL xios_add_child(group_handle, child, varname)
    547             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    548             varname='d'//trim(tname(iiq))//'_sscav'
     553            CALL xios_set_attr(child, name=varname, unit=unt)
     554            varname=TRIM(dn)//'sscav'
    549555            CALL xios_add_child(group_handle, child, varname)
    550             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    551             varname='d'//trim(tname(iiq))//'_sat'
     556            CALL xios_set_attr(child, name=varname, unit=unt)
     557            varname=TRIM(dn)//'sat'
    552558            CALL xios_add_child(group_handle, child, varname)
    553             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
    554             varname='d'//trim(tname(iiq))//'_uscav'
     559            CALL xios_set_attr(child, name=varname, unit=unt)
     560            varname=TRIM(dn)//'uscav'
    555561            CALL xios_add_child(group_handle, child, varname)
    556             CALL xios_set_attr(child, name=varname, unit="kg kg-1 s-1")
     562            CALL xios_set_attr(child, name=varname, unit=unt)
    557563          ENDDO
    558564          !On ajoute les variables 2D traceurs par l interface fortran
     
    561567          DO iq=nqo+1, nqtot
    562568            iiq=niadv(iq)
    563             varname='cum'//trim(tname(iiq))
     569
     570            unt = "kg m-2"
     571            varname='cum'//trim(tracers(iiq)%name)
    564572            WRITE (lunout,*) 'XIOS var=', iq, nqtot, varname
    565573            CALL xios_add_child(group_handle, child, varname)
    566             CALL xios_set_attr(child, name=varname, unit="kg m-2")
    567             varname='cumd'//trim(tname(iiq))//'_dry'
     574            CALL xios_set_attr(child, name=varname, unit=unt)
     575
     576            unt = "kg m-2 s-1"
     577            varname='cumd'//trim(tracers(iiq)%name)//'_dry'
    568578            CALL xios_add_child(group_handle, child, varname)
    569             CALL xios_set_attr(child, name=varname, unit="kg m-2 s-1")
     579            CALL xios_set_attr(child, name=varname, unit=unt)
    570580          ENDDO
    571581    ENDIF
     
    573583#endif
    574584#endif
     585
    575586    ! ug la boucle qui suit ne sert qu'une fois, pour l'initialisation, sinon il n'y a toujours qu'un seul passage:
    576587    DO iinit=1, iinitend
     
    600611       ENDIf
    601612       CALL histwrite_phy(o_aire, zx_tmp_fi2d)
    602 
    603613       IF (vars_defined) THEN
    604614          DO i=1, klon
Note: See TracChangeset for help on using the changeset viewer.