123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594 |
- ! ######################################################################
- ! ###
- ! ### TM5 - Expert settings.
- ! ###
- ! ### The variables '${..}' in this file are expanded on reading.
- ! ### See the description in 'rc.py' .
- ! ### Special variables are (read 'S' as '$'):
- ! ### S{pid} : evalutates to the process id of the calling script
- ! ### S{script} : " " " name " " " "
- ! ###
- ! ######################################################################
- ! ------------------------------------------------
- ! logging
- ! ------------------------------------------------
- ! Default setting for print debug messages (True|False) ? Passing '--verbose'
- ! or '-v' options to setup_tm5 script will set this value to 'True'
- verbose : False
- ! set log file for setup script:
- logfile : ${script}.0000.log
- ! ------------------------------------------------
- ! run directory (where submit script, executable, and settings are installed)
- ! ------------------------------------------------
- rundir : ${my.run.dir}
- ! ------------------------------------------------
- ! build source
- ! ------------------------------------------------
- !
- ! Building an executable could consist of 3 steps:
- ! copy : gather a source code into a build directory
- ! configure : generate source files if necessary, create Makefile
- ! make : compile and link executable
- !
- ! absolute path of location where code is gathered
- build.prefix : ${my.project.dir}/build
- ! extend with flag groups ? e.g. build_optim-all_mpi
- ! a link with the original name will be created to this extended name
- build.prefix.extend : True
- ! actual source codes will end up here (must be one of build.copy.subdirs)
- build.sourcedir : ${build.prefix}
- ! Number of jobs (commands) to run simultaneously.
- ! An empty value indicates unlimitted number, which might claim all resources;
- ! better is to specify a value which will be the default maximum.
- ! The value is overwritten by the '-j' or '--jobs' flag passed to the submit script
- ! The final number (specified here or from the flags) will be inserted in the maker command:
- ! maker : gmake -j ${build.jobs}
- !
- build.jobs : 8
- !build.jobs : 1
- ! remove existing build directory for a complete new copy of code and scripts ?
- ! NOTE: this flag is set to true by the '--new' option. This is equivalent to 'realclean' in many other programs.
- build.new : False
- !
- ! Create a source
- !
- ! gather source code into the build prefix directory (True|False) ?
- build.copy : True
- ! list of source directories, content of which (build.copy.subdirs) will be copied into build.prefix
- ! files in latest directory overwrite previously copied versions:
- build.copy.dirs : base ${my.source.levs} ${my.source.proj}
- ! what is copied from the build.copy.dirs (one of those must contains
- ! the bin with the pycasso scripts, UNLESS ${my.project.dir} is also
- ! current installation, i.e. "build in place" case)
- #if "${my.project.dir}" != "${PWD}":
- build.copy.subdirs : . ../bin
- #else
- build.copy.subdirs : .
- #endif
- ! remove project extenstions (True|False) ?
- build.copy.remove.__part : True
- ! skip some extensions (list of regex pattern) ?
- build.copy.skip.ext : \.pyc$ \..*~$ \..+#
- ! skip some files ? include in this list:
- ! o files that are (re)written by the scripts, e.g. include files and dims_grid.F90;
- ! if these are copied, the creation times are obscured, which leads to a
- ! re-make during every build
- ! o old stuff that should be removed in a new version;
- ! skip them now to test if these files are really not necessary anymore
- !
- build.copy.skip.file : configure config.compiler \
- Makefile.template Makefile.tm5 \
- parray_cwp.F90.in parray_iwp.F90.in parray_rwp.F90.in \
- file_hdf_iwp.F90.in file_hdf_rwp.F90.in \
- tmkit.F90 \
- advect.h \
- dims_grid.h_template dims_grid.F90 \
- mdf.h tmm.h tm5.h \
- mdf.inc tmm.inc tm5.inc \
- tmm_mf_hdf.F90 tmm_mf_grib.F90 tmm_mf_ecmwf_mars.F90 \
- rcfilename.h
- ! extend python path with '<build>/py' directory (True|False) ?
- build.copy.pypath : False
- !
- ! configure
- !
- ! configure source (True|False) ?
- build.configure : True
- ! * macro's
- ! defined macro's :
- build.configure.macro.define : ${my.df.define} \
- ${my.tmm.define} \
- ${my.tm5.define}
- ! Specify a list of macro groups:
- build.configure.macro.groups : go num grid mdf tmm tm5 user_output
- ! For each of the groups, specify:
- !
- ! o all supported macro's
- ! (sometimes necessary to identify which macros are NOT defined ...)
- !
- ! o optionally the name of header file; if provided,
- ! this file is filed with appropriate '#define' commands
- !
- ! In addition to the macro's defined here, others might be defined
- ! in 'pycasso_user_scripts/Build_Define' given the other settings.
- !
- ! ~ GO modules
- ! TO BE REMOVED:
- ! with_go # not necessary, go modules present by default
- ! PRINT_MINU # used for testing ?
- build.configure.macro.go.all : __INTEL_COMPILER \
- __GFORTRAN__ \
- __GNUC____GNUC_MINOR____GNUC_PATCHLEVEL__ \
- __IBMC__ \
- __ecmwf__ \
- with_go \
- PRINT_MINU
- build.configure.macro.go.hfile :
- !
- ! ~ num modules:
- build.configure.macro.num.all : with_lapack
- build.configure.macro.num.hfile :
- !
- ! ~ grid modules:
- build.configure.macro.grid.all : check_all
- build.configure.macro.grid.hfile :
- !
- ! ~ mdf interface to hdf/netcdf
- ! TO BE REMOVED:
- ! with_go # not necessary, go modules present by default
- ! with_hdf5_beta # testing ...
- build.configure.macro.mdf.all : with_hdf4 \
- with_hdf5 with_hdf5_par \
- with_netcdf with_netcdf4 with_netcdf4_par \
- with_go \
- with_hdf5_beta
- build.configure.macro.mdf.hfile : mdf.inc
- !
- ! ~ tmm meteo input
- build.configure.macro.tmm.all : with_tmm_tmpp \
- with_tmm_tm5 \
- with_tmm_ecmwf \
- with_tmm_ecearth \
- with_tmm_ncep \
- with_tmm_msc \
- with_prism \
- with_tmm_convec_raw with_tmm_convec_ec with_tmm_convec_ec_gg with_ec_aver \
- with_grib_api \
- with_parallel_io_meteo \
- with_udunits1 with_udunits2
- build.configure.macro.tmm.hfile : tmm.inc
- !
- ! ~ tm5 settings
- !
- ! Cpp used in coupled version of TM5:
- my.macro.tm5.coupling.all : with_prism \
- oasis3 \
- oasis4 \
- with_tendencies \
- with_ecearth_optics \
- with_feedback
- !
- ! List of all C-pre-processors flags used in the code. BUT:
- !
- ! * Do not include macro for meteo (tmm* and mdf* files)
- ! * Move macros used in coupled version to my.macro.tm5.coupling.all
- ! * Move obsolete macros (i.e. to be deleted) to my.macro.tm5.old.all
- !
- ! See tools/misc/find_cpp script to generate initial list of macro
- ! starting by with_ or without_
- !
- build.configure.macro.tm5.all : slopes \
- secmom \
- MPI \
- _OPENMP \
- with_budgets \
- with_cariolle \
- with_lapack \
- with_m7 \
- with_aqchem \
- with_kpp \
- FULL_ALGEBRA \
- with_online_bvoc \
- with_online_nox \
- with_optics \
- with_optics_output \
- without_advection \
- without_boundary \
- without_chemistry \
- without_convection \
- without_diffusion \
- without_dry_deposition \
- without_emission \
- without_lmax_conv \
- without_nmhc_gfed \
- without_o3_nudging \
- without_photolysis \
- without_sedimentation \
- without_wet_deposition \
- with_ch4_emis \
- with_pm \
- with_w3 \
- with_netcdf4_par \
- with_zoom \
- tropomi \
- ${my.macro.tm5.coupling.all}
- ! Header file
- build.configure.macro.tm5.hfile : tm5.inc
- !
- ! cpp used in user output routines ()
- build.configure.macro.user_output.all : with_retro_output \
- with_cf_output \
- with_hdf4
- ! Header file
- build.configure.macro.user_output.hfile : output.inc
- !
- ! REMOVED:
- ! with_mpi # should be MPI ?
- ! with_openmp # should be _OPENMP
- ! with_barrier # used for testing ?
- ! with_budget # should be with_budgets
- ! with_okdebug # via logical flag
- ! without_wetdeposition # should be without_wet_deposition
- ! with_restart # not necessary anymore with new restart module
- ! with_pnetcdf # depricated library; use netcdf4 instead
- ! with_go # should use module GO instead
- ! with_hdf # still in some tmkit.F90 in some 4D branches - should update
- my.macro.tm5.old.all : with_barrier \
- with_budget \
- with_go \
- with_mpi \
- with_okdebug \
- with_openmp \
- without_wetdeposition \
- with_restart \
- with_hdf \
- with_pnetcdf
- ! Pass macro definitions to command lines, e.g. -Dwith_this_flag (True|False) ?
- ! The source code checking tests on '#include "tm5.inc"',
- ! so this flag could be set to False:
- build.configure.define.D : False
- ! * remove files
- ! remove some files ?
- build.configure.remove : tmm_mf_tm5_hdf.F90
- ! remove if macro's are *not* defined ? Use list of files and/or pattern (i.e. *,?, and range of characters with [])
- build.configure.remove.ifndef.MPI : mpi_const.F90 mpi_comm.F90
- build.configure.remove.ifndef.with_hdf4 : file_hdf*.F90 io_hdf.F90
- build.configure.remove.ifndef.with_tmm_tmpp : tmm_mf_tmpp.F90
- build.configure.remove.ifndef.with_tmm_tm5 : tmm_mf_tm5_nc.F90
- build.configure.remove.ifndef.with_tmm_ecmwf : tmm_mf_ecmwf_tmpp.F90 tmm_mf_ecmwf_tm5.F90 file_grib*.F90 grib_table.F90
- build.configure.remove.ifndef.with_tmm_ncep : tmm_mf_ncep_gfs.F90 tmm_mf_ncep_cdc.F90 file_ncb.F90 file_ncg.F90
- build.configure.remove.ifndef.with_tmm_msc : tmm_mf_msc.F90
- build.configure.remove.ifndef.with_prism : prism_putget.F90 tmm_mf_prism.F90 tm5_prism.F90 appl-tm5.F90
- build.configure.remove.ifndef.with_tendencies : tm5_tendency.F90 tm5_tendency_eval.F90
- build.configure.remove.ifndef.with_budgets : budget_global.F90
- build.configure.remove.ifndef.with_udunits1 : udunits.F90 udunits_inc.F
- build.configure.remove.ifndef.with_udunits2 : f_udunits_2.f90 f_udunits_2.inc
- build.configure.remove.ifndef.with_m7 : mo_*.F90 m7_*.F90 m7.F90 emission_ss.F90 emission_pom.F90 emission_dust.F90 emission_bc.F90 PM.F90 optics.F90 calc_pm.F90 user_output_aerocom.F90 user_output_general.F90 user_output_aerchemmip.F90
- build.configure.remove.ifndef.with_aqchem : aqchem.F90
- build.configure.remove.ifndef.with_kpp : kpp_aqchem.F90
- build.configure.remove.ifndef.with_cariolle : tm5_climat.F90 file_fortkeld.F90 file_cariolle.F90 chemistry_cariolle.F90 chemistry_0d__o3tracer.F90
- build.configure.remove.ifndef.with_ecearth_optics : ecearth_optics.F90
- build.configure.remove.ifndef.with_grib_api : file_grib_api.F90
- ! - for proj/user_output/
- build.configure.remove.ifndef.with_cf_output : user_output_cf.F90
- ! - for M7 modules:
- build.configure.remove.ifndef.with_optics : optics.F90 user_output_aerocom.F90 user_output_general.F90
- build.configure.remove.ifndef.with_pm : PM.F90
- ! remove if macro's are defined ? Use list of files and/or pattern (i.e. *,?, and range of characters with [])
- build.configure.remove.ifdef.without_advection : advectx.F90 advecty.F90 advectz.F90
- build.configure.remove.ifdef.without_diffusion : diffusion.F90
- build.configure.remove.ifdef.without_wet_deposition : wet_deposition.F90
- build.configure.remove.ifdef.without_dry_deposition : dry_deposition.F90
- build.configure.remove.ifdef.without_photolysis : photolysis.i photolysis.F90 photolysis_data.F90
- build.configure.remove.ifdef.without_emission : emission.F90
- build.configure.remove.ifdef.without_convection : convection.F90
- build.configure.remove.ifdef.without_boundary : boundary.F90
- build.configure.remove.ifdef.without_chemistry : chemistry.F90 ebischeme.F90
- build.configure.remove.ifdef.without_sedimentation : sedimentation.F90
- build.configure.remove.ifdef.oasis3 : tracer.F90
- ! * compiler flags
- ! Specify space seperated list of compiler flag groups.
- ! See the implementation in 'pycasso_user_scripts/Build_FlagGroups' .
- ! Two groups are added by default, and eventually openmp is added if necessary:
- ! default real8 [openmp]
- ! For the actual compiler flags set by a group, see the compiler specific settings.
- !
- build.configure.flags : ${my.build.configure.flags}
- ! include file to be written for Makefile:
- build.configure.flags.includefile : Makefile_flags
- ! * LIBRARIES
- !-------------
- ! Libraries to be included are specified with a list of keywords, e.g.:
- ! netcdf hdf5 hdf4 z jpeg
- ! For each library name, 2 lines should be present that specify
- ! the compile and link flags (probably in the host specific rcfile)
- !
- ! For TotalView with memory debugging, add the 'tv' library.
- ! list of all supported (ie in your machine rc) libraries; this defines the linking order !
- build.configure.libs.all : netcdf4_par netcdf4 netcdf hdf5_par hdf5 hdf4 sz jpeg z grib_api lapack udunits1 udunits2 mpi tv oasis3
- !
- ! ~ default libraries:
- build.configure.libs :
- !
- ! ~ libraries to be included if a specific marcro is defined:
- build.configure.libs.ifdef.with_pnetcdf : pnetcdf
- build.configure.libs.ifdef.with_netcdf4_par : netcdf4_par
- build.configure.libs.ifdef.with_netcdf4 : netcdf4
- build.configure.libs.ifdef.with_netcdf : netcdf
- build.configure.libs.ifdef.with_hdf5_par : hdf5_par sz jpeg z
- build.configure.libs.ifdef.with_hdf5 : hdf5 sz jpeg z
- build.configure.libs.ifdef.with_hdf4 : hdf4 sz jpeg z
- build.configure.libs.ifdef.with_grib_api : grib_api
- build.configure.libs.ifdef.with_lapack : lapack
- build.configure.libs.ifdef.with_mpi : mpi
- build.configure.libs.ifdef.with_udunits1 : udunits1
- build.configure.libs.ifdef.with_udunits2 : udunits2
- build.configure.libs.ifdef.oasis3 : oasis3
- ! * user configuration
- ! routine 'Build_Configure' in 'pycasso_user_scripts.py' is called now;
- ! use this routine to write special include files etc.
- ! Apply some source code checks ?
- ! Provide a space seperated list with keywords; for each keyword, provide below:
- ! o a short message to describe the test;
- ! o the filename pattern to select the files on which the test should be applied;
- ! o a filename pattern to exclude some files;
- ! o a python boolean expression applied to each line of the file;
- ! the line itself is stored in a string variable named 'line';
- ! o a help text to be displayed in case a warning is issued;
- ! include \n for newlines.
- ! If for one of the lines in a source file the test evaluates to 'True',
- ! a warning is issued.
- ! If the test expression starts with 'not', a warning is issued if none
- ! of the lines evaluates to 'True' for the test after the 'not'.
- ! If the 'error' flag is set to 'True' and any warnings are issued, then
- ! the scripting will exit with an error status.
- ! list with keywords for checks to be applied:
- build.configure.checks : tm5_inc tmm_inc advect_h
- ! all TM files should include "tm5.inc"; search files that do not do that:
- build.configure.check.tm5_inc.msg : Test on TM5 files that do no not include "tm5.inc" ...
- build.configure.check.tm5_inc.files : *.[Ff]* tmm_mf_prism.F90
- build.configure.check.tm5_inc.skip : binas* parray* file_hdf* go* num* grid* phys* tmm* mdf* *grib* \
- xmlf* *udunits* standard_name_table.f90 *.swp .*
- build.configure.check.tm5_inc.test : not line.startswith('#include "tm5.inc"')
- build.configure.check.tm5_inc.help : \n\
- All files TM5 files should include "tm5.inc" in the header.\n\
- This include file is filled by the scripting with '#define' pre-processing macros.\n\
- To compile a source code with TM5 files that do not include "tm5.inc",\n\
- ensure that marco definitions are passed to the compiler directly by setting:\n\
- . build.configure.define.D : True\n\
- in the expert.rc file.\n\
- .
- ! all TMM files should include "tmm.inc"; search files that do not do that:
- build.configure.check.tmm_inc.msg : Test on TMM files that do no not include "tmm.inc" ...
- build.configure.check.tmm_inc.files : tmm*.[Ff]* file_grib.F90
- build.configure.check.tmm_inc.skip : tmm_mf_prism.F90
- build.configure.check.tmm_inc.test : not line.startswith('#include "tmm.inc"')
- build.configure.check.tmm_inc.help : \n\
- All files TMM files should include "tmm.inc" in the header.\n\
- This include file is filled by the scripting with '#define' pre-processing macros.\n\
- To compile a source code with TMM files that do not include "tmm.inc",\n\
- ensure that marco definitions are passed to the compiler directly by setting:\n\
- . build.configure.define.D : True\n\
- in the expert.rc file.\n\
- .
- ! none of the TM files should include "advect.h" anymore:
- build.configure.check.advect_h.msg : Test on TM5 files that include "advect.h" ...
- build.configure.check.advect_h.files : *.[Ff]*
- build.configure.check.advect_h.skip : binas* file_hdf* go* num* grid* phys* tmm*
- build.configure.check.advect_h.test : line.startswith('#include "advect.h"')
- build.configure.check.advect_h.help : \n\
- Including "advect.h" is depricated; include "tm5.inc" instead.\n\
- .
- ! special: check on unknown macros used in '#if[n]def' lines,
- ! but not listed in .all lists above ?
- build.configure.check.unknown_macro : True
- build.configure.check.unknown_macro.msg : Test for unsupported macros ...
- ! in case some strange things are found, leave with error message (True|False)?
- build.configure.checks.error : True
- ! * makedep
- ! create depencencies using the external 'makedep' program (True|False) ?
- build.configure.makedep : True
- ! include file to be written for Makefile:
- build.configure.makedep.includefile : Makefile_deps
- ! dependencies are created for files matching the pattern:
- build.configure.makedep.files : *.[Ff]*
- !
- ! Compilation (if need to be submitted to the queue, add a build.make.submit key and related queue.*.option.build.* to your machine file - see example in machine-ecmwf-cca-cray.rc)
- !
- build.make : True
- build.make.dir : ${build.prefix}
- ! the '--clean' or '-c' flag is provided to the setup script
- build.make.clean : False
- ! make target
- #if "oasis3" in "${my.tm5.define}":
- build.make.exec : appl-tm5.x
- #else
- build.make.exec : tm5.x
- #endif
- ! ------------------------------------------------
- ! install executable and scripts
- ! ------------------------------------------------
- !
- ! Copy files into run directory.
- ! Specify a space seperated list with source files.
- ! If the copy should obtain another name, append it seperated with a ':', e.g.
- ! model.x:model-myproject.x
- !
- ! If 'rundir' key is not empty, then 'install.copy' *must* include the
- ! 'submit.script' key value ("submit_tm5" here), and should not be renamed (why?)
- !
- ! Include the build directory if necessary, e.g. '${build.prefix}/src/model.x' .
- !
- #if "oasis3" not in "${my.tm5.define}":
- install.copy : ${build.prefix}/${build.make.exec}:${job.step.run.exe} \
- ${build.prefix}/../bin/submit_tm5
- #else
- install.copy : ${build.prefix}/bin/submit_tm5
- #endif
- ! name of processed rc file to be written (original this file);
- ! leave empty for not writing:
- install.rc : ${my.basename}.rc
- ! ------------------------------------------------
- ! Post-processing : archive sources
- ! ------------------------------------------------
- ! Add the name 'sources' to the 'store.tasks' list to enable this!
- ! specify how to store source files wiht output:
- ! o store with respect to rundir run directory:
- sources.store.from : ..
- ! o target file name:
- sources.store.files : ${my.basename}__sources.tar
- ! o filter for files to be included:
- sources.store.tarfilter : build/bin/ \
- build/src/Makefile* \
- build/src/*.[Ff]* \
- build/src/*.inc \
- run/${install.rc}
- ! ------------------------------------------------
- ! job script
- ! ------------------------------------------------
- ! name of job in queue etc:
- job.name : ${my.basename}
- ! names used for job steps (can be overwritten on the command line
- ! with --steps='init' for example)
- job.steps : init run done
- ! executable used by the 'run' step:
- job.step.run.exe : ${my.basename}.x
- ! ------------------------------------------------
- ! submit script
- ! ------------------------------------------------
- ! name of submit script:
- submit.script : submit_tm5
- ! full submit command from rundirectory:
- submit.command : ./${submit.script} ${job.step.run.exe} ${install.rc}
- ! try to use relative paths if possible ?
- ! this will facilitate moving the complete build/run/output directory:
- submit.relpaths : False
- ! abs. path to bin, without 'bin' itself (default to ${build.prefix}). This must be, and could be coded as, ${build.prefix}/${build.copy.subdirs}[element with bin]
- submit.bin.path : ${my.project.dir}
- ! submit job to : foreground | background | queue
- ! might be replaced given the flags passed to the submit script
- submit.to : foreground
- ! options passed directly to a submission command (llsubmit, qsub, ...):
- submit.options :
- ! run in debugger (True|False) ?
- submit.debugger : False
- ! ------------------------------------------------
- ! horizontal grids
- ! ------------------------------------------------
- !
- ! List with model regions (space seperated):
- !
- ! o the routine 'dims_grid' is automatically re-written if the region list
- ! change ;
- !
- ! o do not include the 'globe' and 'glb100x100' regions in the region list
- ! but specify them seperately below;
- !
- ! o the parameter 'nregions' will be set to the number of regions in
- ! this list;
- regions : ${my.region1}
- ! special: single cell global region:
- region.globe : globe
- ! special: global surface fields (unless region 1 is on the same grid)
- #if ("${my.region1}" == "glb100x100") or ("${my.region1}" == "glb050x050") :
- region.glbsfc :
- #else:
- region.glbsfc : glb100x100
- #endif
- ! parent regions for zoom; Must use 'globe' for the global region:
- region.${my.region1}.parent : ${region.globe}
- ! 'parent' region for global surface field; used to match surface
- ! pressures if necessary:
- #if ("${my.region1}" != "glb100x100") and ("${my.region1}" != "glb050x050") :
- region.${region.glbsfc}.parent : ${my.region1}
- #endif
- !=====================================================================!
- ! OpenMP keys are not an option yet. !
- !=====================================================================!
- par.openmp : F
- par.nthread : 1
- !=====================================================================!
- ! Miscelleaneous (do not modify, unless you know what you're doing!) !
- !=====================================================================!
- jobstep : 0
- jobstep.timerange.start : ${timerange.start}
- jobstep.timerange.end : ${timerange.end}
- prev.output.dir :
- ! code source for levels definition
- #if "${my.levs}" == "all"
- my.source.levs : levels/${my.eclevs}
- #else
- my.source.levs : levels/${my.eclevs} levels/${my.eclevs}/${my.levs}
- #endif
|