For those interested in manipulating fortran namelists with ruby,
checkout GitHub - sajinh/fortran-namelist: A ruby library to manipulate Fortran Namelists
It is a very early stage of work and bugs may be present!
questions/bugs to [email protected]
Usage: see below
saji
require ‘./lib/nml’
parse an existing namelist
nml = NML_Reader.read(nml_file)
returns a hash of hashes with group names
as keys of the second level of hashes
namelist groups can be retrieved by
referencing these keys
# get namelist group '&share'
share = nml[:share]
the return value is of type NV, which is
a Hash extended with the methods <<, del
and keep
<<(args) merges its args with the first key
of the reciever hash
keep(*args) returns a new NV object which
only contains the variables indicated through
args array
share=share.keep(:wrf_core, :max_dom, :start_date)
del(*args) deletes specified variables of
a particular group
share=share.del(:wrf_core, :max_dom)
After manipulating namelist groups, write them
to a new namelist
Step 1 - Create a new Namelist Group
# create a namelist group 'share'
nshare = NML_Group.create(:share)
# add group variables, these can be new hashes
# or modified NV hashes from the previous manipulation
nshare << share
nshare << {:a => 1}
# << operations can be nested
nshare << share << {:a => 1}
Step 2 - Construct a new namelist
# Push namelist groups to NML_Writer using <<
NML_Writer << nshare << ngrid << ungrib << nmet
# Write out to STDOUT
NML_Writer >> STDOUT
# Write to a file or other object supporting puts
outfile = File.new("namelist.wps.asia","w")
NML_Writer >> outfile
outfile.close
–
Saji N Hameed,
ARC-ENV, Center for Advanced Information Science and Technology,
University of Aizu, Tsuruga, Ikki-machi,
Aizuwakamatsu-shi, Fukushima 965-8580,
Japan
Tel: +81242 37-2736
Fax:+81242 37-2760
email: [email protected]
url: http://www.u-aizu.ac.jp
bib: Web of Science