Notes¶
Data types¶
Fortran namelists do not contain any information about data type, which is
determined by the target variables of the Fortran executable. f90nml
infers the data type based on the value, but not all cases can be explicitly
resolved.
f90nml
tests values as one of each data type in the order listed below:
Integer
Floating point
Complex floating point
Logical (boolean)
String
Strings act as a fallback type. If a value cannot be matched to any other value, then it is interpreted as a string.
In order to get the best results from f90nml
, it is best to follow these
guidelines:
All strings should be enclosed by string delimiters (
'
,"
).Floating point values should use decimals (
.
) or E notation.Array indices should be explicit
Array values should be separated by commas (
,
)
Derived Types¶
User-defined types are saved as a nested hierarchy of dict
s. For
example, the following namelist
&dtype_nml
a%b%c = 1
/
would be saved as the following Namelist
:
nml = {
'dtype_nml': {
'a': {
'b': {
'c': 1
}
}
}
}
Indexing¶
The indexing of a vector is defined in the Fortran source file, and a namelist can produce unexpected results if the starting index is implicit or unspecified. For example, the namelist below
&idx_nml
v(1:2) = 5, 5
/
will assign values to different indices of v
depending on its starting
index, as in the examples below.
integer, dimension :: v(1:4) ! Read as v = (5, 5, -, -)
integer, dimension :: v(0:3) ! Read as v = (-, 5, 5, -)
Without explicit knowledge of the starting index, it is not possible to unambiguously represent the vector in Python.
In most cases, f90nml
will internally assume a 1-based indexing, and will
only output the values explicitly listed in the namelist file. If no index is
provided, then f90nml
will not add indices to the record.
However, f90nml
can still provide some level of control over the starting
index of a vector. The starting index can be explicitly set using various
properties defined in the Parser
and Namelist
objects. For more
information, see the class API.