Skip to content

Commit 9201b4b

Browse files
author
Peter Bräuer
committed
Merge branch 'rel/0.1.0'
2 parents 7dbf90a + 766030a commit 9201b4b

File tree

8 files changed

+916
-7
lines changed

8 files changed

+916
-7
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name = "TUVtools"
22
uuid = "345a537c-f292-11e8-1826-5db092d7553c"
33
authors = ["Peter Bräuer <pb866@york.ac.uk>"]
44
julia = "≥0.7"
5-
version = "0.1.0-DEV"
5+
version = "0.1.0"
66

77
[deps]
88
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"

README.md

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,151 @@
11
TUVtools
2+
========
3+
4+
TUV developer tools to auto-generate TUV input files, include files to link
5+
TUV to the boxmodel [DSMACC](https://github.com/pb866/DSMACC-testing.git) or
6+
generate markdown files for the TUV wiki.
7+
8+
9+
Installation
10+
------------
11+
12+
Go to the package manager and add first the unregistered package
13+
[filehandling](https://github.com/pb866/filehandling.git) and then TUVtools.
14+
You may want to `activate` an environment as optional second step, if you
15+
don't want the project installed in the main julia environment (where `.` can
16+
be replaced by any path to any existing Project.toml or to a new folder
17+
creating a new environment).
18+
19+
```julia
20+
julia> ]
21+
pkg> activate .
22+
pkg> add https://github.com/pb866/filehandling.git
23+
pkg> add https://github.com/pb866/TUVtools.git
24+
pkg> instantiate
25+
pkg> precompile
26+
```
27+
28+
29+
Usage
30+
-----
31+
32+
Import package with `using` or import `import`:
33+
34+
```julia
35+
using Pkg
36+
Pkg.activate("path/to/Project.toml") #if not in main julia environment
37+
using TUVtools
38+
```
39+
40+
**_Currently all functions work only for the MCM/GECKO-A TUV version 5.2.x., where source code has been moved to a separate source folder!_**
41+
Additional flags to use with the original TUV version will be introduced in the future.
42+
43+
44+
### Function setrxns
45+
46+
Auto-generates The reaction part of the TUV input files from the reaction labels
47+
defined in the rxn files/subroutines. Options exist to reset flags.
48+
49+
50+
51+
```julia
52+
setrxns(tuvdir::String; inputfiles::Union{String,Vector{String}}="", setflags::Int64=-1)
53+
```
54+
55+
Specify the location of the TUV main folder with `tuvdir`. TUV input files have to exist
56+
already and only the mechanisims section is overwritten. By default all files in the `INPUTS`
57+
folders are re-written. Use keyword argument `inputfiles` to select a subset.
58+
59+
Use kwarg `setflags` to reset flags for TUV output. By default the same flags are used as
60+
previously. If you add/delete reactions, you will have to insert/delete flags at the
61+
corresponding lines (you only need to provide the flag at the first character of the line,
62+
the remaining line will be auto-filled). Other options are:
63+
64+
- `0`: Set all flags to false (`F`)
65+
- `1`: Set all flags to true (`T`)
66+
- `2`: Set output to `T` for reactions in the MCM/GECKO-A mechanism, remaining flags to `F`
67+
- `3`: Set output to `T` for reactions in the MCMv3.3.1 (and older) mechanism, remaining flags to `F`
68+
69+
70+
### Function generate_incfiles
71+
72+
Auto-generates include files for the boxmodel
73+
[DSMACC](https://github.com/pb866/DSMACC-testing.git) to link TUV and DSMACC
74+
reaction numbers in the model.
75+
76+
```julia
77+
generate_incfiles(tuvdir::String)
78+
```
79+
80+
Specify the main folder of the TUV version you are using
81+
(needs to be the MCM/GECKO-A TUV version rather than original TUV), from
82+
which the function will derive the TUV reaction numbers.
83+
DSMACC reaction numbers are saved in `src/data/MCMv32.db`, `src/data/MCMv331.db`,
84+
and `src/data/MCM-GECKO-A.db` for the respective MCM versions.
85+
86+
If you use additonal photolysis reactions or altered the photolysis numbers
87+
in any way, you need to modify these number either by cloning this repository
88+
and making sure to load the cloned version into julia or you can `develop` the
89+
package with the help of the package manager.
90+
91+
Include files will be auto-generated for every MCM version and written to the
92+
main folder of the specified TUV version.
93+
94+
95+
### Function generate_wiki
96+
97+
This is a more advanced routine for developers of the MCM/GECKO-A TUV version
98+
to maintain the wiki pages of the repository.
99+
100+
Function `generate_wiki` can auto-generate wiki pages for the reaction numbers
101+
used in MCM/GECKO-A and TUV and the improved MCM photolysis parameterisations.
102+
103+
By default, no wiki files are generated unless you specify a template for the wiki page(s)
104+
or the `parameter.csv` from [MCMphotolysis](https://github.com/pb866/MCMphotolysis.git).
105+
106+
```julia
107+
generate_wiki(tuvdir::String; wikitemplates::Union{String, Vector{String}}="",
108+
wikioutput::Union{String, Vector{String}}="WIKI.md", MCMcollength::Union{Int64,Vector{Int64}}=10,
109+
MCMversion::Union{Int64,Vector{Int64}}=4, parinput::String="",
110+
paroutput::String="../MCM-Photolysis-Parameters.md")
111+
```
112+
113+
Specify the main folder of the TUV version used in `tuvdir` to get the TUV
114+
reaction numbers. If you want to generate wiki page(s) for the reaction numbers,
115+
make sure the DSMACC reaction numbers are correct in the database files
116+
(see [function `generate_incfiles`](#function-generate_incfiles)).
117+
118+
Create templates for all wiki pages using markdown code. Type any text you like
119+
in the page. Where you want tables with the reaction numbers, only provide the header.
120+
Put the reaction string starting at the first character of the line for every reaction
121+
you want in the tables at the correct positon in the template. The script will auto-fill-in
122+
the correct MCM/GECKO-A and TUV reaction numbers in the first two columns and the
123+
reaction label in the third. Reaction labels have to be the same as in TUV.
124+
Examples of templates can be found in `src/data`.
125+
126+
Specify the templates with the kwarg `wikitemplates` as `String` for single file
127+
or as `Vector{String}` for multiple files. Define as many output file names as
128+
templates with `wikioutput` in the same manor. Specify, which version of the MCM
129+
you are using for each wiki page as `Int64` or `Vector{Int64}` using `3` for
130+
MCMv3.3.1 or older and `4` for MCM/GECKO-A. Optionally you can specify the column
131+
length of the MCM/GECKO-A reaction number column for nicer formatting of the table
132+
in the md files. TUV columns will always be for 3-digit integers.
133+
134+
If you want to generate the parameter list for the improved MCM/GECKO-A
135+
photolysis parameterisations, specify the location and file name of the
136+
`parameters.csv` from [MCMphotolysis](https://github.com/pb866/MCMphotolysis.git)
137+
with kwarg `parinput`. To specify a location and file name for the
138+
auto-generated markdown file use kwarg `paroutput`.
139+
140+
141+
Version history
142+
===============
143+
144+
Version 0.1.0
145+
-------------
146+
- New function `setrxns` to auto-generate TUV input files
147+
- New function `generate_incfiles` to auto-generate DSMACC include files
148+
to link TUV to DSMACC
149+
- New function `generate_wiki` to auto-generate wiki files for the
150+
MCM/GECKO-A and TUV reaction numbers and for the improved MCM/GECKO-A
151+
photolysis parameterisations

src/TUVtools.jl

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ using filehandling
1919
using Printf
2020

2121
export setrxns,
22-
generate_incfiles
22+
generate_incfiles,
23+
generate_wiki
2324

2425
# Include private functions
2526
include("setrxns.jl")
27+
include("generate_wiki.jl")
2628

2729
"""
2830
setrxns(tuvdir::String; inputfiles::Union{String,Vector{String}}="", setflags::Int64=-1)
@@ -57,6 +59,11 @@ function setrxns(tuvdir::String; inputfiles::Union{String,Vector{String}}="",
5759
end #function setrxns
5860

5961

62+
"""
63+
generate_incfiles(tuvdir::String)
64+
65+
Generate include files to link TUV in directory `tuvdir` to the box model DSMACC.
66+
"""
6067
function generate_incfiles(tuvdir::String)
6168

6269
# Save current directory
@@ -72,4 +79,32 @@ function generate_incfiles(tuvdir::String)
7279
cd(currdir)
7380
end
7481

82+
83+
"""
84+
generate_wiki(tuvdir::String, kwargs)
85+
86+
Generate markdown files from templates specified kwarg `wikitemplates`, where
87+
reactions numbers from TUV in `tuvdir` and in MCM/GECKO-A are listed for every
88+
reaction listed at the beginning of each template line and written to files specified
89+
by kwarg `wikioutput`. The table `MCMcollength` can be specifief with a kwarg, for nicer
90+
md file formatting. The `MCMversion` needs to be specified for every wiki template.
91+
"""
92+
function generate_wiki(tuvdir::String; wikitemplates::Union{String, Vector{String}}="",
93+
wikioutput::Union{String, Vector{String}}="WIKI.md", MCMcollength::Union{Int64,Vector{Int64}}=10,
94+
MCMversion::Union{Int64,Vector{Int64}}=4, parinput::String="",
95+
paroutput::String="../MCM-Photolysis-Parameters.md")
96+
# Save current directory
97+
currdir = pwd()
98+
# Find files related to photolysis mechanism
99+
rxnfiles, callfiles, tuvdir = getfiles(tuvdir)
100+
# get list of reactions in order for input files
101+
rxnlist = generate_rxns(rxnfiles, callfiles)
102+
103+
# Auto-generate inc files for TUV_DSMACC
104+
write_wiki(rxnlist, tuvdir, wikitemplates, wikioutput, MCMcollength, MCMversion, currdir)
105+
write_params(parinput, paroutput, currdir)
106+
# Go back to original directory
107+
cd(currdir)
108+
end #function generate_wiki
109+
75110
end # module TUVtools

src/data/MCM-GECKO-A.db

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,10 @@ MCM/GECKO-A | TUVlabel
9393
22091 | DIBK -> NI products
9494
22101 | di-sec-butyl ketone -> NI products
9595
22111 | di-t-butyl ketone -> NI products
96-
22121 | 4-octanone -> NI products
97-
22131 | n-C3H7COCH(CH3)2 -> NI products
98-
22141 | n-C3H7COCH(CH3)2 -> i-C3H7COCH3 + C2H4
99-
22151 | CH3COCH2C(CH3)3 -> NI products
100-
22161 | di-sec-butyl ketone -> sec-C4H9COCH2CH3 + C2H4
96+
22121 | n-C3H7COCH(CH3)2 -> NI products
97+
22131 | n-C3H7COCH(CH3)2 -> i-C3H7COCH3 + C2H4
98+
22141 | CH3COCH2C(CH3)3 -> NI products
99+
22151 | di-sec-butyl ketone -> sec-C4H9COCH2CH3 + C2H4
101100
23011 | CH3COCH=CH2 -> CH3 + C2H3CO
102101
23021 | CH3CH2COCH=CH2 -> C2H5 + C2H3CO
103102
24011 | c-C3H4O -> C2H4 + CO

0 commit comments

Comments
 (0)