Skip to content
/ f90nml Public
forked from marshallward/f90nml

A Python module for parsing Fortran namelist files

License

Notifications You must be signed in to change notification settings

barpaum/f90nml

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

f90nml

A Python module for parsing Fortran namelist files

About f90nml

The f90nml module takes a Fortran 90 namelist file and parses it into a Python dict of namelist groups, each containing a dict of its variables. Fortran data types are converted to equivalent Python types.

Usage

To read a Fortran namelist file as a dict, use the read() method:

nml_dict = f90nml.read(nml_filename)

To output a Python dict as a Fortran namelist file, use the write() method:

f90nml.write(my_nml, output_filename)

This method will abort if the output file already exists.

Additional Features

Derived types

Additional NmlDicts are created to traverse user-defined types. For example, if you want to access z in the following namelist:

&dtype_nml
   x%y%z = 1
/

then z can be accessed in the equivalent namelist nml by typing

z = nml['dtype_nml']['x']['y']['z']

Overwriting an existing file

To overwrite an existing file when using the write method, use the force flag:

f90nml.write(nml, nml_filename, force=True)

Notes

The read method produces an NmlDict, which behaves as a dict with case-insensitive keys, due to the case insensitivity of Fortran. This implementation is currently not a true case-insensitive dict, and is only intended to accommodate individual references and assignments.

In a Fortran executable, the data types of values in the namelist files are set by the corresponding variables within the program, and cannot in general be determined from the namelist file alone. Therefore, f90nml only makes an approximate guess about its data type.

The following namelist features are currently not supported:

  • Implicit vector assignment (v(i:j) = c)
  • Multidimensional vector assignment (v(:,:) = 1, 2, 3, 4)
  • Upcast vector elements if components differ (x(i) = 1, x(j) = 2.0)
  • Escape on repeated quotes ('This doesn''t parse correctly')
  • stdin/stdout support (?, ?=)

Licensing

f90nml is distributed under the Apache 2.0 License.

Contact

Marshall Ward <[email protected]>

About

A Python module for parsing Fortran namelist files

Resources

License

Stars

Watchers

Forks

Packages

No packages published