#!/usr/bin/env perl
use strict;
my @dirs = ('../../ccsm_utils/Tools/per5lib', '../../ccsm_utils/Tools/perl5lib/Build');
unshift @INC, @dirs;
require Build::NamelistDefinition;
use lib "../../ccsm_utils/Tools/perl5lib";
my $image_dir = "./images";
print <<"END_of_Start";
CESM Component Models Namelist Definitions
Search or Browse CISM Component Model Namelist Variables
This page contains the complete list of CISM namelist variables available. They are grouped
by categories designed to aid browsing. Clicking on the name of a variable will display descriptive
information. If search terms are entered in the text box below, the list will be condensed to contain
only matched variables.
Found standard names matching query:
END_of_Start
my $nldef_file = "../../../models/glc/cism/bld/namelist_files/namelist_definition_cism.xml";
my $nldef = Build::NamelistDefinition->new($nldef_file);
# Get list of categories in the definition file.
my @nldef_cats = $nldef->get_categories();
# Construct hash from @nldef_cats and use it to keep track of
# the categories that aren't treated explicitly below, then add them to the
# table at the end.
my %nldef_cats = ();
foreach my $k (@nldef_cats) {
$nldef_cats{$k} = '';
}
# The default output will organize the namelist variables according to the
# "category" attribute which is part of the definition. The ordering of the
# categories is set in the @categories array. The table headings are defined
# in the %cat_heading hash (order is not important in the hash definition).
my @categories = qw/
cism
grid
time
cism_config_grid
cism_config_sigma
cism_config_climate
cism_config_projection
cism_config_options
cism_config_time
cism_config_parameters
cism_config_gthf
cism_config_isostasy
cism_config_elastic_lithosphere
/;
my %cat_heading = (
'cism' => 'CISM: General Settings',
'grid' => 'CISM: Grid Settings',
'time' => 'CISM: Time Manager Settings',
'cism_config_grid' => 'CISM: cism.config Grid Settings',
'cism_config_sigma' => 'CISM: cism.config Sigma Settings',
'cism_config_climate' => 'CISM: cism.config Climate Settings',
'cism_config_projection' => 'CISM: cism.config Projection Settings',
'cism_config_options' => 'CISM: cism.config Options',
'cism_config_time' => 'CISM: cism.config Time Settings',
'cism_config_parameters' => 'CISM: cism.config Parameters',
'cism_config_gthf' => 'CISM: cism.config Geothermal Heat Flux Settings',
'cism_config_isostasy' => 'CISM: cism.config Isostasy Settings',
'cism_config_elastic_lithosphere' => 'CISM: cism.config Elastic Lithosphere Settings'
);
foreach my $cat (@categories) {
unless ($cat_heading{$cat} eq 'exclude') {
# Print table
print_start_table($cat, $cat_heading{$cat});
# get alphabetized list all the variable names in the category
my @vars = $nldef->get_var_names('category'=>$cat);
# get corresponding type and documentation
foreach my $var (@vars) {
my $type = $nldef->get_var_type($var);
my $doc = $nldef->get_var_doc_html($var);
my $grp = $nldef->get_group_name($var);
print_row($var, $type, $doc, $grp);
}
# Finish table
print_end_table();
}
$nldef_cats{$cat} = 'done';
}
# Finish
print <<"END_of_html";
END_of_html
#--------------------------------------------------------------------------------------------
sub print_start_table {
my $category = shift;
my $hdr = shift;
print <<"START_table";
$hdr
Namelist Variable
Type
Group
START_table
}
#--------------------------------------------------------------------------------------------
sub print_row {
my $name = shift;
my $type = shift;
my $doc = shift;
my $grp = shift;
print <<"END_of_row";