Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / doc / README.io_config
blobcf3b213b3b3b2996c28c262f2f33dca95bfc336b
1 Run time control of IO stream variable sets
3 For WRF releases prior to V3.2, state variables were associated with I/O
4 streams at compile time via their entries in the Registry.  That will
5 still work, and should still be considered the primary method for defining
6 stream variable sets in WRF. This new capability allows users to add or
7 exclude state variables from a history or input stream at run-time without
8 recompiling.  Also, this can be done on a per-domain basis as well.
10 Here's a quick sketch of how it is used:
12 a) There are two new namelist variables in the time_control section
13 of the namelist.input file.  The first is iofields_filename. This is a
14 character variable, settable separately for each domain and defaulting
15 to "NONE_SPECIFIED".  This is where a user can list the names of text
16 files containing lists of variables to added/removed from history and
17 input streams for that domain.  As with other namelist variables that
18 have max_domains in their rconfig definitions, each domain does have
19 to have an entry in the namelist.input file. You can set each entry to
20 the name of separate definitions file for each domain, or some or all
21 of them can be the name of the same file.
23 The second namelist variable is a logical, ignore_iofields_warning,
24 which tells the program what to do if it encounters an error in these
25 user-specified files.  The default value, .TRUE., is to print a warning
26 message but continue the run.  If set to .FALSE., the program will
27 abort if there are errors in these user-specified files.
29 b) The user-specified files, named as settings to the iofields_filename
30    in the namelist.input file.  The files contain lines associating
31    variables with streams.  Each line has the form:
33   op:streamtype:streamid:variables
35     op:          either + (plus) or - (minus) for adding or removing
36                  a variable
37     streamtype:  either i (input) or h (history) indicating which type
38                  of stream is being affected
39     streamid:    an integer between 0 and the number of streams (0 
40                  represents main input or history)
41     variables:   comma separated list of variables
43 Example.  The line:
45     +:i:5:u,v,w
47 will add the U, V, and W variables to auxinput5.  Note for this example,
48 these are 2 time-level variables so that, as with Registry-defined
49 stream-associations, the designations apply to variables representing
50 the highest numbered time level (U_2). See the file test/em_real/sample.txt
52 These lines cannot be longer than 256 characters, but you can associate
53 long lists of variables using multiple lines with the same op, streamtype,
54 and streamid. You can have comments in these files by putting # on the
55 line, causing the entire line to be a comment (even characters before
56 the #).
58 An implementation note: the mechanism is not very efficient at this
59 point. Each variable listed involves a search through all the state
60 variables in the grid.  That is still relatively quick - even a very
61 long list shouldn't take more than a couple seconds -- and the lists are
62 processed only once when a grid is allocated.  Even so, super-long lists
63 of these run-time stream associations are mildly discouraged. In other
64 words, use this as a mechanism to tweak the Registry I/O definitions or to
65 get domain by domain specific behavior, but don't use it as a substitute
66 for defining I/O definitions with state variables in the Registry.