1 / 8

How to add a tracer in ECHAM6?

How to add a tracer in ECHAM6?. mo_transport.f90. MODULE mo_transport USE mo_kind , ONLY: dp USE mo_time_conversion ONLY: time_days IMPLICIT NONE PRIVATE

rea
Télécharger la présentation

How to add a tracer in ECHAM6?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. How to add a tracer in ECHAM6?

  2. mo_transport.f90 MODULE mo_transport USE mo_kind, ONLY: dp USE mo_time_conversion ONLY: time_days IMPLICIT NONE PRIVATE PUBLIC :: init_transport, bcond_transport CHARACTER (LEN=9), PARAMETER :: c_mod_name=’transport’ INTEGER :: dt_start_emission(6)=(/1991,6,15,0,0,0/) REAL(dp) :: emission_flux=1.0_dp ! emission msaafluz in kg/s REAL(dp) :: emission_lon=12._dp, emission_lat=40._dp, emission_plec=500._dp INTEGER :: idx_lev_emission TYPE(time_days), SAVE :: start_emission REAL(dp), pointer :: emission_mask(:,:) INTEGER :: idx_xtrans ! tracer index CHARACTER(LEN=24) :: trname ! tracer base name CHARACTER(LEN=256) :: trmodule !< module name

  3. SUBROUTINE init_transport SUBROUTINE init_transport USE mo_exception, ONLY: finish, message USE mo_mpi, ONLY: p_parallel_io, p_parallel, p_io, p_bcast USE mo_namelist, ONLY: position_nml, open_nml, & POSITIONED, MISSING, & LENGTH_ERROR, READ_ERROR USE mo_tracer, ONLY: new_tracer, get_tracer USE mo_tracdef, ONLY: ON, OFF, GAS, RESTART, CONSTANT USE mo_time_conversion, ONLY: TC_set, TC_convert, time_native USE mo_memory_base, ONLY: new_stream, add_stream_element, t_stream USE mo_gaussgrid, ONLY: philon, philat, gridarea USE mo_transpose, ONLY: scatter_gp USE mo_decomposition, ONLY: dc => local_decomposition,global_decomposition USE mo_control, ONLY: nlev, nvclev, vct ! for hyai, hybi coefficients USE mo_util_string, ONLY: int2string ……

  4. SUBROUTINE init_transport …… ! define new tracer xtrans if it does not exist already trname = 'xtrans' CALL get_tracer (trname, idx = idx_xtrans, modulename=trmodule, ierr = ierr) !, pxt = co2, pxtm1 = co2m1) IF (ierr==1) THEN CALL new_tracer( & trname, &! tracer name 'transport', &! module name idx=idx_xtrans, &! tracer index (out) units = 'kg kg-1', & ninit = RESTART+CONSTANT, & vini = 0.0_dp, & ierr = ierr) ELSE CALL finish ('mo_transport ( init_transport )','Tracer '''//trname//''' already exists '//& 'defined by module '//TRIM(trmodule)) END IF ……

  5. ninit • Initialization of tracer mixing ratios in one integer • constant: set tracer mixing ratio to a globally constant value at start of run • restart: at restart, read mmr from restart file • Initial: set tracer mmr to same distribution read from file(at beginning of experiment) • Hierarchy in ECHAM: restart→ initial(values from file)→ constant

  6. Submodel mo_tracer.f90 SUBROUTINE new_tracer (name, modulename, spid, subname,longname, & ! names... units, trtype, nphase, mode, & ninit, nrerun, vini, & ! initialisation nwrite, nint, code, table, bits, & ! output burdenid, nbudget, & ! diagnostics ntran, nfixtyp, nvdiff, nconv, & ! processes ndrydep, nwetdep, nsedi, nemis, nsoluble, & moleweight, tdecay, & ! species properties !!mgs!! moleweight, henry, dryreac, tdecay, & ! species properties idx, myflag, ierr) ! return info

  7. Submodel mo_tracer.f90 • CHARACTER(len=*) ,INTENT(in) :: name ! name of tracer • CHARACTER(len=*) ,INTENT(in) :: modulename! name of routine/module • INTEGER ,INTENT(in) ,OPTIONAL :: spid ! species index • CHARACTER(len=*) ,INTENT(in) ,OPTIONAL :: subname ! optional for 'colored' • CHARACTER(len=*) ,INTENT(in) ,OPTIONAL :: longname ! long name • CHARACTER(len=*) ,INTENT(in) ,OPTIONAL :: units ! units • INTEGER ,INTENT(in) ,OPTIONAL :: trtype ! tracer type • INTEGER ,INTENT(in) ,OPTIONAL :: nphase ! phase indicator • INTEGER ,INTENT(in) ,OPTIONAL :: mode ! mode indicator or bin number • INTEGER ,INTENT(in) ,OPTIONAL :: ninit ! initialisation flag • INTEGER ,INTENT(in) ,OPTIONAL :: nrerun ! restart flag • REAL(dp) ,INTENT(in) ,OPTIONAL :: vini ! initialisation value • INTEGER ,INTENT(in) ,OPTIONAL :: nwrite ! flag to print tracer • INTEGER ,INTENT(in) ,OPTIONAL :: nint ! integration flag

  8. INTEGER ,INTENT(in) ,OPTIONAL :: code ! grib code • INTEGER ,INTENT(in) ,OPTIONAL :: table ! grib table • INTEGER ,INTENT(in) ,OPTIONAL :: bits ! grib encoding bits • INTEGER ,INTENT(in) ,OPTIONAL :: burdenid ! burden diagnostics number • INTEGER ,INTENT(in) ,OPTIONAL :: nbudget ! budget diagnostics • INTEGER ,INTENT(in) ,OPTIONAL :: ntran ! transport switch • INTEGER ,INTENT(in) ,OPTIONAL :: nfixtyp ! type of mass fixer • INTEGER ,INTENT(in) ,OPTIONAL :: nvdiff ! vertical diffusion fl. • INTEGER ,INTENT(in) ,OPTIONAL :: nconv ! convection flag • INTEGER ,INTENT(in) ,OPTIONAL :: ndrydep ! dry deposition flag • INTEGER ,INTENT(in) ,OPTIONAL :: nwetdep ! wet deposition flag • INTEGER ,INTENT(in) ,OPTIONAL :: nsedi ! sedimentation flag • INTEGER ,INTENT(in) ,OPTIONAL :: nemis ! surface emission flag • INTEGER ,INTENT(in) ,OPTIONAL :: nsoluble ! soluble flag

More Related