% $Id$

%===============================================================================
% Requirements may be itemized under a main topic:
%===============================================================================

\req{Comments}

\sreq{Comments in resource files}

Resource files shall allow comments.

\begin{reqlist}
{\bf Priority:} 1 \\
{\bf Source:} MITgcm, CCSM, DAO, POP, NCEP \\
{\bf Status:}  Approved-1\\
{\bf Verification: Unit test.}  
\end{reqlist}

\sreq{Configurable delimiter for comments}

The character used to indicate a comment shall be configurable.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, CCSM, DAO, POP, NCEP \\
{\bf Status:}  Approved-2\\
{\bf Verification:}  Unit test.
\end{reqlist}

\sreq{Error reporting}

Text file parsing errors shall at the least provide
file name, line of file, meaningful error message logged in an easy
to find location.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, CCSM, DAO, POP, NCEP \\
{\bf Status:} Approved-2 \\
{\bf Verification:} Unit test.
\end{reqlist}

\req{Backwards compatibility with NAMELIST}

Text file syntax shall be backwards compatible with NAMELIST formats.
The existing NAMELIST formats used by the JMC codes need to be parseable
as configuration attributes. This could be through conversion or through
a CA format that only extends the NAMELIST format i.e. that includes the
NAMELIST format as a subset.  The configuration attribute format does 
not need to be compatible with the NAMELIST standard.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, CCSM, POP, NCEP \\
{\bf Status:} Approved-2 \\
{\bf Verification:} Unit test.
\end{reqlist}

\req{Grouping attributes}

It shall be possible to group attributes, for example by creating 
attribute matrices.

\begin{reqlist}
{\bf Priority:} 1 \\
{\bf Source:} MITgcm, CCSM, DAO, POP, NCEP \\
{\bf Status:} Approved-1 \\
{\bf Verification:} Unit test.
\end{reqlist}

\req{Unused attributes in resource file}

It shall be possible to specify more attributes in the resource file 
than in the code.  The extra attributes will be ignored.

\begin{reqlist}
{\bf Priority:} 1 \\
{\bf Source:} MITgcm, DAO, POP, NCEP, NSIPP \\
{\bf Status:} Approved-1 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}
Approved-1

\req{Default attributes in code}

It shall be possible to include more attributes in a code than in its
resource file.  In this case default attribute values must be specified
within the code.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, DAO, POP, NCEP, NSIPP \\
{\bf Status:} Approved-1 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\req{Attribute values as regular expressions}

It shall be possible to specify attribute values using regular expressions.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, NCEP, DAO, NSIPP \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\req{Compatibility with unique object names}

A system that is compatible with unique per-instance 
naming shall be devised.  For example it should be possible 
to refer to an attribute with a
name such as {\it gov.gfdl.mom4.timestepping.deltat}. 

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\req{Write attributes to file}

It shall be possible to write attribute names and values to a file.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, DAO, NCEP, NSIPP \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\req{Set attribute values}

It shall be possible to set or reset attribute values by using 
a function call.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, DAO, NCEP, NSIPP \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\req{Set attribute values of other components}
Components shall be able to set attributes to be writable by other components.
Queries will be read-only, however it could also be useful to ultimately allow 
one component to set a value of another components attributes. For example in
ensemble simulations or computational steering a {\it driver} component could
control other components.

\begin{reqlist}
{\bf Priority:} 3 \\
{\bf Source:} MITgcm, NCEP, DAO, NSIPP \\
{\bf Status:} Proposed \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\req{Queries}

\sreq{Query attribute values}

It shall be possible to query attribute values using a function call.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, NCEP, DAO, NSIPP \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\sreq{Query attribute values from shell script}

It shall be possible to query a resource file from a shell script. 

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, NCEP, DAO, NSIPP \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}

\sreq{Query attribute values of other components}

Components shall be able to query the attributes of other components.

\begin{reqlist}
{\bf Priority:} 2 \\
{\bf Source:} MITgcm, NCEP, DAO, NSIPP \\
{\bf Status:} Approved-2 \\ 
{\bf Verification:} Unit test.\\
\end{reqlist}




